本篇文章基于上一篇 自然语言处理-文本处理-单词改写实现。
前一篇主要写了一点有关根据单词编辑距离来计算相似单词集合的问题。下面开始通过概率模型来从相似单词集合中寻找到最有可能的单词。例如:当用户输入单词officr的时候,我们候选词集合中右office和official,但是通过计算,可能会发现office的可能性更大一些。
例:假设用户输入错误的字符串为source_word : s,我们需要找到最合适的单词纠错后的字符串target_word : t。
也就是说需要满足。
t^ = argmax P(t | s) (t∈ candidates)
其中t^为最佳的候选词汇, argmax为P(t | s) 的最大化函数,P(t | s)为条件概率,给用户输入错误词汇的情况下,由该错误词汇得到的正确词汇的概率。 (t∈ candidates) 为条件范围,即 目标词汇,对错误词汇通过编辑距离计算出的词汇候选集合。
由贝叶斯公式可得到:
t^ = argmax P(s | t) * P(t) / P(s) (t∈ candidates)
P(s)用户输入单词的概率,对计算目标词汇概率没有作用,所以可以省去。即得到如下的式子:
T^ = argmax P(s | t) * P(t) (t∈ candidates)
P(s | t):为在给定正确单词的情况下,用户输入错误单词的概率。
例如:给定正确单词office,有些人可能会携程officq,officw,officr等。这些错误信息可以通过历史数据进行统计出来。例如:用户输入office的时候,一共有100次输入错误,其中错误情况有以下三种,占比分别为:
officq:20,
officw:50
officr:30
则P(s = officq|t=office) = 20/100=0.2
P(s = officq|t=office) = 50/100=0.5
P(s = officq|t=office) = 30/100=0.3
P(t):正确单词在语料库中的概率。例如,用户输入officw以后,通过计算单词的编辑距离,得到候选词集,有office和official两个单词。而在语料库中,office和official两个单词分别出现的频率可以通过统计的方式计算为:
P(t=office)=65%
P(t=official)= 35%
那么,很有可能会认为office是最佳的候选词,而不是official
谢谢阅读,如有建议请提出!