6 votos

LDA: ¿Por qué estoy obteniendo el mismo tema para todos los puntos en el conjunto de pruebas?

Estoy trabajando en un conjunto de datos que son bastante inusuales de las siguientes maneras:

  1. No tiene solo texto en lenguaje natural, tiene texto como nombres de usuario, incluso fragmentos de código, etc.
  2. Tamaño de vocabulario (tokens únicos) inusualmente grande (2M) para un conjunto de documentos de 750K y aproximadamente 19M de tokens.

Todos los aspectos del conjunto de datos son importantes y deben incluirse en el entrenamiento, es decir, los nombres de usuario, los fragmentos de código, etc.

Entrené una Asignación Latente de Dirichlet (LDA) después de la tokenización, eliminación de palabras de parada y derivación. El tamaño del conjunto de entrenamiento es de 720K, con aproximadamente 16M de tokens. Entrené para 200 y 300 temas y 50 y 100 pasadas sobre los datos de entrenamiento.

Estaba probando en el conjunto de pruebas para ver una distribución de los primeros 5 temas más probables de cada documento en el conjunto de pruebas.

Lo que descubrí fue que está siguiendo la ley de Zip para tanto 200 como 300 temas.

¿Puede alguien explicar por qué está ocurriendo esto? ¿Menos entrenamiento o más entrenamiento o cuál podría ser la razón?

Aquí está la distribución de 200 temas (naranja) y 300 temas (azul). (Perdón por el título incorrecto.) Los gráficos se trazan extrayendo los 5 temas principales de cada documento y luego contando el valor para cada tema, es decir, frecuencia de tema en el conjunto de pruebas y trazando la frecuencia en orden decreciente.

introduzca aquí la descripción de la imagen

introduzca aquí la descripción de la imagen

4voto

Steve Puntos 477

Mi primera apuesta sería que las palabras funcionales en un corpus de código fuente difieren ampliamente de las listas de palabras de parada estándar, y que el primer tema de tu modelo está capturando en efecto el lenguaje de programación estándar: if, int, new, while, etc.

Además de construir una lista de palabras de parada personalizada —ver qué palabras tienen una alta probabilidad bajo los temas más frecuentemente asignados es un buen lugar para empezar— podrías considerar ajustar un modelo de tema jerárquico, descrito por primera vez en este documento y con más detalle en este otro. Del primero:

En nuestro enfoque, cada nodo en la jerarquía está asociado con un tema, donde un tema es una distribución a través de palabras. Un documento se genera eligiendo un camino desde la raíz hasta una hoja, muestreando repetidamente temas a lo largo de ese camino y muestreando las palabras de los temas seleccionados. Por lo tanto, la organización de temas en una jerarquía tiene como objetivo capturar la amplitud de uso de los temas en el corpus, reflejando las nociones subyacentes sintácticas y semánticas de generalidad y especificidad.

Es decir, usando este modelo, todos los documentos comienzan en el nodo raíz, que incluirá las palabras más comunes en el corpus. (Ver el documento para ejemplos.) Esto te permite evitar determinar manualmente una lista de palabras de parada:

El modelo ha capturado perfectamente las palabras funcionales sin utilizar una lista auxiliar, una molestia que la mayoría de las aplicaciones prácticas de modelos de lenguaje requieren. En el siguiente nivel, separó las palabras relacionadas con resúmenes de neurociencia y resúmenes de aprendizaje automático. Finalmente, delineó varios subtemas importantes dentro de los dos campos. Estos resultados sugieren que hLDA puede ser una herramienta efectiva en aplicaciones de texto.

Implementación aquí. (No conozco uno en Python.)

3voto

user3667569 Puntos 116

Encontré el problema. Como indicaban varios comentarios y la respuesta, parecía que LDA funcionaba bien y así era. El único problema era que los datos eran demasiados para LDA y muy ruidosos. Estaba entrenando con más de 750K documentos y todo era ruido. Al reducir los datos a 30k documentos relevantes, pude obtener resultados mucho mejores.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X