natural language google course book applications algorithm statistics nlp

algorithm - google - natural language processing pdf



La asignaciĆ³n de Dirichlet latente, trampas, consejos y programas (5)

Estoy experimentando con Latent Dirichlet Allocation para la desambiguación y asignación de temas, y estoy buscando consejos.

  1. Qué programa es el "mejor", donde lo mejor es alguna combinación de la más fácil de usar, la mejor estimación previa, rápida
  2. ¿Cómo incorporo mis intuiciones sobre actualidad? Digamos que creo que sé que algunos elementos en el corpus están realmente en la misma categoría, como todos los artículos del mismo autor. ¿Puedo agregar eso en el análisis?
  3. ¿Alguna trampa o consejo inesperado que deba saber antes de embarcarme?

Prefiero que haya interfaces R o Python para cualquier programa, pero espero (y acepto) que trataré con C.


  1. Mencionó una preferencia por R, puede usar dos paquetes topicmodels (slow) o lda (fast). Python tiene deltaLDA , pyLDA , Gensim , etc.

  2. El modelado de temas con temas o palabras específicos es complicado desde el primer momento; David Andrzejewski tiene algún código de Python que parece hacerlo. Aquí hay una implementación en C ++ de LDA supervisada. Y muchos documentos sobre enfoques relacionados ( DiscLDA , LDA etiquetado pero no en una forma fácil de usar, para mí de todos modos ...

  3. Como dice @ adi92, eliminar las palabras vacías, los espacios en blanco, los números, la puntuación y la derivación mejoran mucho las cosas. Una posible trampa es tener una cantidad incorrecta (o inapropiada) de temas. Actualmente no hay diagnósticos directos para cuántos temas son óptimos para un coprus de un tamaño dado, etc. Hay algunas medidas de calidad de tema disponibles en MALLET (más rápido), que son muy prácticas.


  1. http://mallet.cs.umass.edu/ es en mi humilde opinión el paquete LDA plug-n-play más increíble que existe. Utiliza el muestreo de Gibbs para estimar los temas y tiene una interfaz de línea de comandos realmente directa con muchas campanas adicionales. -n-whistles (algunos modelos más complicados, optimización de hiper-parámetros, etc.)

  2. Lo mejor es dejar que el algoritmo haga su trabajo. Puede haber variantes de LDA (y pLSI, etc.) que le permitan hacer algún tipo de actividad semi-supervisada ... No conozco ninguna en este momento.

  3. Descubrí que la eliminación de las palabras de parada y otras palabras realmente de alta frecuencia parecía mejorar mucho la calidad de mis temas (evaluado al mirar las palabras principales de cada tema, no con una medida rigurosa). Supongo que la lematización / lematización ayudaría a bien.



Para este tipo de análisis, he usado LingPipe: http://alias-i.com/lingpipe/index.html . Es una biblioteca Java de código abierto, partes de las cuales utilizo directamente o puerto. Para incorporar sus propios datos, puede usar un clasificador, como naive bayes, en conjunto. mis experiencias con nlp estadística son limitadas, pero por lo general siguen un ciclo de configuración de clasificadores, capacitación y revisión de resultados, ajustes.


Secundo que. El lda de Mallet utiliza una estructura de datos de sparselda y aprendizaje distribuido, por lo que es v rápido. activar la optimización de hiperparámetros dará un mejor resultado, imo.