Учебник. Извлечение ключевых фраз из текста, хранящегося в Power BI

Microsoft Power BI Desktop — бесплатное приложение, позволяющее подключиться к данным, а затем преобразовать и визуализировать их. Извлечение ключевых фраз, одна из функций языка ИИ Azure, обеспечивает обработку естественного языка. Она может извлечь из необработанного и неструктурированного текста самые важные фразы, выполнить анализ тональности и определить в нем известные сущности, например торговые марки. Оба инструмента помогают быстро узнать, о чем говорят ваши пользователи и что они при этом испытывают.

Из этого руководства вы узнаете, как выполнять следующие задачи:

  • Использование Power BI Desktop для импорта и преобразования данных.
  • Создание пользовательской функции в Power BI Desktop.
  • Интеграция Power BI Desktop с функцией извлечения ключевых фраз языка ИИ Azure
  • Использование функции извлечения ключевых фраз для получения наиболее важных фраз из отзывов клиентов
  • Создание облака слов на основе отзывов клиентов.

Необходимые компоненты

Загрузка данных пользователей

Чтобы приступить к работе, откройте Power BI Desktop и загрузите CSV-файл, скачанный в рамках предварительных требований. В этом файле представлены возможные действия пользователей за сутки на форуме поддержки небольшой вымышленной компании.

Примечание.

Power BI может использовать данные из разнообразных источников в Интернете, например из Базы данных SQL. Дополнительные сведения см. в документации по PowerShell.

В главном окне Power BI Desktop выберите ленту Главная. В группе Внешние данные на ленте откройте раскрывающееся меню Получить данные и выберите Текстовый или CSV-файл.

The Get Data button

Появится диалоговое окно "Открытие". Перейдите в папку downloads или в папку, в которой вы скачали CSV-файл. Выберите имя файла, а затем нажмите кнопку "Открыть ". Появится диалоговое окно "Импорт CSV-файла".

The CSV Import dialog

В диалоговом окне "Импорт CSV-файла" можно проверить кодировку, разделитель, строки заголовка и типы столбцов, определенные в Power BI Desktop. Эта информация является правильной, поэтому выберите "Загрузить".

Чтобы просмотреть загруженные данные, нажмите кнопку Просмотр данных в левой части рабочей области Power BI. Откроется таблица с данными, как в Microsoft Excel.

The initial view of the imported data

Подготовка данных

Может потребоваться преобразовать данные в Power BI Desktop перед их обработкой функцией извлечения ключевых фраз.

Пример данных содержит столбцы subject и comment. С помощью функции слияния столбцов в Power BI Desktop вы можете извлечь ключевые фразы из данных в обоих столбцах, а не только в столбце comment.

В Power BI Desktop выберите ленту Главная. В группе внешних данных выберите "Изменить запросы".

The External Data group in Home ribbon

В списке Запросы слева выберите FabrikamComments, если это еще не сделано.

Затем выделите столбцы subject и comment в таблице. Может потребоваться горизонтально прокрутить документ, чтобы увидеть эти столбцы. Сначала щелкните заголовок столбца subject, а затем, удерживая клавишу CTRL, щелкните заголовок столбца comment.

Selecting fields to be merged

Выберите ленту Преобразование. В группе текстовых столбцов ленты выберите "Объединить столбцы". Появится диалоговое окно "Объединение столбцов".

Merging fields using the Merge Columns dialog

В диалоговом окне "Столбцы слияния" выберите Tab разделитель, а затем нажмите кнопку "ОК".

Кроме того, можно отфильтровать пустые сообщения с помощью фильтра "Удалить пустые", а также удалить непечатаемые знаки с помощью очистки. Если в ваших данных содержится столбец spamscore, как в примере, с помощью фильтра "Число" можно игнорировать нежелательные комментарии.

Общие сведения об API

Функция извлечения ключевых фраз обрабатывает до тысячи текстовых документов за один HTTP-запрос. Power BI обрабатывает одну запись за раз, поэтому в данном руководстве вызовы API будут содержать по одному документу. В каждом обрабатываемом документе для API ключевых фраз требуются приведенные ниже поля.

Поле Description
id Уникальный идентификатор документа в пределах запроса. Это поле также содержится в ответе, так что, если вы обрабатываете несколько документов, извлеченные ключевые фразы можно легко сопоставить с исходным документом. В этом руководстве, так как обрабатывается только один документ на запрос, можно жестко закодировать одно значение id для каждого запроса.
text Текст для обработки. Значение этого поля извлекается из столбца Merged, созданного в предыдущем разделе. Он содержит строку темы и текст комментария. API ключевых фраз поддерживает данные длиной максимум 5120 символов.
language Код естественного языка документа. Все сообщения в примере данных написаны на английском языке, поэтому можно жестко закодировать значение en для этого поля.

Создание пользовательской функции

