使用Gensim提取短语的错误



我试图使用Gensim中的短语在句子中获取bigrams,如下所示。

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_)

即使它捕获了"新"," York"为"纽约",它也不会抓住"机器",学习为"机器学习"

但是,在Gensim网站中显示的示例中,他们能够捕获"机器","学习"字样,为"机器学习"。

请让我知道如何在上面的示例中获得"机器学习"作为

GENSIM Phrases使用的技术纯粹基于共发生的统计:单词与单独相对于单独出现的频率在一个受min_count影响的公式中,并与threshold值进行了比较。

仅仅是因为您的训练集有"新"one_answers" York",而彼此之间发生了两次,而其他单词(例如"机器"one_answers"学习")仅一次彼此之间发生," new_york"成为Bigram和其他配对没有。更重要的是,即使您确实找到了min_countthreshold的组合,可以将'Machine_learning'升级为bigram,它也会 将所有其他bigram-that-that-at-at-once搭配在一起 - 这可能不是你想要什么。

实际上,要从这些统计技术中获得良好的结果,您需要大量各种现实的数据。(由于肤浅的玩具大小的原因,玩具大小的例子可能在表面上取得成功或失败。)

即使在那时,他们倾向于错过一个人认为合理的组合,并使一个人不会做组合。为什么?因为我们的思想具有更复杂的方式(包括语法和现实世界知识),以决定何时何时代表单个概念。

因此,即使使用更多更好的数据,也要为荒谬的n-gram做好准备。调整或判断该模型的总体上是否正在改善您的目标,而不是任何单点或临时检查以匹配您自己的敏感性。

(关于引用的Gensim文档评论,我很确定,如果您仅在其中列出的两个句子上尝试Phrases,它将找不到任何所需的短语 - 而不是'new_york'或'Machine_learning'。一个象征性的示例,椭圆...暗示训练集更大,结果表明额外的未展示文本很重要。仅由于已添加到代码中的第三句话,检测到了" new_york"。如果您添加了" new_york"。类似的示例可以使" Machine_learning"看起来更像是统计上的配对,您的代码也可以促进" Machine_learning"。)

它可能在您的threshold

下方

尝试使用更多数据。

相关内容

最新更新