WFST语言模型表示形式
- 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\
- arpa2fst转换后的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,则会进行以下处理:
- 删除空边,即一个状态上只发出空边也就是回退边(例如上图中的状态10),则删除该边并状态合并。从语义上讲,这实际是删除了不存在的二元词历史所映射的状态,达到减小状态数的目的。
- 用特殊符号#0替换回退边上的输入空符号
- 将开始结束标签<s> </s>替换为空
处理后的G.fst如下:
G.PNG
网友评论