Автоматичне створення анотацій для телефонних номерів, абревіатур і інших слів усного мовлення

вимоги

устаткування

Sphinx - дуже ресурсномістке додаток і вимагає сучасного і досить продуктивного обладнання. Для задовільної роботи програми потрібен досить багато оперативної пам'яті, тому рекомендується запускати Sphinx на ПК з процесором не молодший Intel® Pentium® 4 і мінімум з 1 ГБ оперативної пам'яті. У той же час обробка тексту є набагато менш ресурсномісткої операцією, тому можна спокійно запускати її паралельно з розпізнаванням мови на тому ж ПК без втрат в продуктивності для останньої.

Програмне забезпечення

Додатки, які будуть створені в ході даної статті, можна запускати на платформах Linux® або Microsoft® Windows®. Для Sphinx-4 потрібно остання версія JDK і Apache Ant для створення призначеного для користувача обробника граматики. Також знадобиться Perl і відповідні пошукові (lookup) модулі (вибираються на ваш розсуд). Посилання на додаткові відомості про згадані програмних пакетах, а також посилання, за якими можна завантажити ці пакети, див. Розділ Ресурси.

Установка Sphinx-4

В рамках проекту Sphinx створюються різні пакети для різних завдань розпізнавання мови. У цій статті використовується пакет Sphinx-4, найбільш зручний з останніх випусків для користувачів і розробників. Установка Sphinx-4 може здатися деяким складної, тому тут наведено основні кроки з інструкції по установці.

  1. Завантажте та розпакуйте Apache Ant.
  2. Завантажте та розпакуйте Sun JDK (на момент написання статті остання версія була 1.6.0_02).
  3. Завантажте та розпакуйте пакет з вихідним кодом Sphinx-4, так як ми будемо змінювати одну з демонстраційних програм, щоб вона відповідала нашим цілям.
  4. Встановіть змінні середовища за допомогою наступних команд:
    В ОС Windows може знадобитися встановити змінні середовища в оснащенні "Control Panel (Панель керування)> System (Система)> Advanced (Додатково)> Environment variables (Змінні середовища)".
  5. Перейдіть в каталог "sphinx4-beta", потім в підкаталог "lib".
  6. Активуйте бінарну ліцензію JSAPI, запустивши сценарій оболонки jsapi.sh. Sphinx-4 підтримує JSAPI з бінарної ліцензією, так що буде потрібно прийняти ліцензійну угоду.
  7. Може знадобитися встановити uudecode, щоб розпакувати компоненти, необхідні для JSAPI. У більшість дистрибутивів Linux включений пакет, так чи інакше містить uudecode, так що перевірте спочатку доступні пакети, якщо буде потрібно встановити uudecode. В ОС Windows двічі клацніть правою кнопкою миші файл jsapi.exe і прийміть ліцензійну угоду.
  8. Поверніться в кореневій каталог Sphinx4.
  9. Запустіть команду 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.

Малюнок 1. Скріншот аннотатора діалогів в терміналі на Vector Linux

Автоматичне створення анотацій для телефонних номерів, абревіатур і інших слів усного мовлення

Автоматичне створення анотацій для телефонних номерів, абревіатур і інших слів усного мовлення

Висновок, такі приклади

Ресурси для скачування

Схожі теми