www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Детальный анализ настроений в Python (часть 1)

Дата публикации Sep 4, 2019

Источник:Pixabay

«Учиться выбирать сложно. Научиться выбирать хорошо сложнее. А научиться правильно выбирать в мире безграничных возможностей еще труднее, а может, и слишком сложно », - Барри Шварц

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

Эта серия статей направлена ​​на ответы на некоторые из приведенных выше вопросов с упором на детальный анализ настроений. В оставшихся разделах мы будем сравнивать и обсуждать результаты классификации, используя несколько известных библиотек NLP в Python. Методы, описанные ниже, подразделяются на три широкие категории:

На основе правилметоды:

  • TextBlob: Простой API на основе правил для анализа настроений
  • ВейдерЭкономная модель, основанная на правилах, для анализа настроений в социальных сетях.

Характеристика на основеметоды:

Embedding-основанные методы:

  • FastText: НЛП-библиотека, которая использует высокоэффективные представления на основе ЦП для встраивания слов для задач классификации.
  • чутье: Основанная на PyTorch структура для задач НЛП, таких как маркировка последовательности и классификация.

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

Почему мелкозернистые настроения?

Сегодня в большинстве случаев классификаторы настроений используются для бинарной классификации (только положительные или отрицательные настроения), и для этого есть веская причина: детальная классификация настроений являетсясущественноболее сложнойзадача! Типичная разбивка мелкозернистых настроений использует5дискретные классы, как показано ниже. Как можно себе представить, модели очень легко ошибаются по обе стороны от сильной / слабой интенсивности настроений благодаря замечательным тонкостям человеческого языка.

Типичные классовые метки (или интенсивности) для детальной классификации настроений

Метки двоичного класса могут быть достаточными для изучения крупномасштабных положительных / отрицательных тенденций в текстовых данных, таких как твиты, обзоры продуктов или отзывы клиентов, но у них есть свои ограничения. При выполнении извлечения информации с помощью сравнительных выражений, например: «этоМодель OnePlus X намного лучше, чем модель Samsung X ».детальный анализ может предоставить более точные результаты автоматизированной системе, которая определяет приоритеты при рассмотрении жалоб клиентов. Кроме того, предложения с двойной полярностью, такие как «Место было действительно отвратительно ... но люди там были великолепны.”Может привести к путанице в двоичных классификаторах настроений, приводящих к неверным прогнозам классов.

Вышеуказанные пункты обеспечивают достаточную мотивацию для решения этой проблемы!

Стэнфордский Сентимент Treebank

Стэнфордский Сентимент Treebank(SST-5 или SST-мелкозернистый) набор данных является подходящим эталоном для тестирования нашего приложения, поскольку он был разработан, чтобы помочь оценить способность модели понимать представленияструктура предложениявместо того, чтобы просто смотреть на отдельные слова в изоляции. SST-5 состоит из 11 855 предложений, извлеченных из обзоров фильмов с детальными надписями настроения [1–5], а также из 215 154 фраз, составляющих каждое предложение в наборе данных.

Необработанные данные с мелкозернистыми надписями настроения на основе фраз представлены в виде древовидной структуры, предназначенной для обученияРекурсивная нейронная тензорная сеть(RNTN) из их статьи за 2015 год. Компонентные фразы были построены путем анализа каждого предложения с использованием синтаксического анализатора Stanford (раздел 3 вбумага) и создание рекурсивной древовидной структуры, как показано на рисунке ниже. Глубокая нейронная сеть была затем обучена древовидной структуре каждого предложения, чтобы классифицировать чувства каждой фразы для получения совокупного чувства всего предложения.

Пример рекурсивной нейросетевой сети, классифицирующей мелкозернистые настроения (Источник:Оригинальная бумага)

Каково современное состояние?

Оригинальный RNTN, реализованный вСтэнфордская бумага[Socher et al.] Получил точность45,7%по классификации предложений полного предложения В последнее время сеть би-внимательных классификаций (BCN) дополненаELMo вложениябыл использован длядостичь значительно более высокой точностииз54,7%в наборе данных SST-5. Текущая (по состоянию на 2019 г.) современная точность набора данных SST-5 составляет64,4%, пометод, который использует вложения на уровне предложенийПервоначально предназначенный для решения перефразирующей задачи - он оказался на удивление хорошо и на детальном анализе настроений.

