2010-02-15 13 views
17

Muchos algoritmos y bibliotecas de procesamiento de lenguaje natural (NLP) tienen dificultades para trabajar con textos aleatorios de la web, generalmente porque presuponen una escritura clara y articulada. Puedo entender por qué sería más fácil que analizar comentarios de YouTube.Cómo determinar automáticamente la calidad del texto?

Mi pregunta es: dada una pieza al azar de texto, es que hay un proceso para determinar si el texto está bien escrito, y es un buen candidato para su uso en la PNL? ¿Cuál es el nombre general de estos algoritmos?

Le agradecería enlaces a artículos, algoritmos o librerías de código, pero se conformarían con buenos términos de búsqueda.

Respuesta

12

'Bien escrito' y 'bueno para PNL' pueden ir juntos pero no es necesario. Para que un texto sea "bueno para PNL", quizás debería contener oraciones completas con un verbo y un punto al final, y quizás debería transmitir algún significado. Para que un texto esté bien escrito, también debe estar bien estructurado, cohesionado, coherente, sustituir correctamente los pronombres por pronombres, etc. Lo que necesita depende de su aplicación.

Las posibilidades de que una frase procese correctamente una frase a través de una herramienta PNL a menudo se pueden estimar mediante algunas heurísticas simples: ¿es demasiado larga (> 20 o 30 palabras, según el idioma)? ¿Demasiado corto? ¿Contiene muchos personajes extraños? ¿Contiene urls o direcciones de correo electrónico? ¿Tiene un verbo principal? ¿Es solo una lista de algo? Que yo sepa, no hay un nombre general para esto, ni ningún algoritmo particular para este tipo de filtrado: se llama 'preprocesamiento'.

En cuanto a una frase que está bien escrita: se han realizado algunos trabajos sobre la evaluación automática de legibilidad, cohesión y coherencia, p. los artículos de Miltsakaki (Evaluation of text coherence for electronic essay scoring systems y Real-time web text classification and analysis of reading difficulty) o Higgins (Evaluating multiple aspects of coherence in student essays). Todos estos enfoques se basan en una u otra teoría de la estructura del discurso, como Centrar la teoría. Los artículos son bastante pesados ​​en teoría y suponen el conocimiento tanto de la teoría de centrado como del aprendizaje automático.Sin embargo, algunas de estas técnicas han sido aplicadas con éxito por ETS para calificar automáticamente los ensayos de los estudiantes y creo que esto es bastante similar a lo que estás tratando de hacer, o al menos, puedes adaptar algunas ideas.

Dicho todo esto, creo que en los próximos años, NLP tendrá que desarrollar técnicas para procesar el lenguaje que es no bien formado con respecto a las normas actuales. Existe una gran cantidad de datos extremadamente valiosos disponibles en la web, que consisten exactamente en los tipos de texto que mencionaste: comentarios de youtube, mensajes de chat, mensajes de estado de Twitter y Facebook, etc. Todos ellos potencialmente contienen información muy interesante. Entonces, ¿quién debería adaptarse, las personas que escriben de esa manera o la PNL?

4

No he usado ninguna herramienta, pero tengo una idea.

Una estrategia simple sería tomar el texto Inglés limpia y averiguar el histograma de distintas partes de las etiquetas de voz, tales como nombres, adjetivos, verbos, artículos, etc.

Ahora de texto de ejemplo, averiguar similares histograma.

Si este histograma está "cerca" como para el punto de referencia, la calidad del texto de la muestra es tan bueno como el texto original. Es posible que necesite definir el parámetro "cercanía".

La identificación del lenguaje generalmente emplea una técnica similar. Para un idioma, se crea un perfil n-gram. Se crea un perfil similar para el texto de muestra y se comparan dos perfiles para descubrir la probabilidad de que el texto de muestra sea ese idioma.

3

No estoy familiarizado con ningún paquete de software que lo haga per se. Suena como un problema de clasificación que puedes intentar abordando etiquetando un par de cientos de documentos que son buenos y malos y luego derivando características del texto (porcentaje de palabras correctamente deletreadas, mejor probabilidad de parse de oraciones, quién sabe). A partir de los datos etiquetados, puede crear un clasificador bueno/malo que quizás haga algo útil. Entonces de nuevo, tal vez no.

También podría intentar usar medidas de legibilidad. Por lo general, se utilizan para decir cosas como "este texto está en un nivel de lectura de cuarto grado", pero pueden proporcionar una señal de lo que usted desea. Algunos ejemplos incluyen Flesch-Kincaid o Gunning fog.

7

Una cosa fácil de tratar sería clasificar el texto bien escrito o no utilizando un modelo de lenguaje n-gram. Para hacer esto, primero debe entrenar un modelo de lenguaje en una colección de texto bien escrito. Dado un nuevo texto, podría ejecutar el modelo sobre él y pasarlo solo a otras herramientas de PNL aguas abajo si la perplejidad por palabra es lo suficientemente baja (es decir, si se parece suficientemente al texto de capacitación bien escrito).

Para obtener los mejores resultados, probablemente debería entrenar su modelo de lenguaje n-gram en texto similar al utilizado para entrenar las otras herramientas NLP que está utilizando. Es decir, si está utilizando un phrase structure parser entrenado en newswire, entonces también debe entrenar su modelo de lenguaje n-gram en newswire.

En términos de paquetes de herramientas de software que podría utilizar para algo como esto, SRILM sería un buen lugar para comenzar.

Sin embargo, una solución alternativa sería tratar de adaptar las herramientas NLP que esté utilizando al texto que desea procesar. Un enfoque para algo como esto sería el autoaprendizaje, mediante el cual ejecuta sus herramientas de PNL sobre el tipo de datos que le gustaría procesar y luego los vuelve a capacitar en su propia salida. Por ejemplo, McClosky et al 2006 usó esta técnica para tomar un analizador originalmente entrenado en el Wall Street Journal y adaptarlo para analizar texto biomédico.

1

Como señalaron otras personas, "bien escrito" es un punto de vista bastante subjetivo. Lo mejor que puede hacer es crear un corpus de textos "bien escritos" y "mal escritos" (de acuerdo con sus estándares). Obtendría una bonificación si pudiera crear un método para clasificarlos en términos numéricos (0.1 para comentarios de Youtube, 0.9 para comentarios de desbordamiento de pila;).

Una vez que haya hecho eso, habrá muchas alternativas, pero recomendaría las estadísticas en este caso. N-grams probablemente podría hacer el trabajo con frecuencia relativa simple, pero le sugiero que investigue los modelos de Markov y especialmente las herramientas de clasificación de texto bayesianas.

De hecho, la mejor respuesta única, una vez que tenga una colección de "buenos" y "malos" los textos, es el uso de los muchos sistemas de clasificación libres disponibles (pensar en herramientas anti-spam). El mejor dependerá de sus necesidades y del lenguaje de programación con el que se sienta más cómodo.

Cuestiones relacionadas