¿Cuáles son los tipos de palabras relacionadas que genera Word2Vec?

Como mencionó Omer hace más de un año, se han publicado varios artículos para resolver el problema de capturar múltiples sentidos de una palabra, por ejemplo. Java el lenguaje vs Java la isla. Algunos de los modelos con fuentes también están disponibles para descargar. Enumerar un par de ellos que arrojan resultados tal como lo afirman los periódicos. Estos dos documentos, en particular, son adaptaciones del modelo de skipgram de word2vec y no requieren ninguna supervisión: aprenden los sentidos múltiples de las palabras automáticamente del corpus de entrenamiento.

  • Este trabajo rompiendo palos y ambigüedades con Adagram de salto adaptativo es el más reciente hasta ahora que he encontrado. Este también parece ser el mejor entre los modelos vistos hasta la fecha. ( Vea las imágenes al final para ver ejemplos de resultados de este modelo)
    • Un buen aspecto de esta interfaz de modelo es que no solo generará vectores de palabras separados para diferentes contextos de palabras, sino que también enumerará la probabilidad del significado de una palabra en particular basándose en una oración de entrada. Entonces, para una palabra como “manzana”, el vector que representa a la compañía sería más probable que el vector que representa la fruta en la oración: “el nuevo iPhone acaba de ser lanzado”
    • Este modelo utiliza una forma modificada de la ruta de muestreo jerárquica de Word2vec Skipgram, y concurrente con los vectores de palabras de entrenamiento, utiliza un proceso de Dirichlet (esta es quizás la explicación más lúcida disponible en línea de este proceso: ¿Cuál es una explicación intuitiva de la agrupación de procesos de Dirichlet? ¿Cómo ejemplifica el proceso de Dirichlet la Urna de Polya o la ruptura de un palo? ¿Cómo utiliza la agrupación basada en el muestreo de Gibbs para un modelo de mezcla de Dirichlet el proceso de Dirichlet? Los hiperparámetros clave de este modelo son
      • Alfa: controla el nivel de granularidad para inducir diferentes significados. Demasiado bajo: 0,05 dará como resultado significados menores. Demasiado alto producirá significados demasiado finos con superposición. Los valores recomendados son entre .1-.2.
      • El tamaño de la ventana: igual que Skipgram
      • El número máximo de significados diferentes. El documento utiliza 30 para todos sus resultados, aunque la mayoría de las palabras pueden no tener en promedio más de 2 significados.
    • Hay un video de uno de los autores del artículo que explica el modelo.
  • Este trabajo La estimación eficiente no paramétrica de incrustaciones múltiples por palabra en el espacio vectorial precede al trabajo anterior. Tiene dos modelos para generar incrustaciones de palabras multisentido. YauhenMinsk / NP-MSSG
    • Hay dos modelos descritos en este documento, uno de los cuales aprende un número fijo de sentidos de palabras, donde el número se especifica al modelo como un hiperparámetro. El segundo modelo ( no paramétrico ) aprende los diferentes sentidos automáticamente.
    • Estos modelos funcionan capturando esencialmente los múltiples sentidos de la palabra de los vectores de contexto que se usan en el entrenamiento de los vectores de palabras ( pero descartados ) en word2vec ¿Cómo funciona word2vec? .
    • Solo uno de los modelos ( modelo paramétrico ) funcionó para mí; el otro falló en la generación.

Hay varios otros modelos que intentan resolver este problema.

  • Un modelo probabilístico para aprender incrustaciones de palabras de prototipos múltiples Microsoft /.
    • El código está disponible en Github, aunque no podría funcionar en Linux. Microsoft / distribution_skipgram_mixture
  • Sense2vec con spaCy y Gensim
  • Incorporaciones de palabras tópicas: el código para este modelo se publica en Github, pero no pudo hacer que funcione.
  • Este modelo se implementa en Scala, por lo que requiere la instalación de JDK.

No he visto ningún trabajo en el que estas incorporaciones de palabras de sentido múltiple se usen en tareas posteriores como NER. Sin embargo, hay un documento de Stanford ¿Las incrustaciones de sentido múltiple mejoran la comprensión del lenguaje natural? que analiza los posibles beneficios para las tareas posteriores.

Agregar algunas instantáneas sobre los resultados del modelo Adaptive Skipgram ( usando el mismo corpus text8 que word2vec usa para la demostración ).

Esta imagen muestra los dos sentidos para la palabra planta en el corpus

Esto muestra los tres sentidos para la palabra luz en el corpus. El índice de sentidos (1) relacionado con el electromagnetismo (2) vehículos con peso ligero (3) la luz en sentido filosófico se utiliza en la siguiente imagen.

El uso de los diferentes sentidos de la palabra luz para diferentes oraciones – (1) Relacionado con el electromagnetismo (2) vehículos livianos (3) luz ‘filosófica’

Notas adicionales sobre la instalación de Adagram.

  • Uno necesita instalar Julia para usar este modelo. También es posible que deba reemplazar una palabra “RemoteRef” por “Future” en un archivo “src / gradient.jl” para que funcione; también asegúrese de que LD_LIBRARY_PATH esté configurado en la ubicación donde están instaladas las bibliotecas. El lenguaje de Julia parece estar evolucionando aún, por lo que uno puede encontrar problemas con incompatibilidades del código fuente del modelo y el paquete de idioma (lo mejor es instalar Julia desde el sitio Instrucciones específicas de la plataforma para instalar Julia donde se enumeran los binarios. El paquete se instala como sudo apt-get etc.pueden instalar versiones que simplemente no funcionan)

Creo que una mejor definición del tipo de palabras devueltas por word2vec es que son palabras que coexisten en contextos similares. Pueden ser sinónimos, hipónimos, hipernimos, nombres de competidores o incluso antónimos. Esencialmente, está alimentando palabras word2vec (n-1) en una ventana de contexto y entrenando con la palabra n-ésima, para que aprenda a predecir la palabra n-ésima (para CBOW, o al revés si es un salto de gramo) )

