我目前有一个(自然语言)语料库,这些是已经采取的步骤:
将语料拼接成一个大文件后生成符号表:
$ ngramsymbols <corpus.txt >corpus.syms
给定此符号表,将语料库转换为二进制 FST 存档 (FAR):
$ farcompilestrings -symbols=corpus.syms -keep_symbols=1 corpus.txt > corpus.far
我想取 FAR 中所有 FST 的并集,并计算从起始状态到最终状态的最高权重路径。要从 shell 进行测试,这就是我所做的:
$ farextract corpus.far # generates fst files corpus-01, corpus-02, ...
$ fstarcsort --sort_type=olabel corpus.txt-01 1.fst
$ fstarcsort --sort_type=ilabel corpus.txt-02 2.fst
$ fstunion 1.fst 2.fst 12.fst
但我一直遇到以下错误:
警告:CompatSymbols:第一个符号表存在但第二个缺失
错误:联合:第一个参数的输入/输出符号表与第二个参数的输入/输出符号表不匹配
当然,如果我尝试运行二进制操作而不首先对 FST 进行排序,则此错误仍然存在。
我认为我没有正确排序 FST,或者......我完全误解了如何使用符号表。知道为什么联合(或任何其他二进制操作,就此而言)会这样失败吗?