Category: лингвистика

Category was added automatically. Read all entries about "лингвистика".

Генерация форм существительных с помощью GPT-2

Генерация определений слов с помощью GPT-2 и толкового словаря описана в этом посте.
Продолжим забивать языковые гвозди микроскопом!

Я обучил GPT-2 на парадигмах существительных из грамматического словаря. В обучающий датасет взято около 110 тысяч существительных, в каждом по 6 падежных форм для единственного числа. Модель училась из номинатива выдавать остальные 5 форм - родительный, творительный, винительный, дательный и предложный.

Примеры генерации:


Collapse )
Нужно еще добавить модель определения ударения и можно генерить Викисловарь.

Использование статистики аргументной структуры для генерации рэпа

Цель

Овладеть искусством (или мастерством) генерации рэпа на заданную тему.

Я ожидал, что это будет попроще, чем онегинская строфа, но не тут-то было :) Приходится идти небольшими шагами, перебирая множество подходов.
Collapse )
PS: и немного свежей выдачи стихогенератора на тему программистов-лингвистов:
Collapse )

Реализация модели детектора перефразировок с BERT в pytorch transformers

Продолжение темы изучения питорча: сделал модель бинарного классификатора для определения синонимичности двух фраз с использованием multilinual BERT: гист
Collapse )

Забавные моменты с русскоязычным GPT-2

Смотрю на текущие результаты сэмплирования из обучающейся языковой модели GPT-2 в варианте с  117M параметрами. Иногда проскакивают забавные словечки, получающиеся из-за склейки bpe-токенов. С некоторыми натяжками выглядят так, будто модель уже знает общие правила русского словообразования и словоизменения, но ошибается с правильным выбором морфем:
Collapse )

Об ошибках морфологической разметки в OpenCorpora

В догонку к предыдущему посту про качество RnnMorph.

В ходе тщательного анализа результатов моего part-of-speech tagger'а по данным из OpenCorpora наткнулся на такие штуки:

False positive NOUN misprediction for sample:

Центральная катма дискордианства гласит :
itoken=1
word=катма
expected part-of-speech =UNKN
predicted part-of-speech=NOUN


Строка "expected part-of-speech =UNKN" означает, что в разметке OpenCorpora слово "катма" помечено классом UNKN. Подозреваю, что это артефакт полуавтоматической разметки, слово "катма" просто отсутствует в словарной базе OpenCorpora.

Эта ошибка повторяется в корпусе систематически и достаточно сильно смещает статистику.

Также можно заметить, что у меня модель правильно пометила это слово классом NOUN.

Вывод - при подсчете статистики по разметке OpenCorpora категорически рекомендуется выкидывать из рассмотрения метки UNKN. Оценка тут сделана с учетом этого нюанса.

Оценка качества RnnMorph по ручной морфологической разметке из OpenCorpora

Оценка точности разметки существительных для морфологического анализатора RnnMorph.
В качестве эталона разметки взят "Подкорпус со снятой омонимией" из OpenCorpora.

NOUN recall=0.9931500509117838
NOUN precision=0.9943005421435522
NOUN+tags precision=0.9590843797785089


NOUN precision - точность без учета тегов, NOUN+tags - точность с учетом тэгов Case, Number.

Изменения в грамматическом словаре касательно составных прилагательных

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

Collapse )

Странная фича для определения перефразировки вопросов в каггле Quora Question Pairs

Соревнование по определению похожести вопросов закончилось, теперь можно поизучать чужие решения. И пересмотреть еще раз некоторе нюансы в своем решении тоже.

Итак, есть один признак, который я добавил в датасет, не ожидая особого эффекта. Но он оказался достаточно сильным, и это странно.

Вот топ списка фич, выдаваемых xgboost и отсортированных в порядке убывания веса:

Collapse )

Выделенные болдом признаки kenlm_* представляют из себя оценки достоверности фрагментов фразы. Они вычисляются с помощью предварительно построенной языковой н-грамной модели KenLM. Вычисление делается вот так:

Collapse )

То есть берем начало вопроса из нескольких слов. Значения для начальных фрагментов длиной в 8, 16 и 32 слова вычисляются отдельно. Вычисляем оценку для первого вопроса, для второго, сохраняем их в датасете, а также добавляем разницу оценок. Учитывая логарифмический характер оценок, мы фактически определяем относительную оценку.

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

Но тем не менее xgboost в ходе построения деревьев на каком-то уровне делает вывод, что выгода от учета значения kenlm-фичи больше, чем, например учет похожести предложений на базе информации в WordNet (синонимия и так далее) - см. положение фичи wordnet_sim_0.

Сеточная модель для определения части речи слова по его символьному представлению

Еще одна сеточная модель для char-based language modeling.
Для произвольной цепочки символов пытаемся определить, к какой части речи это слово относится.
Collapse )

Синтаксический анализ на сверточных и рекуррентных сетках. Часть 1: syntax_chars

Посмотрим, как с помощью нейросетевых моделей можно строить синтаксическое дерево зависимостей для предложения.
Collapse )