我有超过500万条记录的数据集,其中有很多噪音特征(单词)所以我想进行拼写修正和缩写处理。
当我在python中搜索拼写纠正包时,我得到了autocorrect,textblob,hunspell等包和Peter norvig's method
以下是我的数据集
的示例Id description
1 switvch for air conditioner..............
2 control tfrmr...........
3 coling pad.................
4 DRLG machine
5 hair smothing kit...............
我使用代码
通过上述包尝试了拼写纠正功能dataset['description']=dataset['description'].apply(lambda x: list(set([spellcorrection_function(item) for item in x])))
对于整个数据集,完成拼写纠正需要12个多小时,并且它引入的噪音很少(占总词数的20%),这是非常重要的。
例如:在最后一行," smothing"纠正为"某事"但应该是"平滑" (我没有得到"某些事情"在这种背景下)
接近进一步
当我观察数据集并非所有时间单词的拼写错误时,在数据集中的某处也有正确的拼写实例。所以我使用dictionary对整个数据集进行标记并分割正确的单词和错误的单词,在所有词对和选择对之间应用了jarowinkler相似性方法,其具有相似值0.93和更多
Wrong word correct word similarity score
switvch switch 0.98
coling cooling 0.98
smothing smoothing 0.99
我得到了超过5万对类似的单词,我把它放在字典中,错误的单词作为键和正确的单词作为值
我还在字典中用缩写列表(~3k对)保留了单词
key value
tfrmr transformer
drlg drilling
使用代码
搜索并替换键值对dataset['description']=dataset['description'].replace(similar_word_dictionary,regex=true)
dataset['description']=dataset['description'].replace(abbreviation_dictionary,regex=true)
这个代码花了一天多的时间来完成我整个数据集的10%,我发现这个数据集效率不高。
除了Python包之外,我还发现deep spelling这是一种非常有效的拼写纠正方法。对RNN-LSTM作为拼写检查有一个非常明确的解释。
由于我对RNN和LSTM了解不多,所以我对上述链接有了非常基本的了解。
问题
我很困惑如何考虑RNN的训练集来解决我的问题, 是否
还是其他任何方式?可以请一些人告诉我如何进一步处理
答案 0 :(得分:0)
您能否提供有关正在构建的模型的更多信息? 与一个you would use for translation类似,使用字符级序列进行序列模型是有意义的。已经有一些方法尝试这样做(1,2,3)。 也许可以从中汲取灵感吗?
现在,关于数据集,您尝试使用的数据集似乎有错误?如果您没有每个短语的正确版本,我认为您无法使用此数据集。
一种简单的方法是获取现有数据集并在其中引入随机噪声。 deep spelling blog讨论如何使用现有的文本语料库。另外,我本人的建议是使用小的独立句子作为训练集。从机器翻译数据集(例如tatoeba项目)中找到这些内容的好地方,并且仅使用英语短语。在其中的对中,您可以创建(input_phrase
,target_phrase
)对,其中input_phrase
可能有噪声(但并非总是如此)。
关于性能,首先对于5M数据集进行1遍12小时训练听起来对家用PC来说是正确的。您可以使用GPU或云解决方案(1,2)进行更快的训练。
现在要进行假阳性更正,您创建的字典确实可以派上用场:如果该字典中存在一个单词,请不要接受模型中的“更正”。