WFST 语言模型

WFST语言模型表示形式

  1. arpa语言模型格式如下
\data\
ngram 1=5
ngram 2=3
ngram 3=2

\1-grams:
-1.3683  <s>      -2.5372
-1.6684  </s>      -2.2373
-1.5682  A      -2.8371
-1.4681  B      -2.9370
-1.0681  C      -2.0370

\2-grams:
-3.4627  A  B    -0.9884
-3.8627  A  C    -0.4884
-3.1627  B  C    -0.5884

\3-grams:
-4.3813  A    B      C
-4.4782  A    C      B

\end\
  1. arpa2fst转换后的WFST如下
语言模型WFST

状态与词历史对应关系如下表:

状态编号 词历史
0 -
4 A
5 B
6 C
7 AB
8 AC
9 BC(ABC)
10 CB(ACB)

几点说明

  • WFST中每一个状态有两种身份:作为发射状态时,表示词历史;作为到达状态时,表示语言模型中的一个文法条目(准确的说是和发射状态一起组成语言模型中的一个文法条目)
  • WFST中没有表示最高元文法的状态(例如三元文法),因为最高元文法不会作为词历史出现,不满足上一条所说的条件。三元文法A B C的状态是从AB表示的状态到BC表示状态的一条发射边(见上表)。
  • backoff权重的理解:若三元文法A B D不存在,此时词历史是A B,因此要回退到以B为词历史的文法,而回退权重是现在词历史A B所关联的回退权重,计算公式如下:

prob(D|A B) = backoff(A B)*prob(D|B) if (A B D) do not exist

因此最高元文法没有回退权重,因为最高元文法没有词历史的身份。根据以上的理解,WFST中表示回退是从A B表示的状态到B表示的状态的一条空边,边上的权重为backoff-weight

arpa2fst

arpa2fst程序会将apra语言模型转换为上图中的fst形式。
如果添加选项arpa2fst --disambig-symbol=#0指定#0,则会进行以下处理:

  1. 删除空边,即一个状态上只发出空边也就是回退边(例如上图中的状态10),则删除该边并状态合并。从语义上讲,这实际是删除了不存在的二元词历史所映射的状态,达到减小状态数的目的。
  2. 用特殊符号#0替换回退边上的输入空符号
  3. 将开始结束标签<s> </s>替换为空

处理后的G.fst如下:


G.PNG

推荐阅读更多精彩内容

  • 与灵魂最后的对话 作者:冷冬年 烈火中,我看见一具灵魂的骷髅 我问,你疼吗 它微微一笑 它并不认识我 我们只是在这...
    陈水河阅读 421评论 7 14
  • 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 运行结果
    ssttIsme阅读 2,727评论 0 0
  • 1.先找进程: ps-ef|greptomcat root230313318:57pts/2 2.在找负载高的pi...
    宇晨棒棒的阅读 511评论 0 2
  • 早上8点多些就到了婆家(培训公司), 可是看群里的消息说没有网络,要大动干戈挪动位置,真心不爽。她们都快到期了,还...
    毛毛静丫阅读 63评论 0 0
  • 我知道你一直在等待,等待一个人的到来,不为别的,只为那一次的相遇,在心灵的底片上留下烙印。如果说是缘,那就是于万千...
    薛善强阅读 231评论 0 0