首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python中Gensim的短语包生成Trigram

用Python中Gensim的短语包生成Trigram
EN

Stack Overflow用户
提问于 2022-04-18 16:22:33
回答 1查看 86关注 0票数 1

下面的代码片段是我在教程的帮助下创建的,用于无监督的情感分析目的:

代码语言:javascript
复制
sent = [row for row in file_model.message]
phrases = Phrases(sent, min_count=1, progress_per=50000)
bigram = Phraser(phrases)
sentences = bigram[sent]
sentences[1]

file_export = file_model.copy()
file_export['old_message'] = file_export.message
file_export.old_message = file_export.old_message.str.join(' ')
file_export.message = file_export.message.apply(lambda x: ' '.join(bigram[x]))

file_export.to_csv('cleaned_dataset.csv', index=False)

既然我现在想要有大图和曲线图,我就尝试将它调整为:

代码语言:javascript
复制
sent = [row for row in file_model.message]
phrases = Phrases(sent, min_count=1, progress_per=50000)
bigram = Phraser(phrases)
trigram = Phraser(bigram[phrases])
sentences = trigram[sent]
sentences[1]

file_export = file_model.copy()
file_export['old_message'] = file_export.message
file_export.old_message = file_export.old_message.str.join(' ')
file_export.message = file_export.message.apply(lambda x: ' '.join(trigram[x]))

file_export.to_csv('cleaned_dataset.csv', index=False)

但是当我运行这个程序时,我得到了TypeError: 'int' object is not iterable,我认为它指的是我对trigram = Phraser(bigram[phrases])的调整。我正在使用gensim 4.1.2。不幸的是,我没有计算机科学背景,我在网上找到的解决方案也帮不上忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-18 23:05:51

通常情况下,最好在问题中(必要时稍后编辑)包含所收到的整个多行错误消息,包括任何显示文件名、行号和源代码行的“跟踪”。这有助于潜在的答案者专注于事情到底出了什么问题。

另外,请注意,'towardsdatascience.com‘的许多教程质量很差。我看不到您在没有注册的情况下链接的确切内容(我宁愿不注册),但是从您的代码摘录中,我已经看到了一些严重程度不同的问题:

  • (致命)如果您想不止一次地应用Phrases算法,将短语组合成比二进制数更长的短语,那么您就不能重复使用为bigram训练的模型。你需要为每一个新的组合,在先前模型的输出上训练一个新的模型。也就是说,对三角图Phrases模型的输入(必须经过训练)必须是应用双图模型的结果,因此它看到了原始的单位图&现在组合的二进制图的混合。
  • (不明智)一般来说,在这类需要数据的模型上使用低min_count=1很容易适得其反。他们的统计方法需要很多例子来做合理的事情;抛弃最罕见的词通常有助于加快处理,缩小模型,主要是在有足够的例子来做一些可能合理的事情的标记上工作。(对于很少或只有1个使用示例,结果可能看起来有些随机/任意。)
  • (有点过时了,但不是什么大问题)在Gensim 4+中,Phraser实用类已经改名为FrozenPhrases --它只是为了对Phrases模型进行一些优化,当您确定您已经完成了培训/调优时。(旧的名称仍然有效,但这表明教程最近还没有刷新。)

一般来说,请注意:如果没有大量的数据,任何数量的Phrases应用程序的输出可能都不会很强。而且在任何情况下,人类的情感都不可能“看得对”--因为它是纯粹的统计和共现驱动的。(不过,即使它的输出看起来很奇怪,它有时也会在某些信息检索/分类任务上有所帮助,因为它成功地创建了一些有用的新特性,而这些特性与单一的单元图不同。)

我的建议是:

  • 只在没有工作的情况下添加任何Phrases组合,这样您就可以比较结果&看看是否有帮助。
  • 只从大写开始,并确保通过仔细的复习或严格的评分,这是有效的/帮助的。
  • 如果您需要另一级别的组合,请稍后添加,并确保使用已合并的文本初始化trigram Phrases

(不幸的是,我在当前的Gensim文档中找不到两级Phrases使用的示例--我认为一些旧的示例在文档简化工作中被编辑掉了。但是有几个例子表明,在该项目的测试源代码中没有完全错误地使用它--搜索文件phrases.py以获取trigram。但请记住,这些也不是最佳实践,因为它们是专注的最小测试。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71914383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档