Slot filling что это
Слот-филлинг
Слот-филлинг — процесс уточнения информации, необходимой для выполнения запроса клиента.
Слоты — сущности, которые клиент упоминает в запросе либо в процессе уточнения информации.
В данной статье рассматриваются следующие вопросы:
Извлечение слотов
Если представить интент как функцию, которую клиент может вызвать, то слот можно рассматривать как параметр этой функции.
В данном случае город и дата являются слотами, которые необходимо извлечь из запроса.
Параметры слотов
Название и Сущность
У каждого слота должны быть указаны два обязательных параметра:
При обработке запросов в них производится поиск сущностей, соответствующих слотам, подлежащим заполнению. Для примера фразы Какая погода сегодня в Москве? в слот City попадет Москва, в Date — указание на сегодняшний день.
Если для интента настроено несколько слотов с одинаковыми сущностями, при обработке запросов они будут заполняться последовательно.
Параметр Обязательно
Каждый слот может быть обязательным или необязательным.
Если переключатель Обязательно активен, то запросы, в которых этот слот не заполнен, будут попадать в сценарий уточнения незаполненных слотов. При этом требуется, чтобы параметр Вопросы для данного слота был непустым.
В случае, когда Вопросы не указаны, запросы без заполнения данного обязательного слота не будут попадать в интент.
Если переключатель не активен, интент будет обработан, даже если слот не заполнен.
Параметр Массив
При необходимости обработать в сценарии несколько повторяющихся сущностей из одного слота, необходимо пометить слот как массив.
Если переключатель Массив:
Подключение модуля слот-филлинга
Для подключения модуля слот-филлинга укажите в сценарии в файле main.sc :
Обработка слотов в сценарии
Использование заполненных слотов в сценарии:
Поскольку в нашем примере слот Date необязателен, перед обработкой его нужно проверить и установить значение по умолчанию, если он не заполнен.
Уточнение незаполненных слотов
Для всех обязательных слотов, которые остались незаполненными в изначальном запросе, система будет по очереди задавать уточняющие вопросы, указанные в поле Вопросы.
В ответах клиента будет производиться поиск сущностей, соответствующих слотам. Если подходящие сущности найдены, то слот будет заполнен.
Здесь @City — пользовательская сущность, в которой указаны все доступные города.
Запрос клиента | Действие бота |
---|---|
Погода на завтра в Москве | Оба слота заполнены. Управление сразу перейдет в сценарий. |
Погода на завтра | Слот City не заполнен, и он обязателен. Будет задан уточняющий вопрос. |
Погода в Москве | Слот Date не заполнен, но он необязателен. Управление перейдет в сценарий. |
Прерывание слот-филлинга
Прерывание слот-филлинга позволяет досрочно выйти из сценария заполнения слотов, если клиент не отвечает на уточняющие вопросы.
Используйте прерывание слот-филлинга, чтобы диалог не зацикливался при неуспешном заполнении слотов и клиент мог свободно перевести разговор на другие темы.
Условия прерывания слот-филлинга конфигурируются в файле chatbot.yaml в разделе injector :
Прерывание по превышению числа переспросов
Параметр maxSlotRetries принимает целочисленное значение и задает количество попыток уточнения одного слота.
Если клиент ответил указанное количество раз и слот не был заполнен, процесс слот-филлинга будет прерван. Последняя фраза клиента будет обработана в основном сценарии бота.
Прерывание по интенту
Прерывание по интенту регулируют параметры:
Neural Named Entity Recognition and Slot Filling¶
Given a sequence of tokens (words, and maybe punctuation symbols) provide a tag from a predefined set of tags for each token in the sequence.
For NER task there are some common types of entities used as tags:
expressions of time
Furthermore, to distinguish adjacent entities with the same tag many applications use BIO tagging scheme. Here “B” denotes beginning of an entity, “I” stands for “inside” and is used for all words comprising the entity except the first one, and “O” means the absence of entity. Example with dropped punctuation:
In the example above, FOOD means food tag, LOC means location tag, and “B-” and “I-” are prefixes identifying beginnings and continuations of the entities.
Slot Filling is a typical step after the NER. It can be formulated as:
Given an entity of a certain type and a set of all possible values of this entity type provide a normalized form of the entity.
In this model, the Slot Filling task is solved by Levenshtein Distance search across all known entities of a given type.
For example, there is an entity of “food” type:
It is definitely misspelled. The set of all known food entities is <вЂchinese’, вЂrussian’, вЂeuropean’>. The nearest known entity from the given set is chinese. So the output of the Slot Filling system will be chinese.
Configuration of the model¶
Configuration of the model can be performed in code or in JSON configuration file. To train the model you need to specify four groups of parameters:
In the subsequent text we show the parameter specification in config file. However, the same notation can be used to specify parameters in code by replacing the JSON with python dictionary.
Dataset Reader¶
The dataset reader is a class which reads and parses the data. It returns a dictionary with three fields: “train”, “test”, and “valid”. The basic dataset reader is “ner_dataset_reader.” The dataset reader config part with “ner_dataset_reader” should look like:
where class_name refers to the basic ner dataset reader class and data_path is the path to the folder with DSTC 2 dataset.
Dataset Iterator¶
For simple batching and shuffling you can use “dstc2_ner_iterator”. The part of the configuration file for the dataset iterator looks like: «dataset_iterator»:
There are no additional parameters in this part.
Chainer¶
The chainer part of the configuration file contains the specification of the neural network model and supplementary things such as vocabularies. The chainer part must have the following form:
The inputs and outputs must be specified in the pipe. “in” means regular input that is used for inference and train mode. “in_y” is used for training and usually contains ground truth answers. “out” field stands for model prediction. The model inside the pipe must have output variable with name “y_predicted” so that “out” knows where to get predictions.
The major part of “chainer” is “pipe”. The “pipe” contains the pre-processing modules, vocabularies and model. However, we can use existing pipelines:
This part will initialize already existing pre-trained NER module. The only thing need to be specified is path to existing config. The preceding lazy tokenizer serves to extract tokens for raw string of text.
The following component in the pipeline is the slotfiller :
The slotfiller takes the tags and tokens to perform normalization of extracted entities. The normalization is performed via fuzzy Levenshtein search in dstc_slot_vals dictionary. The output of this component is dictionary of slot values found in the input utterances.
The main part of the dstc_slotfilling componet is the slot values dictionary. The dicttionary has the following structure:
Slotfiller will perform fuzzy search through the all variations of all entity values of given entity type. The entity type is determined by the NER component.
The last part of the config is metadata:
It contains information for deployment of the model and urls for download pre-trained models.
You can see all parts together in deeeppavlov/configs/ner/slotfill_dstc2.json
Usage of the model¶
Please see an example of training a Slot Filling model and using it for prediction:
This example assumes that the working directory is the root of the project.
Slotfilling without NER¶
An alternative approach to Slot Filling problem could be fuzzy search for each instance of each slot value inside the text. This approach is realized in slotfill_raw component. The component uses needle in haystack
The main advantage of this approach is elimination of a separate Named Entity Recognition module. However, absence of NER module make this model less robust to noise (words with similar spelling) especially for long utterances.
Технологии будущего: колл-центр без людей, зато с Dialogflow
Автоматизация повседневных задач вроде заказа еды — наше недалекое будущее, которое становится все ближе благодаря компаниям Google, Amazon и Baidu, активно инвестирующим в machine learning и искусственный интеллект.
Телефон — основной канал продаж
Несмотря на развитие технологий, телефон все еще остается самым востребованным каналом связи, и в определенных случаях он может генерировать до 80% выручки.
Интернет-магазин и сайт компании можно рассматривать как витрину: если речь идет про сервис или сложный продукт, люди все равно звонят, спрашивают и уточняют интересующие их моменты. Им нужно получать ответы на общие и специфические вопросы, прежде чем они будут готовы расстаться со своими деньгами.
Параллельно есть статистика, подтверждающая, что большинство людей хочет, чтобы их обслужили быстро: 77% покупателей готовы ждать ответа оператора не более 25 секунд. В идеале клиенты хотят, чтобы им ответил живой человек в течение 10-15 секунд и решил их вопрос.
Колл-центр — недешевое удовольствие
Большой штат сотрудников требует от бизнеса ощутимых затрат. Когда приходит время оптимизации расходов, компании начинают экономить прежде всего на обслуживающем персонале: секретари, сотрудники колл-центов, линейные менеджеры.
Этот «достаточно хороший» способ экономии приводит к тому, что клиентам приходится ждать ответа оператора в лучшем случае несколько минут. Для бизнеса подобное ожидание чаще всего заканчивается потерей клиента.
Пришла пора автоматизации
Автоматизация работы колл-центра — тренд, который появился давно. Прежде всего, Сотрудники КЦ занимаются обслуживанием клиентов, когда те хотят что-то купить: нужно ответить на базовые вопросы, помочь оформить заказ, проверить введенную информацию. Плюс существует часть вопросов, связанная с поддержкой: про доставку, про оплату, про то, что что-то пошло не так. Все как и везде, есть два основных блока: продажи и поддержка. И одно без другого не существует.
Шаг первый — интеграция с CRM
В современном мире человек привязан к номеру телефона: мы все пользуемся мессенджерами, социальными сетями, по номеру телефона нас идентифицируют в приложениях, на сайтах и, например, на портале Госуслуг, к телефону также привязываются карты лояльности. Мы перестаем пользоваться городскими номерами — если я звоню с телефона, то с высокой долей вероятности я буду звонить со своего мобильного номера.
Если я что-то заказывал в интернет-магазине, то, скорее всего, я уже есть у вас в CRM, и вы можете посмотреть историю моих заказов и общения со мной. Если я новый клиент, создается и заполняется новая карточка в системе работы с клиентами и заполняется карточка. Эту работу можно назвать первым шагом в процессе автоматизации.
Шаг второй — «умный» IVR
«Умный» IVR умеет общаться с клиентами без участия человека, используя синтез речи или записанные фразы. Если клиент что-то купил или заказал, его заказ появляется в CRM. При входящем звонке поднимается карточка клиента, делается предположение, что, вероятнее всего, у звонящего есть вопрос про доставку этого товара.
Клиента можно спросить «да» или «нет»; если «да», можно проинформировать, что доставка будет послезавтра, в 5 часов вечера. Если это была вся информация, которую хотел уточнить клиент, он положит трубку; если же ему хочется задать вопрос, всегда можно попросить перевести на живого человека, чтобы, например, отменить или скорректировать заказ.
Шаг третий — ML/ИИ/NLP
Тренд, который сейчас набирает обороты, — это возможность «общаться» с клиентом не просто по заданным шаблонам и меню, а разговаривать «свободно», на естественном языке, но в автоматическом режиме. Мы формируем запросы миллионом разных способов, и IVR должен быть к этому готов. «Подготовить» робота можно, используя новые технологии, такие как machine learning, искусственный интеллект и NLP.
Пришла пора роботизации
«Типовых» задач существует множество, каждый бизнес может проанализировать работу своего колл-центра, прослушать диалоги и выделить базу, которую можно автоматизировать, загрузив робота. Естественно, что-то останется на людях: специфика бизнеса, сложные запросы, особые клиенты, которых не понимает распознавание, — всегда есть возможность переключиться на человека, используя его время эффективно.
Благодаря современным технологиям автоматизации любая компания может существенно уменьшить издержки на обучение, зарплату, отпуска и больничные — робот обучается один раз, он не уволится и не уйдет в другую компанию, его всегда можно дообучать. Робот будет работать до тех пор, пока компания платит за его ресурсы: среди них синтез, распознавание, вычислительные ресурсы.
Понимая запросы рынка, ИТ-корпорации объединяют наиболее востребованные технологии в единый стек, который позволяет довести IVR до уровня, когда вы будете с трудом отличать его от живого человека.
Первая часть этого стека — это синтез речи с новыми технологиями типа WaveNet от Google, который звучит как живой человек. Нужно очень постараться, чтобы понять, что с вами говорит робот. Есть и интонации, и паузы, встречаются моменты, связанные с дыханием, — технология «натренирована» на разговорах живых людей.
И это совершенно другой подход: раньше был вокодер, который аналогично тренировали, обучали, записывали фразы, но логика его работы была другой, и он звучал как «железная женщина».
В пример можно привести недавнюю демонстрацию с Google I/O, на которой робот звонил в парикмахерскую, чтобы записаться на стрижку: человек в парикмахерской не понимал, что с ним говорит робот. Грань между «железом» и живым оператором размывается, узнать о том, что вы разговариваете с роботом, можно, только если сценарий пойдет по непредсказуемой ветке, что бывает редко.
Вторая часть — распознавание речи, которое также не первый год переживает активное развитие и подъем, постоянно совершенствуется. Раньше мы могли только мечтать, чтобы понимать какие-то отдельные команды, например, «да», «нет», «хочу», «не хочу», «дайте мне это». Сейчас есть возможность распознавать обычную человеческую речь.
Процент ошибок пока что высок, но со временем он будет понижаться, и в какой-то момент автоматическое распознавание речи будет не сильно отличаться от того уровня, который мы можем слышать как люди, понимать и осознавать. В каких-то случаях распознавание, возможно, даже будет превышать наши ожидания.
И третья часть стека — понимание «живой» человеческой речи, выделение смысла запроса и обучение на примерах. В пример можно привести «Яндекс.Навигатор», который понимает адреса, в произношении которых мы сами не всегда уверены.
Водители из разных стран СНГ возят нас, у каждого водителя есть свой акцент. Иногда они специфично произносят адрес, и мы думаем, что навигатор распознает его неправильно. Но нет, распознавание происходит корректно — это и есть машинное обучение, благодаря которому система уже может понять то, что обычный человек воспринимает с трудом.
Сейчас мы не можем быть уверены на 100% в том, что в разговоре не понадобится живой оператор. Но мы точно уверены в том, что есть «простые» задачи, например, заказ пиццы, где все достаточно стандартизировано — на эту «первую линию» мы как раз можем поставить робота, оставив нестандартные ситуации для операторов.
О Google Dialogflow
Google Dialogflow – это сервис, который возник в результате поглощения компанией Google API.ai, которые делали изначально Speaktoit; когда Google начал заниматься своим ассистентом, компания решила, что эта технология ей близка и интересна. В итоге Google купила API.ai, сделав на её основе Dialogflow. Отмечу, что API.ai — компания с русскими корнями.
Смысл Dialogflow в том, чтобы нести в массы машинное обучение и дать обычным людям возможность тренировать «машину», которая понимает естественную речь, выделяет из нее интенты, может делать так называемый slot filling (это когда мы называем несколько параметров, машина их классифицирует и может запросить недостающую информацию), к которому сводится значительная часть общения. Мы говорим роботу информацию, он получает данные, систематизирует и отвечает на их основе.
Сейчас Dialogflow поддерживает 18 языков, плюс есть возможности по интеграции с внешними сервисами через API, используя которые можно добиться нужного вам результата по автоматизации.
Встроенный machine learning легко обучается на имеющихся примерах: можно выгрузить записи разговоров из колл-центра, проанализировать, загрузить в робота тексты, разметить — через какое-то время, обучившись, робот начнет понимать запросы, которые ему уже показали. Это и есть специальная «магия», в результате которой робот понимает не только прямые запросы, но и аналогичные.
Например, если я загружу запросы «Хочу авиабилеты из Москвы в Питер на послезавтра, в 5 часов вечера» и «Я хочу из Сан-Франциско в Лондон 30 июня, утром» и размечу их, а потом спрошу про другие города и другие даты, робот уже корректно обработает этот запрос и выдаст результаты, поняв о чем идет речь.
Голосовой бот для пиццерии
Самый простой способ продемонстрировать, как может выглядеть интеллектуальный IVR – показать пример из реальной жизни. Протестировать бота можно, перейдя по ссылке: введите свой номер телефона в международном формате, нажмите кнопку «Далее», с указанного номера наберите +74999384952 — это позволит смотреть, как бот в режиме реального времени формирует конкретно ваш заказ.
Мой разговор с роботом длится чуть менее 1,5 минут. Себестоимость обработки сделанного заказа менее 4 рублей при текущем курсе доллара. Цена складывается из времени, которое потребляют перечисленные технологии. Минута разговора с оператором колл-центра при аутсорсе в среднем стоит в районе 9-10 рублей. Выгоду каждый может посчитать сам, опираясь на свой бизнес.
Это реальный бот, на номер которого можно позвонить и пообщаться. Я заранее мог бы бы сказать ему адрес, время и собрать заказ по-другому, но благодаря «заполнению слотов» робот все равно бы «понял» мой заказ, корректно заполнив карточку заказа.
Коллеги из индустрии комментируют, что «нормальный продавец предложил бы напитки и соусы, сделав дополнительную продажу». Все это тоже можно реализовать: это всего лишь дополнительные данные, которые можно добавить к карточке заказа. Не получив данные, в конце разговора робот легко сможет уточнить про напитки, соусы, экспресс-доставку за отдельную плату и количество приборов.
Хозяйке на заметку
Одного Dialogflow недостаточно для создания телефонного бота, нужна специальная связка с телефонией, для которой я использовал Voximplant и его новую функцию Dialogflow Connector, позволяющую подключить любой звонок к Dialogflow-агенту максимально быстро и просто.
В примере использовался синтез от «Яндекса», а не WaveNet, так как в последнем поддерживается только английский язык. В течение года Google обещает подключить к Dialogflow другие языки WaveNet-синтеза — я думаю, что этот же пример на другой технологии в конце года будет звучать по-другому и нам будет действительно сложно отличить робота от человека.
filling slot
1 filling slot
2 filling slot
3 filling slot
4 filling slot
5 filling slot
6 filling slot
7 filling slot
8 filling slot
См. также в других словарях:
filling slot — noun see filling notch … Useful english dictionary
filling notch — noun or filling slot : an opening cut into the shoulders of a ball bearing to permit introduction of the balls … Useful english dictionary
Filling station — The still operating Skovshoved Filling Station from 1935 in Copenhagen, Denmark, designed by Arne Jacobsen … Wikipedia
mining — /muy ning/, n. 1. the act, process, or industry of extracting ores, coal, etc., from mines. 2. the laying of explosive mines. [1250 1300; ME: undermining (walls in an attack); see MINE2, ING1] * * * I Excavation of materials from the Earth s… … Universalium
MasterChef (US TV series) — This article is about the Fox television show. For the PBS television show, see MasterChef USA. For other uses, see MasterChef. MasterChef Series logo and wordmark Genre Cook … Wikipedia
Saspo — Dies ist der fünfte Teil der Liste Abkürzungen/Luftfahrt. Liste der Abkürzungen Teil 1 A A Teil 2 B–D B; C; D Teil 3 E–K … Deutsch Wikipedia
Fountain pen — A fountain pen is a nib pen that, unlike its predecessor the dip pen, contains an internal reservoir of water based liquid ink. From the reservoir, the ink is drawn through a feed to the nib and then to the paper via a combination of gravity and… … Wikipedia
NCAA football bowl games, 2005–06 — The 2005 06 NCAA college football bowl season was a series of 28 post season games (including the Bowl Championship Series) that was played in December 2005 and January 2006 for Division I A football teams and all stars from Divisions I AA, II,… … Wikipedia
British Caledonian in the 1980s — Articleissues cleanup= March 2008 copyedit = March 2008 confusing = March 2008 expert = Airlines essay = March 2008 peacock = March 2008 tone = March 2008 wikify = March 2008 context = March 2008 introrewrite = March 2008There were many ups and… … Wikipedia
Drew Garabo — Drew Raymond Garabo is a radio talk show host known primarily for hosting The Drew Show (also known as The Drew Garabo Show ) on Real Radio 104.1 WTKS FM Orlando from 1997 to 2005. From 2004 2005 he wrote a sports column for the Orlando Weekly… … Wikipedia
United States — a republic in the N Western Hemisphere comprising 48 conterminous states, the District of Columbia, and Alaska in North America, and Hawaii in the N Pacific. 267,954,767; conterminous United States, 3,022,387 sq. mi. (7,827,982 sq. km); with… … Universalium
Slot Filling
Slot Filling is the process of requesting additional data in order to fulfill the client request.
Slots are the entities which the client sends along with a request or during the clarification process.
This article covers the following topics:
Slot extraction
If we compare intents to functions which the client can invoke, then slots may be regarded as parameters of such functions.
In this case, the city and the date are slots to be extracted from the request.
Slot parameters
Name and Entity
Each slot must be assigned the following required parameters:
If the intent has multiple slots bound to the same entity, they will be filled one after another.
The Required parameter
Each slot may be either required or optional.
If the Required toggle is enabled, requests with this slot unfilled will trigger the slot clarification process. Note that at least one clarifying question must be specified in Questions.
When no Questions are supplied, requests with this required slot unfilled will not be matched by the intent at all.
If the toggle is disabled, the intent will be processed whether the request has the slot filled or not.
The Is Array parameter
Slots bound to entities that can be mentioned multiple times over one request must be marked as arrays.
If the Is Array toggle is.
Activating the slot filling module
Provide the following dependency in main.sc to activate the slot filling module:
Accessing slots from the script
The slots can be accessed from the script as follows:
Since the Date slot is optional in our example, it must be checked before processing and set to a default value if left unfilled.
Unfilled slots clarification
For all the required slots that are left unfilled in the original request, the system will ask clarifying questions specified in the Questions field.
The client replies will be searched for entities bound to the slots. If matching entities have been found then the respective slot will be filled.
Consider the following example:
Here @City is a custom entity containing all the cities for which the forecast is available.
Client request | Bot action |
---|---|
Weather in London for tomorrow | Both slots are filled. Control will be passed to the script right away. |
Weather for tomorrow | The required slot City is unfilled. The bot will ask a clarifying question. |
Weather in Moscow | The Date slot is unfilled, but it is optional. Control will be passed to the script. |
Interruption of slot filling
Slot filling interruption allows exiting the slot clarification prematurely if the client fails to answer the clarifying questions.
Use slot filling interruption so that the conversation does not get caught in an endless loop and the client can freely choose another topic to talk about.
You can configure slot interruption conditions in the injector section of chatbot.yaml :
Regardless of this configuration, slot filling can always be interrupted by the /start request, which will trigger a transition to the /Start state.
Interruption by exceeding slot retries
The maxSlotRetries parameter takes an integer value which determines the maximum number of retries for a single slot.
If the client has answered the clarifying question the specified number of times and the slot has not been filled, slot filling will be interrupted. The last client request will be handled in the bot script.
Interruption by intent
The following parameters regulate slot filling interruption by intent:
It is important to account for the context where slot filling begins. If slot filling is interrupted, but the state with the corresponding intent activator cannot be reached from the current state (for example, if the intent tag is not global), then event!: noMatch will trigger instead.