2011-09-30 1 views
0

J'ai essayé d'utiliser HTk couplé avec sphinx4 pour une application de reconnaissance vocale. Je fournis mon entrée sous forme de fichier wav et j'utilise le sphinx fourni "Transcriber Demo" et le "Lattice Demo" mais la sortie était plutôt inacceptable. J'ai donc décidé d'introduire HTK avec Sphinx4. Mais la sortie résultante semble loin. Je suis sûr que la configuration peut être peaufinée plus loin que ce que je fais. J'ai bien cherché pour savoir s'il existe un tutoriel sur ny utilisant htk et sphinx4. En dehors de ce blog incroyable (http://nsh.nexiwave.com/2009/09/using-htk-models-in-sphinx4.html) je n'ai rien trouvé d'autre. Quelqu'un peut-il s'il vous plaît aidez-moi ici pour améliorer mon précision de reconnaissance ..en utilisant htk pour la reconnaissance de non-chiffre

Mon fichier de configuration est sphynx est la suivante:

<?xml version="1.0" encoding="UTF-8"?> 

<!-- 
    Sphinx-4 Configuration file 
--> 

<!-- ******************************************************** --> 
<!-- an4 configuration file        --> 
<!-- ******************************************************** --> 

<config>   

    <!-- ******************************************************** --> 
    <!-- frequently tuned properties        --> 
    <!-- ******************************************************** --> 

    <property name="logLevel" value="WARNING"/> 

    <property name="absoluteBeamWidth" value="-1"/> 
    <property name="relativeBeamWidth" value="1E-80"/> 
    <property name="wordInsertionProbability" value="1E-36"/> 
    <property name="languageWeight"  value="8"/> 

    <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> 
     </propertylist> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The Decoder configuration        --> 
    <!-- ******************************************************** --> 

    <component name="decoder" type="edu.cmu.sphinx.decoder.Decoder"> 
     <property name="searchManager" value="searchManager"/> 
    </component> 

    <!-- <component name="searchManager" 
     type="edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager"> 
     <property name="logMath" value="logMath"/> 
     <property name="linguist" value="lexTreeLinguist"/> 
     <property name="pruner" value="trivialPruner"/> 
     <property name="scorer" value="threadedScorer"/> 
     <property name="activeListFactory" value="activeList"/> 
    </component> 

     <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> 

    --> 

    <component name="searchManager" 
       type="edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager"> 
     <property name="logMath" value="logMath"/> 
     <property name="linguist" value="lexTreeLinguist"/> 
     <property name="pruner" value="trivialPruner"/> 
     <property name="scorer" value="threadedScorer"/> 
     <property name="activeListManager" value="activeListManager"/> 
     <property name="activeListFactory" value="activeList"/> 
     <property name="growSkipInterval" value="0"/> 
     <property name="checkStateOrder" value="false"/> 
     <property name="buildWordLattice" value="false"/> 
     <property name="acousticLookaheadFrames" value="1.7"/> 
     <property name="relativeBeamWidth" value="${relativeBeamWidth}"/> 
    </component> 


    <component name="trivialPruner" 
       type="edu.cmu.sphinx.decoder.pruner.SimplePruner"/> 

    <component name="threadedScorer" 
       type="edu.cmu.sphinx.decoder.scorer.ThreadedAcousticScorer"> 
     <property name="frontend" value="${frontend}"/> 
    </component> 

    <component name="activeListManager" 
      type="edu.cmu.sphinx.decoder.search.SimpleActiveListManager"> 
     <propertylist name="activeListFactories"> 
      <item>standardActiveListFactory</item> 
      <item>wordActiveListFactory</item> 
      <item>wordActiveListFactory</item> 
      <item>standardActiveListFactory</item> 
      <item>standardActiveListFactory</item> 
      <item>standardActiveListFactory</item> 
     </propertylist> 
    </component> 

    <component name="standardActiveListFactory" 
      type="edu.cmu.sphinx.decoder.search.PartitionActiveListFactory"> 
     <property name="logMath" value="logMath"/> 
     <property name="absoluteBeamWidth" value="${absoluteBeamWidth}"/> 
     <property name="relativeBeamWidth" value="${relativeBeamWidth}"/> 
    </component> 

    <component name="wordActiveListFactory" 
      type="edu.cmu.sphinx.decoder.search.PartitionActiveListFactory"> 
     <property name="logMath" value="logMath"/> 
     <property name="absoluteBeamWidth" value="${absoluteWordBeamWidth}"/> 
     <property name="relativeBeamWidth" value="${relativeWordBeamWidth}"/> 
    </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> 


    <!-- ******************************************************** --> 
    <!-- The Grammar configuration        --> 
    <!-- ******************************************************** --> 

    <component name="jsgfGrammar" type="edu.cmu.sphinx.jsgf.JSGFGrammar"> 
     <property name="dictionary" value="dictionary"/> 
     <property name="grammarLocation" 
      value="resource:/edu/cmu/sphinx/demo/transcriber/"/> 
     <property name="grammarName" value="digits"/> 
    <property name="logMath" value="logMath"/> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The Dictionary configuration    
     <component name="dictionary" 
     type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"> 
     <property name="dictionaryPath" 
        value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/> 
     <property name="fillerPath" 
       value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/noisedict"/> 
     <property name="addSilEndingPronunciation" value="false"/> 
     <property name="wordReplacement" value="&lt;sil&gt;"/> 
     <property name="unitManager" value="unitManager"/> 
    </component>    --> 
    <!-- ******************************************************** --> 



     <!-- ******************************************************** --> 
    <!-- The Dictionary configuration       --> 
    <!-- ******************************************************** --> 
    <component name="dictionary" 
     type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"> 
     <property name="dictionaryPath" 
        value="file:C:\Raveesh\Softwares\apache-tomcat-6.0.32\apache-tomcat-6.0.32\bin\models\language\wsj\5100.dic"/> 
     <property name="fillerPath" 
       value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/noisedict"/> 
     <property name="addSilEndingPronunciation" value="false"/> 
     <property name="wordReplacement" value="&lt;sil&gt;"/> 
     <property name="unitManager" value="unitManager"/> 
    </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"> 
     <property name="logMath" value="logMath"/> 
     <property name="modelDefinition" value="hmmdefs"/> 
     <property name="unitManager" value="unitManager"/> 
    </component> 