Хотя модели нейронного языка становятся все более мощными с 2018 года, могут потребоваться гораздо большие модели глубокого обучения (с гораздо большим количеством параметров), дополненные методами, основанными на знаниях (например, графы), чтобы достичь достаточного семантического контекста для точности 70–80% в детальный анализ настроений.

Преобразовать набор данных в табличную форму

Чтобы оценить наши методы НЛП и отличия каждого из них от других, мы будем использовать толькополные образцыв наборе обучающих данных (игнорируя фразы компонентов, поскольку мы не используем рекурсивный основанный на дереве классификатор, такой как статья Стэнфорда). Древовидная структура фраз преобразуется в необработанный текст и связанную с ним метку класса с помощьюpytreebankбиблиотека. Код для этого преобразования дерева в таблицу приведен врепозиторий GitHub этого проекта,

Преобразуйте данные дерева SST-5 в табличную форму, с которой нам будет проще работать

Текст полного предложения и метки его классов (дляtrain,devа такжеtestнаборы) записываются в отдельные текстовые файлы, используя разделитель табуляции между предложением и метками класса.

Исследовательский анализ данных

Затем мы можем более подробно изучить набор табличных данных, используя Pandas. Для начала прочитайте в обучающем наборе как DataFrame, указав разделитель табуляции, чтобы отличить метку класса от текста. Обратите внимание, что метки классов в столбце «truth»Приводятся к типу данныхcategoryв Пандах, а не оставляя его как строку.

import pandas as pd# Read train data
df = pd.read_csv('../data/sst/sst_train.txt', sep='\t', header=None, names=['truth', 'text'])df['truth'] = df['truth'].str.replace('__label__', '')
df['truth'] = df['truth'].astype(int).astype('category')
df.head()
Образец обучающих данных SST-5

Используя командуdf.shape[0]говорит нам, что у нас есть 8 544 учебных образца.

Сбалансирован ли набор данных?

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

import matplotlib.pyplot as pltax = df[‘truth’].value_counts(sort=False).plot(kind=’barh’)
ax.set_xlabel(“Number of Samples in training Set”)
ax.set_ylabel(“Label”)

Понятно, что большинство обучающих выборок относятся к классам 2 и 4 (слабо негативные / позитивные классы). Значительное количество образцов относится к нейтральному классу. Едва 12% выборок относятся к сильно отрицательному классу 1, что нужно учитывать при оценке точности нашего классификатора.

Что насчет тестового набора? Беглый взгляд говорит нам, что у нас есть 2210 тестовых выборок, с очень похожим распределением к обучающим данным - опять же, гораздо меньше выборок, относящихся к сильно отрицательным / положительным классам (1 или 5) по сравнению с другими классами. Это желательно, поскольку распределение тестовых наборов, на котором наш классификатор делает прогнозы, не слишком отличается от распределения обучающего набора.

Интересный момент упоминается воригинальная бумагаявляется то, что многие из действительно коротких текстовых примеров принадлежат нейтральному классу (то есть классу 3). Это можно легко визуализировать в пандах. Мы можем создать новый столбец, в котором будет храниться длина строки каждого образца текста, а затем отсортировать строки DataFrame в порядке возрастания их длины текста.

df['len'] = df['text'].str.len()  # Store string length of each sampledf = df.sort_values(['len'], ascending=True)
df.head(20)
Метки классов для действительно коротких примеров в тестовом наборе

Образцы с явно полярными словами, такими как «хороший» и «любимый», предложили бы больший контекст классификатору чувств, однако для нейтрально звучащих слов (таких как «Хопкинс» или «Бримфул») классификатор должен был бы не только работать с очень маленьким контекстом, то есть с образцами отдельных слов, но также иметь возможность справляться с неоднозначными или невидимыми словами, которые не фигурируют в учебном словаре.

Метки данных не идеальны!

