Это проект по дообучению модели polygloss на нетривиальных примерах русского языка для задачи автоматического глоссирования.
-
Мы собрали собственный датасет из 1200 сложных русскоязычных предложений:
📂 ars667/russian_gloss (HuggingFace Datasets) -
Дообучили модель
google/byt5-baseна основе архитектуры Polygloss.
📦 ars667/russ_gloss_model (HuggingFace Models) -
Собрали датасет из особо сложных ситуаций в русском: падежи, несуществующие слова, уменьшительно-ласкательные... 📂 ars667/russian_gloss (HuggingFace Datasets)
-
Дообучили модель на нём и получили модель, отлично понимающую русский:
📂 [ars667/russian_gloss (HuggingFace Datasets)](https://huggingface.co/dataset s/ars667/russian_gloss_v2)
Оценка на валидационной выборке из 100 нетривиальных русскоязычных предложений:
| Метрика | Исходная модель | Наша дообученная модель |
|---|---|---|
| chrF++ | 51.97 | 100.00 |
| BLEU | 13.95 | 100.00 |
| Exact Match | 0% | 38% |
Выборка была специально составлена из лингвистически сложных конструкций, не покрываемых типичными тренировочными данными.
git clone https://github.com/ars/rus_gloss.git
cd rus_gloss
conda env create -f environment.yml
conda activate russ_glossУбедитесь, что у вас установлен
conda.
Готовый файл inference.ipynb содержит пример использования модели. Для запуска:
jupyter notebook inference.ipynbЛибо минимальный пример в .py:
from transformers import T5ForConditionalGeneration, ByT5Tokenizer
import torch
transcription = "Им приятно было вместе работать."
translation = "They enjoyed working together"
lang = "Russian"
metalang = "English"
is_segmented = False
prompt = f"""Provide the glosses for the following transcription in {lang}.
Transcription in {lang}: {transcription}
Transcription segmented: {is_segmented}
Translation in {metalang}: {translation}
Glosses:
"""
model = T5ForConditionalGeneration.from_pretrained("ars667/russ_gloss_model_v2")
tokenizer = ByT5Tokenizer.from_pretrained("google/byt5-base", use_fast=False)
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_length=1024)
decoded = tokenizer.batch_decode(outputs, skip_special_tokens=True)
print(decoded[0]).
├── environment.yml # Зависимости conda
├── inference.ipynb # Jupyter-ноутбук для инференса
├── README.md # Описание проекта
└── polygloss # файлы от LECSlab для обучения модели