Датасет для unsupervised обучения синтаксической модели для русского языка

May 04, 2016 12:16

Мой "текстоперегонный" куб сделал очередную итерацию, скушав пару десятков гигабайтов текстов из википедии, новостей и так далее, и выдав примерно 6 Гб с очищенными предложениями.

Если посмотреть на группу самых маленьких предложений по 4 токена, то с одной стороны 90 Мб файл ничего интересного не показывает:

Ты меня слышишь?
Молчат как рыбки.
Меня зовут Саша.
Иногда пишу статьи.
Есть какая-то статистика?
Им потребовалось полгода.
Чем пахнет гидрино?
Я ее нашел.
Шахматисты тоже волнуются.
Нужно требовать равенства.
Жизнь мимо проходит.
Попробуем и мы!
Писать или дарить?
Порезался я порядочно.
Но проблема есть.
Неприятности начались с самого начала.
Вот и накаркал!

Поищем теперь среди этих предложений перестановочные ДУБЛИКАТЫ. То есть нас интересуют пары (или группы) предложений, в которых русский почти свободный порядок слов показывает себя во всей силе:

Я был счастлив!
Счастлив я был!
Я счастлив был!

Исходный список содержит почти 3 миллиона предложений, так что он слишком большой для решения задачи в лоб перебором всех со всеми. Но, к счастью, умные дяди давно разработали подходящий алгоритм, см. краткую инфу https://en.wikipedia.org/wiki/MinHash или подробнейшее описание тут http://infolab.stanford.edu/~ullman/mmds/ch3.pdf

Описанный в доке алгоритм нужен для быстрого поиска дубликатов документов в интернете, и умеет даже нечеткое сравнение через Жаккардову меру с заданной релевантностью. Нам пока нечеткое сравнение не нужно, за исключением порядка слов.

Я сделал реализацию алгоритма на C#. Более того, я потом реализовал эту вкусняшку на pl/sql для поиска дублей в базе, хотя мучения с переводом матричных вычислений на временные таблицы отравили все удовольствие. Как бы то ни было, C# реализация кушает многомиллионные коллекции строк и выдает группы дубликатов, которые для коротких предложений очень похожи просто на bag-of-words:

Что это значит?
ЧТО ЭТО ЗНАЧИТ?
Что значит это?
Что значит Это?
Что это Значит?
Это что значит?
Это значит что?

Мы друг друга поняли?
Поняли мы друг друга?
Мы поняли друг друга?

Получается замкнутый круг.
Замкнутый получается круг.
Замкнутый круг получается.

Перечислять можно долго.
Можно долго перечислять.
Долго можно перечислять.

Буду очень благодарен.
Очень буду благодарен.
Очень благодарен буду.

Другое меня беспокоит.
Меня беспокоит другое.
Меня другое беспокоит.
Беспокоит меня другое.

Надо ее предупредить.
Надо предупредить ее.
Ее надо предупредить.

Видимся мы редко.
Мы редко видимся.
Редко видимся мы.
Мы видимся редко.

На некоторых группах уже видны более сложные синтаксические правима - склонность слов образовывать автономные группы, которые при перестановках сохраняют относительную целостность, то есть образуют семантически неделимые единицы:

Началась предвыборная гонка.
Предвыборная гонка началась.

Покупателей не нашлось.
ПОКУПАТЕЛЕЙ НЕ НАШЛОСЬ.
Не нашлось покупателей.

Обойдемся без скандала.
Без скандала обойдемся.

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

Всего таких групп - десятки тысяч. Это означает, что у нас есть хороший, достаточно объемный датасет, годный для нейросетевого обучения. По крайней мере, есть резон попытаться.

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

нейросети, unsupervised feature learning, rnn, синтаксис, семантика, русский язык

Previous post Next post
Up