Как упоминалось в документе, набор данных SST был помечен аннотаторами человека через Amazon Mechanical Turk. Аннотаторам были показаны случайно выбранные фразы, для которых они выбрали метки изнепрерывныйползунок.дискретныйМетка настроения, принадлежащая одному из пяти классов, была реконструирована на основе среднего числа меток, выбранных несколькими аннотаторами. Во время аннотации использовалась случайная выборка, чтобы гарантировать, что на маркировку не повлияла фраза, которая предшествовала ей.

Интерфейс маркировки для набора данных SST (источник:Оригинальная бумага)

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

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

Помня об этом, мы можем приступить к разработке нашей системы классификации настроений!


методология

Общий рабочий процесс для обучения модели и оценки показан ниже.

Классификация настроений: обучение и оценка

Модельное обучение:Каждый классификатор (кроме основанных на правилах) обучается на 8544 образцах из учебного комплекта SST-5 с использованием алгоритма обучения под наблюдением. Отдельные учебные сценариидоступно в репозитории GitHub проекта,

Прогноз:Согласно нашей философии объектно-ориентированного проектирования, мы избегаем повторения блоков кода, которые выполняют одни и те же задачи в различных методах классификации.Baseкласс определен в Python, который содержит обычно используемые методы: один для чтения данных SST-5 в Pandas DataFrame (read_data), а другой - для расчета точности классификации модели и оценки F1 (accuracy). Хранение набора данных в DataFrame Pandas таким способом делает очень удобным применение пользовательских преобразований и пользовательских функций, избегая при этом чрезмерного использования циклов for.

Базовый класс утилит для всех классификаторов

Далее каждый отдельный классификатор, добавленный в нашу структуру, должен наследоватьBaseкласс, определенный выше. Чтобы сделать структуру последовательной,scoreметод иpredictметод включается в каждый новый классификатор настроений, как показано ниже.scoreМетод выводит уникальный класс чувств для образца текста, аpredictМетод применяет метод Score к каждому образцу в тестовом наборе данных для вывода нового столбца.'pred'в тесте DataFrame. Затем легко вычислить точность модели и баллы F1, используяaccuracyметод, определенный вBaseучебный класс.

Пример класса предикторов настроения

Оценка:Чтобы оценить точность модели,матрица путаницымодели строится с использованием scikit-learn и matplotlib (plotter.pyна GitHub). Матрица путаницы сводит в таблицу количество правильных предсказаний в зависимости от количества неправильных предсказаний для каждого класса, поэтому становится легче увидеть, какие классы наименее точно предсказаны для данного классификатора. Обратите внимание, что матрица путаницы для нашего случая 5-класса является нормализованнойантидиагональная матрица- в идеале классификатор получит почти 100% правильных предсказаний, поэтому все элементы вне антидиагональности должны быть как можно ближе к нулю.

Идеализированная запутанная матрица (нормализованная) - называется «антидиагональная матрица»

Обучение и оценка моделей

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

1 - TextBlob

TextBlobпопулярная библиотека Python для обработки текстовых данных Он построен на вершине НЛТК,еще один популярный набор инструментов для обработки естественного языка для Python. TextBlob использует лексикон настроения (состоящий из предопределенных слов), чтобы назначить оценки для каждого слова, которые затем усредняются с использованием взвешенного среднего, чтобы дать общую оценку настроения предложения. Три оценки: «полярность», «субъективность» и «интенсивность» рассчитываются для каждого слова.

# A sentiment lexicon can be used to discern objective facts from subjective opinions in text. 
# Each word in the lexicon has scores for:
# 1) polarity: negative vs. positive (-1.0 => +1.0)
# 2) subjectivity: objective vs. subjective (+0.0 => +1.0)
# 3) intensity: modifies next word? (x0.5 => x2.0)

Некоторые интуитивно понятные правила жестко запрограммированы внутри TextBlob для обнаружения модификаторов (например, наречий на английском языке: «очень хорошо»), Которые увеличивают или уменьшают общую оценку полярности предложения. Более подробное описание этих правил доступнов этом блоге,

Оценка настроения:Чтобы преобразовать показатель полярности, возвращаемый TextBlob (непрерывное значение с плавающей точкой в ​​диапазоне [-1, 1]), в мелкозернистую метку класса (целое число), мы можем использоватьбиннинга, Это легко сделать в Пандах, используяpd.cutфункция - она ​​позволяет нам переходить от непрерывной переменной к категориальной переменной с использованием бинов одинакового размера в интервале с плавающей запятой всех результатов TextBlob в результатах.

