我正在做拼写检查,我想创建一个拼写检查器,我对使用哪个模型感到困惑。
另外,我更喜欢神经网络,而不是Peter Norvig或n克/k克或任何其他"Vanilla“算法,这样网络就能捕获上下文。
输入:我已经完成了信用卡输出:我申请了信用卡。
我已经完成了使用字符级BLSTM、噪声制造者/错误模型和注意机制的模型,但结果并不令人满意。https://towardsdatascience.com/creating-a-spell-checker-with-tensorflow-d35b23939f60
我读过的一篇文章是使用OpenNMT,但结果是灾难性的。https://medium.com/scribd-data-science-engineering/neural-spelling-corrections-and-the-importance-of-accuracy-977c0063d20f
发布于 2019-10-17 07:58:21
给定一个短语credit cart,您希望将其更正为credit card。把所有拼写正确的单词(现在假设字典中找到的任何单词都拼写正确,即使语法上不正确),并使用您喜欢的嵌入,或者更好的,微调嵌入到与您相关的语料库上的向量中。
接下来,对于所有拼写错误的单词,根据编辑距离生成少量候选词。然后根据与正确拼写集的嵌入平均值之间的距离,从该集合中选择获胜者。
这当然不是最优的,但它将是一个开始的框架。
得到你最喜欢的字级序列模型,根据你选择的语料库对它进行微调。
然后,处理要检查一个单词的文档,如果单词拼写错误,则根据前面的上下文预测下一个单词。您应该剥离最后一层,以查看概率,然后选择最有可能的这些词的顶部N。
然后根据与实际下一个单词的编辑距离对预测的下一个单词进行评分,然后选择它。
对于这两种方案,您肯定需要做一些工程工作,并且可能需要根据单词的相关性或可能性来进行权衡,等等。
最后,我怀疑真正最好的方法就是有一个庞大的拼写错误集&随后的更正( MS或Google会从他们的文档软件使用数据库中得到一些东西)。有了这么多数据,您可能就可以查找最常见的拼写错误并替换它,而不需要ML。或者至少缩小另一种简单得分技术的“正确”替换的候选集合。
否则,您可以尝试使用字符级模型来执行类似于我的第二个示例的操作,并一次向前移动一个字符,对于那些拼错的单词,生成每个字符的概率分布。在此基础上,您可以聪明地尝试找出在可能的字符分布中移动的最佳“路径”,并通过对附近单词的某种类型的嵌入距离再次对结果的候选对象进行评分。这样,您就可以使用最有可能的字符组合来替换拼写错误的单词。这不是一个很好的解决方案,因为您没有考虑后面的单词,但是也许通过双向模型,您可能能够做到这一点。
不管怎么说,希望这段漫漫长路会有所帮助!记住,为实际用例深入学习只是一项工程!
https://datascience.stackexchange.com/questions/61849
复制相似问题