0

我正在寻找一个简单的程序来从 cmudict-0.7b 或 cmudict-0.7b.dict 生成 FST(有限状态传感器),它将与 phonetisaurus 一起使用。

我尝试了以下命令集(phonetisaurus Aligner、Google NGramLibrary 和 phonetisaurus arpa2wfst)并能够生成 FST,但它不起作用。我不确定我在哪里做错了或错过了任何步骤。我猜第一个命令,即 phonetisaurus-align,是不正确的。

phonetisaurus-align --input=cmudict.dict --ofile=cmudict/cmudict.corpus --seq1_del=false

ngramsymbols < cmudict/cmudict.corpus > cmudict/cmudict.syms

/usr/local/bin/farcompilestrings --symbols=cmudict/cmudict.syms --keep_symbols=1 cmudict/cmudict.corpus > cmudict/cmudict.far

ngramcount --order=8 cmudict/cmudict.far > cmudict/cmudict.cnts

ngrammake --v=2 --bins=3 --method=kneser_ney cmudict/cmudict.cnts > cmudict/cmudict.mod

ngramprint --ARPA cmudict/cmudict.mod > cmudict/cmudict.arpa

phonetisaurus-arpa2wfst-omega --lm=cmudict/cmudict.arpa > cmudict/cmudict.fst

我用 phonetisaurus-g2p 尝试了 fst,如下所示:

phonetisaurus-g2p --model=cmudict/cmudict.fst --nbest=3 --input=HELLO --words

但它没有返回任何东西......感谢在这件事上的任何帮助。

4

1 回答 1

2

保持字典格式正确非常重要。Phonetisaurus 对此非常敏感,它要求单词和音素以制表符分隔,这样空格就不起作用了。它也不允许 CMUSphinx 使用类似 (2) 或 (3) 的发音变体数字。例如,在将字典输入语音龙之前,您需要使用简单的 python 脚本清理字典。这是我使用的一个:

#!/usr/bin/python

import sys

if len(sys.argv) != 3:
    print "Split the list on train and test sets"
    print
    print "Usage: traintest.py file split_count"
    exit()

infile = open(sys.argv[1], "r")
outtrain = open(sys.argv[1] + ".train", "w")
outtest = open(sys.argv[1] + ".test", "w")

cnt = 0
split_count = int(sys.argv[2])

for line in infile:
    items = line.split()
    if items[0][-1] == ')':
        items[0] = items[0][:-3]
    if items[0].find("_") > 0:
        continue
    line = items[0] + '\t' + " ".join(items[1:]) + '\n'
    if cnt % split_count == 3:
        outtest.write(line)
    else:
        outtrain.write(line)
    cnt = cnt + 1
于 2015-12-09T21:40:52.623 回答