С эволюционной волной больших языковых моделей (LLM) появилось много новых интересных приложений. И что может быть лучше, чем использовать их, чтобы сделать мир лучше, по одной строке кода за раз. В этом блоге мы объясним, как мы использовали LLM для разработки голосового помощника, чтобы повысить инклюзивность приложения специальных возможностей.

Давайте немного вернемся назад и объясним контекст этого проекта, потому что ни одно великое изобретение никогда не делается в одиночку. Для этого проекта Dataroots сотрудничали с On Wheels и Amai! Флаандерен.

  • On Wheels — это специализированная организация, стремящаяся улучшить доступность городов, зданий и транспортных средств.

  • Амай! — это инициатива правительства Фландрии, направленная на то, чтобы вдохновлять, консультировать и расширять возможности граждан с помощью искусственного интеллекта в их повседневной жизни, уделяя особое внимание таким областям, как работа, климат, мобильность и здравоохранение.

Объединив усилия с On Wheels и Amai!, компания Dataroots запустила проект STOEP, что на фламандском означает «Slimme TOegankelijkheid & Empowerment voor Personen met een beperking», или по-английски «Smart Accessibility and Empowerment for Инвалиды». Эта инициатива предназначена для поддержки приложения On Wheels с использованием ИИ. В проекте STOEP мы работали над несколькими вариантами использования, но в этом блоге основное внимание уделяется голосовому помощнику, который мы разработали для приложения.

В некотором отношении приложение On Wheels копирует Google Maps: оно представляет пользователям карту различных мест, таких как рестораны, магазины и банки. Тем не менее, его уникальное преимущество заключается в обширной информации о доступности для этих мест, охватывающей такие аспекты, как ширина дверей, наличие пандусов, доступность туалетов и многое другое.

Первоначально приложение полагалось на ручной ввод данных пользователями через тактильный интерфейс, такой как клавиатура смартфона. Признавая потребность в более широкой инклюзивности, мы представили функцию голосового управления для пользователей, которые сталкиваются с проблемами набора текста или нарушениями зрения. Эта корректировка имеет решающее значение, поскольку эта группа пользователей может не иметь возможности использовать важную информацию о доступности и/или вносить в нее свой вклад. Предоставив новый голосовой интерфейс, мы открыли им двери для более полного участия.

Повышенная инклюзивность благодаря преобразованию речи в текст, НЛП с большими языковыми моделями и преобразованию текста в речь.

Чтобы создать отличный голосовой помощник, нам нужно, чтобы он слушал, понимал и отвечал, а также был устойчив к изменениям в среде прослушивания, корректировкам атрибутов доступности и естественным вариациям речи и контента. Вот почему мы используем три основные части: преобразование речи в текст (STT), обработку естественного языка (NLP) и преобразование текста в речь (TTS). Чтобы сделать все это экономичным способом, мы выбрали несколько отличных решений с открытым исходным кодом, где это возможно. Давайте поговорим о каждом.

  1. Преобразование речи в текст. Для преобразования аудио в текст мы выбрали Whisper, уважаемую модель STT с открытым исходным кодом. Эта адаптируемая модель обеспечивала надежную многоязычную транскрипцию текста, поддерживающую различные языки, включая английский, голландский, французский и немецкий. Примечательно, что Whisper прошел специальное обучение работе с обширными наборами данных, что позволяет ему эффективно справляться с различными акцентами, обрабатывать фоновый шум и обрабатывать техническую речь.
  2. Обработка естественного языка. Вместо того, чтобы полагаться на традиционные методы обнаружения ключевых слов или подобия текста, мы решили использовать огромную мощь больших языковых моделей, в частности управляемых сервисов LLM OpenAI. Вот где произошло настоящее волшебство, и вскоре мы углубимся в этот аспект.
  3. Преобразование текста в речь. Чтобы завершить разговорный цикл, мы использовали Coqui TTS, включающую ряд моделей с открытым исходным кодом на нескольких языках, включая английский, голландский, французский, и немецкий.

В нашем проекте большое внимание уделялось компоненту NLP, что способствовало ответственному и эффективному использованию LLM. Что касается аспекта TTS, им обычно управляет мобильное устройство конечного пользователя. Скорее всего, в окончательном приложении эта функция не будет зависеть от стороннего сервиса, чтобы свести к минимуму задержку ответа для пользователя. Вместо этого мобильное устройство будет использовать свой встроенный механизм преобразования текста в речь, чтобы обеспечить голосовую обратную связь, более точно согласовываясь с опытом, с которым уже знакомы люди с нарушениями зрения. Такой подход обеспечивает более плавное и интуитивно понятное взаимодействие для всех пользователей.

Создание современных интерфейсов на естественном языке с LLM за дни, а не годы

