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)
我想知道如何构建可以告诉我的语义树:
completed
和finished
是相似的词;work
并且job
也是相似的词;- 那么如果我
work/job
在句子中找到 orfinished/completed
,这些词都与Christopher
and相连Mark
。
从技术上讲,我不知道 Python 中是否有什么东西可以让我得到这样的结果。如果您能引导我走向正确的方向,我将不胜感激。
谢谢
解决方案
使用文本中所有单词的词向量的平均值是创建全文摘要向量的一种快速而简单的技术——但不会捕捉所有含义的阴影,尤其是那些由语法结构、单词-修饰语或多词短语。
您的 word2vec 模型很可能已经通过使它们的向量相似来反映'completed'
and'finished'
在含义上相似的事实,或者'work'
and 。'job'
简单地直接比较这些词向量,并将结果与其他词向量的比较进行对比,将告诉你相对或多或少相似的词对或组。
不清楚您所说的“这些词都与Christopher
或有关Mark
”是什么意思。一组通用的词向量对于'Christopher'
or可能没有非常有意义的向量'Mark'
,因为它们是仅具有局部含义的专有名称,用于表示特定的人,与更大的概念没有强烈的关联。(由于许多 word2vec 训练在训练之前设置了大小写扁平化的单词,因此甚至可能根本没有任何'Christopher'
大写的 向量。)
您需要详细说明您要达到的目标才能知道要推荐什么。例如,您可能需要一个用于“命名实体识别”(“NER”)的工具来识别它'Christopher Pan'
并且'Mark Spencer'
是感兴趣的离散实体,以及其他语法感知解析或词性标记来将它们标记为与相关的实体其他一些动词/动作。
推荐阅读
- laravel-5 - 使用 Laravel 雄辩关系时如何对查询结果进行分页
- angular - 如何在 ag-grid 中使用 OR 操作过滤多列过滤器?
- python - 如何将字典键转换为行,将值转换为列
- javascript - 有没有办法在使用 Jquery 打开页面时对某些东西产生 css 效果
- scala - Scala - 特征中的模板方法模式
- android - 如何解决在等级失败错误中添加 pro-guard 后生成 apk 的问题?
- python - Python readline忽略csv文件中的标题
- ios - AppCenter iOS 崩溃报告 - 无法理解导致崩溃的原因
- node.js - 我可以在地图对象中使用 if 语句来处理空值吗?
- kubernetes - apacheignite/web-console-backend 图像有一个问题“等待:CrashLoopBackOff”