?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Previous Entry Share Next Entry
rusyllab - русский слогоделитель для замены SentencePiece
kelijah
В субботу на скорую руку сделал на питоне конвертор моего старого набора правил деления на слоги из проекта русского словаря.
Результат работы конвертора - код на питоне, оформленный в виде стандартного пакета rusyllab.

Слогоделитель нужен для экспериментов с представлением текста на уровне между отдельными буквами и словами. Представление на уровне букв приводит к длинным цепочкам, которые не очень хорошо обрабатываются рекуррентными моделями. А представление на уровне слов дает слишком разреженные 1-hot матрицы, чтогодится не для всех адгоритмов машобучения. Компромисс возможен через деление слов на subword units. Классическая лингвистика предлагает в этом случае делить на морфемы. Но для русского языка это осложняется различными "нелинейными" эффектами между морфемами при их сочетании. Компромисс - деление на слоги, которые в некоторых случаях хорошо отражают морфемную структуру и семантику. В пакете rusyllab включен простой greedy алгоритм, использующий вручную составленные правила. Во многих случаях он неплохо справляется со своей задачей. Кроме того, само по себе наличие ошибок слогоделения не влияет на работу downstream алгоритмов машобуча, поскольку эти ошибки детерминированы и повторяются консистентно при обработке тех же слов.

Установка:

pip install git+https://github.com/Koziev/rusyllab


Использование:

import rusyllab

sx = rusyllab.split_words(u"Голодная кошка ловит мышку".split())
print('|'.join(sx))


Результат работы:

Го|лод|на|я| |кош|ка| |ло|вит| |мыш|ку


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

Для сравнения вот так выглядит разбивка через SentencePiece, обученный на большом русскоязычном корпусе (об этом см. предыдущий пост):

▁|Г|о|ло|д|ная|▁ко|шка|▁лов|ит|▁мы|шку



  • 1
Они до сих пор продаются :) Но речь как раз о том, что бы их базы (скорее подобие их баз фактов) заполнять автоматически по корпусу не размеченных текстов с помощью обученной сетки тегера для слов у которых смысл пропущен (в базе или контексте конкретного предложения).

  • 1