Создание обычного конвейера НЛП (т. е. до LLM) требует ввода текстового ввода и получения соответствующего вывода и требует комплексного подхода. Обычно это включает в себя такие этапы, как сбор данных, маркировка, курирование, обучение и тонкая настройка модели. Только после этих шагов мы сможем получить модель, удовлетворяющую требованиям минимально жизнеспособного продукта (MVP). Тем не менее, часто еще предстоит пройти значительный путь, чтобы улучшить производительность модели в различных областях, чтобы достичь минимально приятного продукта (MLP), не говоря уже об управлении соответствием требованиям и рисками.

С LLM большая часть этого процесса, вплоть до развертывания модели, может быть значительно упрощена. Суть задачи состоит в том, чтобы последовательно структурировать бизнес-логику, интегрировать ее в подсказку и затем протестировать с пользователями. Самая серьезная проблема с LLM заключается в их разумном и ответственном внедрении, а это означает, что нам необходимо изучить контекст, в котором будет использоваться ИИ, и потенциальное влияние, которое он может оказать на свою функцию.

Для нашего конкретного случая использования нам нужно было извлечь данные доступности о местоположении из расшифрованного текстового ввода (выход из речевого ввода пользователя в интерфейс STT, Whisper). Сюда входят размеры, адреса, наличие туалетов, наличие пандусов для преодоления ступенек и прочее. Мы искали подход, который мог бы обрабатывать разные языки, различные стили формулировок и базовую математическую логику, такую ​​как преобразование сантиметров в метры или суммирование общей высоты ступеней.

В поисках идеального решения мы протестировали несколько моделей с открытым исходным кодом. Однако ни один из них не предлагал такого соотношения цены и качества, которое мы нашли с ChatGPT. Эта модель продемонстрировала впечатляющую гибкость в управлении различными языками и стилями формулировок. Ему даже удалось сохранить контекст, когда несколько языков использовались вместе. Хотя ChatGPT иногда нуждался в руководстве, он уже показал себя на удивление хорошо, проложив нам путь к реализации наших амбиций по повышению инклюзивности приложения On Wheels.

Управление рисками в приложениях LLM с помощью Guardrails

Настоящая проблема с LLM заключается в соблюдении требований и управлении рисками. В качестве защиты модели и способа ее управления мы ввели в уравнение Ограничители, позволяющие ограничить функциональность модели и схему вывода, придерживаясь динамического вывода JSON, содержащего все основные переменные.

Пример ввода

<rail version="0.1">    
    <output>
        <string 
                name="text" 
                description="The generated text" 
                format="two-words" 
                on-fail-two-words="reask"/>
        <float 
                name="score" 
                description="The score of the generated text" 
                format="min-val: 0" on-fail-min-val="fix"/>
        <object 
                name="metadata" 
                description="The metadata associated with the text">
                <string 
                        name="key_1" 
                        description="description of key_1" />
            ...
        </object>
    </output>
</rail>

Пример вывода

{
    "text": "string output",
    "score": 0.0,
    "metadata": {
        "key_1": "string",
        ...
    }
}

Guardrails предлагает способ проинструктировать модель и определить ее поведение в отношении единиц измерения, переменных форматов и обработки отсутствующей информации. Для каждой переменной мы можем указать ее имя, ее тип (строка, целое число, логическое значение, …) и описание. Пакет Guardrails также позволяет нам предоставлять переменные выбора, которые ограничены определенным списком параметров. Кроме того, мы можем создать вложенную схему переменных, которая позволяет нам хранить только определенную информацию, если она уместна. Например, мы спрашиваем доступность туалета только в том случае, если пользователь указывает, что в этом месте есть туалет. Затем мы можем определить валидаторы и проинструктировать пакет о том, что ему нужно делать, если LLM заполнит переменную недопустимым. Мы можем указать ему повторно запросить LLM, отфильтровать переменную или исправить саму переменную.

Guardrails является модульным и предоставляет журналы для отслеживания взаимодействия между Guardrails и LLM. Все функции проверки и повторного запроса выполняются Guardrails из коробки. Нам нужно только предоставить пользовательский ввод и определить схему и инструкцию. Пакет справится со всем остальным сзади. Мы уверены, что каждый результат, который мы получаем, соответствует нашим требованиям. В заключение, Guardrails позволяет нам контролировать вывод модели и снижать риск получения нежелательных результатов.

Поток разговора между пользователем и ИИ

Таким образом, для каждого ввода пользователя мы получаем вывод LLM в формате JSON с помощью Guardrails. Теперь, если мы хотим добавить в этот JSON и заполнить всю анкету, нам нужно попросить пользователя предоставить всю информацию, которую он пропустил. Для этого мы создали небольшое дополнение к Guardrails, чтобы проверять, какая информация отсутствует во вводимых пользователем данных, и задавать соответствующие уточняющие вопросы. Затем ответ пользователя снова обрабатывается Guardrails и LLM для добавления новой переменной в JSON. Все заполненные переменные сохраняются в памяти чат-бота. В конце концов, мы получаем полный список переменных, которые можно отправить в серверную часть приложения On Wheels. Этот цикл более четко визуализируется на рисунке ниже:

