RNN-LSTM的数据集作为python

时间:2018-02-26 20:27:53

标签: python-3.x lstm spell-checking rnn

我有超过500万条记录的数据集,其中有很多噪音特征(单词)所以我想进行拼写修正和缩写处理。

当我在python中搜索拼写纠正包时,我得到了autocorrecttextblobhunspell等包和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的训练集来解决我的问题,  是否

  1. 我需要在整个数据集中考虑正确的单词(没有任何拼写错误)作为trainset和我的数据集的整个描述作为testset。
  2. 或一对相似的单词和abbrievation列表作为列车集和我的数据集描述为testset(模型在描述中找到错误的单词并更正)
  3. 还是其他任何方式?可以请一些人告诉我如何进一步处理

1 个答案:

答案 0 :(得分:0)

您能否提供有关正在构建的模型的更多信息? 与一个you would use for translation类似,使用字符级序列进行序列模型是有意义的。已经有一些方法尝试这样做(123)。 也许可以从中汲取灵感吗?

现在,关于数据集,您尝试使用的数据集似乎有错误?如果您没有每个短语的正确版本,我认为您无法使用此数据集。

一种简单的方法是获取现有数据集并在其中引入随机噪声。 deep spelling blog讨论如何使用现有的文本语料库。另外,我本人的建议是使用小的独立句子作为训练集。从机器翻译数据集(例如tatoeba项目)中找到这些内容的好地方,并且仅使用英语短语。在其中的对中,您可以创建(input_phrasetarget_phrase)对,其中input_phrase可能有噪声(但并非总是如此)。

关于性能,首先对于5M数据集进行1遍12小时训练听起来对家用PC来说是正确的。您可以使用GPU或云解决方案(12)进行更快的训练。

现在要进行假阳性更正,您创建的字典确实可以派上用场:如果该字典中存在一个单词,请不要接受模型中的“更正”。