Qual é a melhor maneira de descobrir a semelhança semântica das palavras? Word2Vec está bom, mas não é o ideal:
# Using the 840B word Common Crawl GloVe vectors with gensim:
# 'hot' is closer to 'cold' than 'warm'
In [7]: model.similarity('hot', 'cold')
Out[7]: 0.59720456121072973
In [8]: model.similarity('hot', 'warm')
Out[8]: 0.56784095376659627
# Cold is much closer to 'hot' than 'popular'
In [9]: model.similarity('hot', 'popular')
Out[9]: 0.33708479049537632
Os métodos Wordnet do NLTK parecem simplesmente desistir:
In [25]: print wn.synset('hot.a.01').path_similarity(wn.synset('warm.a.01'))
None
Quais são as outras opções?
nlp
word-embeddings
word2vec
nltk
Thomas Johnson
fonte
fonte
Respostas:
O Word2vec não captura semelhança com base em antônimos e sinônimos. O Word2vec daria uma semelhança mais alta se as duas palavras tivessem o contexto semelhante. Por exemplo, o tempo na Califórnia era _____. O espaço em branco pode ser preenchido por quente e frio, portanto, a semelhança seria maior. Esse conceito é chamado de relações paradigmáticas.
Se você estiver interessado em capturar relações como hiper-hinos, hiponímias, sinônimos e antônimo, seria necessário usar qualquer medida de similaridade baseada em wordnet. Existem muitas medidas de similaridade baseadas no wordnet. Você pode verificar este link http://ws4jdemo.appspot.com/
fonte
Nas Ferramentas Analíticas de Texto para Similaridade Semântica , eles desenvolveram um algoritmo para encontrar a semelhança entre duas frases. Mas se você ler atentamente, eles encontrarão a semelhança da palavra em uma matriz e serão somados para descobrir a semelhança entre as frases. Portanto, pode ser uma tentativa verificar a semelhança das palavras.
Também no SimLex-999: Avaliando modelos semânticos com estimativa de similaridade (genuína) , eles explicam a diferença entre
association
esimilarity
qual é provavelmente o motivo da sua observação. Por exemplo, café e uma xícara. Eles não são semelhantes, mas são associativos. Portanto, apenas considerar a similaridade daria um resultado diferente. Os autores sugerem vários modelos para estimar.fonte
O Word2vec é um bom ponto de partida para a maioria dos cenários. Ele faz a semântica de captura por meio de previsão usando o método CBOW. Permite traduções (como o exemplo mais repetido que posso colocar aqui novamente), V (rei) - V (rainha) ~~ V (homens) - V (mulheres) e assim por diante.
Então qual é o problema? A questão está na ambiguidade do sentido da palavra. Sempre que a palavra em si tiver dois significados diferentes em dois contextos diferentes, o vetor de palavras tenderá a ficar realmente longe de qualquer contexto. Python ~ Boa (ambas as cobras) e Python - Java (ambas as linguagens de programação) ..
Alguma alternativa?
Para o propósito muito específico de "sinônimos", se você deseja que o Wordnet seja o local ideal. Ele captura o relacionamento explícito de duas palavras, em vez do implícito, com base no uso e nas ocorrências.
O Wordnet é criado principalmente como um dicionário - onde o word2vec é extraído pelo uso.
fonte
Em uma gramática livre de contexto, acho que é realmente impossível determinar a proximidade das palavras. O que você pode fazer é usar vetores de léxico e, se uma palavra estiver próxima em valores entre dois léxicos, o valor deverá estar próximo.
fonte