Дипломная работа: Речевые маркеры интолерантности и компьютерные инструменты их выявления

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Ещё один метод, который требует меньше вычислительной мощности, чем логистическая регрессия, и проще интерпретируется - это метод ближайших соседей (k-Nearest-Neighbours, далее kNN). Он заключается в том, что новый анализируемый объект относится к тому же классу, что и большинство из k ближайший к нему из тренировочной выборки, при этом близость определяется по заранее заданной метрике расстояния. Особенностью kNN является большое количество параметров, которые нужно подбирать под каждую задачу методом проб и ошибок, тестируя каждый новый вариант на отдельной выборке. Среди таких параметров не только само число соседей, по которым будет приниматься решение о принадлежности тому или иному классу, но и веса этих соседей, если они необходимы, а также метрика расстояния, а в задачах классификации текстов - функция близости. Однако эти недостатки покрываются лёгкостью интерпретации выдаваемой оценки, а также быстротой обучения и компиляции алгоритма.

Также в качестве инструмента классификации используется алгоритм машины опорных векторов (Support Vector machine, далее SVM). Он основывается на значениях n заранее определённых признаков анализируемого объекта и представляет его как точку в n-мерном пространстве. На базе множества объектов обучающей выборки алгоритм ищет гиперплоскость, которая лучше всего разделила бы объекты двух классов. Любой новый объект, не входивший в тренировочную выборку, оценивается в координатах пространства и на основе того, с какой стороны от гиперплоскости он находится, делается вывод о принадлежности к тому или иному классу. У алгоритма SVM также достаточно много параметров, подбирающихся под конкретную задачу, таких как тип ядра, коэффициент ядра, от которого зависит точность обучения на тренировочных данных, а также параметр штрафа за неправильную классификацию, который влияет на корректность последующей классификации и гладкость разделяющей гиперплоскости. Алгоритм на опорных векторах достаточно эффективен при большом количестве признаков и при наличии чётких классов, однако при больших объёмах данных его обучение занимает очень долгое время, кроме того, он плох при работе с «зашумленными» данными, в которых разные классы значительно перекрываются, а также он не даёт явной оценки вероятности, в отличие от других алгоритмов.

Однако не все методы машинного обучения основываются на линейной классификации. Часть моделей берут за основу тот же принцип, которым руководствуются люди, когда классифицируют ту или иную вещь: они задают последовательность простых вопросов, которые в итоге приводят к одному из нескольких возможных ответов. Такие модели называются решающими деревьями или деревьями решений (Decision Trees). В процессе обучения они строят граф, внутренними вершинами которого являются максимально простые условия, а листами - определённые прогнозы, удовлетворяющие цепочке приводящих к ним условий. При классификации прогноз в листе обозначает либо класс, либо вероятности принадлежности к разным классам. Решающие деревья требуют достаточно мало вычислительной мощности, способны обрабатывать пропущенные значения и легки в интерпретации результатов, однако при работе с ними нужно быть крайне осторожным: такой алгоритм легко может переобучиться и дойти до того, что каждому объекту обучающей выборки будет соответствовать отдельный класс. От такого алгоритма не будет никакого толку при анализе новых данных.

Чтобы улучшить работу алгоритма, часто применяются ансамбльные методы (Ensemble Methods), дающие высокий прирост производительности в особенности тем моделям, которые основаны на решающих деревьях. Они поддерживают баланс между смещением и дисперсией и не позволяют модели переобучаться. Суть ансамбльного метода заключается в том, что он комбинирует несколько индивидуальных моделей, и на основе их результатов делают итоговое предсказание. Среди ансамбльных алгоритмов особенно выделяется метод случайного леса (Random Forest), способный решать как задачи классификации, так и регрессии. Он создаёт несколько деревьев решений вместо одного, классифицируемый объект даётся на вход каждому из этих деревьев, и каждое дерево делает предсказание. Затем алгоритм случайного леса выбирает итоговый результат по максимальному числу голосов в случае задачи классификации или по среднему значению в случае задачи регрессии. Такой алгоритм более точен и лучше обрабатывает данные, чем одно решающее дерево, сохраняет баланс в несбалансированных наборах данных, однако стоит заметить, что в задачах регрессии он показывает себя хуже, чем в задачах классификации.

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

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

