Привет, Хабр! Меня зовут Даниил Трублаевич, я занимаюсь тестированием диалоговых систем в компании Just AI. Сегодня сложно отрицать, что боты, голосовые ассистенты и виртуальные помощники стали неотъемлемой частью нашей повседневной жизни. Но, чтобы эти системы были действительно эффективными, они должны не просто распознавать слова и фразы, но и корректно понимать их смысл в различных контекстах.

Пользователь может придумать различные фразы на основе своего опыта, которые бот не поймет или обработает некорректно. Как пример многообразия формулировок и различий в пользовательском опыте, можно привести диалекты: попробуйте ответить, что означает «виктория» в Нижегородской области или «мультифора» в Сибири? А если приправить контекст заимствованными словами зумеров: «кринж», «вайб», получится огромный датасет с наборами фраз, имеющих различный смысл в разных контекстах.  

Именно здесь и проявляется значимость тестирования NLU – Natural language understanding. Тестирование NLU – сложный процесс, так как невозможно точно определить границу полноты тестирования. Для этого и существуют некоторые лайфхаки – правила тестирования, о которых хочется поговорить в этой статье. Материалы разделены на два блока: личный опыт QA-инженера и тестирование при помощи нейросетей. 

Тестирование на личном опыте

Как правило, при тестировании NLU QA-инженер опирается на сценарий (дизайн) и на входе имеет: тематику, список вопросов/фраз активаторов для попадания в тематику и ожидаемый ответ бота (реплика, переход, отправка письма и тд). 

Очевидно, что пользователь может задать вопрос по-разному, наша задача – научить бота распознавать как можно больше этих вариаций. Для тестирования необходимо максимально задействовать свой словарный запас, а также попробовать «представить» себя в роли другого человека: бабушки Нади из соседней парадной, инфлюенсера из модной кофейни или механика Валентина, который каждое предложение разбавляет нецензурной лексикой.

При тестировании можно опираться на следующие подсказки:

1) Выделите ключевые слова в намерении пользователя и подберите к ним синонимы с учетом тематики

Активировать: открыть, оформить, запустить, включить 

Пропуск: проходка, карта, удостоверение, пас 

2) Подумайте про разговорные формы слов. Общаясь с ботом, пользователи зачастую видоизменяют слова, заменяют их на разговорные варианты или используют заимствования, а также в текстовых ботах часто встречаются сокращения (кол-во и другие). 

Проверить баланс = Глянуть остаток 

Программу = софт 

Деньги = денюжку 

Помочь = хэлпануть  

3) Иногда бывает такое, что к некоторым словам невозможно подобрать синоним или сложно придумать такой, который не пересекался бы с другой тематикой. В таких случаях можно воспользоваться любым доступным словарем синонимов. 

4) Подумать варианты запроса пользователя может помочь текст ответа. Например, в ответе «Активировать корпоративный пропуск вы можете на нашем портале, на стойке информации в главном зале или через терминалы быстрого доступа». содержится информация о конкретных способах активации, и вопросы пользователя могут быть связаны именно с ними: 

- Можно ли активировать карту через терминал быстрого доступа?  

- Где в главном зале могу активировать карту? 

5) Создайте пул речевых оборотов, как пользователь может общаться:

- Сразу переходя к сути: Где... / Как... / Каким образом... 

- В деловом стиле: Подскажите, как... 

- Высказывая свою потребность: Хочу... / Мне необходимо... 

- Описывая ситуацию: Такая ситуация… 

- Прося о помощи: Я не могу понять... / Помогите оплатить... 

- Обращаясь к кому-то: У кого.../ К кому... 

- Ожидая: Жду.../ Когда... 

- Спрашивая о возможности: Можно ли... 

6) Не забывайте учитывать различные варианты распознавания слов/фраз. Голосовые боты работают с системой распознавания речи (ASR – Automatic Speech Recognition), бывают разные обстоятельства или помехи на линии, при которых речь пользователя распознается не в точности. При ручном тестировании фиксируются варианты неправильного распознавания и, если они частотные или не мешают логике, то они добавляются в проверку.

Активировать = форматировать  

Карту = кофту 

СМС = сосед 

7) Учитывайте типичные дефекты, которые часто повторяются в ботах. Например, такие фразы, как «Пока да» или «Пока не решил», бот может соотнести с тематикой Прощания по ключевому слову «Пока». Вариант отказа «Да нет наверное» или фразу «можно узнать» иногда некорректно направляет в Согласие. На вопросы «Вы готовы пройти небольшой опрос?» или «Ну что, начинаем играть?» бот часто не распознает в качестве согласия «готов» или «начинаем». Такие и подобные фразы необходимо добавлять в проверки, основываясь на реальных пользовательских запросах и их контексту. 