Теперь вы готовы к созданию настраиваемой функции, позволяющей интегрировать Power BI и функцию извлечения ключевых фраз. Этот текст служит параметром функции. Она преобразовывает данные в требуемый формат JSON (и из него) и выполняет HTTP-запрос к API ключевых фраз. Затем эта функция анализирует ответ API и возвращает строку со списком извлеченных ключевых фраз с разделителями-запятыми.

Примечание.

Настраиваемые функции Power BI Desktop написаны на языке формул Power Query M (М для краткости). М — язык функционального программирования на основе F#. Чтобы завершить работу с этим руководством, не нужно быть программистом, — весь необходимый код приведен ниже.

Убедитесь, что вы работаете с окном редактора запросов в Power BI Desktop. Если это не так, выберите ленту "Главная " и в группе внешних данных выберите "Изменить запросы".

Теперь на ленте Главная в группе Новый запрос откройте раскрывающееся меню Новый источник и выберите Пустой запрос.

В списке "Запросы" появится новый запрос с именем Query1 по умолчанию. Дважды щелкните эту запись и переименуйте ее в KeyPhrases.

Теперь на ленте "Главная" в группе запросов выберите Расширенный редактор, чтобы открыть окно Расширенный редактор. Удалите находящийся в окне код и вставьте следующий.

Примечание.

Замените приведенный ниже пример конечной точки (с <your-custom-subdomain>) конечной точкой, созданной для вашего языкового ресурса. Эту конечную точку можно найти, войдя на портал Azure, перейдя к нужному ресурсу, а затем выбрав Ключ и конечная точка.

// Returns key phrases from the text in a comma-separated list
(text) => let
    apikey      = "YOUR_API_KEY_HERE",
    endpoint    = "https://<your-custom-subdomain>.cognitiveservices.azure.com/text/analytics" & "/v3.0/keyPhrases",
    jsontext    = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
    jsonbody    = "{ documents: [ { language: ""en"", id: ""0"", text: " & jsontext & " } ] }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp    = Json.Document(bytesresp),
    keyphrases  = Text.Lower(Text.Combine(jsonresp[documents]{0}[keyPhrases], ", "))
in  keyphrases

Замените YOUR_API_KEY_HERE ключом языкового ресурса. Этот ключ также можно найти, войдя на портал Azure, перейдя к нужному языковому ресурсу, а затем выбрав страницу Ключ и конечная точка. (Не удаляйте кавычки вокруг ключа.) Затем выберите Готово.

Использование пользовательской функции

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

В окне редактора запросов Power BI Desktop вернитесь к запросу FabrikamComments. Выберите ленту Добавление столбца. В группе "Общие" выберите "Вызвать пользовательскую функцию".

Invoke Custom Function button

Откроется диалоговое окно "Вызвать настраиваемую функцию". В поле Новое имя столбца введите keyphrases. Из списка Запрос функции выберите пользовательскую функцию, которую вы создали, KeyPhrases.

В диалоговом окне появится новое поле Text (optional) (Текст (необязательный)). Для этого поля будет предложено указать, какой столбец будет использоваться для предоставления значений параметра text API ключевых фраз. (Помните, что вы уже жестко закодировали значения для language и id параметров.) Выберите Merged (столбец, созданный ранее путем объединения полей темы и сообщения) в раскрывающемся меню.

Invoking a custom function

Наконец, нажмите кнопку "ОК".

Если все готово, Power BI вызовет пользовательскую функцию по одному разу для каждой строки в таблице. Она отправляет запросы к API ключевых фраз и добавляет новый столбец в таблицу для сохранения результатов. Но перед этим может потребоваться указать параметры проверки подлинности и конфиденциальности.

Проверка подлинности и конфиденциальность

После закрытия диалогового окна "Вызвать настраиваемую функцию" может появиться баннер с предложением указать способ подключения к API ключевых фраз.

credentials banner

Выберите "Изменить учетные данные", убедитесьAnonymous, что выбрано в диалоговом окне, а затем выберите Подключение.

Примечание.

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

setting authentication to anonymous

Если баннер "Изменить учетные данные" все еще активен после выбора анонимного доступа, вероятно, вы забыли вставить ключ языкового ресурса в код в KeyPhrasesнастраиваемой функции.

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

privacy banner

Нажмите кнопку "Продолжить " и выберите Public каждый из источников данных в диалоговом окне. Затем выберите Сохранить.

setting data source privacy

Создание облака слов

После того как вы рассмотрели все отображаемые баннеры, нажмите кнопку "Закрыть" и "Применить" на ленте "Главная", чтобы закрыть Редактор запросов.

Power BI Desktop требуется несколько секунд, чтобы выполнить необходимые HTTP-запросы. В новом столбце keyphrases будут ключевые фразы, обнаруженные API ключевых фраз в тексте каждой строки.