Оценка:Поскольку мы имеем дело с несбалансированными классами во время обучения и тестирования, мы смотрим намакросОценка F1 (которая является средним по гармонике для макро-усредненной точности и отзыва), а также точность классификации. Как можно видеть, точность метода классификации TextBlob очень низкая, как и оценка F1.

График матрицы путаницы показывает более подробную информацию о том, какие классы были наиболее неправильно предсказаны классификатором.

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

Чтобы прочитать приведенный выше график матрицы путаницы, посмотрите на ячейки вдольанти-диагональ, Ячейка [1, 1] показывает процент выборок, принадлежащих к классу 1, который классификатор предсказал правильно, ячейка [2, 2] для правильных предсказаний класса 2 и т. Д. Ячейки, удаленные от антидиагональной, показывают процент неправильных предсказаний, сделанных для каждого соответствующего класса - например, глядя на ячейку [4, 5], мы можем видеть, что 47% всех выборок, которые фактически принадлежат к классу 5, (неверно ) предсказывается как класс 4 TextBlob.

Ясно, что наш классификатор TextBlob предсказывает большинство выборок как нейтральные или умеренно положительные, то есть класса 3 или 4, что объясняет, почему точность модели так низка. Очень немногие прогнозы являются строго отрицательными или положительными - это имеет смысл, потому что TextBlob использует средневзвешенную оценку настроения по всем словам в каждом образце. Это может очень легко рассеять эффект предложений с сильно различающейся полярностью между словами, например:Этот фильм о лжи, обмане, но любви к друзьям, которых вы предаете«.

2 - VADER

«ВalenceизделияDитиционар и сЕntimentрeasoner »- еще одна популярная библиотека для анализа настроений, основанная на правилах. Как и TextBlob, он использует лексикон настроения, который содержит показатели интенсивности для каждого слова на основе аннотаций, помеченных человеком. Однако ключевое отличие заключается в том, что VADERбыл разработан с акцентом на тексты в социальных сетях, Это означает, что в нем много внимания уделяется правилам, которые отражают суть текста, обычно видимого в социальных сетях - например, короткие предложения с смайликами, повторяющийся словарный запас и обильное использование знаков препинания (например, восклицательных знаков). Ниже приведены некоторые примеры оценок интенсивности настроения, выдаваемых VADER.

В приведенных выше примерах текста незначительные изменения сделаны в том же предложении Обратите внимание, что VADER разбивает оценки интенсивности настроения на положительный, отрицательный и нейтральный компоненты, которые затем нормализуются и сдавливаются, чтобы оказаться в диапазоне [-1, 1] как «составной» показатель. Поскольку мы добавляем больше восклицательных знаков, заглавных букв и смайликов / смайликов, интенсивность становится все более и более экстремальной (к +/- 1).

Оценка настроения:Для возврата дискретных значений класса в наборе данных SST-5 мы применяем метод, аналогичный тому, который был сделан для TextBlob - непрерывный «составной» показатель полярности (float) преобразуется в дискретное значение с помощью биннинга через панды.pd.cutфункция. Это возвращает один из пяти классов для каждого тестового образца, сохраненный как новый столбец в результирующем DataFrame.

Оценка:Метод биннинга, использованный выше, является довольно грубым способом равномерного деления непрерывного (плавающего) значения из VADER на один из пяти необходимых нам дискретных классов. Тем не менее, мы видим общую точность классификации и улучшение показателя макро F1 по сравнению с TextBlob.

Матрица путаницы для VADER показывает намного больше классов, предсказанных правильно (вдоль антидиагональности), однако разброс неправильных предсказаний относительно диагонали также больше, что дает нам более «запутанную» модель.

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

Больший разброс (вне антидиагональности) для VADER можно объяснить тем фактом, что он присваивает только очень низкие или очень высокие составные оценки тексту, который имеетмногокапитализации, пунктуации, повторения и смайликов. Поскольку SST-5 на самом деле не имеет такого аннотированного текста (он сильно отличается от текста в социальных сетях), большинство прогнозов VADER для этого набора данных находятся в диапазоне от -0,5 до +0,5 (необработанные оценки). Это приводит к гораздо более узкому распределению при преобразовании в метки дискретных классов, и, следовательно, многие предсказания могут ошибаться по обе стороны от истинной метки.

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

