Журнал «Компьютерра» №36 от 04 октября 2005 года
Шрифт:
Впрочем, синтез речи в нашей защите не нуждается. Это, пожалуй, самая состоявшаяся и распространенная из речевых технологий. Возможно, потому, что у нее самая долгая история.
Первые «говорящие машины» пытались делать еще в XII—XIII веках, однако в Европе тех времен подобная деятельность рассматривалась как еретическая, все опытные образцы безжалостно уничтожались, и ни одно достоверное описание подобной машины до наших дней не дожило. Тем не менее молва широко разнесла слухи об успешных экспериментах Альберта Великого и Роджера Бэкона, спровоцировав шутников всех мастей на создание фальшивых «говорящих голов». Чудесные устройства представляли собой хитроумные механизмы, «отвечающие» на вопросы слушателей (на самом деле, отвечал на вопросы человек, который был либо спрятан в самом устройстве,
В конце XVIII века конструкторы научились делать настоящие «говорящие машины», механически имитируя человеческий голосовой аппарат. Правда, считать издаваемые ими звуки «речью» можно с натяжкой. Так, представленные в 1770 году Санкт-Петербургской Академии резонаторы Кратценштайна могли произнести лишь пять гласных звуков. В арсенале построенной спустя двадцать лет машины фон Кемпелена было уже двадцать согласных, что теоретически позволяло оператору «произносить» целые фразы. Но вот понимал ли их кто-то, кроме изобретателя, — вопрос. По чертежам это не определишь, но достаточно сказать, что даже электронный синтезатор Voder, показанный на Нью-Йоркской торговой выставке 1939 года, «говорил» крайне невнятно (звуковые примеры можно послушать в сети: www.cs.indiana.edu/rhythmsp/aSa/parta.html.
Если оператор Voder’а должен был управлять устройством в реальном времени (что совсем не просто — на обучение операторов уходило несколько месяцев), то сегодняшние электронные системы синтеза речи в операторе не нуждаются, поскольку заняты чтением заранее подготовленных текстов. Их так и называют — системы TTS (text-to-speech).
В силу вышесказанного любая современная электронная система синтеза речи состоит из двух основных блоков. Первый отвечает за преобразование орфографического представления в фонетическое — ведь, как правило, слова пишутся не так, как слышатся, и больше того: зачастую прочтение того или иного слова регулируется не правилами языка, а сформировалось исторически (почти как в анекдоте про «вильку» и «тарельку», которые пишутся без мягкого знака и понять это невозможно, нужно запомнить). Кроме того, система осуществляет синтаксический (а иногда и семантический) анализ предложения для того, чтобы верно расставить интонационные акценты (просодическое оформление). В результате на выходе мы имеем подробнейшую инструкцию, как нужно читать предложение.
Описанное преобразование зависит в большей степени от языка и во всех системах реализуется примерно по одним и тем же принципам. А вот когда дело доходит непосредственно до синтеза речи, возможностей для маневра у разработчиков гораздо больше.
Как правило, современные системы синтеза не пытаются в духе ранних экспериментов воспроизвести работу голосового тракта человека. Выяснилось, что проще (и результат получается лучше) «собирать» речевые сообщения из предварительно записанных диктором фрагментов. Для некоторых применений нужен совсем небольшой (в несколько десятков слов) словарь, поэтому в качестве «кирпичиков» в таких системах используются отдельные слова и даже фразы (даже создание фонетического представления орфографического текста для таких систем необязательно — список фраз, которые они могут прочесть, невелик и зачастую достаточно однозначного сопоставления орфографического написания сохраненному в библиотеке сэмплу). Такие синтезаторы называются целостными. Системы, способные читать произвольные тексты, обычно являются компилятивными синтезаторами, то есть составляют из отдельных фрагментов нужные слова и собирают их в предложения.
Библиотека звуковых фрагментов составляется с помощью приглашенных дикторов, которые зачитывают специальным образом составленные тексты (главная задача при составлении таких текстов — охватить все возможные фонемы, которые встречаются в языке). Потом записи разбиваются на элементарные составляющие (иногда вручную, иногда автоматически — в этом случае необходим модуль распознавания речи), и каждому из фрагментов ставится в соответствие фонема.
Сложность реализации компилятивных синтезаторов заключается в том, что фонема — как любая абстракция — недостаточно полно описывает звуки, которые
Поэтому, строго говоря, записанные диктором сообщения обычно разбиваются не на фонемы, а на составляющие более низкого уровня (дифоны, аллофоны и т. д.), а помимо сопоставления отдельно взятого фрагмента фонеме в библиотеку записывается информация о сопутствующих коартикуляционных и просодических эффектах. Разработчиков интересует не только вхождение звука в ту или иную фонему, но и его громкость, длительность и высота, из-за чего количество помещенных в библиотеку «кирпичиков» намного превышает количество фонем (их в любом языке не больше нескольких десятков, а вхождений в хорошей библиотеке может быть несколько тысяч). Иногда, чтобы упростить разбиение и не раздувать библиотеку, реализацию просодических эффектов возлагают на DSP, но синтезированная таким способом речь звучит ненатурально, тогда как хорошие системы синтеза речи говорят «почти как люди».
В ранних системах синтеза нужные сэмплы выбирались с помощью предварительно описанных правил, но уже в 70-х гг. прошлого века повсеместно стали применяться более эффективные методы, позволяющие быстро отыскать нужный фрагмент. Но просто сложить вместе найденные сэмплы — мало. На месте склейки будут слышны явные артефакты, «бульканье». Поэтому перед тем, как выдать слушателю результат, система синтеза сглаживает переходы между различными фрагментами.
Если все сделано правильно, на выходе мы услышим слегка монотонную, но вполне внятную и интонационно размеченную речь. К сожалению, полностью избавиться от эффектов склейки удается не всегда, а машинные интонации — хотя формально придраться вроде бы и не к чему — отличаются от человеческих (наверное, слишком уж они правильные). Делают ли системы синтеза ошибки? Конечно, особенно на незнакомых словах (см. табл. 1). Но у людей довольно гибкая система восприятия, и в большинстве случаев мы способны сразу же догадаться, какое слово машина прочитала неправильно, так что подобные ошибки нельзя считать критичными.
Сверхзадачей систем синтеза речи является, конечно, речь, не отличимая на слух от человеческой. Возможно ли это в рамках используемых сегодня моделей? Справедливости ради, признаем, что единого мнения на этот счет нет, к тому же с каждым годом появляется все больше сомнений, что эта задача имеет какое-то практическое значение. Потребители хотят знать, когда они говорят с компьютером, а когда — с человеком. И легкий «нечеловеческий» акцент как безошибочный маркер их, по большому счету, вполне устраивает.
— Тихо — сказал Форд. — Послушай, это может быть важно.
— Ва… важно?
— Это вогонский капитан делает объявление с корабельного узла.
— Ты хочешь сказать, что так вогоны разговаривают?
— Слушай же!
— Но я не понимаю по-вогонски!
— Тебе и не надо. Просто засунь рыбку в ухо.
Ничего не слышу?
Он скажет: «До свидания!»
А слышится: «До здания!»
Он спросит: «Где галоши?»
А слышно: «Это лошадь?»
Казалось бы, если мы можем научить компьютер говорить, то с распознаванием речи никаких трудностей возникнуть не должно. В конце концов, все, что нам нужно, — произвести операции по синтезу речи в обратном порядке. Записать человеческую речь, автоматически разобрать ее на «кирпичики», свериться с базой сэмплов, подставить нужные фонемы, а потом собрать из фонем слова, расставив знаки препинания на основе анализа просодических эффектов. Делов-то.
Как бы не так! То есть в теории-то все верно, а вот на практике…