Я создал систему распознавания рукописного ввода в Интернете с использованием моделей Sphinx-4 и HTK вместе. Когда я использую собственную систему декодирования системы HTK, она составляет 89%. Однако система Sphinx-4 с той же моделью HTK достигает чуть более 50%.Sphinx-4 с характеристикой распознавания модели HTK
Это нормально? Есть ли место для улучшения точности Sphinx-4 с моделью HTK?
Благодаря
Дополнительная информация:
Я построил систему Sphinx-4, используя в качестве примера LatticeDemo и следуют шаги в [http://nshmyrev.blogspot.com.tr/2009/09/using-htk-models-in-sphinx4.html]. Конфигурационный файл системы HTK, как следующее:
TARGETKIND = MFCC
TARGETRATE = 1
NUMCEPS = 12
ENORMALISE = F
NATURALBYTEORDER = TRUE
NONUMESCAPES = TRUE
Config.xml, Сфинкса-4 является следующее:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ******************************************************** -->
<!-- biship configuration file -->
<!-- ******************************************************** -->
<config>
<!-- ******************************************************** -->
<!-- frequently tuned properties -->
<!-- ******************************************************** -->
<property name="absoluteBeamWidth" value="0"/>
<property name="relativeBeamWidth" value="1E-50"/>
<property name="absoluteWordBeamWidth" value="20"/>
<property name="relativeWordBeamWidth" value="1E-60"/>
<property name="wordInsertionProbability" value="1E-16"/>
<property name="languageWeight" value="15"/>
<property name="silenceInsertionProbability" value=".0"/>
<property name="frontend" value="epFrontEnd"/>
<property name="recognizer" value="recognizer"/>
<property name="showCreations" value="false"/>
<!-- ******************************************************** -->
<!-- word recognizer configuration -->
<!-- ******************************************************** -->
<component name="recognizer" type="edu.cmu.sphinx.recognizer.Recognizer">
<property name="decoder" value="decoder"/>
<propertylist name="monitors">
<item>accuracyTracker </item>
<item>speedTracker </item>
<item>memoryTracker </item>
<item>recognizerMonitor </item>
</propertylist>
</component>
<!-- ******************************************************** -->
<!-- The Decoder configuration -->
<!-- ******************************************************** -->
<component name="decoder" type="edu.cmu.sphinx.decoder.Decoder">
<property name="searchManager" value="searchManager"/>
<property name=" " value="50"/> -->
</component>
<!-- ******************************************************** -->
<!-- The Search Manager -->
<!-- ******************************************************** -->
<component name="searchManager"
type="edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager">
<property name="logMath" value="logMath"/>
<property name="linguist" value="flatLinguist"/>
<property name="pruner" value="trivialPruner"/>
<property name="scorer" value="threadedScorer"/>
<property name="activeListFactory" value="activeList"/>
</component>
<!-- ******************************************************** -->
<!-- The Active Lists -->
<!-- ******************************************************** -->
<component name="activeList"
type="edu.cmu.sphinx.decoder.search.PartitionActiveListFactory">
<property name="logMath" value="logMath"/>
<property name="absoluteBeamWidth" value="${absoluteBeamWidth}"/>
<property name="relativeBeamWidth" value="${relativeBeamWidth}"/>
</component>
<!-- ******************************************************** -->
<!-- The Pruner -->
<!-- ******************************************************** -->
<component name="trivialPruner"
type="edu.cmu.sphinx.decoder.pruner.SimplePruner"/>
<!-- ******************************************************** -->
<!-- TheScorer -->
<!-- ******************************************************** -->
<component name="threadedScorer" type="edu.cmu.sphinx.decoder.scorer.ThreadedAcousticScorer">
<property name="frontend" value="${frontend}"/>
</component>
<!-- ******************************************************** -->
<!-- The linguist configuration -->
<!-- ******************************************************** -->
<component name="flatLinguist" type="edu.cmu.sphinx.linguist.flat.FlatLinguist">
<property name="logMath" value="logMath"/>
<property name="grammar" value="jsgfGrammar"/>
<property name="acousticModel" value="wsj"/>
<property name="wordInsertionProbability" value="${wordInsertionProbability}"/>
<property name="languageWeight" value="${languageWeight}"/>
<property name="unitManager" value="unitManager"/>
</component>
<component name="jsgfGrammar" type="edu.cmu.sphinx.jsgf.JSGFGrammar">
<property name="grammarLocation" value="/home/efbilgin/HMM-Exp/HTK-9_Feats_5v/sphinx/"/>
<property name="dictionary" value="dictionary"/>
<property name="grammarName" value="word"/>
\t <property name="logMath" value="logMath"/>
\t <property name="addSilenceWords" value="false"/>
<property name="addFillerWords" value="false"/>
</component>
<!-- ******************************************************** -->
<!-- The Dictionary configuration -->
<!-- ******************************************************** -->
<component name="dictionary"
type="edu.cmu.sphinx.linguist.dictionary.FastDictionary">
<property name="dictionaryPath" value="/home/efbilgin/HMM-Exp/HTK-9_Feats_5v/sphinx/7266.dic"/>
<property name="fillerPath" value="home/efbilgin/HMM-Exp/HTK-9_Feats_5v/sphinx/7266.filler"/>
<property name="addSilEndingPronunciation" value="false"/>
<property name="wordReplacement" value="<sil>"/>
<property name="allowMissingWords" value="true"/>
</component>
<!-- ******************************************************** -->
<!-- The acoustic model configuration -->
<!-- ******************************************************** -->
<component name="wsj" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.TiedStateAcousticModel">
<property name="loader" value="wsjLoader"/>
<property name="unitManager" value="unitManager"/>
</component>
<component name="wsjLoader" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.HTKLoader"> <!--Sphinx3Loader">-->
<property name="logMath" value="logMath"/>
<property name="unitManager" value="unitManager"/>
<property name="modelDefinition" value="/home/efbilgin/HMM-Exp/UNIPEN_1000_10_Eq_J-1/hmm7/hmmdefs"/>
</component>
<!-- ******************************************************** -->
<!-- The unit manager configuration -->
<!-- ******************************************************** -->
<component name="unitManager"
type="edu.cmu.sphinx.linguist.acoustic.UnitManager"/>
<!-- ******************************************************** -->
<!-- The frontend configuration -->
<!-- ******************************************************** -->
<component name="epFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
<propertylist name="pipeline">
<item>audioFileDataSource </item>
<item>dataBlocker </item>
<item>speechClassifier </item>
<item>speechMarker </item>
<item>nonSpeechDataFilter </item>
<item>preemphasizer </item>
<item>windower </item>
<item>fft </item>
<item>melFilterBank </item>
<item>dct </item>
<item>liveCMN </item>
<item>featureExtraction </item>
<item>streamHTKSource</item>
</propertylist>
</component>
\t <component name="streamHTKSource" type="edu.cmu.sphinx.frontend.util.StreamHTKCepstrum">
\t <property name="cepstrumLength" value="39"/>
\t </component>
<component name="audioFileDataSource" type="edu.cmu.sphinx.frontend.util.AudioFileDataSource"/>
<component name="microphone" type="edu.cmu.sphinx.frontend.util.Microphone">
\t \t <property name="closeBetweenUtterances" value="false"/>
</component>
<component name="dataBlocker" type="edu.cmu.sphinx.frontend.DataBlocker"/>
<component name="speechClassifier" type="edu.cmu.sphinx.frontend.endpoint.SpeechClassifier">
<property name="threshold" value="1"/>
</component>
<component name="nonSpeechDataFilter" type="edu.cmu.sphinx.frontend.endpoint.NonSpeechDataFilter"/>
<component name="speechMarker" type="edu.cmu.sphinx.frontend.endpoint.SpeechMarker">
<property name="speechTrailer" value="50"/>
</component>
<component name="preemphasizer" type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/>
<component name="windower" type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"/>
<component name="fft" type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform"/>
<component name="melFilterBank" type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"/>
<component name="dct" type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/>
<component name="liveCMN" type="edu.cmu.sphinx.frontend.feature.LiveCMN"/>
<component name="featureExtraction" type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/>
<!-- ******************************************************* -->
<!-- monitors -->
<!-- ******************************************************* -->
<component name="accuracyTracker" type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker">
<property name="recognizer" value="${recognizer}"/>
<property name="showRawResults" value="false"/>
<property name="showAlignedResults" value="false"/>
</component>
<component name="memoryTracker" type="edu.cmu.sphinx.instrumentation.MemoryTracker">
<property name="recognizer" value="${recognizer}"/>
\t <property name="showDetails" value="false"/>
\t <property name="showSummary" value="false"/>
</component>
<component name="speedTracker" type="edu.cmu.sphinx.instrumentation.SpeedTracker">
<property name="recognizer" value="${recognizer}"/>
<property name="frontend" value="${frontend}"/>
\t <property name="showDetails" value="false"/>
</component>
<component name="recognizerMonitor" type="edu.cmu.sphinx.instrumentation.RecognizerMonitor">
<property name="recognizer" value="${recognizer}"/>
<propertylist name="allocatedMonitors">
<item>configMonitor </item>
</propertylist>
</component>
<component name="configMonitor" type="edu.cmu.sphinx.instrumentation.ConfigMonitor">
<property name="showConfig" value="false"/>
</component>
<!-- ******************************************************* -->
<!-- Miscellaneous components -->
<!-- ******************************************************* -->
<component name="logMath" type="edu.cmu.sphinx.util.LogMath">
<property name="logBase" value="1.0001"/>
<property name="useAddTable" value="true"/>
</component>
</config>
Спасибо за ваш ответ. Для ваших предложений: 1) Луч в моем случае не помогает. 3) Я поместил дополнительную информацию в свой оригинальный пост. Поскольку я не из речевого домена, я действительно не знаю, выполнила ли я правильную конфигурацию для своей системы. Было бы здорово, если бы вы могли посмотреть на config.xml. 4) Я использую те же функции и те же файлы .mfc для обеих систем. Фактически, когда я увеличиваю размер лексикона до 1000 слов, точность системы Sphinx-4 снизилась почти до 0%. Я подозреваю, что пропустил некоторые важные детали в части Сфинкса. – efb
Вы не указали количество вставок и исключений. Одна вещь, которая определенно неверна, - wordInsertionPenalty, которая должна быть 0,2. Вторая вещь - ваш интерфейс, который должен содержать только streamHTKSource и ничего больше. –
Добавление значения словаInsertionPenalty как 0,2 и очистка интерфейса от ненужных частей, я запускаю другой процесс декодирования, а вот статистика вставки, удаления и т. Д., Которая ранее отсутствовала »Точность: 1.912% Ошибки: 2328 (Sub: 2308 Ins: 20 Del: 0) Words: 2353 Матчи: 45 WER: 98.938% Приговоры: 2353 Матчи: 45 SentenceAcc: 1.912% «Я вижу, что что-то не так, но не могу понять, что. Кстати, это изолированная задача распознавания слов с лексиконом 200 слов. – efb