stllfe / yoric

Context Aware YO Letter Restoration in Russian Texts
8 stars 2 forks source link

[Abstract] Изучить архитектуры решений для расстановки ударений в словах #5

Closed stllfe closed 1 year ago

stllfe commented 1 year ago

По ударениям, к сожалению, нашлось немного работ, поэтому смотрели вообще похожие задачи. Продублирую сюда последние изыскания из внутренних обсуждений.

Анализ похожих задач

Word Sense Disambiguation

Можно решать задачу Word Sense Disambiguation — разрешение «смысла» слова в конкретном высказывании.

Если у нас есть какая-то моделька, которая может разделить смысл слова в контексте, то поверх неё мы легко можем накрутить какое-то решающее правило или другую модель для предсказания замены. Может подойти предобученная сетка для перевода, поскольку ее эмбеддинги обязаны уметь разрешать такие неоднозначности.

Diacritics Restoration

Можно решать задачу Diacritics Restoration — восстановление над(под)символьных знаков в языках с таковыми: французский, чешский, вьетнамский, турецкий и многие другие. Эта самая похожая на нашу задача, тут используют всё подряд.

Простые модели:

Реккурентные модели (зачастую BiLSTM):

Трансформеры:

В смежных доменах, где тоже надо что-то делать со словами в контексте, я нашел только расстановку ударений:  StressRNN.

NER (Sequence Labeling)

G2P посмотрел — как оказалось, большинство моделей не учитывают контекст, а те, которые его учитывают, под капотом в контексто-зависимой манере просто предсказывают морфемы слов (см. RNNMorph, Slovnet). Архитектура RNNMorph — опять-таки BiLSTM, у Slovnet используется дистилляция из BERT в простую модельку (WordEmbedding + ShapeEmbedding — WordCNN+CRF или WordCNN + Linear для морфологии — ближе к нам). Очень классный интересный подход, о котором реально можно задуматься: обучаем жирный трансформер на данных, которые есть, затем, синтезируем этим трансформером новую разметку (много данных), обучаем простую модель на куче данных с псевдоразметкой. Подробнее в статье по NER от Natasha. Там же в Slovnet есть куча инсайтов по тому, как делать быстрый инференс (модуль exec): эмбеддинги квантуются, а модули переносятся на Numpy с помощью простого обхода графа итоговой модели (паттерн Посетитель) + парочка вручную ре-имлпементированных модулей.

Другие

Вроде как еще могут быть релевантны Post-OCR Processing (исправление ошибок от моделей OCR), а также Spell Correction (исправление ошибок). Но, честно говоря, подустал это копать, кажется они какие-то все замудренные для нашей задачи. Еще можно смотреть Spell Correction модели, но там тоже своя степь большая и бескрайняя.

Мысли, возникшие во время чтения статей

Надо понимать, что даже несмотря на то, что наша версия задачи проще чем классический diacritics restoration для других языков (всего один символ для восстановления), это не снижает наши ожидания того, насколько хорошо модель должна уметь «понимать» смысл всех слов в предложениях. Иными словами, поскольку при восстановлении учитывается контекст, у модели все равно должно быть достаточно информации о смысле всех окружающих слов, что само по себе — весьма ресурсоемкое требование. Вывод — стоит использовать эмбеддинги, возможно, предобученные, чтобы не тратить capacity модели на разучивание их. В большинстве подходов эмбеддинги комбинируют: уровень слов + уровень символов. Можно обучать трансформеры для бейслана по достижимым метрикам, а затем дистилировать их знания в простые модельки.