Пример

Для иллюстрации использования голосового помощника покажем транскрипцию разговора с ним (все в этом разговоре выдумано, служит чисто для примера):

Чат-бот: Привет, добро пожаловать! Пожалуйста, дайте мне некоторую информацию о местоположении, которое вы хотите добавить. Это может быть информация о назначении здания, адресе, подъезде или туалете.

Человек: Привет, я стою перед рестораном Jam. Het ресторан bevindt zich op de bondgenotenlaan в Левене. Перед дверью три ступеньки. В общей сложности эти ступени имеют высоту 55 сантиметров. Ширина двери входа составляет 2 метра и 50 сантиметров. На первом этаже есть туалет. Ширина двери 1 метр 50.

Чат-бот: Какую еду здесь продают? Выберите один из вариантов: африканский, азиатский, десертная выпечка, картофель фри по-бельгийски, средиземноморский, ближневосточный или западный. Есть ли в ресторане веганские блюда? Есть ли в ресторане вегетарианские блюда?

Человек: Ресторан в основном продает блюда японской кухни. Есть варианты для веганов и вегетарианцев.

Чат-бот: какой у места адрес электронной почты? Какой номер улицы в этом месте? Каков почтовый индекс адреса?

Из этого короткого разговора чат-бот выводит следующий список переменных:

  • Название: «Джем»
  • Категория: ресторан
  • Тип кухни: Азиатская
  • Веган: правда
  • Вегетарианец: правда
  • Адрес:
  • Улица: Бондгенотенлаан
  • Город: Левен
  • Вход:
  • Ширина двери: 250 сантиметров
  • Шаги: 3
  • Общая высота: 55 сантиметров
  • Туалет: Правда
  • Расположение: цокольный этаж
  • Ширина двери: 150 сантиметров

Мы можем заметить некоторые интересные аспекты в обработке разговора голосовым помощником:

  1. Наш подход очень удобен и гибок. Голосовой помощник поручил нам классифицировать тип еды из фиксированного списка вариантов. Хотя мы этого не сделали и ответили «японец», LLM успешно классифицировал его как азиатский.
  2. Наш подход многоязычный и надежный. Мы указали адрес на голландском языке, но у LLM не было проблем с пониманием этого переключения языка и правильным извлечением адреса.
  3. Наш подход логичен. Некоторые размеры мы указали в метрах, а некоторые в сантиметрах. LLM легко преобразовал их все в сантиметры (что мы и хотели). LLM также задавал только соответствующие дополнительные вопросы для ресторанов, такие как тип еды и веганские варианты.

Примечание. Хотя креативность LLM часто полезна для интерпретации гибкого ввода пользователя, это также сопряжено с риском. Этот творческий подход позволяет внести предвзятость, поскольку некоторые крайние случаи могут неожиданным образом затронуть меньшинства, если вы увеличите масштаб. Поэтому рекомендуется соблюдать осторожность и провести всестороннее тестирование, прежде чем открыть это для широкой публики.

Заключение

В заключение мы создали голосового помощника, который превзошел все ожидания, используя готовые компоненты. Он оказался многоязычным, гибким, удобным для пользователя, легко расширяемым и надежным. Благодаря разумному сочетанию LLM с Guardrails мы смогли создать голосового помощника, который максимально использует преимущества LLM и сводит к минимуму риск нежелательного вывода. Поскольку LLM постоянно развиваются, возможности остаются безграничными. Наша работа, какой бы впечатляющей она ни была, — это только начало, поскольку такие усовершенствования, как вызов функций GPT-4, намекают на еще большие инновации.

По мере того, как вы погружаетесь в мир интеллектуальных агентов и запросов к данным, мы приглашаем вас узнать больше на веб-сайте Amai!, открыть для себя наш репозиторий GitHub с открытым исходным кодом и связаться с нами для получения дополнительной информации. Будущее доступности уже здесь, и мы очень рады быть частью этого пути. Оставайтесь с нами, чтобы узнать о еще более захватывающих разработках в области больших языковых моделей!

Вам также может понравиться

Подготовка данных для приложения вопросов и ответов на базе LLM — Андреа Беневенута

«Модели больших языков (LLM) недавно появились как новаторское достижение в области обработки естественного языка. Эти модели предназначены для понимания и создания текста, похожего на человеческий, и демонстрируют замечательную способность понимать контекст, грамматику и даже языковые нюансы. Один из…"

datarootsdataroots