<!-- 

    <component name="wsjLoader" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader"> 
     <property name="logMath" value="logMath"/> 
     <property name="unitManager" value="unitManager"/> 
     <property name="location" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz"/> 
    </component> 

-->  

    <!-- ******************************************************** --> 
    <!-- The unit manager configuration       --> 
    <!-- ******************************************************** --> 

    <component name="unitManager" 
     type="edu.cmu.sphinx.linguist.acoustic.UnitManager"/> 

    <!-- ******************************************************** --> 
    <!-- The live 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> 
     </propertylist> 
    </component> 



--> 

<!-- the front end configuration using the HTK loader..  --> 

    <component name="epFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"> 
     <propertylist name="pipeline"> 
     <item>streamHTKSource</item> 
     </propertylist> 
    </component> 

    <component name="streamHTKSource" type="edu.cmu.sphinx.frontend.util.StreamHTKCepstrum"> 
     <property name="cepstrumLength" value="39"/> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The frontend pipelines         --> 
    <!-- ******************************************************** --> 

    <component name="audioFileDataSource" type="edu.cmu.sphinx.frontend.util.AudioFileDataSource"/> 

    <component name="dataBlocker" type="edu.cmu.sphinx.frontend.DataBlocker"/> 

    <component name="speechClassifier" type="edu.cmu.sphinx.frontend.endpoint.SpeechClassifier"/> 

    <component name="nonSpeechDataFilter" 
       type="edu.cmu.sphinx.frontend.endpoint.NonSpeechDataFilter"/> 

    <component name="speechMarker" type="edu.cmu.sphinx.frontend.endpoint.SpeechMarker" /> 

    <component name="preemphasizer" 
       type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/> 

    <component name="windower" 
       type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"> 
    </component> 

    <component name="fft" 
      type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform"> 
    </component> 

    <component name="melFilterBank" 
     type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"> 
    </component> 

    <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"/> 

       <!-- Newly Added.. --> 
    <component name="streamDataSource" 
     type="edu.cmu.sphinx.frontend.util.StreamDataSource"> 
     <property name="sampleRate" value="16000"/> 
     <property name="bigEndianData" value="false"/> 
    </component> 


    <!-- ******************************************************* --> 
    <!-- monitors            --> 
    <!-- ******************************************************* --> 

    <component name="accuracyTracker" 
       type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker"> 
     <property name="recognizer" value="${recognizer}"/> 
     <property name="showAlignedResults" value="true"/> 
     <property name="showRawResults" value="true"/> 
    </component> 

    <component name="memoryTracker" 
       type="edu.cmu.sphinx.instrumentation.MemoryTracker"> 
     <property name="recognizer" value="${recognizer}"/> 
    <property name="showSummary" value="false"/> 
    <property name="showDetails" value="false"/> 
    </component> 

    <component name="speedTracker" 
       type="edu.cmu.sphinx.instrumentation.SpeedTracker"> 
     <property name="recognizer" value="${recognizer}"/> 
     <property name="frontend" value="${frontend}"/> 
    <property name="showSummary" value="true"/> 
    <property name="showDetails" 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> 

    <!-- ******************************************************** --> 
    <!-- The linguist configuration        --> 
    <!-- ******************************************************** --> 

    <component name="lexTreeLinguist" 
       type="edu.cmu.sphinx.linguist.lextree.LexTreeLinguist"> 
     <property name="logMath" value="logMath"/> 
     <property name="acousticModel" value="wsj"/> 
     <property name="languageModel" value="trigramModel"/> 
     <property name="dictionary" value="dictionary"/> 
     <property name="addFillerWords" value="false"/> 
     <property name="fillerInsertionProbability" value="1E-10"/> 
     <property name="generateUnitStates" value="false"/> 
     <property name="wantUnigramSmear" value="true"/> 
     <property name="unigramSmearWeight" value="1"/> 
     <property name="wordInsertionProbability" 
       value="${wordInsertionProbability}"/> 
     <property name="silenceInsertionProbability" 
       value="${silenceInsertionProbability}"/> 
     <property name="languageWeight" value="${languageWeight}"/> 
     <property name="unitManager" value="unitManager"/> 
    </component>  

    <!-- ******************************************************** --> 
    <!-- The Language Model configuration       --> 
    <!-- ******************************************************** --> 
    <component name="trigramModel" 
     type="edu.cmu.sphinx.linguist.language.ngram.SimpleNGramModel"> 
     <property name="location" 
      value="file:C:\Raveesh\Softwares\apache-tomcat-6.0.32\apache-tomcat-6.0.32\bin\models\language\wsj\5100.lm"/> 
     <property name="logMath" value="logMath"/> 
     <property name="dictionary" value="dictionary"/> 
     <property name="maxDepth" value="3"/> 
     <property name="unigramWeight" value=".7"/> 
    </component>  