Глава 3. Автоматическое выявление маркеров интолерантности текста

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

3.1 Программа на основе словарей

3.1.1 Подготовка опорных словарей

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

Для наполнения начальных словарей были взяты слова из лексикона RuSentiLex 2017 года, созданного Н.В. Лукашевич и содержащего более 16 тысяч позиций. Сам лексикон состоит из упорядоченных по алфавиту слов и выражений, имеющих компонент оценки тональности в своём значении. Слова для лексикона были извлечены автоматически и проанализированы экспертами, тональность слову присваивалась на основе его употребления в новостных текстах. При этом все слова разделены на три группы: позитивная оценка, нейтральная и негативная, не содержащие обсценной лексики. Стоит отметить, что для каждого слова в лексиконе указан также источник тональности: оценка, чувство или факт, а также перечисляются разные варианты тональности для многозначных слов. Для удобства использования в данной задаче позитивные и нейтральные слова были объединены в один словарь, противопоставленный словарю негативно-оценочной лексики, кроме того, слова, занесённые в лексикон как констатации факта, не относились к интолерантной лексике, так как у них отсутствовал негативный эмоционально-оценочный компонент значения.

Однако объёма лексикона оказалось недостаточно для создания начальных словарей, поэтому к нему были добавлены слова из текстов, собранных в процессе других исследований. Были собраны тексты новостных сводок с сайтов изданий «РИА Новости», «Аргументы и Факты», «Газета.Ru», «Lenta.Ru» для выборки нейтральной лексики и авторские статьи оппозиционного издания «Грани» для выборки интолерантной лексики. Новостные тексты были выбраны из-за их ориентирования на широкую аудиторию, соблюдение норм современного русского языка и отсутствие эксплицированной авторской оценки, которая могла бы маркироваться интолерантной лексикой. В то же время, авторские статьи оппозиционных изданий отличаются эксплицированной негативной оценкой, выражающейся в жаргонизмах, ругательствах и других типах интолерантной лексики. Также к словарю интолерантной лексики были добавлены слова, отобранные в ходе предыдущего исследования из текстов авторских статей газеты «Аргументы и Факты». Всего было обработано 470 текстов и добавлено в словари 30000 слов для нейтрального словаря и 80 слов для интолерантного словаря (с учётом повторяющихся нелемматизированных единиц).

Ввиду флективности русского языка, хранить в словарях полные формы слов представляется не самым оптимальным решением, так как в таких случаях для одного слова может храниться несколько форм, что будет увеличивать время работы алгоритма и усложнять работу пользователю, так как при встрече не имеющейся в словаре формы того же слова программа не сможет её опознать. Однако использование N-грамм также представляется спорным решением по нескольким причинам. Так, использование начальных N-грамм слов может привести к тому, что программа будет путать разные слова с разной тональностью, но начинающиеся с одного набора символов, а сохранение длинных N-грамм приведёт к сохранению большинства слов в исходном виде. Если же разбивать слова на наборы из всех возможных N-грамм, это затруднит работу программы по выделению определённой лексики, так как будут возможны случаи, в которых программа будет опознавать слово как интолерантное по одной составляющей, к примеру, по окончанию. Оптимальным вариантом можно считать использование леммы слова, которую можно получить с помощью морфологического анализатора MorphAnalyzer и его реализации для языка Python - библиотеки pymorphy2. Это позволит сократить размер внутренних словарей и упростить обработку текста для итоговой программы.

После объединения словарей лексикона RuSentiLex, маркеров, полученных в результате предыдущих исследований, маркеров, извлечённых из текстов новостных сводок, и итоговой лемматизации размер начальных словарей составил 15500 слов для нейтрального словаря и 6500 слов для интолерантного словаря.

3.1.2 Принцип работы алгоритма

Интерфейс программы был написан с использованием библиотеки tkinter и скомпилирован в исполняемое приложение с помощью библиотеки pyinstaller.

