Время прочтения: 4 мин.

Fill-mask моделирование – это задача маскирования некоторых слов в предложении и дальнейшее предсказание, какие слова должны заменить данные маски. Подобный тип задач используется для обучения больших моделей, направленных на решение специфических проблем. Например, данные модели применяются для извлечения информации из узкоспециализированных источников, что в дальнейшем позволит исследовать данные по заданной теме, извлекать необходимые объекты или классифицировать их.

Fill-mask максимально полезен в том случае, когда необходимо получить статистическое понимание языка, на котором обучалась или будет обучаться модель.

Принцип работы MLM (маскированное языковое моделирование)

Для того, чтобы обучить модель определять и адекватно предлагать слова, которые можно будет вставить в пропуск, ей необходимо случайным образом маскировать 15% слов на входе до тех пор, пока она не сможет предсказать маскированные в предложении слова.

Этот принцип значительно отличается от традиционных рекуррентных нейронных сетей, которые видят слова одно за другим, или от авторегрессионых GPT-моделей, которые внутри себя маскируют будущие лексемы.

Fill-mask моделирование позволяет изучать двунаправленное представление предложения, иными словами, выражает объектные, определительные, обстоятельственные синтаксические отношения.

Реализация пайплайна fillmask моделей

Реализация пайплайна для fill-mask модели представлена ниже:

from transformers import pipeline
unmasker = pipeline(task = 'fill-mask', model='Geotrend/distilbert-base-ru-cased',
tokenizer = 'Geotrend/distilbert-base-ru-cased', top_k = 3)
unmasker("Байкал - это самое глубокое пресноводное [MASK].")

Первоначально загружаем пакет transformers и импортируем функцию пайплайна, в котором соответственно при его вызове мы передаем задачу, модель, токенизатор и количество выводимых вариантов.

Далее мы вызываем пайплайн (в данном примере рассмотрим работу модели Geotrend/distilbert-base-ru-cased ), в который в качестве параметра передаем наше выражение. В результате получим:

[{'score': 0.34541910886764526,
  'token': 7815,
  'token_str': 'озеро',
  'sequence': 'Байкал - это самое глубокое пресноводное озеро.'},
 {'score': 0.10396268218755722,
  'token': 3844,
  'token_str': 'образование',
  'sequence': 'Байкал - это самое глубокое пресноводное образование.'},
 {'score': 0.08274048566818237,
  'token': 1622,
  'token_str': 'место',
  'sequence': 'Байкал - это самое глубокое пресноводное место.'}]

Видим, что модель правильно с вероятностью 34.54% определила, что на месте пропуска должно стоять слово – «озеро».

Далее будем использовать модель sberbank-ai/ruRoberta-large, которая представляет собой дообученную специально для задач fill-mask BERT модель, которая обучалась на 250 ГБ данных, что позволяет учесть многие особенности языка, в том, числе он спокойно распознает и правильно вставляет слова в поговорки.

Результат работы модели для выражения, которое использовалось ранее:

[{'score': 0.9500129818916321,
  'token': 14303,
  'token_str': ' озеро',
  'sequence': 'Байкал - это самое глубокое пресноводное озеро.'},
 {'score': 0.02799813449382782,
  'token': 4194,
  'token_str': ' море',
  'sequence': 'Байкал - это самое глубокое пресноводное море.'},
 {'score': 0.006617003120481968,
  'token': 1680,
  'token_str': ' место',
  'sequence': 'Байкал - это самое глубокое пресноводное место.'}]

Данная модель с вероятностью 95% процентов определила, что действительно в этот пропуск необходимо вставить слово озеро.

Работа fillmask моделей с устоявшимися выражениями

Результат работы модели Geotrend/distilbert-base-ru-cased с выражением «Мал золотник, да дорог» представлена ниже, где слово «дорог» было замаскировано:

[{'score': 0.531587541103363,
  'token': 6357,
  'token_str': '##чок',
  'sequence': 'Мал золотник, дачок.'},
 {'score': 0.11922688037157059,
  'token': 2098,
  'token_str': '##чка',
  'sequence': 'Мал золотник, дачка.'},
 {'score': 0.04497218132019043,
  'token': 4229,
  'token_str': '##тик',
  'sequence': 'Мал золотник, датик.'}]

Аналогично, результат работы модели sberbank-ai/ruRoberta-large:

[{'score': 0.9932233095169067,
  'token': 1390,
  'token_str': ' дорог',
  'sequence': 'Мал золотник, да дорог.'},
 {'score': 0.0012484147446230054,
  'token': 23052,
  'token_str': ' вонюч',
  'sequence': 'Мал золотник, да вонюч.'},
 {'score': 0.0008957100217230618,
  'token': 14927,
  'token_str': ' дюж',
  'sequence': 'Мал золотник, да дюж.'}]

Первая модель запуталась и предсказала совершенно неверные варианты, в то время как вторая модель с вероятностью 99.32% предсказала верный вариант.

В результате, модель sberbank-ai/ruRoberta-large является более точной, так как она обучалась на большем количестве данных и имеет больше внутренних параметров.

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

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

Такое моделирование также будет полезно для распознавания документов: при переводе результатов в текст, данные могут быть частично или полностью не распознаны, однако технология fill-mask может минимизировать подобные случаи, анализируя тексты и логически дополняя документы.