Эта статья была первоначально опубликована в моём (ныне закрытом) личном блоге
OpenVoiceOS (OVOS) — это управляемая сообществом платформа голосового ассистента с открытым исходным кодом. В этой статье рассматриваются плагины определения языка, перевода и двунаправленного перевода, которые я создал, чтобы OVOS мог работать на языках, далеко выходящих за пределы того, что нативно поддерживают установленные навыки.
Определение языка по аудио
OVOS определяет язык, на котором говорят в аудио, ещё до того, как оно попадает на этап транскрипции ASR, что позволяет плагину ASR транскрибировать точно, а не гадать. Для этого я создал несколько плагинов:
- ovos-audio-transformer-plugin-speechbrain-langdetect
- ovos-audio-transformer-plugin-speechflow-langdetect
- ovos-stt-plugin-fasterwhisper
Определение языка ограничено языками, перечисленными в вашей конфигурации OVOS — классификации за пределами этого набора отклоняются, поэтому вы случайно не переключитесь на язык, на котором никто в вашем доме не говорит.
{
"lang": "en-us",
"secondary_langs": ["pt-pt", "fr-fr"]
}
Конфигурация
Размер модели классификатора языка FasterWhisper можно настроить:
"listener": {
"audio_transformers": {
"ovos-audio-transformer-plugin-fasterwhisper": {
"model": "small"
}
}
}
Перевод текста между языками
No Language Left Behind (NLLB) — это модель Meta с открытым исходным кодом для высококачественного прямого перевода между 200 языками, включая малоресурсные языки, такие как астурийский, луганда и урду. Именно это название вдохновило данную статью.
Плагин ovos-translate-plugin-nllb запускает NLLB локально внутри OVOS. Навыки медленно обретают полную нативную поддержку языков, но с этим плагином пользователям больше не нужно ждать — OVOS переводит входящие высказывания и исходящие ответы на лету, так что любой навык работает на любом из этих 200 языков.
Для менее мощного оборудования плагин ovos-translate-server-plugin переносит перевод на удалённый сервер. Публичные серверы перечислены «из коробки»; для конфиденциальности настоятельно рекомендуется собственный хостинг. Использование публичного сервера означает доверие всех ваших высказываний его оператору.
Заслуживающие внимания плагины перевода:
Конфигурация
"language": {
"detection_module": "ovos-lang-detect-ngram-lm",
"translation_module": "ovos-translate-plugin-nllb",
"ovos-translate-plugin-nllb": {
"model": "nllb-200_600M_int8"
}
}
Плагин двунаправленного перевода OVOS
Плагин двунаправленного перевода OVOS связывает определение и перевод двумя этапами конвейера: Utterance Transformer (переводит входящий текст на настроенный язык OVOS) и Dialog Transformer (переводит ответ обратно на исходный язык пользователя).
Необязательный режим verify_lang перекрёстно проверяет определённый язык текста относительно языка сессии — полезно на чат-платформах, где один экземпляр OVOS обслуживает многоязычных пользователей. Требует модуля определения языка, настроенного в language.detection_module, и плагина перевода (ovos-translate-plugin-nllb для локального или ovos-translate-server-plugin для удалённого).
Конфигурация
"utterance_transformers": {
"ovos-utterance-translation-plugin": {
"bidirectional": true,
"verify_lang": false,
"ignore_invalid_langs": true,
"translate_secondary_langs": true
}
},
"dialog_transformers": {
"ovos-dialog-translation-plugin": {}
}
Как всё работает вместе
Каждый компонент полезен сам по себе, но они аккуратно объединяются:
- Определение языка по аудио — сообщает плагину ASR, какой язык транскрибировать.
- Перевод высказывания — преобразует ненативные высказывания на настроенный язык ассистента перед сопоставлением навыков.
- Перевод диалога — переводит ответ ассистента обратно на язык пользователя перед TTS.
В результате OVOS способен обрабатывать любой из 200 языков NLLB от начала до конца без необходимости перевода самих навыков.
Вклад и переводы навыков приветствуются на OpenVoiceOS в GitHub.