Category: религия

Category was added automatically. Read all entries about "религия".

Больше перефразировок богу перефразировок: датасет для сиамской сети

Появилась идея, как получать много, очень много негативных примеров перефразировок для siamese network. причем с минимумом ручной работы или модерации.

Для этого берем результаты обработки текстов моим синтаксическим парсером. Много мегабайтов текстов, и много гигабайтов результатов в XML.
Обрабатываем их в C# программе (исходнички на гитхабе), которая применяет некоторые трансформации к синтаксическому дереву и гарантированно получает либо изменение семантики, либо синтаксически некорректное предложение. Для пересклонения существительных и прилагательных я, как обычно, использую .NET обертку для API грамматического движка с русской словарной базой.

Например, перестановка позиции предлога:
Collapse )

Перестановка атрибутирующих прилагательных:
Collapse )

Перестанова существительных в паттерне родительного падежа:
Collapse )

Зачем нужны эти перефразировки?

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

Кроме того, эти перефразировки заставляют сетку работать чуть лучше, чем bag-of-words модель, так как набор слов во всех случаях идентичный или совпадает до лемм.

Семантика словосочетаний

В развитие одной из идей Мысли по препроцессингу для word2vector, проверил следующую схему.

1. Выполняем синтаксический парсинг набора предложений. Парсинг я выполнил с помощью статистического парсера, который сейчас обеспечивает разбор со скоростью примерно 500 слов/секунду. Не очень быстро, но это позволяет разбирать тексты размером в десятки Мб в обозримое время.

2. Ищем в синтаксических деревьях ребра от глагола (инфинитив,деепричестие) к существительному с типом ОБЪЕКТ, то есть прямые дополнения. И схлопываем в единый токен, к примеру:

Collapse )

3. Сгенерированные предложения добавляем в общий тренировочный корпус для word2vector. Таким образом, в словарь мы добавляем множество словосочетаний.

4. Обучаем word2vector на получившемся корпусе.

5. Смотрим, какие вектора получились у словосочетаний.

Итог: печально, но качество определения смысла словосочетаний в такой схеме очень плохое. Я смотрел по N-ближайшим к "гореть желанием" и "валять дурака" словам. Судя по всему, очень редкая статистика словосочетаний мешает правильно определить их смысл в рамках w2v. Текущий вывод - искать смысл словосочетаний так нельзя.