基于字分类的分词

phyeas 2010-03-30
最近看最大熵看的不太懂,以下描述是本人对字分类算法的一些看法,各位看官说说自己的看法。(下文中,B代表词首、M代表词中、E代表词尾、S代表单字)
首先根据语料训练,得出每个字特征如下:
字本身作为B、M、E、S的概率
根据前一个字得出B\M\E\S的概率
根据后一个字得出B\M\E\S的概率
训练完成后对输入分词时要记入前一个字的B\M\E\S概率对当前字的影响,如当前为第一个字,则字为B的概率为1/2,为S的概率为1/2,M和E均为0
如要分词“我们都是中国人”
当前字为"我",首先根据前一个字对当前字的影响,其概率值为
B=0.5  M=0  E=0  S=0.5
假设此时“我”字的本身作为B的概率为0.4,作为S的概率为0.6,其余均为0,加上后得到概率为  B=0.9  M=0  E=0  S=1.1
现在无法读取前一个字(现在是句首),读取后一个字“们”,根据“们”得出前面这个这个“我”字作为B的概率为1,其余均为0,则加上后得到B=1.9  M=0  E=0  S=1.1
此时将B\M\E\S均除以3得到B=0.64,M=0,E=0,S=0.36
得到“我”字的概率分布后计算“们”字的概率分布
此时根据前一个字,“们”字作为B\M\E\S的概率是均等的,所以此时B=0.25,M=0.25,E=0.25,S=0.25
根据“们”字本身的概率(假设为B=0,M=0.3,E=0.4,S=0.3),则加上前一次计算得到B=0.25,M=0.55,E=0.65,S=0.55,再根据前一个字“我”,得到概率分布(假设为B=0,M=0.5,E=0.5,S=0),相加得到B=0.25,M=1.05,E=1.15,S=0.55,在读取后面这个字“都”,假设模型中“都”对“们”没有约束条件,则根据最大熵原则,平均分布每个熵,加上上次的结果等于B=0.5,M=1.3,E=1.4,S=0.8,此时应将结果除以4,得到“们”字的概率分布,结果为B=0.13,M=0.33,E=0.36,S=0.23
此时应将“我”和“们”字的概率分布分别相乘得到
B->B=0.64*0.13=0.0832
B->M=0.64*0.33=0.2112
B->E=0.64*0.36=0.2304
B->S=0.64*0.23=0.1472
-----------------
S->B=0.36*0.13=0.0468
S->M=0.36*0.33=0.1188
S->E=0.36*0.36=0.1296
S->S=0.36*0.23=0.0828
(由于M和E均为0就不列出来了)

得出最大的概率结果应为B->E,所以“我们”应分为一个词。
其他字依次计算得出最后结果中最大的概率便是最大的分词可能。

回报完毕,大家说说是否可行。本人对最大熵没啥了解,仅限于知道其概念的程度。
phyeas 2010-04-10
咋没人讨论一下呢,今天又想到,这个算法最大的问题在于计算约束条件的概率……也就是上文说的“再根据前一个字“我”,得到概率分布(假设为B=0,M=0.5,E=0.5,S=0)”,想来想去,记起看最大熵的资料中提到的GIS算法,先平均分配概率,然后使用模型对语料进行评测,不断调高或降低概率分配再对语料进行评测直到模型收敛……据此应该是可以算出这个概率的
phyeas 2010-04-14
利用最大熵工具终于把分词器的f-score提到0.931了。 
fxsjy 2012-09-29
finalseg 就是你说的这种算法的一个实现: https://github.com/fxsjy/finalseg
当然,有些小小的改进。
Global site tag (gtag.js) - Google Analytics