WFST 语言模型

WFST语言模型表示形式

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

\1-grams:
-1.3683        -2.5372
-1.6684        -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. 将开始结束标签 替换为空

处理后的G.fst如下:


G.PNG

你可能感兴趣的:(WFST 语言模型)