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)]
这对于所有的结果都是存在的;我的语料库中有很多肮脏的数据。问题是:我如何应用解决方案?
解决方案我试过
我不需要特定的代码,只需要一般的进程/包,可以帮助这一点。如果什么都没有,也请告诉我。
发布于 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()方法用于类推求解这样的任务,即使计算出的‘目标点’离它们最近,它也不会用任何输入词作出响应。(请参阅这个答案的底部,以了解更多有关有时混淆了文字矢量偏差的写操作的详细信息,以及有时提供原始向量是如何工作的。)
https://stackoverflow.com/questions/69725006
复制相似问题