Prevendo uma palavra usando o modelo Word2vec


20

Dada uma frase: "Quando eu abrir a ?? porta que começa a aquecer automaticamente"

Gostaria de obter a lista de possíveis palavras em ?? com uma probabilidade.

O conceito básico usado no modelo word2vec é "prever" uma palavra, dada o contexto circundante.

Depois que o modelo é construído, qual é a operação correta de vetores de contexto para executar minha tarefa de previsão em novas frases?

É simplesmente uma soma linear?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

Eu implementei o algoritmo acima e me deparei com uma pergunta: Por que o softmax é usado? Deixe-me mostrar um exemplo de duas funções de normalização: def softmax (w, t = 1.0): # Fonte: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def normalização (w): retorno w / np.sum (w) a = np.array ([. 0002, .0001, .01, .03]) normalização de impressão (a) print softmax (a, t = 1 ) Vamos comparar as saídas: [0.00496278 0.00248139 0.24813896 0.444441687] [0.24752496 0.24750021 0.24996263 0.25501221] Como podemos ver, o softmax fornece 0,03 aproximadamente a mesma probabilidade em comparação com .0001 (que é

Respostas:


9

O Word2vec funciona em dois modelos CBOW e skip-gram. Vamos usar o modelo CBOW, pois sua pergunta segue da mesma maneira que prevê a palavra-alvo, considerando as palavras ao redor.

Fundamentalmente, o modelo desenvolve matrizes de peso de entrada e saída, que dependem das palavras do contexto de entrada e da palavra-alvo de saída com a ajuda de uma camada oculta. Assim, a propagação traseira é usada para atualizar os pesos quando a diferença de erro entre o vetor de saída previsto e a matriz de saída atual.

Basicamente, a previsão da palavra-alvo a partir de determinadas palavras de contexto é usada como uma equação para obter a matriz de peso ideal para os dados fornecidos.

Para responder à segunda parte, parece um pouco complexo do que apenas uma soma linear.

  1. Obtenha todos os vetores de palavras de palavras de contexto
  2. Faça a média deles para descobrir o vetor hde tamanho da camada ocultaNx1
  3. Obtenha a matriz de saída syn1( word2vec.cou gensim) que é do tamanhoVxN
  4. Multiplique syn1por h, o vetor resultante será do ztamanhoVx1
  5. Calcule o vetor de probabilidade y = softmax(z)com tamanho Vx1, em que a probabilidade mais alta denota a representação de um ponto quente da palavra de destino no vocabulário. Vindica tamanho do vocabulário e Ntamanho do vetor de incorporação.

Fonte: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

Atualização: Os modelos de memória de longo prazo estão atualmente fazendo um excelente trabalho na previsão das próximas palavras. Os modelos seq2seq são explicados no tutorial tensorflow . Há também uma postagem no blog sobre geração de texto.


Obrigado ! Você está ciente de alguma implementação disso? (como parte do gensim, por exemplo). Caso contrário, não parece muito complicado de calcular.
DED

Oi, você poderia me dar mais detalhes sobre como recuperar a matriz de saída (syn1 no seu exemplo) do modelo de incorporação w2v treinado? Eu acho que o w2v caiu a matriz de saída quando terminar o treinamento.
Charles Chow

Com base no meu entendimento, sua resposta da 2ª pergunta é reconstruir a matriz de saída, está correto?
Charles Chow

1
Eu acho que vale a pena notar que isso não está funcionando como um classificador de sequência. A ordem das palavras é ignorada.
Displayname

Pode-se obter a matriz de saída syn1apenas salvando o modelo. sim, a ordem é ignorada, pois o aplicativo pode ser usado com o modelo seq2seq baseado em LSTM.
precisa saber é

4

A previsão de palavras ausentes foi adicionada como uma funcionalidade na versão mais recente do Word2Vec. Obviamente, sua sentença precisa corresponder à sintaxe de entrada do modelo Word2Vec usada para treinar o modelo (letras minúsculas, palavras finais, etc.)

Uso para prever as 3 principais palavras para "Quando eu abrir a porta?":

print(model.predict_output_word(['When','I','open','door']), topn = 3)

Como ele sabia que centerestava entre a 3ª e a 4ª palavra? Isso não faz sentido para mim. Eu imagino apenas número par palavras de contexto poderia ser colocado em e seria selecionar a palavra entre floor(len(n)/2))efloor(len(n)/2))+1
bmc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.