编程语言
首页 > 编程语言> > python-使用Gensim提取短语时出错

python-使用Gensim提取短语时出错

作者:互联网

我正在尝试使用Gensim中的短语来获取句子中的双字母组,如下所示.

from gensim.models import Phrases
from gensim.models.phrases import Phraser
documents = ["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"]

sentence_stream = [doc.split(" ") for doc in documents]
#print(sentence_stream)
bigram = Phrases(sentence_stream, min_count=1, threshold=2, delimiter=b' ')
bigram_phraser = Phraser(bigram)

for sent in sentence_stream:
    tokens_ = bigram_phraser[sent]
    print(tokens_)

即使将“ new”,“ york”捕获为“ new york”,也不会捕获“ machine”,将学习称为“ machine learning”

但是,在example shown in Gensim Website中,他们能够将“机器”,“学习”一词捕捉为“机器学习”.

在上面的示例中,请让我知道如何将“机器学习”作为二元组

解决方法:

gensim Phrases所使用的技术完全基于共现的统计:在同时受min_count影响并与阈值进行比较的公式中,单词出现的频率相对于单独出现的频率.

只是因为您的训练集有“ new”和“ york”彼此并发两次,而其他词(例如“ machine”和“ learning”)仅并发了一次,所以“ new_york”就变成了双语法例,并且其他配对则没有.而且,即使您确实找到了min_count和阈值的组合,也可以将’machine_learning’提升为一个双语法例,它也会将其他所有出现的双语法例配对在一起-这可能不是您想要的.

的确,要从这些统计技术中获得良好的结果,您需要大量不同的,现实的数据. (出于玩具大小的原因,玩具大小的示例可能在表面上成功或失败.)

即使那样,他们仍会错过一个人认为合理的组合,而使一个人不会组合.为什么?因为我们的头脑中有很多更复杂的方法(包括语法和现实知识)来确定何时成堆的单词代表一个概念.

因此,即使有了更多更好的数据,也要为无意义的n-gram做好准备.调整或判断模型是否在总体上改善您的目标,而不是针对您的敏感性进行任何单点检查或临时检查.

(关于参考的gensim文档注释,我非常确定,如果仅对其中列出的两个句子尝试“短语”,它将找不到任何期望的短语-而不是“ new_york”或“ machine_learning”.作为一个比喻性的示例,省略号…表示训练集更大,结果表明多余的未显示文本很重要,这仅仅是因为您在代码中添加了第三句话,因此可以检测到“ new_york”.使“ machine_learning”看起来更像是统计上无关的配对的示例,您的代码也可以促进“ machine_learning”.)

标签:text-mining,gensim,word2vec,python,data-mining
来源: https://codeday.me/bug/20191014/1912465.html