Regularidades lingüísticas
Ahora examinemos cómo funcionan las incrustaciones de guantes. Como se conoce comúnmente, los vectores de palabras word2vec capturan muchas regularidades lingüísticas. Para dar el ejemplo canónico, si tomamos vectores de palabras para las palabras «parís», «francia» y «alemania» y realizamos la siguiente operación:
\
el vector resultante estará cerca del vector de «berlin»
Descarguemos los mismos datos de Wikipedia utilizados como demostración por word2vec:
En el siguiente paso crearemos un vocabulario, un conjunto de palabras para las que queremos aprender vectores de palabras. Tenga en cuenta que todas las funciones de text2vec que operan en datos de texto sin procesar(create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) tenga una API de streaming y debe iterar sobre tokens como primer argumento para estas funciones.
Estas palabras no deben ser demasiado infrecuentes. Por ejemplo, no podemos calcular un vector de palabra significativo para una palabra que solo vimos una vez en todo el corpus. Aquí tomaremos solo palabras que aparecen al menos cinco veces. text2vec proporciona opciones adicionales para filtrar el vocabulario (ver ?prune_vocabulary
).
Ahora tenemos 71,290 términos en el vocabulario y estamos listos para construir la matriz de co-ocurrencia de términos (MTC).
Ahora tenemos una matriz TCM y podemos factorizarla a través del algoritmo GloVe.
text2vec utiliza un algoritmo de descenso de gradiente estocástico paralelo. De forma predeterminada, utilizará todos los núcleos de su máquina, pero puede especificar el número de núcleos si lo desea.
Ajustemos nuestro modelo. (¡Puede tardar varios minutos en caber!)
## INFO epoch 1, loss 0.1755 ## INFO epoch 2, loss 0.1228 ## INFO epoch 3, loss 0.1085 ## INFO epoch 4, loss 0.1005 ## INFO epoch 5, loss 0.0954 ## INFO epoch 6, loss 0.0918 ## INFO epoch 7, loss 0.0890 ## INFO epoch 8, loss 0.0869 ## INFO epoch 9, loss 0.0851 ## INFO epoch 10, loss 0.0837
## 71290 50
Tenga en cuenta que el modelo aprende dos conjuntos de vectores de palabras: principal y contexto. Esencialmente son los mismos, ya que el modelo es simétrico. A partir de nuestra experiencia, el aprendizaje de dos conjuntos de vectores de palabras conduce a incrustaciones de mayor calidad. El modelo de guante es el modelo de» descomposición » (hereda de mlapiDecomposition
– clase genérica de modelos que descomponen la matriz de entrada en dos matrices de bajo rango). Por lo tanto, a la par con cualquier otro modelo mlapiDecomposition
, la segunda matriz de rango bajo (vectores de palabras de contexto) está disponible en el campo components
:
## 50 71290
Tenga en cuenta que, como en todos los modelos que heredan de mlapiDecomposition
la matriz transformada tendrá nrow = nrow(input)
, ncol = rank
y la segunda component
la matriz tendrá nrow = rank
, ncol = ncol(input)
.
Mientras que las dos matrices de vectores de palabras se pueden usar como resultado, generalmente es mejor (idea de guante) promediar o tomar una suma de vector principal y de contexto:
Podemos encontrar los vectores de palabras más cercanos para nuestro ejemplo parís-francia + alemania:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
Puede lograr resultados mucho mejores experimentando con skip_grams_window
y los parámetros de la clase GloVe
(incluido el tamaño de los vectores de palabras y el número de iteraciones). Para más detalles y experimentos a gran escala sobre los datos de wikipedia, vea esta publicación antigua en mi blog.