Рекомендации по созданию намерений / сущностей с помощью службы IBM Conversation Service

в настоящее время я работаю со Службой IBM Conversation. Существуют ли какие-либо рекомендации по созданию намерений, кроме информации в официальных документах или тех, которые описаны здесь:https://github.com/watson-developer-cloud/text-bot#best-practices?

есть другие демки, там можно посмотреть? Я видел приборную панель автомобиля и погодный бот от IBM.

с уважением,

Кьетил

1 ответов


намерения

намерения являются компонентом машинного обучения разговора.

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

важно понимать, что вопросы управляют ответами / намерениями, а не наоборот.

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

заранее определенные намерения более склонны к сфабрикованным вопросам, и вы обнаружите, что не все задают намерения, которые вы думаете, что они будут. Таким образом, вы тратите время на тренировки в областях, в которых вам не нужно.

Изготовлен Вопросы

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

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

во-вторых, вы обнаружите, что даже если вы изо всех сил пытаетесь изменить вещи, вы все равно будете дублировать шаблоны.

принять это пример:

how do I get a credit card?
Where do I get a credit card?
I want to get a credit card, how do I go about it?
When can I have a credit card? 

основной термин здесь credit card не изменяется. Они могли бы сказать visa, master card, gold card, plastic или даже просто card. Сказав это, intents может быть вполне разумным с этим. Но когда имеешь дело с большим количеством вопросов, лучше поменять.

кластеризации

для правильно обученного кластера вам понадобится минимум 5 вопросов. Оптимальная-10. Если вы собрали вопросы, а не производство вы найдете кластеры, которым не хватает тренироваться. Это нормально, если у вас длинный хвост с похожим рисунком, как это:

example long tail graph

(по горизонтали = количество вопросов, по вертикали = идентификатор кластера по размеру)

если вы обнаружите, что существует слишком много уникальных вопросов (graph = flat line), то компонент intents не лучший в решении этого.

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

тестирование

как только у вас все кластеризовано, удалите случайный 10% -20% (зависит от количества вопросов). Не смотрите на эти вопросы. Ты используешь это как слепой тест. Тестирование этих даст вам разумное ожидание того, как он, вероятно, будет работать в реальный мир (при условии, что вопросы не сфабрикованы).

в более ранних версиях WEA у нас было то, что называлось экспериментом (K-fold validation). Система удалит один вопрос из обучения, а затем задаст его обратно. Он сделает это для всех вопросов. Цель состояла в том, чтобы проверить каждый кластер и посмотреть, какие кластеры влияют на другие.

NLC / разговор не делает этого. На это уйдет вечность. Вместо этого можно использовать кросс-фолд Монте-Карло. Делать это, вы берете случайный 10% от вашего набора поездов, Поезд на 90% , а затем тест на 10% удалены. Вы должны сделать это несколько раз и усреднить результаты (не менее 3 раз).

в сочетании с вашим слепым тестом они должны падать относительно близко друг к другу. Если они говорят за пределами 5% диапазона друг друга, то у вас есть проблемы с вашей подготовки. Используйте результаты Монте-Карло, чтобы проверить, почему (не ваш слепой набор).

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

объекты

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

он также позволяет передать ключевое слово, на которое может действовать ваша система. Например, кто-то может сказать: "кошки и собаки", но вы хотите вернуть @погода:дождь

REGEX

последняя форма определения намерения пользователя-условный раздел. Это может быть довольно мощным, так как вы можете создавать вложенные регулярные выражения. например:

input.text.matches('fish|.*?\b[0-9]{4,6}\b.*?')

этот пример вызовет, если они скажут просто "рыба" или 4-6-значное число в своем вопросе.