Power BI | Обучение режима “Q&A” русскому языку

В данной статье будут рассмотрены способы обучения режима работы “Questions and Answers” (Q&A) русскому языку. Использованы как встроенные возможности, так и редактирование yaml-схемы. Оригинал доступен по ссылке.

Пример:

Для иллюстрации работы режима Q&A представим следующую ситуацию: в компании существует несколько складов с разными видами продукции, осуществляющих отгрузку по заявкам, поступающим от внешних сотрудников.

В качестве исходных данных имеем:

  • основной набор данных, содержащий дату документа, номер документа, название склада, группу товаров и признак того, что документ просрочен – “Requests”;
  • справочник, содержащий информацию о складе, а именно его название, местоположение, и ответственное лицо – “Warehouses”.

 

 

Задача

Используя имеющиеся данные, необходимо обучить режим Q&A пониманию составляющих русского языка

 

Что такое режим QA? 

Режим Q&A представляет собой способ получения так называемых “быстрых ответов”, позволяя задавать вопросы с использованием естественного языка. Для ввода вопроса используется специальный элемент “Questions and Answers” (“Вопросы и ответы”). По умолчанию, элементы вопроса, понятные системе, подчеркиваются синим цветом, в ином случае цвет будет красным.

Например, для того, чтобы узнать количество заявок, поступивших за январь, на английском языке достаточно ввести фразу следующего вида: “count of request in jan”.

Эта же фраза, написанная на русском языке, то есть “подсчитать заявки в янв”, не даст подобного результата:

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

 

Стандартные возможности

Стандартные возможности режима Q&A включают в себя работу через название мер, присвоение синонимов, а также обучение режима Q&A при помощи встроенного механизма. Применение указанных инструментов позволяет частично обучить режим Q&A работе на русском языке.

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

Количество заявок в январе =

