Создание модели анализа тональности в Студии машинного обучения AzureCreate a sentiment analysis model in Azure Machine Learning Studio

Вы можете использовать Студию машинного обучения Azure, чтобы создавать и вводить в эксплуатацию модели текстовой аналитики.You can use Azure Machine Learning Studio to build and operationalize text analytics models. Эти модели могут быть полезными, например, при решении проблем с классификацией документов или анализом мнений.These models can help you solve, for example, document classification or sentiment analysis problems.

В эксперименте текстовой аналитики, как правило, выполняются следующие действия:In a text analytics experiment, you would typically:

  1. Очистка и предварительная обработка набора текстовых данных.Clean and preprocess text dataset
  2. Извлечение из предварительно обработанного текста векторов числовых признаков.Extract numeric feature vectors from pre-processed text
  3. Обучение модели классификации или регрессии.Train classification or regression model
  4. Оценка и проверка модели.Score and validate the model
  5. Развертывание модели в рабочей среде.Deploy the model to production

В данном учебнике эти действия демонстрируются на примере модели анализа мнений с использованием набора данных Amazon Book Reviews (Обзоры книг на Amazon). См. исследовательскую работу "Biographies, Bollywood, Boom-boxes and Blenders: Domain Adaptation for Sentiment Classification" (Биографии, Болливуд, бум-боксы и блендеры: адаптация домена для классификации мнений пользователей), авторы — Джон Блитцер (John Blitzer), Марк Дредзе (Mark Dredze) и Фернандо Перейра (Fernando Pereira); Ассоциация компьютерной лингвистики (ACL), 2007 г. Этот набор данных состоит из оценок в обзоре (1-2 или 4-5) и текста в произвольной форме.In this tutorial, you learn these steps as we walk through a sentiment analysis model using Amazon Book Reviews dataset (see this research paper “Biographies, Bollywood, Boom-boxes and Blenders: Domain Adaptation for Sentiment Classification” by John Blitzer, Mark Dredze, and Fernando Pereira; Association of Computational Linguistics (ACL), 2007.) This dataset consists of review scores (1-2 or 4-5) and a free-form text. Целью является прогнозирование оценки в обзоре: низкая (1-2) или высокая (4-5).The goal is to predict the review score: low (1-2) or high (4-5).

Эксперименты, рассматриваемые в этом руководстве, можно найти в коллекции решений ИИ Azure.You can find experiments covered in this tutorial at Azure AI Gallery:

Predict Book Reviews (Прогнозирование оценок в обзоре книг).Predict Book Reviews

Predict Book Reviews - Predictive Experiment (Прогнозирование оценок в обзоре книг — прогнозной эксперимент).Predict Book Reviews - Predictive Experiment

Шаг 1. Очистка и предварительная обработка набора текстовых данных.Step 1: Clean and preprocess text dataset

Мы начинаем эксперимент с разделения оценок в обзоре на категориальные контейнеры низких и высоких оценок, чтобы сформулировать проблему как двухклассовую классификацию.We begin the experiment by dividing the review scores into categorical low and high buckets to formulate the problem as two-class classification. Для этого мы используем модули Edit Metadata (Изменение метаданных) и Group Categorical Values (Значения категорий группы).We use Edit Metadata and Group Categorical Values modules.

Создание метки

Затем мы выполняем очистку текста с помощью модуля Preprocess Text (Предварительная обработка текста).Then, we clean the text using Preprocess Text module. Очистка снижает количество шумов в наборе данных, помогает найти наиболее важные признаки и повысить точность конечной модели.The cleaning reduces the noise in the dataset, help you find the most important features, and improve the accuracy of the final model. Удаляются стоп-слова (такие как артикли или частицы), числа, специальные знаки, повторяющиеся знаки, адреса электронной почты и URL-адреса.We remove stopwords - common words such as "the" or "a" - and numbers, special characters, duplicated characters, email addresses, and URLs. Также текст преобразовывается в нижний регистр, выполняется лемматизация слов и определяются границы предложений, которые затем обозначаются в предварительно обработанном тексте символом |||.We also convert the text to lowercase, lemmatize the words, and detect sentence boundaries that are then indicated by "|||" symbol in pre-processed text.

Preprocess Text

Можно ли использовать настраиваемый список стоп-слов?What if you want to use a custom list of stopwords? Его можно передать в качестве дополнительных входных данных.You can pass it in as optional input. Также можно использовать настраиваемые регулярные выражения с синтаксисом C# для замены подстрок и удаления слов по частям речи (существительные, глаголы или прилагательные).You can also use custom C# syntax regular expression to replace substrings, and remove words by part of speech: nouns, verbs, or adjectives.

Когда предварительная обработка завершена, мы разделяем данные на наборы для обучения и тестирования.After the preprocessing is complete, we split the data into train and test sets.