8) Сформулируйте пользовательские вопросы на основе комбинации различных вариаций из прошлых пунктов. Для тестирования хватит около 15 разнообразных фраз

Стоит сказать, что при сборе тестовых фраз полностью покрыть все кейсы не получится. Язык настолько богат словами и словообразованиями, неологизмами, что предусмотреть все их невозможно. Не надо отчаиваться, если при тестировании было подобрано 20 синонимов, а пользователь придумал 21. Необходимо расслабиться и спокойно обучить NLU понимать различные нетривиальные фразы. 

Тестирование с помощью нейросетей

Ни для кого не секрет, что прорыв последних двух лет – это релиз ChatGPT и схожих с ним языковых моделей, которые способны генерировать разнообразные тематические тексты меньше, чем за пару секунд. Для многих сфер эта возможность стала спасителем от рутинных дел или вдохновением в монотонной работе. Так почему не воспользоваться таким шансом и не применить эту технологию при тестировании NLU.  

Мы работаем с инструментом Jay Copilot, потому что там на выбор есть несколько самых популярных нейросетей, в том числе российских. Ни для кого не секрет, что, например, YaGPT справляется с генерацией текстов на русском иногда лучше, чем ChatGPT.

На разных кейсах было опробовано несколько методов, благодаря которым можно облегчить жизнь при тестировании NLU: 

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

Придумай 5 синонимичных фраз к вопросу «как активировать пропуск?» 

  • Вариант от обратного, где на основе имеющегося ответа можно попросить сгенерировать пользовательские запросы

На основе этого ответа «Активировать корпоративный пропуск вы можете на нашем портале, через стойку информации в главном зале или через терминалы быстрого доступа» придумай 5 вопросов 

  • Дайте нейросети больше контекста для проявление своей фантазии, попросите ее представиться кем-то другим в определенной ситуации. 

Ты новый сотрудник крупной компании и сейчас ты разговариваешь с голосовым помощником по телефону. Тебе необходимо активировать пропуск, но ты первый раз в офисе и не знаешь его устройство. Напиши 5 вопросов, которые ты задашь боту, чтобы узнать, как активировать пропуск. Сделай реплики в разговорном стиле, используй междометия 

В рамках генерации вопросов в определенном контексте можно также задать стиль речь, региональные особенности, использование жаргонизмов и заимствованных слов. 

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

Тестировать до посинения

В заключение хочется сказать, что тестирование понимания естественного языка сложный и разносторонний процесс. При создании тестового набора фраз необходимо учитывать в каком контексте будет использоваться бот, для каких целей, сфер бизнеса, возраста пользователей, надо принимать в расчет различные языковые стили, а также речевые обороты. Тестировщики для подкрепления своей экспертной оценки могут использовать тексты, сгенерированные нейросетями, как дополнительный инструмент или как «сторонний взгляд на ситуацию». Важно учитывать, что протестировать все не получится и с первого раза обучить понимать все пользовательские запросы тоже. Не стоит бесконечно сидеть и пытаться поправить все. У каждого проекта свой приоритет, сроки выполнения и так далее. Главное – довести систему до определенного хорошего показателя, при котором общение с ней станет в радость, а не в тягость. В качестве «хорошего показателя» можно ориентироваться на то, что бот корректно обрабатывает сценарные фразы, а также максимально часто встречающиеся синонимы. 

Есть ли у вас какие-то лайфхаки при тестировании ботов? А может, вы знаете еще какие-то нетривиальные варианты использования нейросетей в тестировании? Обязательно делитесь в комментариях!

Комментарии (3)


  1. zaiats_2k
    08.07.2024 21:49

    Чтобы активировать пропуск - надо активировать пропуск прямо там, где его выдают. А не вот это вот всё.


  1. u678756
    08.07.2024 21:49

    Можно использовать эмбеддинги для вычисления, например, тематики.


  1. rybakosmonavt
    08.07.2024 21:49
    +2

    Даниил, правильно ли я понимаю, что у вас тестирование тут по большей части завязано на проверке каких-то определенных юз-кейсов? Мне любопытно, насколько у вас много вообще тест-кейсов, или остальной тестовой документации, когда идет специфика ботов в диалоговых системах. Как вы с тестовыми артефактами тут работаете? :)