COUNTROWS (

FILTER ( ‘Requests’; RELATED ( ‘Calendar'[MonthName] ) = “Январь” )

)

 

Созданная мера “Количество заявок в январе” будет понятна режиму Q&A, и корректная реакция системы на указанный запрос будет обеспечена даже несмотря на то, что значение данной меры не будет визуализировано:

 

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

  • Улучшить ситуацию можно, написав набор мер более общего характера, например, меру “Количество заявок”, а для вывода значений конкретного месяца использовать фильтры:

Количество заявок =

COUNTROWS ( ‘Requests’ )

 

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

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

Для присвоения синонимов нужно выполнить следующие действия:

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

 

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

 

К сожалению, синонимы нельзя указывать для конкретного значения столбца, они указываются только на заголовок.

Режим Q&A понимает значение русского термина “Январь”, поскольку в таблице “Requests” существует поле “Date” (“Дата”), а также имеется связь данного столбца с таблицей “Calendar” по аналогичному столбцу “Date”, где в столбце “MonthName” для списка определенных дат проставлено значение “Январь”:

 

  • В функционале режима Q&A существует встроенный механизм обучения. При использовании русского языка обучение доступно только терминам.

Например, мы хотим получить список заявок, поступивших на склады, где находится алкоголь. Поскольку ранее мы не определили, что такое термин “склады”, запрос “склады алкоголь” не выдаст нужного результата:

 

При этом система попытается понять то, что имел в виду пользователь и может предложить свой вариант. Под полем запроса, на рисунке выше, в качестве ссылки выведено предположение, что, возможно, имелось в виду понятие “Алкоголь”. Нажав на предложенную ссылку, мы получим отфильтрованную по группе “Алкоголь” таблицу “Requests” которая, помимо прочего, будет содержать также и склад, определенный по документу:

Чтобы обучить систему Q&A нужному термину (“склады”), можно воспользоваться функционалом настройки:

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

  • перейти в раздел Обучение режима “Вопросы и ответы”;
  • нажать кнопку “Отправить”
  • указать для не определенного (выделенного красным) системой термина его соответствие. В нашем случае понятию “склады” соответствует термин “warehouse”:

  • нажать кнопку “Сохранить”;
  • проверить получившийся результат:

Теперь при вводе фразы “склады алкоголь” режим Q&A выводит список складов из справочника “Warehouses”, и при этом только те, где находится указанная группа товаров. Данный результат содержит более точную информацию, чем та, что была выведена до обучения режима. И обе составляющих запроса подчеркнуты синим цветом.

 

Нестандартные возможности: редактирование yaml-схемы

При написании запросов на естественном (английском) языке режим Q&A также может работать с прилагательными, предлогами, глаголами и прочее, на русском языке это возможно реализовать путем прямого редактирования yaml-схемы. Допустим, нам нужно получить список тех заявок, которые не были обработаны вовремя. В наборе данных “Requests” есть столбец “Expired” со значениями “True” / “False”, который определяет выполнение желаемого условия.

  • Запрос “просроченные заявки” в данный момент системе не понятен, поскольку она не знает русское прилагательное “просроченные”

 

Это можно исправить путем прямого редактирования yaml-схемы файла, получить которую можно использовав процедуру сохранения при применении функции экспорта:

Путь: (М) Лента -> (З) Моделирование -> (К) Лингвистическая схема -> (Ф) Экспортировать

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

  • Сохраненную yaml-схему необходимо открыть при помощи какого-нибудь редактора, мы будем использовать Visual Studio Code;
  • Yaml-схема представляет собой некую “простыню” кода, содержащую два больших раздела — “Entities” и “Relationships”. Для понимания режимом Q&A прилагательного “просроченные” необходимо отредактировать существующую yaml-схему. Для лучшего понимания можно производить сопоставление понятий английского и русского языков, а также оставлять комментарии, например, следующим образом:

# 24.02.2020 – прилагательные “expired” и “просроченные”

request_number_is_expired:

Binding: {Table: Requests}

Conditions:

– Target: request.expired

Operator: Equals

Value: true

Phrasings:

– Adjective:

Subject: request.number

Adjectives:

– expired: {LastModified: ‘2020-03-24T08:58:27.6979765Z’}

– просроченные: {LastModified: ‘2020-03-24T08:58:27.6979766Z’}

 

Данной конструкцией мы объяснили режиму Q&A, что заявка является просроченной, если в таблице “Requests” в столбце “Expired” стоит значение, равное “True”.

В некоторых местах обязательным реквизитом является время изменения, так что, во избежание недоразумений, при редактировании кода старайтесь делать так, чтобы значение “2020-03-24T08:58:27.6979765Z” не повторялось.

 

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

Путь: (М) Лента -> (З) Моделирование -> (К) Лингвистическая схема -> (Ф) Импортировать

  • При завершении процедуры импорта система выдаст на экран соответствующее информационное сообщение, здесь также не должно быть ошибок:

  • Если ошибок при импорте не обнаружено, то можно закрыть информационное сообщение, и проверить получившийся результат:

Просроченных заявок в системе 7 штук, но, поскольку запрос универсальный, дописав желаемый период, например, “просроченные заявки январь”, мы сможем убедиться в том, что это тоже работает и режим Q&A сформирует “Быстрый ответ” (количество заявок уменьшится и составит 4 штуки)

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

 

Чтобы режим Q&A сумел корректно ответить на подобный вопрос, необходимо в yaml-схему добавить две конструкции, первая из которых отвечает за понимание предлогов, а вторая – отражает склонения слова “Всеволожск”:

# 24.02.2020 – предлоги “in”, “в”, “во”

warehouses_are_in_location:

Binding: {Table: Warehouses}

State: Generated

Phrasings:

– Preposition:

Subject: warehouse

Prepositions: [in, в, во]

Object: warehouse.location

– Attribute: {Subject: warehouse, Object: warehouse.location}

State: Generated

Weight: 0.99

# 24.02.2020 – варианты значения “Всеволожск”

warehouses_is_vsevolozhsk:

Binding: {Table: Warehouses}

Conditions:

– Target: warehouse.location

Operator: Equals

Value: Всеволожск

Phrasings:

– Noun:

Subject: warehouse

Nouns:

– Vsevolozhsk: {LastModified: ‘2020-03-24T08:58:27.6979767Z’}

– Всеволожск: {LastModified: ‘2020-03-24T08:58:27.69797668’}

– Всеволожске: {LastModified: ‘2020-03-24T08:58:27.6979769Z’}

– Всеволожска: {LastModified: ‘2020-03-24T08:58:27.6979770Z’}

– Всеволожску: {LastModified: ‘2020-03-24T08:58:27.6979771Z’}

– Всеволожском: {LastModified: ‘2020-03-24T08:58:27.6979772Z’}

После загрузки обновленной yaml-схемы, режим Q&A сможет обработать запрос “склады во всеволожске”, и предоставить корректный результат.

Продемонстрировать результаты в общедоступном виде не получится, поскольку при использовании метода “Опубликовать в Интернете” режим Q&A становится недоступным, и работает непосредственно внутри кабинета.