Шаг 2. Извлечение из предварительно обработанного текста векторов числовых признаков.Step 2: Extract numeric feature vectors from pre-processed text

Чтобы создать модель из текстовых данных, как правило, требуется преобразовать произвольный текст в векторы числовых признаков.To build a model for text data, you typically have to convert free-form text into numeric feature vectors. В этом примере для преобразования текстовых данных в такой формат используется модуль Extract N-Gram Features from Text (Извлечение из текста признаков N-грамм).In this example, we use Extract N-Gram Features from Text module to transform the text data to such format. Этот модуль принимает столбец слов, разделенных пробелами, и вычисляет словарь слов, или N-граммы слов, которые отображаются в наборе данных.This module takes a column of whitespace-separated words and computes a dictionary of words, or N-grams of words, that appear in your dataset. Затем модуль подсчитывает, сколько раз каждое слово, или N-грамм, встречается в каждой записи, и создает на основании этих подсчетов векторы признаков.Then, it counts how many times each word, or N-gram, appears in each record, and creates feature vectors from those counts. В этом учебнике для N-грамм задано значение 2, поэтому наши векторы признаков включают отдельные слова и сочетания из двух последовательных слов.In this tutorial, we set N-gram size to 2, so our feature vectors include single words and combinations of two subsequent words.

Извлечение N-грамм

При подсчете N-грамм применяются взвешенные значения TF*IDF (частота условия — инверсная частота в документе).We apply TF*IDF (Term Frequency Inverse Document Frequency) weighting to N-gram counts. Этот подход добавляет взвешенные значения слов, которые часто встречаются в одной записи, но редко — по всему набору данных.This approach adds weight of words that appear frequently in a single record but are rare across the entire dataset. Другие варианты включают двоичные значения, TF и взвешенные значения диаграммы.Other options include binary, TF, and graph weighing.

Такие текстовые признаки часто обладают высокой размерностью.Such text features often have high dimensionality. Например, если ваш текст состоит из 100 000 уникальных слов, то пространство признаков будет иметь 100 000 размеров, или даже больше (когда используются N-граммы).For example, if your corpus has 100,000 unique words, your feature space would have 100,000 dimensions, or more if N-grams are used. Модуль "Extract N-Gram Features from Text" (Извлечение из текста признаков N-грамм) предоставляет набор параметров для уменьшения размерности.The Extract N-Gram Features module gives you a set of options to reduce the dimensionality. Можно исключить слова, которые являются короткими, длинными, либо встречаются слишком редко или часто, чтобы влиять на прогнозное значение.You can choose to exclude words that are short or long, or too uncommon or too frequent to have significant predictive value. В этом учебнике мы исключаем N-граммы, которые встречаются реже чем в 5 записях или чаще чем в 80 % записей.In this tutorial, we exclude N-grams that appear in fewer than 5 records or in more than 80% of records.

Вы также можете использовать выбор признаков, чтобы отбирались только те признаки, которые максимально связаны с целью прогноза.Also, you can use feature selection to select only those features that are the most correlated with your prediction target. Мы используем выбор признаков хи-квадрат, чтобы отобрать 1000 признаков.We use Chi-Squared feature selection to select 1000 features. Словарь выбранных слов или N-грамм можно просмотреть, щелкнув правую часть выходных данных модуля "Extract N-Gram Features from Text" (Извлечение из текста признаков N-грамм).You can view the vocabulary of selected words or N-grams by clicking the right output of Extract N-grams module.

В качестве альтернативы этому модулю можно использовать модуль "Функции хэширования".As an alternative approach to using Extract N-Gram Features, you can use Feature Hashing module. Однако имейте в виду, что модуль Функции хэширования не имеет встроенной функции выбора признаков или взвешенных значений TF*IDF.Note though that Feature Hashing does not have build-in feature selection capabilities, or TF*IDF weighing.

Шаг 3. Обучение модели классификации или регрессии.Step 3: Train classification or regression model

Итак, текст преобразован в столбцы числовых признаков.Now the text has been transformed to numeric feature columns. Набор данных по-прежнему содержит строковые столбцы из предыдущих шагов, поэтому для их исключения мы используем модуль "Select Columns in Dataset" (Выбор столбцов в наборе данных).The dataset still contains string columns from previous stages, so we use Select Columns in Dataset to exclude them.

Затем мы используем двухклассовую логистическую регрессию для прогнозирования цели: высокая или низкая оценка в обзоре.We then use Two-Class Logistic Regression to predict our target: high or low review score. На этом этапе задача текстовой аналитики преобразовывается в обычную задачу классификации.At this point, the text analytics problem has been transformed into a regular classification problem. Вы можете использовать средства, доступные в Студии машинного обучения Azure, для улучшения модели.You can use the tools available in Azure Machine Learning Studio to improve the model. Например, можно поэкспериментировать с разными классификаторами, чтобы узнать, насколько точные результаты они предоставляют, или воспользоваться настройкой гиперпараметров для повышения точности.For example, you can experiment with different classifiers to find out how accurate results they give, or use hyperparameter tuning to improve the accuracy.

