现实世界的拼写错误统计数据?

在哪里可以找到一些现实世界的拼写错误统计数据?

我正在尝试将人们的输入文本与内部对象匹配,人们往往会犯拼写错误。
有两种类型的错误:

  1. typos – 例如,“Helllo”而不是“Hello” / “Satudray”而不是“Saturday”等。
  2. Spelling – 例如,“Shikago”而不是“Chicago”。

我使用Damerau-Levenshtein距离来处理拼写错误,使用Double Metaphone来处理拼写(Python实现在这里在这里)。

我想专注于Damerau-Levenshtein(或简称edit-distance)。教科书上的实现总是将删除、插入、替换和转置的权重设为‘1’。虽然这简单且有利于实现优雅的算法,但它并不符合“现实”/“现实世界的概率”。

例如:

  • 我确信“Helllo”(“Hello”)的可能性大于“Helzlo”,但它们都只有一次编辑距离。
  • 在QWERTY键盘上,“Gello”比“Qello”更接近“Hello”。
  • Unicode音译: “München”和“Munchen”之间的“真实”距离是多少?

删除、插入、替换和转置的“现实世界”权重应该是什么?

即使是Norvig非常酷的拼写校正器也使用非加权的编辑距离。

顺便说一句,我确信这些权重需要是函数而不是简单的浮点数(如上例所示)…

我可以调整算法,但我在哪里可以“学习”这些权重?我没有访问Google规模的数据

我应该只是猜测它们吗?

编辑 – 尝试回答用户问题:

  • 我当前的非加权算法在面对拼写错误时经常失败,原因如上所述。“周四返回”:每个“真实的人”都能轻易看出Thursday比Tuesday更有可能,但它们都只有一次编辑距离!(是的,我确实记录并测量我的表现)。
  • 我正在开发一个NLP旅行搜索引擎,因此我的词典包含大约25K个目的地(预计增长到100K),时间表达大约200个(预计1K),人物表达大约100个(预计300),货币表达大约100个(预计500),“粘合逻辑词”(如“from”, “beautiful”, “apartment”)大约2K(预计10K)等等…
  • 编辑距离在上述各词组中的使用方式不同。我尝试在明显的情况下“自动更正”,例如,仅与词典中的另一个词有一次编辑距离。我有许多其他手动调整的规则,例如,Double Metaphone修复,该修复与词典中的一个词的编辑距离不超过2,且长度大于4…随着我从现实世界的输入中学习,规则列表还在继续增长。
  • “词典条目中有多少对在你的阈值内?”:嗯,这取决于“花哨的加权系统”和现实世界(未来的)输入,不是吗?无论如何,我有广泛的单元测试,因此我对系统所做的每一次更改都只会使其更好(当然是基于过去的输入)。大多数少于6个字母的词都与另一个词典条目有一次编辑距离,而该词又与另一个词典条目有一次编辑距离。
  • 当有两个词典条目与输入的距离相同时,我会尝试应用各种统计数据来更好地猜测用户的意思(例如,法国的Paris比伊朗的Pārīz更有可能出现在我的搜索中)。
  • 选择错误词的成本是向最终用户返回半随机(通常是荒谬的)结果,并可能失去一个客户。不理解的成本稍微低一些:用户将被要求重新表述。
  • 复杂性的成本是否值得?是的,我确信是值得的。你不会相信人们向系统输入的拼写错误数量,并期望它能理解,我确实需要提升精确度和召回率

回答:

现实世界拼写错误统计数据的可能来源是维基百科的完整编辑历史

http://download.wikimedia.org/

另外,你可能对AWB的RegExTypoFix感兴趣

http://en.wikipedia.org/wiki/Wikipedia:AWB/T

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注