3 -Логистическая регрессия

Двигаясь дальше от подходов, основанных на правилах, следующий метод - логистическая регрессия - один из наиболее часто используемых контролируемых алгоритмов обучения для классификации. Логистическая регрессия - это линейная модель, обучаемая на помеченных данных. Термин «линейный» важен, поскольку он означает, что алгоритм использует только линейные комбинации (то есть суммы, а не произведения) входных данных и параметров для создания прогнозирования класса.

Себастьян Рашкадает очень краткое объяснениео том, как логистическая регрессия приравнивается к очень простой, однослойной нейронной сети в своем блоге. Входные объекты и их веса вводятся в функцию активации (сигмоид для двоичной классификации или softmax для мультикласса). Выход классификатора - это просто индекс вектора sigmoid / softmax с наибольшим значением в качестве метки класса.

Источник:Блог Себастьяна Рашки

Для мультиклассовой логистической регрессииодин-против-отдыхМетод обычно используется - в этом методе мы обучаемСотдельные бинарные классификационные модели, гдеСэто количество классов Каждый классификаторF_C, дляс∈ {1,…,С} обучается предсказывать, является ли образец частью классасили не.

Преобразование слов в особенности:Чтобы преобразовать текст в функции, первым делом нужно использовать Scikit-LearnCountVectorizer.Это преобразует весь корпус (то есть все предложения) наших обучающих данных в матрицу подсчета токенов. Токены (слова, знаки пунктуации и т. Д.) Создаются с использованием токенизатора NLTK, а часто используемые стоп-слова, такие как «a», «an», «the», удаляются, поскольку они не повышают ценность оценки чувств. Затем матрица подсчета преобразуется в представление TF-IDF (Term-частотная обратная частота документа). Отнаучная документация:

Tf означает частоту членов, тогда как tf-idf означает частоту членов, умноженную на частоту обратного документа. Это общая схема взвешивания терминов в поиске информации, которая также нашла хорошее применение в классификации документов. Цель использования tf-idf вместо необработанных частот вхождения токена в данном документе состоит в том, чтобы уменьшить влияние токенов, которые встречаются очень часто в данном корпусе и, следовательно, эмпирически менее информативно, чем функции, встречающиеся в малая часть тренировочного корпуса.

