是否可以使用单词嵌入搜索部分文本?

时间:2017-10-11 21:02:23

标签: gensim word2vec word-embedding doc2vec

我找到了成功的加权主题,用于添加单词向量,在我的情况下似乎适用于句子比较:

query1 = vectorize_query("human cat interaction")
query2 = vectorize_query("people and cats talk")
query3 = vectorize_query("monks predicted frost")
query4 = vectorize_query("man found his feline in the woods")

>>> print(1 - spatial.distance.cosine(query1, query2))
>>> 0.7154500319

>>> print(1 - spatial.distance.cosine(query1, query3))
>>> 0.415183904078  

>>> print(1 - spatial.distance.cosine(query1, query4))
>>> 0.690741014142 

当我在作为噪音的句子中添加其他信息时,我会减少:

>>> query4 = vectorize_query("man found his feline in the dark woods while picking white mushrooms and watching unicorns")
>>> print(1 - spatial.distance.cosine(query1, query4))
>>> 0.618269123349

使用单词向量进行比较时,有没有办法处理其他信息?当我知道文本的某些子集可以提供更好的匹配时。

UPD:编辑了上面的代码,使其更加清晰。

在我的情况下,

vectorize_query做了所谓的平滑逆频率加权,当来自GloVe模型的单词向量(也可以是word2vec等)添加了权重a/(a+w),其中w应该是字频率。我在那里用词的逆tfidf得分,即w = 1/tfidf(word)。在这种方法中,系数a通常采用1e-3。仅将tfidf得分作为重量而不是该分数给出几乎相似的结果,我也使用标准化等等。

但是我想在我的例子中只是“向量化句子”而不是重载问题,因为我认为它不依赖于我如何使用加权主题添加单词向量 - 问题只是当句子有大约时,比较效果最好相同数量的意义词。

当使用最小成对字距离的总和或平均值计算句子和文本之间的距离时,我知道另一种方法,例如, “奥巴马向伊利诺伊州的媒体发表讲话”< - > “总统迎接芝加哥的新闻界”我们有dist = d(Obama, president) + d(speaks, greets) + d(media, press) + d(Chicago, Illinois).但这种方法没有考虑到形容词可以显着地改变名词的含义等 - 这或多或少地包含在矢量模型中。形容词'good','bad','nice'等词语会在那里成为噪音,因为它们在两个文本中匹配并作为零或低距离贡献,从而减少句子和文本之间的距离。

我使用doc2vec模型玩了一下,似乎是gensim doc2vec实现和skip-thoughts嵌入,但在我的情况下(匹配短查询的文本量更大)我的结果不尽如人意。

2 个答案:

答案 0 :(得分:1)

如果您对词性感兴趣以触发相似性(例如,只对名词和名词短语感兴趣并忽略形容词),您可能需要查看sense2vec,它将词类合并到模型中。 https://explosion.ai/blog/sense2vec-with-spacy ...之后,您可以在对所有术语执行点积时对单词类加权,从而有效地降低您认为的“噪音”。

答案 1 :(得分:1)

目前还不清楚你的原始结果,当添加一堆单词时,相似性会下降,这是不是很糟糕的'一般来说。一句话说的更多是一个非常不同的句子!

如果这个结果对你的目的特别不好 - 你需要一个模型来捕捉一个句子是否相同然后更多",你需要找到/发明一些其他技巧。特别是,您可能需要一个非对称的包含类似的'测量 - 这样较长的句子仍然适合较短的句子,但不是反之亦然。

任何由字向量馈送的浅层,非语法敏感的嵌入都可能很难用单字反转意义,例如:

之间的区别

After all considerations, including the relevant measures of economic, cultural, and foreign-policy progress, historians should conclude that Nixon was one of the very *worst* Presidents

After all considerations, including the relevant measures of economic, cultural, and foreign-policy progress, historians should conclude that Nixon was one of the very *best* Presidents

最糟糕的词语'并且“最好的'它们已经非常相似,因为它们具有相同的功能,并且出现在相同的上下文中,并且可能只在全维空间中相互对比。然后他们的影响可能会被所有其他词语的影响所淹没。只有更复杂的分析才能突出它们在扭转整个句子输入方面的作用。

虽然它还不是gensim中的一个选项,但还有其他方法来计算" Word Mover的距离"报告无与伦比的剩余时间'毕竟简单的成对意义测量完成后。虽然我不知道任何先前的分析或代码能够根据您的需求充实这个想法,或证明其价值,但我有预感,这样的分析可能有助于更好地发现"相同和更多",或"大多数情况相同,但在几个词/方面反转#34;。