我已经创建了运行Sphinx4所需的所有文件(语言模型、字典和声学模型)。但是当我在Eclipse中运行它时,抛出了以下异常:
00:16:12.707 INFO unitManager CI Unit: AE
00:16:12.713 INFO unitManager CI Unit: AH
00:16:12.714 INFO unitManager CI Unit: B
00:16:12.714 INFO unitManager CI Unit: EY
00:16:12.715 INFO unitManager CI Unit: F
00:16:12.715 INFO unitManager CI Unit: IY
00:16:12.716 INFO unitManager CI Unit: JH
00:16:12.716 INFO unitManager CI Unit: L
00:16:12.717 INFO unitManager CI Unit: M
00:16:12.722 INFO autoCepstrum Cepstrum component auto-configured as follows: autoCepstrum {MelFrequencyFilterBank, DiscreteCosineTransform}
00:16:12.853 INFO dictionary Loading dictionary from: file:Alphabets/tutorial/alphabets/etc/alphabets.dic
00:16:12.853 INFO dictionary Loading filler dictionary from: file:Alphabets/tutorial/alphabets/model_parameters/alphabets.ci_cont/noisedict
00:16:12.854 INFO acousticModelLoader Loading tied-state acoustic model from: file:Alphabets/tutorial/alphabets/model_parameters/alphabets.ci_cont
00:16:12.854 INFO acousticModelLoader Pool means Entries: 30
00:16:12.855 INFO acousticModelLoader Pool variances Entries: 30
00:16:12.855 INFO acousticModelLoader Pool transition_matrices Entries: 10
00:16:12.855 INFO acousticModelLoader Pool senones Entries: 30
00:16:12.855 INFO acousticModelLoader Pool mixture_weights Entries: 30
00:16:12.856 INFO acousticModelLoader Pool senones Entries: 30
00:16:12.856 INFO acousticModelLoader Context Independent Unit Entries: 10
00:16:12.856 INFO acousticModelLoader HMM Manager: 10 hmms
00:16:12.860 INFO acousticModel CompositeSenoneSequences: 0
00:16:12.861 INFO largeTrigramModel Loading n-gram language model from: file:Alphabets/tutorial/alphabets/etc/alphabets.lm.dmp
00:16:12.867 INFO largeTrigramModel 1-grams: 3
00:16:12.867 INFO largeTrigramModel 2-grams: 1
00:16:12.867 INFO largeTrigramModel 3-grams: 1
00:16:13.094 INFO lexTreeLinguist Max CI Units 11
00:16:13.095 INFO lexTreeLinguist Unit table size 1331
Exception in thread "main" java.lang.IllegalArgumentException
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:111)
at edu.cmu.sphinx.linguist.WordSequence.getWord(WordSequence.java:179)
at edu.cmu.sphinx.linguist.language.ngram.large.LargeNGramModel.getNGramProbDepth(LargeNGramModel.java:409)
at edu.cmu.sphinx.linguist.language.ngram.large.LargeNGramModel.getNGramProbDepth(LargeNGramModel.java:412)
at edu.cmu.sphinx.linguist.language.ngram.large.LargeNGramModel.getNGramProbDepth(LargeNGramModel.java:412)
at edu.cmu.sphinx.linguist.language.ngram.large.LargeNGramModel.getProbDepth(LargeNGramModel.java:393)
at edu.cmu.sphinx.linguist.lextree.LexTreeLinguist$LexTreeState.createWordStateArc(LexTreeLinguist.java:720)
at edu.cmu.sphinx.linguist.lextree.LexTreeLinguist$LexTreeWordState.getSuccessors(LexTreeLinguist.java:1491)
at edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager.collectSuccessorTokens(WordPruningBreadthFirstSearchManager.java:635)
at edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager.growBranches(WordPruningBreadthFirstSearchManager.java:387)
at edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager.localStart(WordPruningBreadthFirstSearchManager.java:359)
at edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager.startRecognition(WordPruningBreadthFirstSearchManager.java:262)
at edu.cmu.sphinx.decoder.Decoder.decode(Decoder.java:62)
at edu.cmu.sphinx.recognizer.Recognizer.recognize(Recognizer.java:109)
at edu.cmu.sphinx.recognizer.Recognizer.recognize(Recognizer.java:125)
at edu.cmu.sphinx.api.AbstractSpeechRecognizer.getResult(AbstractSpeechRecognizer.java:50)
at Main.main(Main.java:30)这是我正在运行的程序,正如官方网站上所说的:
import java.io.IOException;
import java.util.Scanner;
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.LiveSpeechRecognizer;
import edu.cmu.sphinx.api.SpeechResult;
public class Main {
public static void main(String[] args) {
Configuration configuration = new Configuration();
configuration
.setAcousticModelPath("Alphabets/tutorial/alphabets/model_parameters/alphabets.ci_cont");
configuration.setDictionaryPath("Alphabets/tutorial/alphabets/etc/alphabets.dic");
configuration
.setLanguageModelPath("Alphabets/tutorial/alphabets/etc/alphabets.lm.dmp");
LiveSpeechRecognizer recognizer = null;
try {
recognizer = new LiveSpeechRecognizer(configuration);
} catch (IOException e) {
e.printStackTrace();
}
recognizer.startRecognition(true);
SpeechResult result = recognizer.getResult();
recognizer.stopRecognition();
System.out.println(result.getHypothesis());
result.getLattice().dumpDot("lattice.dot", "lattice");
}
}非常感谢您的帮助!
发布于 2014-09-08 03:48:05
您的语言模型/Alphabets/tutorial/alphabets/etc/alphabets.lm.dmp是text arpa格式,但您向其添加了dmp扩展名。此手动编辑会混淆识别器。要解决此问题,请将alphabets.lm.dmp重命名为不带dmp扩展名的alphabets.lm,并在代码中编辑该名称。只需使用
configuration.setLanguageModelPath("Alphabets/tutorial/alphabets/etc/alphabets.lm");
你也没有足够的数据来训练模型,你的模型是不会工作的。有大量的数据用于训练是必须的。您可以在声学模型培训教程中找到详细信息
http://cmusphinx.sourceforge.net/wiki/tutorialam
https://stackoverflow.com/questions/25653146
复制相似问题