Обучение и оценка

Шаг 4. Оценка и проверка модели.Step 4: Score and validate the model

Как проверить обученную модель?How would you validate the trained model? Мы оцениваем ее на основе тестового набора данных и анализируем точность.We score it against the test dataset and evaluate the accuracy. Однако модель усвоила словарь N-грамм и их взвешенные значения из набора данных для обучения.However, the model learned the vocabulary of N-grams and their weights from the training dataset. Поэтому при извлечении признаков из тестовых данных мы должны использовать этот словарь и эти взвешенные значения, а не создавать словарь заново.Therefore, we should use that vocabulary and those weights when extracting features from test data, as opposed to creating the vocabulary anew. Следовательно, мы добавляем модуль "Extract N-Gram Features from Text" (Извлечение из текста признаков N-грамм) в ветвь оценки эксперимента, подключаем выходной словарь из ветви обучения и выбираем режим словаря "только для чтения".Therefore, we add Extract N-Gram Features module to the scoring branch of the experiment, connect the output vocabulary from training branch, and set the vocabulary mode to read-only. Мы также отключаем фильтрацию N-грамм по частоте, задав минимальное значение — 1 экземпляр, а максимальное значение — 100 %, и отключаем выбор признаков.We also disable the filtering of N-grams by frequency by setting the minimum to 1 instance and maximum to 100%, and turn off the feature selection.

После преобразования текстового столбца в тестовых данных в столбцы числовых признаков мы исключаем строковые столбцы из предыдущих шагов, как в ветви обучения.After the text column in test data has been transformed to numeric feature columns, we exclude the string columns from previous stages like in training branch. Затем мы используем модуль "Score Model" (Оценка модели) для выполнения прогнозов и модуль "Evaluate Model" (Анализ модели) для оценки точности.We then use Score Model module to make predictions and Evaluate Model module to evaluate the accuracy.

Шаг 5. Развертывание модели в рабочей среде.Step 5: Deploy the model to production

Модель почти готова к развертыванию в рабочей среде.The model is almost ready to be deployed to production. Если модель развернута как веб-служба, то в качестве входных данных она принимает строку с текстом в произвольной форме, а возвращает прогнозную оценку — "высокая" или "низкая".When deployed as web service, it takes free-form text string as input, and return a prediction "high" or "low." Она использует усвоенный словарь N-грамм для преобразования текста в признаки, а обученную модель логистической регрессии — для формирования прогноза на основе этих признаков.It uses the learned N-gram vocabulary to transform the text to features, and trained logistic regression model to make a prediction from those features.

Чтобы настроить прогнозный эксперимент, сначала необходимо сохранить словарь N-грамм как набор данных, а также обученную модель логистической регрессии из ветви обучения эксперимента.To set up the predictive experiment, we first save the N-gram vocabulary as dataset, and the trained logistic regression model from the training branch of the experiment. Затем мы сохраняем эксперимент с помощью команды "Сохранить как", чтобы создать диаграмму эксперимента для прогнозного эксперимента.Then, we save the experiment using "Save As" to create an experiment graph for predictive experiment. Мы удаляем из эксперимента модуль "Split Data" (Разделение данных) и ветвь обучения.We remove the Split Data module and the training branch from the experiment. Затем мы подключаем сохраненные ранее словарь N-грамм и модель к модулям "Extract N-Gram Features from Text" (Извлечение из текста признаков N-грамм) и "Score Model" (Оценка модели) соответственно.We then connect the previously saved N-gram vocabulary and model to Extract N-Gram Features and Score Model modules, respectively. Кроме того, мы удаляем модуль "Evaluate Model" (Анализ модели).We also remove the Evaluate Model module.

Вставляем модуль "Select Columns in Dataset" (Выбор столбцов в наборе данных) перед модулем "Preprocess Text" (Предварительная обработка текста), чтобы удалить столбец меток, и снимаем флажок "Append score column to dataset" (Добавить в набор данных столбец оценок) в модуле "Score Model" (Оценка модели).We insert Select Columns in Dataset module before Preprocess Text module to remove the label column, and unselect "Append score column to dataset" option in Score Module. Таким образом, веб-служба не запрашивает метку, которую она пытается прогнозировать, и в результате входные признаки не выводятся на экран.That way, the web service does not request the label it is trying to predict, and does not echo the input features in response.

Прогнозный эксперимент

Теперь у нас готов эксперимент, который можно опубликовать как веб-службу и вызывать с помощью интерфейсов API "запрос-ответ" или пакетного выполнения.Now we have an experiment that can be published as a web service and called using request-response or batch execution APIs.

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

Дополнительные сведения о модулях текстовой аналитики см. в документации MSDN.Learn about text analytics modules from MSDN documentation.