我正在尝试使用 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”,将learning捕获为“机器学习”
然而,在Gensim 网站中显示的示例他们能够将“机器”、“学习”等词理解为“机器学习”。
请让我知道如何在上面的示例中将“机器学习”作为二元模型
gensim使用的技术Phrases
纯粹基于共现统计:在公式中单词一起出现的频率与单独出现的频率也受min_count
并与threshold
value.
只是因为你的训练集中“new”和“york”同时出现了两次,而其他单词(如“machine”和“learning”)只同时出现了一次,“new_york”就变成了一个二元词,并且其他配对则不然。更重要的是,即使您确实找到了以下组合min_count
and threshold
这会将“machine_learning”提升为二元组,它会also将所有其他出现一次的二元组配对在一起 - 这可能不是您想要的。
实际上,要从这些统计技术中获得良好的结果,您需要大量不同的、真实的数据。 (玩具大小的例子可能会因为表面的玩具大小的原因而表面上成功或失败。)
即使这样,他们也往往会错过人们认为合理的组合,并做出人们不会的组合。为什么?因为我们的大脑有更复杂的方式(包括语法和现实世界知识)来决定何时一堆单词代表一个概念。
因此,即使有更多更好的数据,也要为无意义的 n 元语法做好准备。调整或判断模型是否全面改善您的目标,而不是任何单点或临时检查是否符合您自己的敏感性。
(关于引用的 gensim 文档评论,我很确定如果您尝试Phrases
仅在其中列出的两个句子中,它不会找到任何所需的短语 - 不是“new_york”或“machine_learning”。作为一个形象的例子,省略号...
意味着训练集更大,结果表明额外的未显示文本很重要。只是因为您添加到代码中的第三句话才检测到“new_york”。如果您添加了类似的示例以使“machine_learning”看起来更像是统计上的异常配对,那么您的代码也可以促进“machine_learning”。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)