我目前有一个(自然语言)语料库,这些都是已经采取的步骤:
我想要得到所有FSTs在远端的联合,并计算出从开始状态到最终状态的最高权重路径。为了从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:出现第一个符号表,但第二个符号表丢失 错误: Union:第一个参数的输入/输出符号表与第二个参数的输入/输出符号表不匹配
当然,如果我尝试运行二进制操作而不首先对FST排序,这个错误就会持续存在。
我觉得我对FSTs的排序不正确,或者.我完全误解了如何使用符号表。你知道为什么联盟(或者任何其他二进制操作)是这样失败的吗?
发布于 2013-01-06 10:40:07
当您从远程存档中提取组件时,符号表将从存档中附加到第一个fst。当组合FST时,嵌入到各个FST中的符号表需要相互匹配。例如,联合操作需要跨组件的输入符号彼此相同,跨组件的输出符号彼此相同。组合需要左边机器的输出符号来匹配右侧机器的输入符号。
可以使用fst符号命令清除FST中的符号:
fstsymbols --clear_isymbols ---clear_osymbols with-syms.fst > no-syms.fst从corpu.txt-01中移除符号应该可以解决这个问题。或者,您可以在不使用-- without _符号标志的情况下编译far文件。
对于union命令,在梳理它们之前,不需要从组件机器中对弧进行排序,但是通常需要在组合它们之前对它们进行排序。
如果您的文本语料库很大,您可能会发现直接使用C++接口或其他绑定(如皮弗斯特 )从文本文件直接构造联合的FST要快得多。
https://stackoverflow.com/questions/14165408
复制相似问题