aplicar word2vec en archivos de texto pequeños

11

Soy totalmente nuevo en word2vec, así que por favor llévelo conmigo. Tengo un conjunto de archivos de texto que contienen cada uno un conjunto de tweets, entre 1000-3000. Elegí una palabra clave común ("kw1") y quiero encontrar términos semánticamente relevantes para "kw1" usando word2vec. Por ejemplo, si la palabra clave es "apple", esperaría ver términos relacionados como "ipad" "os" "mac" ... según el archivo de entrada. Por lo tanto, este conjunto de términos relacionados para "kw1" sería diferente para cada archivo de entrada, ya que word2vec se entrenaría en archivos individuales (por ejemplo, 5 archivos de entrada, ejecute word2vec 5 veces en cada archivo).

Mi objetivo es encontrar conjuntos de términos relacionados para cada archivo de entrada dada la palabra clave común ("kw1"), que se utilizaría para otros fines.

Mis preguntas / dudas son:

  • ¿Tiene sentido usar word2vec para una tarea como esta? ¿es técnicamente correcto usarlo teniendo en cuenta el pequeño tamaño de un archivo de entrada?

Descargué el código de code.google.com: https://code.google.com/p/word2vec/ y acabo de ejecutarlo en seco de la siguiente manera:

 time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50

./distance vectors.bin 
  • De mis resultados, vi que obtengo muchos términos ruidosos (palabras vacías) cuando uso la herramienta 'distancia' para obtener términos relacionados con "kw1". Así que eliminé las palabras vacías y otros términos ruidosos, como las menciones de los usuarios. Pero no he visto en ninguna parte que word2vec requiera datos de entrada limpios ...

  • ¿Cómo se eligen los parámetros correctos? Veo que los resultados (al ejecutar la herramienta de distancia) varían mucho cuando cambio parámetros como '-ventana', '-iter'. ¿Qué técnica debo usar para encontrar los valores correctos para los parámetros? (La prueba y error manual no es posible para mí, ya que ampliaré el conjunto de datos).

samsamara
fuente

Respuestas:

9

Word2Vec no es una buena opción para un conjunto de datos de tal tamaño. De las investigaciones que he visto, desatará su poder si alimentas al menos un par de millones de palabras, 3k tweets no serían suficientes para una concisión similar de palabras.

chewpakabra
fuente
¿Necesitamos eliminar las palabras vacías como paso previo al procesamiento de datos?
samsamara
2
No, en el enfoque word2vec no necesita hacer eso, ya que el algoritmo en sí mismo se basa en un contexto amplio para encontrar similitudes en las palabras, por lo que las palabras de detención (la mayoría de las cuales son preposiciones, pronombres y demás) son un asno importante para el algoritmo .
chewpakabra
pero cuando estaba usando la herramienta de distancia para encontrar la mayoría de las palabras similares a una palabra dada, la versión con palabras vacías eliminadas me dio palabras sensibles que la versión sin. ¿Puedes adivinar qué significa esto?
samsamara
Probablemente, está utilizando un contexto demasiado limitado: si su modelo analiza, digamos, dos palabras hacia atrás y hacia adelante, tendrá hasta 2 palabras vacías en contexto y eso podría dar peores resultados. Si va a ampliar el contexto (lo que hará que el modelo sea más grande y el tiempo de entrenamiento más largo), supongo que el modelo sin palabras le dará mejores resultados.
chewpakabra
gracias por el aporte, tiene más sentido ahora. Además, dado que word2vec procesa la entrada oración por oración, ¿qué sucedería si mezclo las oraciones en el documento de entrada? eso debería cambiar totalmente los vectores de salida, ¿verdad? También de nuevo, dado que su procesamiento se envía enviado, ¿en qué se diferencia word2vec de doc2vec? gracias de nuevo.
samsamara