文章目录
- 关于 OpenFST
- 安装 openfst
- 关于 WFST
- 编译 WFST
关于 OpenFST
- 官网:https://www.openfst.org/twiki/bin/view/FST/WebHome
- 快速入门文档:https://www.openfst.org/twiki/bin/view/FST/FstQuickTour
- 下载:https://www.openfst.org/twiki/bin/view/FST/FstDownload
FST : Finite State Transducer,有限状态机
OpenFST 就是 FST 的一个实现,遵循 Apache 协议的开源软件。
安装 openfst
cd openfst-1.7.9/
./configure --enable-python --enable-far
make
sudo make install
关于 WFST
WFST : Weighted Finite-State Transducer,加权有限状态转录机。
Kaldi 中 WFST 的实现,基于OpenFST。
- WFST 由一组状态(State) 和状态间的有向跳转(Transition)构成
- 每个跳转上保存了三种信息:输入标签(input label)、输出标签(ouput label)和权重(weight),以
input_label:output_label/weigt
格式记录 - WFST 具备一个起始状态(initial state,用粗圈表示) 和至少一个终止状态(final state,用双圈表示);
- 每个终止状态可以有一个终止权重(final weight)
- WFST 还需定义两个二元操作 + 和 x,这两个操作与其权重集合应构成一个半环。
- 用
ϵ
\epsilon
ϵ 表示空标签,也常被写作
<eps>
- WFST 把一个序列转录为另一个序列
- fst.txt 状态文件
除了最后一行,每行由5个元素构成:
跳转的源状态,目标状态,输入标签,输出标签,权重
最后一行表示 终止状态,终止权重为 1 - symbols.txt 标签文本到数字的映射表
映射表中的 0 是为空标签(即: ϵ \epsilon ϵ 或<spe>
)保留的。其他标签从1开始分配数字作为 ID。
编译 WFST
可以使用 openfst 的编译工具将 WFST 编译成二进制文件:
fstcompile --isymbols=symbols.txt --osymbols=symbols.txt fst.txt output.fst
- 可以使用 fstinfo 查看信息
- 使用 fsprint 打印成文本形式
- 使用 fstdraw 输出成 graphviz 定义的图格式
参考:
- 李理:《WFST介绍》
http://fancyerii.github.io/wfst/wfst/