句子中词与词的关系

2024-10-05 14:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两句话:

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)

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

  • completedfinished是相似的词
  • workjob也是相似的词
  • 然后如果我在句子中找到work/jobfinished/completed,这些单词都与ChristopherMark相关

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

谢谢


Tags: modeljobnumsentenceworkavgfeaturesvector
2条回答

使用文本中所有单词向量的平均值是一个快速&;创建全文摘要向量的简单技术——但不能捕获所有的含义,特别是那些由语法结构、词语修饰语或多词短语创建的含义

您的word2vec模型可能已经反映了这样一个事实,即'completed''finished'在意义上相似,或者'work''job',通过使它们的向量相似。只需直接比较这些词向量,并将结果与其他词向量进行比较,就会告诉您相对更多或更少的相似词对或词组

不清楚你所说的“这些词都与ChristopherMark有关”是什么意思。一组通用的词向量对于'Christopher''Mark'可能没有非常有意义的向量,因为这些是仅具有局部意义的专有名称,用于表示特定的人,而与更大的概念没有强烈的关联。(由于许多word2vec训练集在训练前都会将单词大小写变平,所以可能根本就没有大写的'Christopher'向量。)

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

你能做的就是在单词之间创建一个相似矩阵

            word1   word2   word3   word4
    word1   0       1.1     2.2     3.3
    word2   1.1     0       2.2     3.3
    word3   1.1     2.2     0       3.3 
    word4   1.1     2.2     3.3     0

数字仅供演示

这可以由两个for循环完成

    for w1 in words:
        for w2 in words:
            matrix.append(similarety(w1,w2))

然后对矩阵的每个列表进行迭代,使用

    matrix[0].index(max(matrix[0]))

例如,word1将返回值3.3的最大索引3,因此word1与word4非常相似

相关问题 更多 >