Теперь с помощью этого столбца вы создадите облако слов. Сначала нажмите кнопку Отчет в главном окне Power BI Desktop, слева от рабочей области.

Примечание.

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

Если у вас нет настраиваемого визуального элемента облака Word, установите его. На панели "Визуализации" справа щелкните многоточие (...) и выберите Import From Market (Импорт из Market). Если слово "облако" не отображается в названиях отображаемых средств визуализации в списке, используйте слово "облако" для поиска и нажмите кнопку Добавить рядом с визуальным элементом "Облако слов". Power BI установит визуальный элемент облака слов и сообщит об этом.

adding a custom visual

Сначала щелкните значок облака Word на панели "Визуализации".

Word Cloud icon in visualizations panel

В рабочей области появится новый отчет. Перетащите поле keyphrases с панели "Поля" в поле "Категория" на панели "Визуализации". Облако Word появится внутри отчета.

Перейдите на страницу "Формат" на панели "Визуализации". В категории "Исключения" включите Стоп-слова по умолчанию, чтобы не добавлять в облако короткие распространенные слова, например "of". Но так как мы будем визуализировать ключевые фразы, они могут не содержать стоп-слова.

activating default stop words

Далее отключите Поворот текста и Заголовок.

activate focus mode

Выберите средство "Режим фокуса" в отчете, чтобы лучше взглянуть на наше облако слов. Инструмент развернет облако на всю рабочую область, как показано ниже.

A Word Cloud

Использование других функций

Язык ИИ Azure также предоставляет анализ тональности и обнаружение языка. Распознавание языка особенно удобно использовать, когда комментарий пользователя содержит не только английские слова.

Оба этих API схожи с API ключевых фраз. Это означает, что вы можете интегрировать их с Power BI Desktop с помощью пользовательских функций, которые почти идентичны той, что вы создали в этом руководстве. Создайте пустой запрос и вставьте в Расширенный редактор код ниже, как вы делали раньше. (Не забывайте ключ доступа!) Затем, как и раньше, используйте функцию для добавления нового столбца в таблицу.

Функция анализа тональности ниже возвращает метку с указанием степени положительности тона текста.

// Returns the sentiment label of the text, for example, positive, negative or mixed.
(text) => let
    apikey = "YOUR_API_KEY_HERE",
    endpoint = "<your-custom-subdomain>.cognitiveservices.azure.com" & "/text/analytics/v3.1/sentiment",
    jsontext = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
    jsonbody = "{ documents: [ { language: ""en"", id: ""0"", text: " & jsontext & " } ] }",
    bytesbody = Text.ToBinary(jsonbody),
    headers = [#"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp = Json.Document(bytesresp),
    sentiment   = jsonresp[documents]{0}[sentiment] 
    in sentiment

Ниже приведены две версии функции распознавания языка. Первая версия возвращает код языка ISO (например, en для английского), а вторая — его более привычное название (например, English). Обе версии отличаются лишь последней строкой.

// Returns the two-letter language code (for example, 'en' for English) of the text
(text) => let
    apikey      = "YOUR_API_KEY_HERE",
    endpoint    = "https://<your-custom-subdomain>.cognitiveservices.azure.com" & "/text/analytics/v3.1/languages",
    jsontext    = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
    jsonbody    = "{ documents: [ { id: ""0"", text: " & jsontext & " } ] }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp    = Json.Document(bytesresp),
    language    = jsonresp [documents]{0}[detectedLanguage] [name] in language 
// Returns the name (for example, 'English') of the language in which the text is written
(text) => let
    apikey      = "YOUR_API_KEY_HERE",
    endpoint    = "https://<your-custom-subdomain>.cognitiveservices.azure.com" & "/text/analytics/v3.1/languages",
    jsontext    = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
    jsonbody    = "{ documents: [ { id: ""0"", text: " & jsontext & " } ] }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp    = Json.Document(bytesresp),
    language    =jsonresp [documents]{0}[detectedLanguage] [name] in language 

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

Примечание.

Возврат отдельной строки упрощает наш пример облака Word. В свою очередь список — более гибкий формат работы с фразами в Power BI. Power BI Desktop позволяет управлять объектами списка с помощью группы "Структурированный столбец" в редакторе запросов на ленте "Преобразование".

// Returns key phrases from the text as a list object
(text) => let
    apikey      = "YOUR_API_KEY_HERE",
    endpoint    = "https://<your-custom-subdomain>.cognitiveservices.azure.com" & "/text/analytics/v3.1/keyPhrases",
    jsontext    = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
    jsonbody    = "{ documents: [ { language: ""en"", id: ""0"", text: " & jsontext & " } ] }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp    = Json.Document(bytesresp),
    keyphrases  = jsonresp[documents]{0}[keyPhrases]
in  keyphrases

Следующие шаги

Дополнительные сведения о языке ИИ Azure, языке формул Power Query M или Power BI.