python - 为什么不是所有的二元组都在 gensim 的“短语”工具中创建?
问题描述
我已经使用 gensim 创建了一个二元模型,并尝试获取二元语句,但它没有选择所有二元语句,为什么?
from gensim.models.phrases import Phrases, Phraser
phrases = Phrases(sentences, min_count=1, threshold=1)
bigram_model = Phraser(phrases)
sent = [u'the', u'mayor', u'of', u'new', u'york', u'was', u'there']
print(bigram_model[sent])
[u'the', u'mayor', u'of', u'new_york', u'was', u'there']
谁能解释如何获得所有二元组。
为什么只有“new_york”而不是“the_mayor”等?
解决方案
该Phrases
算法通过统计分析决定将哪些词对提升为二元组,该统计分析将每个词的基本频率单独与它们的频率进行比较。
所以,一些单词对会通过这个测试并被组合起来,而另一些则不会。如果您没有得到您期望的配对,那么您可以使用Phrases
类选项稍微调整算法,包括threshold
、min_count
和至少一种备用评分机制。
但是,即使经过最大限度的调整,它通常也不会创建我们作为自然语言使用者会感知的所有短语——因为它对语法或世界上实际与逻辑相关的实体一无所知。它只知道训练文本中的频率统计信息。
因此,它会错过一些我们认为是自然和理想的配对,而它创建的配对我们会认为是不合逻辑的。尽管如此,即使有这些不美观的配对——创建人们看起来不正确的文本——转换后的文本通常可以在某些下游分类或信息检索任务中更好地工作。
如果您真的只想要所有可能的二元组,那将是一个更简单的文本转换,不需要 gensim 的多次传递和内部统计信息收集Phrases
。
但是,如果你确实想使用 gensim 的Phrases
技术,它只有在有大量训练数据时才会表现良好。只有几十个单词——甚至数万个单词——的玩具大小的文本不会产生好的结果。您可能希望数百万到数千万的训练单词有机会真正检测到统计上有效的单词配对。
推荐阅读
- c# - 用户 'IIS APPPOOL\test.bata.com' 登录失败。从 ASP.NET 启动 ASP.NET Core 应用程序时
- typescript - gulp / rollup / typescript — __decorate 未定义
- python - OpenCV 透视变换
- c# - c# Word-Interop:如何在 Find.Execute 之后获取文本
- webview2 - NET - WebView2 / 打开 URL
- javascript - 在 html 中标记文本 (JS/Vue.js)
- c# - 我可以在 log4net 中格式化 %property{NDC} 吗?
- typescript - 如何正确定义作为其他两种类型的合并交集类型的类型?
- javascript - C#/Selenium:javascript 错误:无法读取 null 的属性“fireEvent”
- java - 如果 @GeneratedValue 包含来自另一个实体的外键,则无法使 @GeneratedValue 与 @IdClass 一起使用