Для работы программе необходимы три основных файла: текст для анализа, словарь нейтральной лексики и словарь интолерантной лексики. Все файлы загружаются пользователем в формате .txt (простой текстовый файл), файлы словарей содержат списки слов, разделённые символом новой строки и/или пробелами. Программа разбивает файлы на подстроки, а затем на отдельные слова, из которых формируются списки маркеров, с которыми она будет работать в дальнейшем. Начальные словари даются уже с лемматизированными словами, что позволяет упростить работу алгоритма.

Текст для анализа приводится к нижнему регистру и очищается от пунктуационных и непечатаемых знаков, а также слов на иностранных языках. Очищенный текст в виде списка слов передаётся обрабатывающему скрипту, который проходит по каждому слову в списке. Слово приводится к лемме (при возможности анализатора, в противном случае оставляется в той форме, в которой оно находится в тексте). Затем проверяется наличие его леммы в каждом из словарей. Если слово обнаружено в одном из них, то счётчик нейтральных или интолерантных слов увеличивается (в зависимости от того, в каком словаре оно обнаружено), если слово относится к интолерантным маркерам, оно сохраняется в отдельном списке, а скрипт переходит к следующему слову. Если же слово не обнаружено ни в одном из словарей, то в режиме «ручного корректирования» программа обращается к пользователю, используя окна сообщений с вариантами ответов «да» или «нет» (tkinter.messagebox.askyesno). При этом неизвестное программе слово проходит два этапа проверки. На первом этапе программа спрашивает пользователя, реально ли данное слово. Это помогает избежать занесения в словари результатов опечаток и авторских окказионализмов, которые могут иметь значение в данном тексте, но не встретятся в других, а потому нет смысла сохранять их в основном словаре маркеров. На втором этапе программа спрашивает пользователя о тональности данного слова. При любом ответе счётчик соответствующих слов увеличивается, а интолерантное слово заносится во внутренний список, но только реальное по результатам первой проверки слово заносится в соответствующий словарь, тем самым по мере использования программа увеличивает размер базовых словарей и уменьшает частоту обращений к пользователю при каждом последующем использовании. При выключенном режиме «ручного корректирования» программа автоматически причисляет все неизвестные слова к нейтральным и ведёт поиск только по списку маркеров, предоставленному пользователем.

Проанализировав все слова текста, алгоритм уточняет у пользователя, нужно ли обновить базовые словари в соответствии с результатами работы, и перезаписывает файлы в случае положительного ответа. Затем он высчитывает долю интолерантной лексики, выводит с помощью нового диалогового окна сообщения (tkinter.messagebox.showinfo) процент интолерантной лексики и список обнаруженных маркеров, и в конце спрашивает у пользователя, необходимо ли сохранить этот список. При положительном ответе, программа сохраняет все обнаруженные в конкретном тексте маркеры как текстовый файл, доступный пользователю для дальнейшего исследования.

3.1.3 Интерфейс программы

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

Рисунок. Главное окно программы

Центральная область предназначена для работы с текстом и разделена на три части: окно для анализируемого текста и два окна для словарей. Отдельно расположена ячейка включения/выключения режима «ручного корректирования», при котором программа будет обращаться к пользователю при встрече неизвестного слова. Тексты загружаются через соответствующие пункты меню, однако могут редактироваться вручную в главном окне, что позволяет пользователю изменять словари по мере необходимости и в зависимости от задачи. На рисунках ниже показаны вспомогательные диалоговые окна проверки новых слов и итоговый вывод процента интолерантной лексики и списка обнаруженных маркеров.

3.1.4 Тестирование и результаты работы

Для проверки качества работы алгоритма им были проанализирован тренировочный корпус новостных статей издания «Лента.Ру» объёмом 10660 словоформ, после чего маркеры, выделенные программой, были проверены вручную, а тексты подробно проанализированы. Маркеры, выделенные лингвистом, были сравнены с теми, которые выделила программа. Также учитывалось, как часто программа обращалась к пользователю.

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

Источник: https://otherreferats.allbest.ru/download/1021400/