2015-03-27 7 views
0

Я создал систему распознавания рукописного ввода в Интернете с использованием моделей 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="&lt;sil&gt;"/> 
 
     <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>

ответ

0

Ну, вопросы производительности трудно чтобы обнаружить, вы можете сделать несколько вещей об этом:

1) Увеличьте луч, чтобы убедиться, что у вас нет вопросы об обрезке

2) Анализ ошибки слова. У вас есть в основном вставки или удаления или что. Какие слова чаще всего путают

3) Sphinx4 - распознаватель речи, он, например, автоматически добавляет наполнители в грамматику. Он также имеет петлю фонового шума в последних версиях. Убедитесь, что вы отключили их. Например, загрузчик Sphinx4 HTK ожидает определенных символов в модели.

4) Убедитесь, что извлечение вашей функции в s4 и HTK идентично.

+0

Спасибо за ваш ответ. Для ваших предложений: 1) Луч в моем случае не помогает. 3) Я поместил дополнительную информацию в свой оригинальный пост. Поскольку я не из речевого домена, я действительно не знаю, выполнила ли я правильную конфигурацию для своей системы. Было бы здорово, если бы вы могли посмотреть на config.xml. 4) Я использую те же функции и те же файлы .mfc для обеих систем. Фактически, когда я увеличиваю размер лексикона до 1000 слов, точность системы Sphinx-4 снизилась почти до 0%. Я подозреваю, что пропустил некоторые важные детали в части Сфинкса. – efb

+0

Вы не указали количество вставок и исключений. Одна вещь, которая определенно неверна, - wordInsertionPenalty, которая должна быть 0,2. Вторая вещь - ваш интерфейс, который должен содержать только streamHTKSource и ничего больше. –

+0

Добавление значения слова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