我有两句话:
sent1="This work has been completed by Christopher Pan".
sent2="This job has been finished by Mark Spencer".
我使用Word2vec计算了句子的相似性:
from sklearn.metrics.pairwise import cosine_similarity
def avg_sentence_vector(words, model, num_features, index2word_set):
featureVec = np.zeros((num_features,), dtype="float32")
nwords = 0
for word in words:
if word in index2word_set:
nwords = nwords+1
featureVec = np.add(featureVec, model[word])
if nwords>0:
featureVec = np.divide(featureVec, nwords)
return featureVec
详情如下:
sent1_avg_vector = avg_sentence_vector(sent1.split(), model=word2vec_model, num_features=100)
sent2_avg_vector = avg_sentence_vector(sent2.split(), model=word2vec_model, num_features=100)
sen1_sen2_similarity = cosine_similarity(sent1_avg_vector, sent2_avg_vector)
我想知道如何构建语义树,它可以告诉我:
completed
和finished
是相似的词李>work
和job
也是相似的词李>work/job
或finished/completed
,这些单词都与Christopher
和Mark
相关李>从技术上讲,我不知道Python中是否有什么东西可以让我获得这样的结果。如果你能给我指引正确的方向,我将不胜感激
谢谢
使用文本中所有单词向量的平均值是一个快速&;创建全文摘要向量的简单技术——但不能捕获所有的含义,特别是那些由语法结构、词语修饰语或多词短语创建的含义
您的word2vec模型可能已经反映了这样一个事实,即
'completed'
和'finished'
在意义上相似,或者'work'
和'job'
,通过使它们的向量相似。只需直接比较这些词向量,并将结果与其他词向量进行比较,就会告诉您相对更多或更少的相似词对或词组不清楚你所说的“这些词都与
Christopher
或Mark
有关”是什么意思。一组通用的词向量对于'Christopher'
或'Mark'
可能没有非常有意义的向量,因为这些是仅具有局部意义的专有名称,用于表示特定的人,而与更大的概念没有强烈的关联。(由于许多word2vec训练集在训练前都会将单词大小写变平,所以可能根本就没有大写的'Christopher'
向量。)你需要说更多关于你想要达到的目标的话,才能知道该推荐什么。例如,您可能需要一个用于“命名实体识别”(named entity recognition)的工具('NER')来识别
'Christopher Pan'
和'Mark Spencer'
是感兴趣的离散实体,以及其他语法感知解析或词性标记来将它们标记为与某些其他动词/动作相关的实体你能做的就是在单词之间创建一个相似矩阵
数字仅供演示
这可以由两个for循环完成
然后对矩阵的每个列表进行迭代,使用
例如,word1将返回值3.3的最大索引3,因此word1与word4非常相似
相关问题 更多 >
编程相关推荐