regularidades linguísticas
agora vamos examinar como as incorporações de luvas funcionam. Como comumente conhecido, vetores de palavras word2vec capturam muitas regularidades linguísticas. Para dar o exemplo canônico, se levamos a palavra de vetores para as palavras “paris”, “frança” e “alemanha” e execute a seguinte operação:
\
o vetor resultante será fechado para o vetor de “berlin”
Vamos baixar as mesmas Taxas de dados usado como uma demonstração por word2vec:No próximo passo vamos criar um vocabulário, um conjunto de palavras para as quais queremos aprender vetores de palavras. Note, que todas as funções do text2vec que operam em dados de texto raw(create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) ter uma API streaming e você deve iterar sobre tokens como o primeiro argumento para estas funções.Estas palavras não devem ser muito raras. Por exemplo, não podemos calcular um vetor de palavra significativo para uma palavra que vimos apenas uma vez em todo o corpo. Aqui vamos tomar apenas palavras que aparecem pelo menos cinco vezes. text2vec oferece opções adicionais para filtrar o vocabulário (ver ?prune_vocabulary
).
agora temos 71.290 termos no vocabulário e estamos prontos para construir matriz de termo-co-ocorrência (TCM).
agora temos uma matriz TCM e podemos factorizá-la através do algoritmo Luva.
text2vec uses a parallel stochastic gradient descent algorithm. Por padrão, ele vai usar todos os núcleos em sua máquina, mas você pode especificar o número de núcleos se quiser.Vamos adaptar-nos ao nosso modelo. (Pode levar vários minutos para 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
Note que o modelo aprende dois conjuntos de vetores de palavra – principal e contexto. Essencialmente eles são os mesmos, uma vez que o modelo é simétrico. A partir de nossa experiência aprender dois conjuntos de vetores de palavra leva a incorporação de maior qualidade. O modelo luva é o modelo de “decomposição” (herda de mlapiDecomposition
– classe genérica de modelos que decompõem a matriz de entrada em duas matrizes de baixa patente). Assim, a par de qualquer outro modelo mlapiDecomposition
modelo de segunda matriz de baixo nível (vetores de palavras de contexto) está disponível em components
campo:
## 50 71290
Note que como em todos os modelos que herdam de mlapiDecomposition
matriz transformada terá nrow = nrow(input)
, ncol = rank
e segundo component
a matriz terá nrow = rank
, ncol = ncol(input)
.Enquanto ambos os vetores de palavras podem ser usados como resultado, geralmente é melhor (ideia do papel luva) para a média ou tomar uma soma do vetor principal e de contexto:
podemos encontrar os vetores de palavras mais próximos para o nosso exemplo paris-França + Alemanha:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
pode obter resultados muito melhores experimentando com skip_grams_window
e os parâmetros da classe GloVe
(incluindo o tamanho dos vectores de palavra e o número de iterações). Para mais detalhes e experimentos em larga escala em dados da Wikipédia, veja este post antigo no meu blog.