В Части 1 этого поста я писал о простом наивном байесовском классификаторе для идентификации языка текста (LID). Этот базовый уровень был использован в недавней статье, опубликованной в трудах Международной конференции PRASA-RobMech 2017 года. Конференция включает Ежегодный симпозиум Ассоциации распознавания образов Южной Африки и Конференцию Южной Африки по робототехнике и мехатронике. В этом году он проходил в Центральном технологическом университете Свободного государства в Блумфонтейне, Южная Африка.

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

LID на основе лексикона

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

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

На рисунке ниже показана матрица неточностей для классификации фрагментов текста длиной 15 символов (примерно от трех до четырех слов) с использованием классификатора LID на основе лексики. Если вы помните, строки матрицы неточностей представляют собой истинные языковые метки для фрагментов текста и столбцов, прогнозируемые языковые метки, полученные на основе классификатора LID. Пунктирные блоки, нарисованные на матрице, обозначают границы языковых семейств.

Взглянув, например, на строку isiZulu (zul), можно увидеть, что предложения isiZulu правильно классифицируются в 75,8% случаев и неправильно классифицируются как isiXhosa (xho) в 8,8% случаев. Подобно наивному байесовскому классификатору, классификатор на основе лексики показывает хорошее различие между семьями, но большую путаницу внутри языковых семей. Средняя точность классификатора лексики составляет 89,6%.

На рисунке ниже показана матрица неточностей с результатами, объединенными для отображения только языковых семей. Обратите внимание, как, например, языки из семейства Nguni были объединены в одну строку и столбец. Таким образом, матрица показывает только смешение языковых семей.

Классификатор LID на основе лексики может различать языковые семьи с относительно высокой средней точностью 99,1%. Однако из этой матрицы видно, что все еще существует заметная путаница между сото-тсвана и германскими языками, а также между языками тсва-ронга и нгуни. Глядя, например, на ряд сото-тсвана, можно увидеть, что предложения сото-тсвана неправильно классифицируются как принадлежащие германским языкам в 2% случаев.

Каскад двух классификаторов

Классификатор LID на основе лексики менее точен, чем наивный байесовский классификатор, который достиг средней точности LID 93,0%. Однако хорошо известно, что комбинация (называемая ансамблем) двух классификаторов может обеспечить более высокую производительность, чем любой из двух классификаторов по отдельности.

Статья PRASA-RobMech описывает каскад наивных байесовских и основанных на лексике классификаторов LID. Каскад - это тип классификатора ансамбля, который представляет собой объединение нескольких классификаторов.

Каскад работает так: наивный байесовский классификатор используется для первой классификации текста по языковой семье. Если после этого классификатор на основе лексики показывает, что один язык в семействе более вероятен, чем любой другой в семействе, то этот результат выбирается в качестве окончательной метки языка. В противном случае в качестве языковой метки принимается наивный байесовский результат.

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

На рисунке ниже показана матрица неточностей результатов каскадного классификатора. Средняя точность каскада составляет 95,2%, что выше, чем у наивного байесовского классификатора и классификатора на основе лексики.

Как упоминалось в Части 1 этого поста, чем выше производительность классификатора LID, тем диагональнее станет матрица неточностей. Приведенная выше матрица более диагональна, чем матрицы отдельных классификаторов, но некоторая путаница в языковых семьях все еще присутствует.

Заключение

Классификатор LID lexicon сам по себе достигает средней точности всего 89,8%. Однако при использовании в каскаде с базовым наивным байесовским классификатором LID это приводит к общему снижению ошибки. В результате точность LID короткого предложения составляет 95,2%, что на 31% меньше ошибки LID по сравнению с одним наиболее эффективным классификатором. Код, а также данные обучения и тестирования для получения вышеуказанных результатов размещены по адресу https://github.com/praekelt/feersum-lid-shared-task.

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