вимоги
устаткування
Sphinx - дуже ресурсномістке додаток і вимагає сучасного і досить продуктивного обладнання. Для задовільної роботи програми потрібен досить багато оперативної пам'яті, тому рекомендується запускати Sphinx на ПК з процесором не молодший Intel® Pentium® 4 і мінімум з 1 ГБ оперативної пам'яті. У той же час обробка тексту є набагато менш ресурсномісткої операцією, тому можна спокійно запускати її паралельно з розпізнаванням мови на тому ж ПК без втрат в продуктивності для останньої.
Програмне забезпечення
Додатки, які будуть створені в ході даної статті, можна запускати на платформах Linux® або Microsoft® Windows®. Для Sphinx-4 потрібно остання версія JDK і Apache Ant для створення призначеного для користувача обробника граматики. Також знадобиться Perl і відповідні пошукові (lookup) модулі (вибираються на ваш розсуд). Посилання на додаткові відомості про згадані програмних пакетах, а також посилання, за якими можна завантажити ці пакети, див. Розділ Ресурси.
Установка Sphinx-4
В рамках проекту Sphinx створюються різні пакети для різних завдань розпізнавання мови. У цій статті використовується пакет Sphinx-4, найбільш зручний з останніх випусків для користувачів і розробників. Установка Sphinx-4 може здатися деяким складної, тому тут наведено основні кроки з інструкції по установці.
- Завантажте та розпакуйте Apache Ant.
- Завантажте та розпакуйте Sun JDK (на момент написання статті остання версія була 1.6.0_02).
- Завантажте та розпакуйте пакет з вихідним кодом Sphinx-4, так як ми будемо змінювати одну з демонстраційних програм, щоб вона відповідала нашим цілям.
- Встановіть змінні середовища за допомогою наступних команд:
В ОС Windows може знадобитися встановити змінні середовища в оснащенні "Control Panel (Панель керування)> System (Система)> Advanced (Додатково)> Environment variables (Змінні середовища)". - Перейдіть в каталог "sphinx4-beta", потім в підкаталог "lib".
- Активуйте бінарну ліцензію JSAPI, запустивши сценарій оболонки jsapi.sh. Sphinx-4 підтримує JSAPI з бінарної ліцензією, так що буде потрібно прийняти ліцензійну угоду.
- Може знадобитися встановити uudecode, щоб розпакувати компоненти, необхідні для JSAPI. У більшість дистрибутивів Linux включений пакет, так чи інакше містить uudecode, так що перевірте спочатку доступні пакети, якщо буде потрібно встановити uudecode. В ОС Windows двічі клацніть правою кнопкою миші файл jsapi.exe і прийміть ліцензійну угоду.
- Поверніться в кореневій каталог Sphinx4.
- Запустіть команду ant. повинен початися процес складання.
Повідомлення про стан "BUILD SUCCESSFUL" означає, що середовище успішно налаштована, і можна переходити до кроків модифікації. Якщо відобразиться інше повідомлення, перевірте каталог збірки і настройки змінних середовища або зверніться до інструкцій з Apache Ant і Sphinx-4 за більш докладними інструкціями по встановленню для вашої середовища.
Стратегія незалежного від диктора розпізнавання букв і чисел в мові
Завжди здається, що технології розпізнавання мови залишилося від 2 до 10 років до успішного незалежного від диктора розпізнавання великого словника мови. Анотувати розмова з безліччю голосів, з одночасною промовою, різними акцентами і численними технічними та розмовними виразами, - завдання майже нерозв'язна для будь-якого програмного забезпечення споживчого класу, доступного на ринку. Однак пакети Sphinx, і, зокрема, Sphinx-4, надають все необхідне опції, щоб достовірно розпізнати маленький (але тим не менш корисний) словник без прив'язки до диктора.
Ми вже визначили наш обмежений словник: літери англійського алфавіту A-Z і цифри 0-9. Наша стратегія - це просто виділяти будь-які області, де були вимовлені ці букви або цифри. Загальна назва такого підходу - виділення слів. Хоча в даний час Sphinx-4 не підтримує виділення слів, ми тим не менше можемо досягти корисних результатів, перевіряючи кожне промовлене звукосполучення на відповідність принаймні одному слову з граматики. Потім, маючи список найбільш підходящих букв і цифр, ми можемо застосувати стандартні інструменти обробки тексту і інформаційні довідники для вилучення корисної інформації.
Словник, модифікація прикладу "Hello World"
Створення файлу словника
На першому кроці створення механізму "виділення слів" ми створимо файл із заданим словником. У дереві директорій Sphinx-4 є директорія під назвою bld / models / edu / cmu / sphinx / model / acoustic / WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz / dict /. Тут містяться файли зі словниками під назвою alpha.dict і digit.dict. На перший погляд здається, що поєднання цих двох словників дасть бажаний файл. Це зовсім не так. Нам треба створити наші файли словника з файлу cmudict.0.6d в тій же директорії.
Заходимо в директорію bld / models / edu / cmu / sphinx / model / acoustic / WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz / dict / і застосовуємо наступні команди для створення бажаного файлу словника:
У лістингу 1 показаний створений файл alN.dict, вмістом якого є тільки букви і цифри.
Лістинг 1. Частина файлу alN.dict
Модифікації прикладу "Hello World"
Sphinx-4 надає безліч налаштувань, що дозволяють задовольнити практично будь-які вимоги в області розпізнавання мови. У нашому випадку найбільш ефективним підходом буде зміна існуючого прикладу "Hello World". У кореневій директорії Sphinx-4 заходимо в директорію demo / sphinx / helloworld і редагуємо файл helloworld.config.xml. У лістингу 2 показана єдиний рядок, яку потрібно змінити для використання файлу alN.dict, який ми створили.
Лістинг 2. Зміни в файлі helloworld.config.xml
Також треба змінити файл з граматикою hello.gram в тій же директорії. У лістингу 3 показані зміни, які потрібно внести, щоб збирати тільки букви і цифри з нашого файлу словника.
Лістинг 3. Зміни у файлі hello.gram
Нам також треба внести незначні зміни в файл HelloWorld.java, як показано нижче:
Лістинг 4. Зміни в файлі HelloWorld.java
Обробка тексту
Можливо, у вас навіть назріло питання: що заважає використовувати багатотисячний словник, щоб опрацювати ті самі неправильно розпізнані випадки? Зрештою, в Sphinx-4 доступні мовні моделі та великі словникові бази. Чому б просто не налаштувати демонстраційний приклад на розпізнавання решти пропозиції: "The phone number for tech support is", а також будь-яких інших слів, які можуть бути вимовлені?
Відповідь: Sphinx-4 - хороший додаток, але не ідеальне. Розширення файлу словника для розпізнавання сотень і тисяч слів різко знизить ефективність розпізнавання окремих цифр і букв. Переконатися в цьому можна, ознайомившись з іншими програмами в підкаталозі demo пакета Sphinx-4 або змінивши існуючі приклади, налаштувавши їх на використання великих файлів словників і розширених граматичних списків. Як виявляється, наступна обробка тексту, що складається тільки з букв і цифр, для пошуку даних більш високого рівня - набагато більш простий метод побудови працездатною і корисною системи анотування на основі доступних систем з відкритим вихідним кодом.
Лістинг 5. annotateAcrNum.pl частина 1 - основна логіка програми
Наведена вище основна логіка програми шукає послідовності букв і цифр, відповідних нашим простим критеріям. Для кожного рядка тексту з результатами розпізнавання мови зміненого коду "Hello World" програма будує окремо масиви букв і цифр. Пошук по масиву букв здійснює підпрограма acronymSearch, про яку ми розповімо нижче. Зверніть увагу, що масив букв зсувається після кожної була зустрінута абревіатури, щоб можна було знайти в рядку "i b m x" і "ibm", і "bmx". У масиві цифр ми такий зрушення не виконуємо, замість цього ми беремо довгі номери, які програма може знайти, і виконуємо пошук в Інтернеті.
Лістинг 6. annotateAcrNum.pl частина 2 - програма acronymSearch
Підпрограма acronymSearch використовує корисний модуль Net :: Dict. Ми просто задаємо сервер словників і запит на пошук у безлічі доступних баз даних. Регулярний вираз / (wn | vera | gazetteer | foldoc) / обмежує висновок тих баз даних, які дають відносно короткі описи. Можливо, ви виявите, що ваша сукупність абревіатур краще представлена в інших базах даних сайту dict.org - тоді це обмеження потрібно буде прибрати з регулярного виразу.
Лістинг 7. annotateAcrNum.pl частина 3 - phoneNmSearch
Тепер, маючи наш механізм розпізнавання мови на основі Sphinx-4 і Perl-програму annotateAcrNum, ми можемо починати анотувати розмовні діалоги. Запустіть аннотатор командою $ JAVA_HOME / bin / java -mx312m -jar bin / HelloWorld.jar | perl annotateAcrNum.pl (для Linux). Для Windows команда виглядає так: java -mx312m -jar bin / HelloWorld.jar | perl annotateAcrNum.pl.