Оценка настроения:Как только мы получим TF-IDF представление учебного корпуса, классификатор обучается, приспосабливая его к существующим функциям. Аnewton-cg”Решатель используется для оптимизации потерь в логистической регрессии иРегуляризация L2 используется по умолчанию, Метка настроения возвращается для каждого тестового образца (с помощью scikit-learn'slearner.predictметод) как индекс максимальной вероятности класса в выходном векторе softmax.

Оценка:Переход от метода, основанного на правилах, к методу, основанному на признаках, демонстрирует значительное улучшение общей точности классификации и баллов F1, как можно видеть ниже.

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

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

Модель логистической регрессии классифицирует большой процент истинных меток 1 и 5 (строго отрицательный / положительный) как принадлежащих ихсоседклассы (2 и 4). Кроме того, вряд ли какие-либо примеры правильно классифицируются как нейтральные (класс 3). Поскольку большинство учебных образцов относились к классам 2 и 4, это выглядит как логистический классификаторв основном узналособенности, которые встречаются в этих классах большинства,

4 - опорная векторная машина

Машины опорных векторов (SVM) очень похожи на логистическую регрессию с точки зрения того, как они оптимизируют функцию потерь для генерации границы решения между точками данных. Основное отличие, однако, заключается в использовании «функций ядра», то есть функций, которые преобразуют сложное нелинейное пространство решений в пространство с более высокой размерностью, так что можно найти подходящую гиперплоскость, разделяющую точки данных. Классификатор SVM стремится максимизировать расстояние каждой точки данных от этой гиперплоскости, используя «опорные векторы», которые характеризуют каждое расстояние как вектор.

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

Обучение и оценка настроений:Линейный SVM в scikit-learn настраивается с использованием аналогичного конвейера, как это было сделано для логистической регрессии, описанной ранее. Как только мы получим TF-IDF представление учебного корпуса, мы обучаем модель SVM, приспосабливая ее к особенностям обучающих данных. Используется функция потери шарнира с оптимизатором стохастического градиентного спуска (SGD), иРегуляризация L2 применяется во время обучения, Метка настроения возвращается (с помощью scikit-learn'slearner.predictметод) как индекс максимальной вероятности класса в выходном векторе softmax.

Оценка:Поскольку в реалистичном наборе данных, скорее всего, будет несколько выбросов, SVM на практике должен давать результаты, которые немного лучше, чем логистическая регрессия. Глядя на улучшение точности и оценки Ф1, это кажется правдой.

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

Каждая ячейка в матрице путаницы показываетпроцентпредсказаний, сделанных для соответствующей истинной метки.
Бок о бок: логистическая регрессия против SVM

Модель SVM предсказывает сильно отрицательные / положительные классы (1 и 5) более точно, чем логистическая регрессия. Тем не менее, он все еще не может предсказать достаточное количество выборок как принадлежащих к классу 3 - большой процент предсказаний SVM снова смещен в сторону доминирующих классов 2 и 4. Это говорит нам о том, что существует возможность для улучшения определения функций. Векторизатор счета в сочетании с преобразованием TF-IDF ничего не знает окак слова связаны друг с другом- они просто смотрят на количество совпадений слов в каждом образце, чтобы сделать вывод.Введите вложения слова,

5 - FastText

FastText, высокоэффективный, масштабируемый, на базе процессорабиблиотека для представления и классификации текста, был выпущен командой Facebook AI Research (FAIR) в 2016 году. Ключевой особенностью FastText является тот факт, что лежащая в его основе нейронная сеть изучает представления, иливложениячторассмотреть сходство между словами, В то время какWord2Vec(методика встраивания слов, выпущенная намного раньше, в 2013 году) сделала нечто похожее, есть некоторые ключевые моменты, которые выделяются в отношении FastText.

  • FastText рассматривает подслов с использованием набора n-грамм: например, «поезд» подразделяется на «tra», «rai» и «ain». Таким образом, представление слова более устойчиво к орфографическим ошибкам и незначительным изменениям правописания.
  • Неизвестные слова обрабатываются намного быстрее в FastText, потому что он может разбивать длинные слова на подслова, которые также могут появляться в других длинных словах, что дает ему лучший контекст.

Модуль Python:Хотя исходный код для FastText находится на C ++, официальный модуль Python был выпущен FAIR в июне 2019 года (после нескольких месяцев путаницы в сообществе). Это делает его очень удобным для обучения и тестирования нашей модели полностью в Python, без использования каких-либо внешних двоичных файлов. Однако, чтобы найти оптимальные гиперпараметры, рекомендуется интерфейс командной строки для FastText.

Обучающая модель FastText:Чтобы обучить модель FastText, используйтеfasttextИнтерфейс командной строки(Только для Unix) - содержит очень полезную утилиту для автонастройки гиперпараметра. В соответствии сдокументацияэта утилита оптимизирует все гиперпараметры для максимальной оценки F1, поэтому нам не нужно выполнять ручной поиск лучших гиперпараметров для нашего конкретного набора данных. Это выполняется с помощью следующей команды на терминале и занимает около 5 минут на процессоре.

Команда для поиска оптимальных гиперпараметров для FastText с использованием интерфейса командной строки

Приведенная выше команда указывает FastText обучать модель на обучающем наборе и проверять на наборе dev, оптимизируя гиперпараметры для достижения максимальной оценки F1. Флаг-autotune-modelsize 10Mговорит FastText оптимизировать модельквантованиепараметры (поясняемые ниже), так что размер окончательной обученной модели составляет менее 10 МБ, а-verboseопция включена, чтобы увидеть, какая комбинация гиперпараметров дает лучшие результаты.

💡СОВЕТ: Квантовать модель FastText:квантованиеуменьшает количество битов, необходимых для хранения весов модели, используя 16 или 8-битные целые числа, а не стандартные 32-битные числа с плавающей запятой. Это значительно уменьшает размер модели (на несколько порядков).FastText делает квантование очень удобнымв последнем выпуске интерфейса командной строки или модуля Python, как показано ниже (расширение квантованной модели.ftzне.binкак родительская модель). Параметр обрезки устанавливается в соответствии со значением, полученным при оптимизации гиперпараметров, что гарантирует, что окончательный размер модели останется ниже 10 МБ.

# Quantize model to reduce space usage                           model.quantize(input=train, qnorm=True, retrain=True, cutoff=110539)                           model.save_model(os.path.join(model_path, "sst5.ftz"))

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

Для получения более подробной информации о значении каждого гиперпараметра и о том, как FastText работает под капотом,эта статья дает хорошее описание,

Оценка настроения:Прогнозы настроений делаются путем загрузки в обученные, квантованные (.ftz ) Модель FastText. Модель имеетpredictметод, который выводит наиболее вероятные метки на основе вероятностей, извлеченных из выходного слоя softmax. Для прогнозирования класса мы просто выбираем наиболее вероятную метку класса из этого списка вероятностей, непосредственно извлекая ее как целое число.

Оценка:Можно видеть, что точность модели FastText и оценки F1 существенно не улучшают SVM для этого набора данных.

Оценка F1 для FastText, однако, немного выше, чем для SVM.

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

Путаница между двумя моделями подчеркивает это более подробно.

Бок о бок: SVM против FastText

Ключевым отличием результатов FastText и SVM является процент правильных прогнозов длянейтральный класс, 3. SVM правильно предсказывает больше элементов в основных классах (2 и 4), чем в FastText, что подчеркивает слабость основанных на функциях подходов в задачах классификации текста с несбалансированными классами Вложения слов и представления подслов, используемые FastText, по своей природе придают ему дополнительный контекст. Это особенно верно, когда дело доходит до классификации неизвестных слов, которые довольно распространены в нейтральном классе (особенно очень короткие выборки с одним или двумя словами, в основном невидимые).

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

6 - Чутье

В 2018 годуZalando Research опубликовали современную библиотеку NLP для тегирования последовательностей с глубоким обучениемназываетсячутье, Это быстро стало популярной структурой для задач классификации, потому что это позволилообъединяя различные виды встраивания словвместе, чтобы дать модели еще большую контекстную осведомленность.

В основе Flair лежит контекстуализированное представление, называемоестроковые вложения.Чтобы получить их, предложения из большого корпуса разбиты на последовательности символов для предварительной подготовки модели двунаправленного языка, которая «изучает» вложения на уровне символов. Таким образом, модель учится устранять неоднозначность чувствительных к регистру символов (например, имен собственных от похожих звучащих распространенных существительных) и других синтаксических паттернов на естественном языке, что делает его очень мощным для задач, таких как распознавание именованных объектов и тегирование части речи ,

Иллюстрация метки последовательности BiLSTM с контекстными вложениями символов (Источник)

Обучение модели Flair для классификации:Что делает Flair чрезвычайно удобным и мощным, так это его способность«Стек» вложения слов(например, ELMo или BERT) с вложением «Flair» (т.е. строка). В приведенном ниже примере показано, как создать встраиваемое вложение BERT (базовое, обшитое) или ELMo (оригинальное) с встраиванием Flair. Сложенное представление преобразуется ввложение документато есть тот, который дает одно вложение для всего образца текста (независимо от того, сколько предложений). Это позволяет нам сжать сложное представление произвольной длины в тензорное представление фиксированного размера, которое мы можем поместить в память GPU для обучения.

Сила стекирования вложений (BERT или ELMo) таким образом проистекает из того факта, чтостроковые вложения на уровне символов захватывают скрытую синтаксически-семантическую информациюбез использования понятия слова(они явно фокусируются на представлениях подслов) - в то время как вложенные вложения слов из внешней предварительно обученной модели нейронной сети дают дополнительный контекст на уровне слов. Это расширяет возможности модели по определению широкого спектра синтаксических особенностей в данном тексте, позволяя ей превзойти производительность классических моделей встраивания слов.

Примечания по обучению:Модель Flair требует GPU для обучения, и из-за своей архитектуры LSTM распараллеливание не так эффективно по сравнению с архитектурами трансформаторов - поэтому время обучения даже на этом относительно небольшом наборе данных SST-5 составляет порядканесколько часов, Для этого проекта было проведено 25 эпох обучения, и потери при проверке все еще снижались, когда обучение было остановлено, что означает, что модель была недостаточно приспособлена. В результате, используя Flair в реальном мире, большой набор данных для задач классификации может привести к значительному снижению затрат.

Оценка настроения:Как и прежде, методика скоринга реализована с помощью существующего фреймворка в Pandas. Обученная модель сначала загружается, а текст преобразуется вSentenceобъект (который является токенизированным представлением каждого предложения в образце). Модель Flairpredictметод вызывается для прогнозирования метки класса с использованием максимального индекса из выходного слоя softmax, который затем извлекается как целое число и сохраняется по выборкам в Pandas DataFrame. Поскольку вывод модели может занять довольно много времени даже на графическом процессоре,tqdmиндикаторРеализовано, чтобы показать, сколько тестовых образцов закончила предсказывать модель.

Оценка:Два отдельных составных представления используются для обучения двух отдельных моделей - одна с использованием BERT (базовая, корпусная), а другая с использованием ELMo (оригинал). Вывод выполняется с использованием каждой модели, чтобы дать следующие результаты.

Значительное улучшение в точности и баллах F1 по сравнению с моделями FastText и SVM! Изучение матриц путаницы для каждого случая позволяет понять, какие классы были лучше предсказаны, чем другие.

На приведенных выше графиках показано, почему укладка с вложениями BERT получила намного меньше, чем укладка с вложениями ELMo. Случай BERT почти не дает правильных прогнозов для класса 1 - однако он дает намного больше прогнозов в классе 4. Модель ELMo, кажется, складывается намного лучше с вложениями Flair и генерирует большую долю правильных предсказаний для классов меньшинства (1 и 5)

Что пошло не так с моделью Flair + BERT во время тренировки? Возможно, что перепроектирование и уменьшение количества скрытых измерений (во время суммирования) привело к потере знаний из предварительно обученной модели BERT, объясняя, почему эта модель недостаточно хорошо обучалась на сильно отрицательных выборках. Не совсем понятно, почему укладка вложений ELMo приводит к гораздо лучшему обучению по сравнению со сложением с помощью BERT. В обоих случаях, однако, модели Flair занимали много времени (несколько часов) для обучения, что может стать огромным узким местом в реальном мире - тем не менее, они подчеркивают силу использования контекстных вложений над классическими вложениями слов для мелкозернистая классификация.


Выводы

В этом посте шесть различных классификаторов NLP в Python были использованы для прогнозирования классов в детализированном наборе данных SST-5. Используя все более и более сложные модели, мы смогли повысить точность и макро-среднюю оценку F1 до примерно 48%, что не так уж плохо! В следующем посте мы увидим, как улучшить эти показатели, используя модель трансформера, основанную на трансферном обучении.

Сравнение результатов: Детальная классификация настроений по SST-5

Что еще мы можем узнать?

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

Ключевой аспект моделей машинного обучения (особенно моделей глубокого обучения) заключается в том, что их общеизвестно трудно интерпретировать. Чтобы решить эту проблему, мы рассмотримобъясняянаши результаты и ответы на вопрос: «Почему классификатор X предсказал этот конкретный класс для этого конкретного образца?».LIME Python библиотекаиспользуется для этой задачи, которая будет описана в следующем посте.

Если вы дошли до конца этой статьи, спасибо за чтение!

  • Это былоЧасть 1серии о детальном анализе настроений в Python.
  • Часть 2описывает, как построить модуль объяснения с использованием LIME и объяснить предсказания классов на двух репрезентативных тестовых выборках.
  • Часть 3рассказывается о том, как еще больше повысить точность и баллы F1, построив собственную модель трансформатора и используя трансферное обучение.

НОТА:Все учебные и оценочные коды для этого анализадоступно в репозитории Github проекта,так что не стесняйтесь воспроизводить результаты и делать свои собственные выводы!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map