2.4 Использование методов машинного обучения
В качестве альтернативы нейронным сетям существует вариант использования методов машинного обучения, а именно SVM моделей и модели с построением деревьев зависимости (Liu, Cheng, Luo, Duh, & Matsumoto, 2013).
SVM - метод опорных векторов, основан на расширении размерности плоскости построения векторного представления объекта. Это позволяет увеличить размерность плоскостей, определяющих принадлежность объекта к классу, что повышает качество алгоритмов классификации (Colas & Brazdil, 2006). При решении задач с текстовыми данными, метод используется в совокупности с технологиями, которые позволяют представить текст в виде векторов. Например, готовым методом CountVectorizer из библиотеки Sklearn для Python, который основан на подсчете количества уникальных токенов внутри объекта, тем самым задавая числовые параметры для построения векторного представления (Hackeling, 2017).
Деревья зависимость - это иной подход к решению классификации, который основан на определении характеристики объекта при помощи последовательной совокупности его признаков. Например, если нам необходимо описать слово, мы можем задать его при помощи последовательности символов. В качестве решения нашей задачи, данное решение как раз разбивает токен на последовательность символов и, если последовательность приводит к вершине дерева, которая не определяет словоформу как верную, токен определяется неправильным.
Оба метода хорошо себя зарекомендовали в задачах текстовой классификации, а также при решении других лингвистических задач (Colas & Brazdil, 2006). Такой подход позволяет повысить трудоемкость работы алгоритмов и ускорить как процесс создания модели, так и увеличить скорость её работы. Однако качество таких методов ниже, чем качество работы нейронных сетей. При этом, для проведения классификации также необходим корпус, который по своей характеристике и минимальным требованиям схож с корпусом, необходимым для использования нейронных сетей. Также, методы машинного обучения требуют более глубокой предобработки текста, которая требует написания дополнительных алгоритмов, которые могут значительно усложняют процесс.
Если производить оценку и сравнение данного решения и решения с помощью нейронных сетей, то можно отметить упрощение схемы построения моделей, меньшие затраты по вычислениям, уменьшение времени самого процесса обучения. При этом, итоговая точность работы алгоритма меньше, а зависимость от корпусных факторов наоборот возрастает.
2.5 Построение векторной модели языка
Идея построения векторной модели языка основана на представлении, что можно задать такое пространство, с помощью которого можно будет через вектора и задающие его числовые значение описать любой объект выборки. Иными словами, объект изучения представляется с помощью вектора внутри общей картины исследования таким образом, что всем различным объектам соответствуют различные вектора. При обучении такой модели на текстовых данных, в качестве признаков может выступать количество определенных символов в той или иной словоформе, или другие существующие метрики (Crow, Scarberry, Calaprist, Miller, Nakamura, Saffer 2003). Такой метод позволяет хранить тексты ином, векторном представлении, с дальнейшим сравнением при помощи вычисления дистанции между полученными векторами. Проверка приемлемости словоформ работает схожим образом, как и проверка при помощи словаря, только вместо сравнений словоформ происходит сравнение векторов. Данный метод, помимо проверки позволяет строить предположения об первообразном представлении неправильной словоформы. Также, сложение нескольких векторов позволяет производить контекстный анализ текстов, для решения проблем с распознаванием ошибок типа RWE. При всем при этом, данная методика больше всех зависит от качества построения и подготовки корпуса к обучению модели. Если обучать такую модель на тематическом корпусе, тогда и представление о языке будет строиться в рамках узкого лексического круга, что негативно влияет на работу алгоритма.
2.6 Итоги анализа существующих методов
Анализ показал, что ни один из вышеуказанных методов не подходит для решения поставленной задачи. Было принято решение создания собственного алгоритма, который не будет использовать методику проверки текста при помощи словаря, а будет анализировать последовательность символов, которая задается языком. Вне зависимости от тематики и размерности корпуса, язык будет соблюдать допустимые нормы формирования словоформ при помощи заданных последовательностей. Для этого необходимо сформировать математическую формулу, которая позволит численно оценить корректность токена через сравнение с базисным числом. При этом в дальнейшем, алгоритм должен быть способен к воссозданию изначальной формы некорректной словоформы.
3. Формирование логики алгоритма
Разработанный нами алгоритм для проверки правописания башкирских текстов основан на взаимодействии символьных биграмм-конструкций внутри языковой модели и скрытых моделей Маркова (HMM) в совокупности с формулой полной вероятности цепи Маркова. Основная идея скрытых моделей Маркова заключается в том, что на основе имеющихся, проверенных состояний объекта, в случае нашей задачи, этим объектом является текстовый корпус, можно определить последующее состояние. Например, предугадать, какое будет следующее слово в предложении, как это реализовано при наборе текста на портативных устройствах, когда во время набора текста, пользователю предлагаются возможные варианты продолжения написанного им текста (Ueda and Nakagawa, 1990).
Наша задача определить вероятность встречи каждой конструкции, которую мы можем наблюдать в построенном корпусе. Для этого корпус разбивается на биграмм конструкции (пары слов). После чего, считается количество полученных с группирование по первому слову в конструкции. После этого, количество одинаковых биграмм составляющих делится на количество биграмм составляющих с одинаковым первым элементом. Это позволяет рассчитать вероятность следования второго элемента биграмм конструкции, за первым элементом той же биграмм конструкции.
Если нам известно, возможные кандидаты на следующие состояния объекта, значит на основе этих данных, можно проверить актуальность полученных состояний с помощью рассчитанных вероятностей. Если новое состояние не наблюдалось или ожидалось, с очень низкой вероятностью, то тогда такое состояние можно принимать за неправильное.
Слова в качестве составляющих биграмм конструкций были приведены в качестве наглядного примера, в реальных условиях, для решения поставленной задачи слова будут заменены последовательностью символов, которые составляют слова. Это обусловлено тем, что последовательность символов внутри словоформ распределена не хаотично, а определена для каждого языка своя. Таким образом, эту заданную последовательность можно задать с помощью вероятностей, которые буду описывать вероятность ожидания символа в данной позиции в рамках грамматики башкирского языка
Таким образом разработка алгоритма заключается в нескольких этапах:
Выявление различных биграмм-конструкций на основе корпуса правильных текстов.
Подсчет вероятностей существования выявленных конструкций в данном языке.
Выбор пороговой метрики для фильтрации неправильных вариантов.
Создание самой последовательности проверки и сверки вероятностей.
Тестирование и отлаживание качества работы алгоритма проверки.
Помимо этого, необходимо выполнить ряд дополнительных задач, таких как:
Произвести очистку корпуса от пунктуации, а также слов, которые не подходят под необходимую выборку.
Написать код для проверки качества работы полученного алгоритма.
Собрать корпус для проведения тестов на новых текстах.
Оценить работу алгоритма с помощью реальных людей.
4. Предобработка текста для подсчета вероятностей
Предобработка текста позволяет повысить качество обучения модели путем более точного определения словоформы. Так как пунктуация не является частью словоформы, следовательно, и учитывать ее при подсчете вероятностей возможных конструкций словоформ не представляется разумным.
Первый этап чистки текста заключается в очистке текста от пунктуации, которая не учитывается в проверке правописания. Отдельное внимание стоит уделить словам с дефисным написанием. Такие слова изначально были нехарактерны для башкирского языка, а появились позже посредствам соединения несколько основ. В данном случае, дефис не просто исключается из выборки, а заменяется с помощью регулярных выражений на пробел в каждом тексте корпуса, чтобы разделить слово на самостоятельные части. После обработки слов с дефисным написанием, создается список пунктуации. За основу берется встроенный в модуль string список пунктуации string.punctuation. Данный список, дополнительно расширяется вручную символами пунктуации, которые были выявлены при первых тестовых чистках текста. Каждый текст делится на символы, эти символы поочередно сверяются со списком пунктуации. Если символ входит в данный список, то он исключается из текста. Таким образом, получается наиболее эффективно очистить текст от пунктуации не только на границах слова, но и возможных позициях внутри него.
Второй этап подготовки текста заключает в себе процесс исключения из корпуса иностранных слов. Для корректной работы модели, необходимо убедиться в том, что работа производится только со словами башкирского языка. Если в выборку попадают иностранные слова или числа, то распределение вероятностей изменятся и перестает быть показательным. На основе грамматики формируется алфавит башкирского языка. Текст делится по пробелам на слова. Для каждой буквы, каждого слова, проверяется условие, входит ли буква в алфавит. На выходе получается список со значениями True / False. С помощью встроенного метода all проверяется наличие значения False. Если такое значение присутствует, то слово исключается из выборки. После того, как каждый текст корпуса прошел чистку, производится завершающая стадия подготовки текста.
Поскольку в башкирском языке нет слов длиной в один символ, такие вхождения необходимо также удалить из выборки. Удаление происходит по такой же логике, как и в предыдущих этапах. На этом же этапе необходимо выправить регистр текста. Имена собственные, наименования и другие слова, которые необходимо писать верхнего регистра зачастую отличаются по своей конструкции, а также заимствованы из других языков. Такие слова необходимо рассматривать отдельно от общего корпуса, однако отделить их непросто. В данной работе, было принято решение, относить к таким словам все токены, которые начинаются с заглавной буквы, то есть не на границе предложения. С помощью регулярных выражений, все слова корпуса, которые стоят в первой позиции предложения были приведены к нижнему регистру. Регулярные выражения представляют собой набор функций, который работает по логике вхождения значения в указанный объект. Если хотя бы один элемент указанного объекта имеет указанную структуру, тогда над ним выполняется заданное пользователем условие. Слова, написанные заглавными буквами, принимаются за имя нарицательное и также приводятся к нижнему регистру.
5. Формирование вероятностей
В дальнейшем, будут описаны два подхода к написанию алгоритма проверки, однако оба они используют одни данные, вероятность существования последовательности символов в тексте. В данной главе подробно распишем как считались эти вероятности.
После подготовки корпуса, в Python создаются словари, для хранения подсчетов данных. Словарь в Python представляет из себя набор связок ключ-значение, с помощью которых можно хранить необходимые данные под указанным индексом, который постоянно привязан этому значению. Всего насчитывается 6 словарей. Таким образом мы постоянно имеем доступ к этим данным. Первый тип словаря предназначен для хранения информации про первую позицию слова. Ключ в данном словаре - все возможные буквы башкирского алфавита, которые встречаются в первой позиции слова. Значение - вероятность нахождения буквы-ключа в первой позиции. Словарей такого типа создается два, для слов, которые начинаются на букву нижнего и верхнего регистра отдельно. Второй тип словаря - имеет такую же структуру, однако подсчет ведется для букв последней позиции. Таких словарей также создается два, для разного типа словоформ. Третий тип словаря предназначен для хранения вероятностей биграмм конструкций. Ключом в данном словаре также является буква башкирского алфавита, однако в качестве значения выступает еще один словарь, в котором в качестве ключей хранятся буквы, которые идут после первичной буквы-ключа, а значением выступают вероятности существования последовательности, где первая буква - ключ словаря первого уровня, а вторая буква - ключ словаря второго уровня. Такая структура помогает удобно хранить вероятности и быстро обращаться к ним.
Для получения тех самых значений, все тексты склеиваются в один текст, который делится по пробелам для получения списка слов. После этого, алгоритм проходится по каждому слову и разбивает его на три группы:
Буква первой позиции.
Буква последней позиции.
Список символов слова без последней буквы.
Последний символ отделяется от словоформы, так как его вероятность считается отдельно.
Когда слово попадает на итерацию, в первую очередь алгоритм анализирует первую букву. На данном этапе идет отделение слов, которые начинаются на заглавную букву, для определения словарей, в которые будут производиться записи. После этого алгоритм обращается к словарю первого типа и проверяют, есть ли там ключ со значением первой буквы слова. Если такого ключа нет, то он создается со значением 1. Если ключ уже есть, то к его значению прибавляется единица. По такой же логике обрабатывается последняя буква слова, а затем исключается из списка символов.