Докстринги на родном: почему StRuCom — это не очередной датасет
Откроем правду: 99% моделей, генерирующих комментарии к коду, учились на английском. CodeSearchNet, CodeBERTa, GraphCodeBERT — все они выдают 'Returns the square root', даже если вы просите по-русски. А русские комментарии в реальных проектах часто выглядят как 'функция для того чтобы вычислить корень' — криво, безграмотно, а иногда и просто переведено через Google Translate. StRuCom (Russian Code Summarization Dataset) родился именно из этой боли.
Разработчики из AIRI и МФТИ собрали 260 тысяч пар «функция — докстринг» на чистом русском. Без англицизмов, без 'returns', без 'args'. Изначально они взяли CodeSearchNet как каркас (он же содержит 2.3 млн пар на английском), но полностью переписали документацию руками и полуавтоматической проверкой. Результат — датасет, под который можно дообучать любую современную LLM: от Qwen2.5-Coder-32B до DeepSeek-Coder-V3.
Ключевая фишка: StRuCom сохраняет все 6 языков программирования из CodeSearchNet (Python, Java, JS, Go, Ruby, PHP), но на русском. Это позволяет дообучать модели без потери качества на других языках.
Русский код — русский коммент: как устроен StRuCom
В датасете каждый пример — это не просто строчка из документации. Там есть контекст: сигнатура функции, тело, иногда соседние функции. Формат — JSON-строки, разбитые по языкам. Вот как выглядит одна запись в Python:
{
"func_name": "calc_factorial",
"original_function": "def calc_factorial(n):\n if n == 0: return 1\n return n * calc_factorial(n-1)",
"docstring_ru": "Вычисляет факториал числа с помощью рекурсии.",
"language": "python"
}Все докстринги прошли многоступенчатую валидацию: сначала модель переводила английские, потом человек-аннотатор правил неточности. Отдельно фильтровали случаи, когда функция имеет очевидное название (вроде 'get_name'), чтобы модель не копировала имя, а писала осмысленное описание. Звучит логично, но есть нюанс: около 15% пар пришлось отбраковать — функция была слишком проста или докстринг дублировал сигнатуру.
Почему это лучше англоязычных аналогов (и где подвох)
Сравним StRuCom с классическим CodeSearchNet на Python. Возьмём функцию def binary_search(arr, target):. CodeSearchNet выдаст: "Searches for a target value in a sorted array using binary search algorithm." StRuCom: "Выполняет бинарный поиск элемента в отсортированном массиве." Разница очевидна, но давайте посмотрим на метрики.
| Критерий | CodeSearchNet (EN) | StRuCom (RU) |
|---|---|---|
| Количество пар | 2.3 млн | 260 тыс. |
| BLEU (на русском) | ~0.12 | ~0.29 |
| ROUGE-L | 0.18 | 0.35 |
| Человеческая оценка (1-5) | 1.9 (русский перевод плохой) | 4.2 |
Да, StRuCom в 9 раз меньше по объёму. Но качество на русском — на порядок выше. Не советую дообучать на одном StRuCom, если модель никогда не видела русского кода. Лучше взять базовый чекпоинт, который уже понимает русский синтаксис (например, ruGPT-3.5 или Qwen2.5), и дообучить сверху. Как это сделать — описано в гайде по сбору датасета для кодогенераторов (там отлично разобрана методология смешивания данных).
StRuCom в деле: как дообучить LLM за вечер
Допустим, у вас есть локальная LLM (например, DeepSeek-Coder-6.7B) и вы хотите, чтобы она писала докстринги по-русски. Берёте StRuCom, форматируете в промпты вида:
### Функция:
def is_palindrome(s):
return s == s[::-1]
### Напиши докстринг на русском:
И дообучаете LoRA методом QLoRA. Параметры: rank=16, alpha=32, 3 эпохи, lr=2e-4. Авторы StRuCom в своей статье показывают, что такой подход повышает BLEU на 0.12 по сравнению с базовой моделью. Ещё один лайфхак: можно совместить StRuCom с датасетом LongPage для длинных контекстов, если ваша модель будет писать документацию к большим классам.
Ошибки на практике: если дообучать на одном StRuCom без регуляризации, модель может начать выдавать докстринги, которые похожи на русские, но семантически бессмысленны. В оригинальной статье авторы советуют добавлять 10% английских примеров из CodeSearchNet, чтобы не забыть исходный язык. Звучит логично, но на практике это даёт +0.03 к BLEU, зато модель не теряет способность писать на английском при необходимости.
Кому StRuCom нужен прямо сейчас
- Командам, которые пишут opensource на русском. Например, проекты вроде Yandex Cloud SDK или YouTrack интеграции. Документация на русском повышает вклад сообщества, но писать её вручную — ад. StRuCom + LoRA решают это за пару часов.
- Разработчикам AI-ассистентов. Если вы делаете корпоративного помощника, который должен комментировать код на русском без костылей с переводом, — это лучший датасет на сегодня (май 2026).
- Исследователям мультиязычного кода. StRuCom открыто доступен на Hugging Face, а его методология (ручной перевод + фильтрация) применима для любого языка — от татарского до китайского. Как вам идея сделать StRuCom для татарского? Проблема токенизации неанглийских языков в LLM обсуждалась здесь, и датасет может стать частью решения.
И последнее: если вы всё ещё думаете, что докстринги на русском — это излишество, вспомните, сколько раз вы материли коллегу, который оставил комментарий 'TODO: fix this later'. StRuCom — это шанс, что 'later' наступит на русском.