例如, 假设我们有两个词“ great”和“ very good”,它们在上下文上彼此相似,但是它们是不同的n-gram(“ great”是unigram,而“ very good”是bigram )。我需要一些有关如何建立一个可以评估它们之间相似性的NLP模型的建议。
sh_luoqiang 回答:我们如何使用python找到两个不同的n-gram之间的上下文相似性?
您可以考虑使用word2vec对文本进行编码。
您可以在Google新闻上使用预先训练的模型
wget https://s3.amazonaws.com/dl4j-distribution/GoogleNews-vectors-negative300.bin.gz
gunzip GoogleNews-vectors-negative300.bin.
用法:
import gensim
# Load Google's pre-trained Word2Vec model.
model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin',binary=True)
corpus = [
'good person','good human being'
]
# For each sentence in corpus,generate a vector.
# using any similarity measure,you can compute similarity once you encode your text to vector.
corpus_vec = []
for sentence in corpus:
sent_vec = np.zeros(300)
for word in sentence:
sent_vec += model[word]
corpus_vec.append(sent_vec)
为每个单词提供300维矢量。将所有单词转换为300维向量,并为每个文本加总。
现在您可以使用余弦相似度或任何其他相似度度量。