首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python清洗FastText的Webscrape

用Python清洗FastText的Webscrape
EN

Stack Overflow用户
提问于 2021-10-26 14:29:26
回答 1查看 144关注 0票数 0

BLUF:我怎么才能把单词集中在一起来清理大型语料库(比如“四分卫”或“四分卫”)?

背景:我正在研究我的数据科学学位的Capstone项目,该项目需要在NFL上抓取体育文章来分析它们的内容,以确定是否存在基于种族的内隐偏见。我用trafilatura抓取了超过11000篇文章,并将它们合并成两个语料库:白色和非白色。每一篇都包含了其中大约一半的内容。然后,我对语料库进行预处理(词干,删除停止词,存储在CSV中,每一行代表一个句子,每个单元格表示句子中的一个单词)。

当我对语料库运行FastText并查找nearest_neighbors时,我只会得到一个最接近的单词列表,这些单词只不过是带有小偏差的原始单词而已。例如:

model.nearest_neighbors('smart')

[('smartidea', 0.36853086948394775), ('vsmart', 0.326141357421875), ('intelligent', 0.3181183338165283), ('smartpo', 0.27458563446998596), ('smartqb', 0.2703150510787964)]

这对于所有的结果都是存在的;我的语料库中有很多肮脏的数据。问题是:我如何应用解决方案?

解决方案我试过

  • 创建一个函数来测试py字典中是否存在一个单词。如果不是,提示输入单词应该是什么,并将结果存储在自定义字典中,代码也会根据该字典进行检查。这个解决方案虽然有效,但花费的时间太长了(我花了6个小时才完成了10万个字符的工作--我还有114个字符要做,只剩下一个白色的语料库)。
  • 编辑了前面的解决方案,只记录字典中不存在的单词的位置,这样我就可以返回并手动更改它。这也花了很长时间,我把它设置为运行,一天后回来,结果发现两个块完成了。

我不需要特定的代码,只需要一般的进程/包,可以帮助这一点。如果什么都没有,也请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2021-10-26 19:02:55

通常,如果您有足够的数据,您可以忽略这些关切。排字和其他故障只是一点随机噪声,对最感兴趣的普通单词的最终向量的影响可以忽略不计。(实际上,通过使用FastText,即使是字体的char gram子字符串也可能从相同的使用上下文中获得一些有用的子单词向量。)

从某种程度上说,这些“垃圾”词可能会被更明显的结果所干扰,而这些词的分布频率越高,就越容易忽略频率以下的单词--因为它们往往有较弱的向量(来自较少的训练例子),即使它们不是纯的错误/垃圾标记。

在某种程度上,培训过程已经通过默认的min_count=5设置来完成--丢弃非常罕见的单词,以提高剩余单词的质量和培训时间。

most_similar()的结果也可以被限制,通过restrict_vocab可选参数,只考虑第一个N个已知词(在通常情况下是N个最频繁的单词)。

因此,很容易--通常是明智的--:

  • 放弃非常罕见的词,比如低信息内容或潜在的垃圾/噪音,甚至在FastText培训之前,默认的min_count=5
  • 当报告结果时,忽略那些在训练中仍然有用的更少的单词--因为它们往往比那些建模得更强、频率更高的单词具有更粗糙的向量和更模糊的含义,从而可以在更频繁的单词中掩盖更强的结果。

如果您觉得您的数据足够薄,您需要纠正这些问题,正如您已经发现的,这可能是一个非常繁琐的过程。如果您有一个可靠的预先存在的域名词汇表--就像您使用过pydictionary一样--您可以使用它来提名候选人以进行更正,然后可能会有越来越多的决定,这些决定要么仍然可以使用,要么应该更正。

(如果你只需花一天的时间浏览你仅有的1.1万篇文章中的一部分,那么你的标记/搜索可能会出现一些严重的效率低下-可能是正则表达式的过度使用。)

自动拼写修正的一般领域有很多潜在的方法,但也有一些折衷的地方,如果自动、不加区别地应用新的特定于领域的语言,作为偶尔审查的建议可能会破坏新的领域特定语言。

Peter的文章"如何编写拼写矫正器“是一种基于统计的方法的经典介绍,它可能提供一些有用的想法。

一般情况下,请记住,独特错误的“长尾”可能很大--但每个单独的错误--甚至所有的特殊错误--都可能没有那么重要。在一个大的训练过程中,从其他数据中有很多其他的“信号”,任何数量的随机噪声都不会造成太大的伤害。因此,获得2倍的“脏”数据&忽略长尾或最罕见的单词/错误,通常比仔细更正一小部分文本更好。

即使在任何手动检查/更正,我建议工作从最频繁的标记到最少,而不是单纯的前到后顺序。也就是说,检查你的语料库中最常见的单词的批次,看看它们是否是需要纠正的问题,而不是从前到后每个不正常的单词。

最后,正如你可能试图通过文字向量量化偏见一样,请注意,如果将most_similar()方法用于类推求解这样的任务,即使计算出的‘目标点’离它们最近,它也不会用任何输入词作出响应。(请参阅这个答案的底部,以了解更多有关有时混淆了文字矢量偏差的写操作的详细信息,以及有时提供原始向量是如何工作的。)

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

https://stackoverflow.com/questions/69725006

复制
相关文章

相似问题

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