En el caso de Java, lo encontrará cerca de otros lenguajes de programación y otras bebidas en el espacio vectorial de word2vec, pero los grupos estarían en diferentes puntos en el espacio (300 dimensiones para word2vec). Para resolver los problemas de desambiguación de sentido de las palabras (WSD), un enfoque podría ser buscar la distancia entre los vectores word2vec de otras palabras en el contexto (1/3/5 oraciones o párrafo) a cada uno de estos grupos para encontrar cuál está.

Gracias por el A2A 🙂

Como escribió Sujit Pal, word2vec encontrará palabras que aparecieron en “contextos” similares. No es sorprendente que la forma en que defina cuáles son estos contextos afectará en gran medida el tipo de similitud que obtendrá.

Por ejemplo, si un contexto se define como cualquier otra palabra que aparece en la misma oración, es probable que obtenga similitudes muy “tópicas”, como microsoft ~ windows . Sin embargo, si sus contextos son solo palabras que tienen un enlace sintáctico directo con la palabra objetivo, probablemente obtendrá más similitudes “funcionales”, como microsoft ~ ibm . Discutimos esto en profundidad en nuestro documento de ACL 2014, y también tenemos una demostración en línea si desea probarlo.

Documento: Incrustaciones de palabras basadas en la dependencia
Demostración: http://irsrv2.cs.biu.ac.il:9998/

En cuanto a la polisemia y la desambiguación de sentido de palabra, word2vec no lo maneja en absoluto. De hecho, es un problema bien conocido, y ha habido varios documentos recientes que intentan abordarlo.

Uno de los enfoques que hemos estado adoptando en Bar-Ilan, es en lugar de modificar las incrustaciones , tratamos de modificar la función de similitud y hacerla sensible al contexto. De esa manera, si Java apareciera en el contexto de “Programas escritos en Java”, obtendría entidades similares como C ++ o Python , pero no Sumatra .

Documento: un modelo simple de incrustación de palabras para la sustitución léxica