Cmusphinx Испанская модель бессвязной транскрипции

Я установил pocketsphinx на свой ноутбук (Linux Mint 17), чтобы преобразовать аудиофайл WAV в текст. Звуки на испанском языке, поэтому я загрузил испанскую модель Voxforge 0.2 с его веб-сайта и скопировал-вставил-адаптировал следующий код:

#include <pocketsphinx.h>

int main(int argc, char *argv[])
{
   ps_decoder_t *ps;
   cmd_ln_t *config;
   FILE *fh;
   char const *hyp, *uttid;
   int16 buf[512];
   int rv;
   int32 score;

   if( argc == 2 ) 
   {
      printf("Transcribiendo fichero: %s\n", argv[1]);
   }
   else if( argc > 2 ) 
   {
      printf("Demasiados argumentos.\n");
   }
   else 
   {
      printf("Se esperaba un sólo argumento.\n");
   }
   config = cmd_ln_init(NULL, ps_args(), TRUE,
             "-hmm", "/home/<myuser>/software/voxforge-es/model_parameters/voxforge_es_sphinx.cd_ptm_3000",
             "-lm", "/home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.transcription.test.lm",
             "-dict", "/home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.dic",
             NULL);
   if (config == NULL) 
   {
      fprintf(stderr, "Failed to create config object, see log for details\n");
    return -1;
   }

   ps = ps_init(config);
   if (ps == NULL) 
   {
      fprintf(stderr, "Failed to create recognizer, see log for details\n");
      return -1;
   }

   fh = fopen(argv[1], "rb");
   if (fh == NULL) 
   {
      fprintf(stderr, "Unable to open input file.\n");
      return -1;
   }

   rv = ps_start_utt(ps);

   while (!feof(fh)) 
   {
      size_t nsamp;
      nsamp = fread(buf, 2, 512, fh);
      rv = ps_process_raw(ps, buf, nsamp, FALSE, FALSE);
   }

   rv = ps_end_utt(ps);
   hyp = ps_get_hyp(ps, &score);
   printf("Reconocido: %s\n", hyp);

   fclose(fh);
   ps_free(ps);
   cmd_ln_free_r(config);

   return 0;
}

Проблема в том, что файл WAV mono 16Khz дает странные результаты. Я хочу знать, нужно ли мне перестроить модель или настроить определенный параметр...

Например, рассматривая следующий текст:

"Hola soy ingeniero informático"

Я преобразовал его в файл WAV 16 кГц/16 бит/моно.

Запустив мой код, он дает такой вывод:

> ./nlptest voice.wav
"cola salir en y era de líneas"

Как видите, он полностью отличается от оригинала. Только слова «хола» и «кола» похожи по произношению (но совершенно разное значение).

Даже при использовании pocketsphinx_continuous результаты очень плохие (отличается только одним словом):

> pocketsphinx_continuous -hmm /home/<myuser>/software/voxforge-es/model_parameters/voxforge_es_sphinx.cd_ptm_3000 -lm /home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.transcription.test.lm -dict /home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.dic -infile voice.wav
"cola seguir en y era de líneas"

Спасибо за совет.


person cabreracanal    schedule 16.07.2016    source источник
comment
Сейчас я не уверен, возможно, я ошибаюсь, но я думаю, что Sphinx может очень хорошо переводить только слово в слово. Итак, попробуйте разделить wav на отдельные слова. Вы можете сделать это программно, ища мини-паузы между ними в аудио. Но я наверняка ошибаюсь. Хотя, вы можете попробовать это для пары слов, чтобы увидеть, будет ли это работать или нет.   -  person Dalen    schedule 16.07.2016
comment
@ Дален, ты не прав. Также обратите внимание, что в непрерывной речи между словами есть паузы.   -  person Nikolay Shmyrev    schedule 16.07.2016
comment
Ага, спасибо, я застрял в старых временах, когда Сфинкс был молодым. Если вы хотели сказать, что пауз нет, то это неправда. Здесь нет слышимых пауз, но существуют границы, которые можно найти с небольшой настройкой. И вы можете разделить большинство слов таким образом.   -  person Dalen    schedule 16.07.2016


Ответы (1)


Модель языка voxforge_es_sphinx.transcription.test.lm, которую вы используете, имеет в названии слово «тест», она предназначена только для целей тестирования. Вы можете скачать более продвинутую модель es-20k.lm.gz на нашем сайте здесь.

В целом наша испанская модель довольно проста и не очень точна, если вам нужна серьезная транскрипция, вам нужно приложить много усилий для ее расширения.

person Nikolay Shmyrev    schedule 16.07.2016
comment
Вау, теперь намного лучше. Там написано: привет, сой инженьера де ниньяс, в нем пропущено одно слово, и это звучит нелепо, но это намного лучше! Спасибо - person cabreracanal; 16.07.2016
comment
Дело в том, что мне не удалось найти моделей для испанского, кроме теста транскрипции от voxforge. Я удивлен нынешним состоянием модели испанского языка, который является третьим или вторым по распространенности языком в мире. Я надеюсь, что он продолжает улучшаться :) - person cabreracanal; 16.07.2016
comment
Он не декодирует informático, потому что это слово отсутствует в модельном словаре. Вы можете расширить модель, как описано в нашем руководстве. Работа над испанским идет не очень активно, потому что нам не хватает ресурсов, ваша помощь будет оценена по достоинству. - person Nikolay Shmyrev; 16.07.2016
comment
Ты прав. Я внимательно прочитаю ваш учебник и постараюсь сотрудничать. Спасибо еще раз - person cabreracanal; 17.07.2016
comment
Я только что загрузил обновленную модель, это немного точнее. - person Nikolay Shmyrev; 18.07.2016