По ударениям, к сожалению, нашлось немного работ, поэтому смотрели вообще похожие задачи. Продублирую сюда последние изыскания из внутренних обсуждений.
Анализ похожих задач
Word Sense Disambiguation
Можно решать задачу Word Sense Disambiguation — разрешение «смысла» слова в конкретном высказывании.
Если у нас есть какая-то моделька, которая может разделить смысл слова в контексте, то поверх неё мы легко можем накрутить какое-то решающее правило или другую модель для предсказания замены. Может подойти предобученная сетка для перевода, поскольку ее эмбеддинги обязаны уметь разрешать такие неоднозначности.
Diacritics Restoration
Можно решать задачу Diacritics Restoration — восстановление над(под)символьных знаков в языках с таковыми: французский, чешский, вьетнамский, турецкий и многие другие. Эта самая похожая на нашу задача, тут используют всё подряд.
В смежных доменах, где тоже надо что-то делать со словами в контексте, я нашел только расстановку ударений: 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 модели на разучивание их. В большинстве подходов эмбеддинги комбинируют: уровень слов + уровень символов. Можно обучать трансформеры для бейслана по достижимым метрикам, а затем дистилировать их знания в простые модельки.
По ударениям, к сожалению, нашлось немного работ, поэтому смотрели вообще похожие задачи. Продублирую сюда последние изыскания из внутренних обсуждений.
Анализ похожих задач
Word Sense Disambiguation
Можно решать задачу Word Sense Disambiguation — разрешение «смысла» слова в конкретном высказывании.
Если у нас есть какая-то моделька, которая может разделить смысл слова в контексте, то поверх неё мы легко можем накрутить какое-то решающее правило или другую модель для предсказания замены. Может подойти предобученная сетка для перевода, поскольку ее эмбеддинги обязаны уметь разрешать такие неоднозначности.
Diacritics Restoration
Можно решать задачу Diacritics Restoration — восстановление над(под)символьных знаков в языках с таковыми: французский, чешский, вьетнамский, турецкий и многие другие. Эта самая похожая на нашу задача, тут используют всё подряд.
Простые модели:
N-граммные LM (2016)
Word2Vec (2018)
Реккурентные модели (зачастую BiLSTM):
Для румынского: объединение char и word-level эмбеддингов, Conv1D+BiLSTM
BiLSTM + WordEmbeddings + CharEmbeddings
A-TCN (Dilated CNN) (GitHub)
Трансформеры:
BERT (GitHub)
Ванильный трансформер для S2S
T5 на spell correction + diacritics restoration (кстати тут очень хороший обзор литературы и можно прямо кусками Abstract вытаскивать)
В смежных доменах, где тоже надо что-то делать со словами в контексте, я нашел только расстановку ударений: 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 модели на разучивание их. В большинстве подходов эмбеддинги комбинируют: уровень слов + уровень символов. Можно обучать трансформеры для бейслана по достижимым метрикам, а затем дистилировать их знания в простые модельки.