Привет всем.
Вот последняя заметка Михаила из телеги.
Призыв присоединяться к исследованию перспектив морфологического
тегирования для русского языка на основе внутреннего внимания! Есть
начальный код, по результатам выпускаем статью, все отличившиеся — в
соавторы!
В чём идея?
Это вариант ныне уже заглохшей библиотеки RNNMorph, которая решала такую
задачу на основе долгой краткосрочной памяти (LSTM). LSTM устарела, её
хорошо заменяет механизм внутреннего внимания. У коллег из МФТИ есть
похожая расставлялка морфологии на основе BERT. BERT, конечно, будет
чуть развитее чистого внутреннего внимания, но даёт меньше свободы и
возможностей, потому что сама принудительно кодирует все токены на
входе. Поди разбери, как кодирование чем-нибудь дополнить, если есть
такое желание.
Что в начальной реализации?
В репозитории с начальной реализацией, названной selftagger, набросал
модель на основе PyTorch, которая обучается на датасете Sintagrus и
производит определение частей речи, получая на вход только набор чистых
слов. Архитектура модели включает сначала слой embedding для кодирования
слов в векторы; далее есть слой из трёх сетей прямого распространения
для генерации векторов query, key и value; далее слой multi-head
attention для кодирования слов во внимание; потом ещё одна сеть прямого
распространения для классификации каждого вектора attention для каждого
слова с нормализацией.
Размерность embedding и attention взял 1024. В multi-head attention взял
восемь голов.
Точность работы после пяти эпох обучения 75,2% успешно определённых
частей речи, после десяти эпох — 80,3%, после 20-ти — 88,4%, после 30-ти
— 92,7%, после 40-ти — 94,4%, после 50-ти — 95,3%. В строгом смысле пока
маловато, конечно, но общая тенденция показывает, что потенциал есть.
Реализация может обучаться на CPU, но в таком виде работает долго. На
нашей кафедральной RTX 4090 обучение на 50 эпох занимает около часа.
Что предстоит исследовать?
1. Использование простых embedding привязывает модель к словарю из слов
в обучающем наборе, т. е. модель беспомощна перед словами не из
обучающего набора. С этим надо что-то делать.
2. Embedding неплохо бы чем-нибудь дополнить. Скажем, откусить окончания
и закодировав их в свои векторы, подклеить к основным векторам.
3. Неплохо бы учитывать для дополнения входных данных результат работы
библиотеки PyMorphy3. Она плоха тем, что выдаёт множественный ответ для
каждого слова, а нам нужен один.
4. Возможность тегирования скрытых слов, т. е. когда нужно предсказать
атрибуты токена, который не известен полностью. Скажем, известен его
класс (денежная единица, единица измерения и пр.), но целиком информации
нет. Собственно, это ключевой мотив, из-за которого весь сыр-бор, потому
что в тексте полно сокращений.
Что получает участник?
1. Бесценный и уникальный опыт подлинной разработки на PyTorch.
2. Соавторство в статье по результатам исследований.
3. Доступ к кафедральной карте для вычислений, если под рукой нет своей.
Что требуется от участника?
Только одно — это умение мыслить творчески. Чем менее стандартно, тем лучше.
Ах, да! Чуть не забыл самую мелочь! У гр. 932201 это будет одна из лаб в
следующем семестре, чтобы не оставалось ненужных иллюзий, во что они
ввязались.
https://github.com/marigostra/selftagger
https://github.com/IlyaGusev/rnnmorph
https://github.com/UniversalDependencies/UD_Russian-SynTagRus
#исследование #статья #LLM #torch
@MarigostraRu
вот ссылка.
https://t.me/MarigostraRu/581