方法
- 编辑距离的方式,但是缺点是计算复杂度高,为词典大小与编辑距离复杂度的乘积
- 编辑距离的逆运算,即每次当用户输入词时,生成编辑距离为1或2的候选词,然后从这些词中选择合适的词返回即可。那怎样从生成的这些候选词中选择合适的词进行返回呢,先将这个问题抽象成数学表达式,其中
s
s
s为用户实际输入的词,
c
c
c为用户可能想输入的词,
c
^
\hat c
c^为用户真正想输入的词:
c ^ = a r g m a x c ∈ c a n d i d a t e s p ( c ∣ s ) \hat{c}=argmax_{c\in{candidates}}p(c|s) c^=argmaxc∈candidatesp(c∣s)
贝叶斯定理
c
^
=
a
r
g
m
a
x
c
∈
c
a
n
d
i
d
a
t
e
s
p
(
c
∣
s
)
\hat{c}=argmax_{c\in{candidates}}p(c|s)
c^=argmaxc∈candidatesp(c∣s)
上面的式子会正比于
p
(
s
∣
c
)
p
(
c
)
p(s|c)p(c)
p(s∣c)p(c)
- p ( c ) p(c) p(c)为某个正确的单词出现的概率,可以当成是一个 U n i g r a m Unigram Unigram,去直接统计该词在文章中出现的概率即可。
-
p
(
s
∣
c
)
p(s|c)
p(s∣c)可以去后台统计用户在输入某一个单词时实际却输入了另外一个词的概率.。比如在你的所有用户中发现有6名用户,他们分别输入了
a
p
p
,
a
p
p
l
,
a
p
p
l
,
a
p
p
,
a
p
p
l
a
,
a
p
p
l
app,appl,appl,app,appla,appl
app,appl,appl,app,appla,appl。这些都不是正确的单词形式,如果这些用户均将这些词修改成了apple,则可以求得
p ( a p p ∣ a p p l e ) = 50.0 % p(app|apple)=50.0\% p(app∣apple)=50.0%
p ( a p p l ∣ a p p l e ) = 33.3 % p(appl|apple)=33.3\% p(appl∣apple)=33.3%
p ( a p p a ∣ a p p l e ) = 16.7 % p(appa|apple)=16.7\% p(appa∣apple)=16.7%