YandexGPT-5-Lite-Instruct
Версия YandexGPT-5-Lite-Instruct, дообученная с помощью LoRA адаптера специально для генерации медицинских текстовых описаний глазного дна в рамках проекта системы помощи офтальмологам EYAS.
Задавайте вопросы в discussions.
Общее описание
YandexGPT-5-Lite — instruct-версия большой языковой модели на 8B параметров с длиной контекста 32k токенов. Базовая версия модели обучена на оригинальных весах YandexGPT 5 Lite Pretrain, без использования сторонних моделей. Алайнмент модели выполнен с использованием техник SFT и RLHF.
В рамках проекта EYAS была реализована дополнительная настройка модели методом LoRA (Low-Rank Adaptation) с целью улучшения качества генерации медицинских описаний глазного дна, повышения точности передачи параметров и естественности языка.
Конфигурация дообучения LoRA
Модель дообучалась с использованием метода LoRA, который заключается в добавлении адаптеров (небольших низкоранговых матриц) для модификации исходных весов без полного пересчета всех параметров модели.
Размерность исходной матрицы весов слоя (d): 4096
Ранг матриц адаптера (r): 8
Дообучение слоёв — query, value
Общее количество обученных параметров: ~4.19 млн (0,05% от всех параметров модели)
Обучение происходило на 150 синтетических текстах, созданных с использованием проприетарной модели ChatGPT–4.5.
Используемый инструмент: torchtune
Аппаратные ресурсы: GPU с 48 Гб видеопамяти на платформе RunPod
Как использовать
Модель можно запустить через HF Transformers:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
MODEL_NAME = "mastavtsev/YandexGPT-5-lite-LoRA-OphtReportsGen"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torch_dtype=torch.bfloat16,
device_map="auto"
)
model.eval()
generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
generation_config.max_new_tokens = 1536
generation_config.pad_token_id = 2
content = """
**Задача:**
На основе предоставленного JSON-документа с параметрами глазного дна составь его развёрнутое текстовое описание. Cтремись к естественной, живой и грамотной формулировке текста.
**Формат:**
- Описание должно быть текстовым, структурированным и последовательным.
- Допускается совместное описание артерий и вен, если у них одинаковые параметры. Если параметры разные, их необходимо описывать отдельно.
- У тебя должно получиться {{ n }} абзаца.
- Если в JSON-документе не указаны показатели Э/Д и А/В индекс, то не указывай их в описании.
- Если в JSON-документе не указаны патологии, то не указывай их в описании.
- Не надо раскрывать аббревиатуру ДЗН, всегда пиши просто ДЗН.
- При описании ДЗН в отдельном предложении опиши цвет, монотонность, размер, форму и границы. В отдельном предложении также опиши экскавацию.
**Данные:**
JSON-документ:
{
"ДЗН": {
"Цвет": "Бледно-Розовый",
"Монотонность": "Наблюдается",
"Размер": "Меньше нормы",
"Форма": "Не правильная",
"Границы": "Размытые",
"Экскавация": {
"Размер": "Меньше нормы",
"Сектор": "В центре",
},
"Э/Д": 0.4,
"Сосудистый пучок": "В центре",
"Патология ДЗН": "К наружи от экскавации темно-серый очаг с четкими границами 0.2 ДД.",
},
"Сосуды": {
"Артерии": {
"Ход": "Нормальный",
"Извитость": "Нормальная",
"Бифуркация": "Нормальная",
"Калибр": "Нормальный",
},
"Вены": {
"Ход": "Нормальный",
"Извитость": "Нормальная",
"Бифуркация": "Нормальная",
"Калибр": "Нормальный",
},
"А/В индекс": "2:3",
"Патология Сосудов": "По ходу сосудов единичные шарообразные утолщения стенок сосудов, окружённое очагами красного цвета с четкими границами (кровоизлияния)",
},
"Макула": {
"Макулярный рефлекс": "Нормальный",
"Фовеальный рефлекс": "Нормальный",
"Патология Макулы": "Дополнительно присутствуют кольцевидные рефлексы (кистовидный отёк).",
},
"Переферия": {
"Патология Переферии": "По всему глазному дну множественные очаги красного цвета (кровоизлияния).",
}
}
"""
prompt = tokenizer.apply_chat_template([{
"role": "user",
"content": content
}], tokenize=False, add_generation_prompt=True)
data = tokenizer(prompt, return_tensors="pt", add_special_tokens=False)
data = {k: v.to(model.device) for k, v in data.items()}
output_ids = model.generate(**data, generation_config=generation_config)[0]
output_ids = output_ids[len(data["input_ids"][0]):]
output = tokenizer.decode(output_ids, skip_special_tokens=True).strip()
print(output)
# Диск зрительного нерва (ДЗН) имеет бледно-розовый цвет, монотонный, уменьшенного размера, неправильной формы и с размытыми границами. Экскавация уменьшенного размера и расположена в центре. Сосудистый пучок находится в центре ДЗН.
# Выявлена патология ДЗН: кнаружи от экскавации наблюдается тёмно-серый очаг с чёткими границами размером 0,2 ДД.
# Артерии и вены имеют нормальный ход, нормальную извитость и бифуркацию, а также нормальный калибр. Соотношение калибра артерий к венам (А/В индекс) составляет 2:3.
# Обнаружена патология сосудов: по ходу сосудов выявлены единичные шарообразные утолщения стенок сосудов, окружённые очагами красного цвета с чёткими границами (кровоизлияния).
# Макулярный и фовеальный рефлексы в норме. В области макулы дополнительно присутствуют кольцевидные рефлексы (кистовидный отёк).
# На периферии глазного дна выявлены множественные очаги красного цвета (кровоизлияния).
- Downloads last month
- 517
Model tree for mastavtsev/YandexGPT-5-lite-LoRA-OphtReportsGen
Base model
yandex/YandexGPT-5-Lite-8B-pretrain