首页 > 解决方案 > 句子中单词之间的关系

问题描述

我有两句话:

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)

我想知道如何构建可以告诉我的语义树:

从技术上讲,我不知道 Python 中是否有什么东西可以让我得到这样的结果。如果您能引导我走向正确的方向,我将不胜感激。

谢谢

标签: pythonword2vecsemanticscosine-similarity

解决方案


使用文本中所有单词的词向量的平均值是创建全文摘要向量的一种快速而简单的技术——但不会捕捉所有含义的阴影,尤其是那些由语法结构、单词-修饰语或多词短语。

您的 word2vec 模型很可能已经通过使它们的向量相似来反映'completed'and'finished'在含义上相似的事实,或者'work'and 。'job'简单地直接比较这些词向量,并将结果与​​其他词向量的比较进行对比,将告诉你相对或多或少相似的词对或组。

不清楚您所说的“这些词都与Christopher或有关Mark”是什么意思。一组通用的词向量对于'Christopher'or可能没有非常有意义的向量'Mark',因为它们是仅具有局部含义的专有名称,用于表示特定的人,与更大的概念没有强烈的关联。(由于许多 word2vec 训练在训练之前设置了大小写扁平化的单词,因此甚至可能根本没有任何'Christopher'大写的 向量。)

您需要详细说明您要达到的目标才能知道要推荐什么。例如,您可能需要一个用于“命名实体识别”(“NER”)的工具来识别它'Christopher Pan'并且'Mark Spencer'是感兴趣的离散实体,以及其他语法感知解析或词性标记来将它们标记为与相关的实体其他一些动词/动作。


推荐阅读