</config> 

Toute aide serait vraiment apprécié

Répondre

1

Décodage des flux audio avec Les modèles HTK ne sont pas encore pris en charge dans sphinx4. La configuration du frontal HTK doit être différente. Vous pouvez uniquement décoder les fichiers mfc extraits avec HTK comme décrit dans le blog. Les détails sur les problèmes de frontend sont également décrits dans les commentaires du blog.

+0

oui, j'ai lu à ce sujet dans le blog. Actuellement, je suis à la recherche de l'amélioration de la performance sphinx4. mais je ne peux pas sembler frapper le clou sur la tête du tout. Supposons que je décide de laisser tomber HTK. Pourriez-vous suggérer des améliorations au fichier de configuration Sphinc seul? J'ai récemment commencé à jouer autour de la largeur du faisceau .. va vérifier et voir ce que cela signifie .. merci pour la réponse. –

+0

J'ai vérifié toutes les stratégies de performance mentionnées dans http://cmusphinx.sourceforge.net/wiki/sphinx4:largevocabularyperformanceoptimization Mais elles ne sont pas capables de donner de bons résultats de reconnaissance pour la démo du transcripteur. Toute aide sur l'approche à prendre? –

+0

Bonjour Raveesh. L'amélioration des performances est une tâche complexe avec plusieurs approches possibles à tester. La première chose à comprendre est votre performance actuelle. Le réglage des faisceaux est en quelque sorte insensé si vous n'avez pas une base de données de test appropriée et une estimation de la précision ainsi que l'analyse de la performance actuelle. Une fois que vous aurez le test, vous pouvez le partager sur le forum de sourceforge de cmusphinx pour obtenir le conseil de performance. Voir aussi l'entrée FAQ: http://cmusphinx.sourceforge.net/wiki/faq#qwhy_my_accuracy_is_poor –

Questions connexes