Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Foundation Models
    • Все инструкции
    • Отключить логирование запросов
    • Получить API-ключ
    • Пакетная обработка данных
      • Дообучить модель генерации текста
      • Дообучить модель классификации текста
  • Yandex Cloud ML SDK
  • Совместимость с OpenAI
  • Управление доступом
  • Правила тарификации
  • Публичные материалы
  • История изменений

В этой статье:

  • Перед началом работы
  • Загрузите датасет
  • Запустите дообучение
  • Обращение к дообученному классификатору
  1. Пошаговые инструкции
  2. Дообучение моделей
  3. Дообучить модель классификации текста

Дообучить модель классификации текста

Статья создана
Yandex Cloud
Улучшена
Обновлена 24 апреля 2025 г.
  • Перед началом работы
  • Загрузите датасет
  • Запустите дообучение
    • Обращение к дообученному классификатору

Дообучение моделей по методу LoRA находится на стадии Preview.

Если стандартных моделей классификаторов вам недостаточно, вы можете дообучить модель классификатора на базе YandexGPT Lite, чтобы она точнее классифицировала ваши запросы.

Перед началом работы

Чтобы воспользоваться примерами:

Консоль управления
SDK
cURL

Для работы из консоли управления подготовительные действия не требуются.

  1. Создайте сервисный аккаунт и назначьте ему роль ai.editor.

  2. Получите и сохраните API-ключ сервисного аккаунта.

    В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.

  3. С помощью менеджера пакетов pip установите библиотеку ML SDK:

    pip install yandex-cloud-ml-sdk
    
  1. Получите данные для аутентификации в API, как описано в разделе Аутентификация в API Yandex Foundation Models.

  2. Чтобы воспользоваться примерами, установите cURL.

  3. Установите gRPCurl.

  4. (Опционально) Установите утилиту jq для потоковой обработки JSON-файлов.

  5. Получите IAM-токен для аутентификации в API.

    Примечание

    У IAM-токена короткое время жизни — не более 12 часов.

Загрузите датасет

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

В этом примере дообучение запускается с использованием только обучающего датасета.

Создайте датасет для дообучения:

Консоль управления
SDK
cURL
  1. В консоли управления выберите каталог, на который у вашего аккаунта есть роли ai.playground.user и ai.datasets.editor или выше.

  2. В списке сервисов выберите Foundation Models.

  3. На панели слева нажмите Датасеты.

  4. Нажмите Создать датасет.

  5. Введите имя и описания датасета. Требования к имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.
  6. В поле Тип выберите тип классификации: Классификация c несколькими метками или Многоклассовая классификация.

  7. Добавьте или удалите метки датасета. Они позволяют разделить и сгруппировать ресурсы на логические группы.

  8. Нажмите Выбрать файл или перетащите созданный ранее JSON-файл в зону загрузки.

  9. Нажмите Создать датасет.

  1. Создайте файл dataset-create.py и добавьте в него код:

    #!/usr/bin/env python3
    
    from __future__ import annotations
    
    import pathlib
    from yandex_cloud_ml_sdk import YCloudML
    from yandex_cloud_ml_sdk.auth import YandexCloudCLIAuth
    
    
    def main() -> None:
    
        sdk = YCloudML(
            folder_id="<идентификатор_каталога>",
            auth="<API-ключ>",
        )
    
        # Так можно посмотреть список всех загруженных датасетов
        for dataset in sdk.datasets.list():
            print(f"List of existing datasets {dataset=}")
    
        # Так можно удалить все ранее загруженные датасеты
        for dataset in sdk.datasets.list():
            dataset.delete()
    
        # Создаем датасет для дообучения базовой модели YandexGPT Lite
        dataset_draft = sdk.datasets.draft_from_path(
            task_type="<тип_классификации>",
            path="<путь_к_файлу>",
            upload_format="jsonlines",
            name="multiclass",
        )
    
        # Дождемся окончания загрузки данных и создания датасета
        operation = dataset_draft.upload_deferred()
        tuning_dataset = operation.wait()
        print(f"new {tuning_dataset=}")
    
    
    if __name__ == "__main__":
        main()
    

    Где:

    • <идентификатор_каталога> — идентификатор каталога, в котором создан сервисный аккаунт.

    • <API-ключ> — API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.

      В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.

    • <тип_классификации> — тип классификации, для которой с помощью создаваемого датасета будет дообучаться модель. Возможные значения:

      • TextClassificationMultilabel — бинарная классификация или классификация с несколькими метками.
      • TextClassificationMulticlass — многоклассовая классификация.
    • <путь_к_файлу> — путь к файлу, содержащему заранее подготовленные примеры для дообучения модели.

  2. Выполните созданный файл:

    python3 dataset-create.py
    

    Результат:

    new tuning_dataset=Dataset(id='fds6vl5ttl0n********', folder_id='b1gt6g8ht345********', name='YandexGPT 
    Lite tuning', description=None, metadata=None, created_by='ajegtlf2q28a********', created_at=datetime.
    datetime(2025, 3, 13, 8, 12, 43), updated_at=datetime.datetime(2025, 3, 13, 8, 13, 17), labels=None, 
    allow_data_logging=False, status=<DatasetStatus.READY: 3>, task_type='TextClassificationMulticlass', 
    rows=4, size_bytes=5679, validation_errors=())
    

    Сохраните идентификатор созданного датасета (значение поля id) — он понадобится при дообучении модели.

  1. Создайте датасет:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d @ \
      llm.api.cloud.yandex.net:443 yandex.cloud.ai.dataset.v1.DatasetService/Create <<EOM
      {
        "folder_id": "<идентификатор_каталога>", 
        "name": "My awesome dataset", 
        "task_type": "<тип_классификации>", 
        "upload_format": "jsonlines"
      }
    EOM
    

    Где:

    • <IAM-токен> — IAM-токен сервисного аккаунта, полученный перед началом работы.

    • <идентификатор_каталога> — идентификатор каталога, в котором создается датасет.

    • <тип_классификации> — тип классификации, для которой с помощью создаваемого датасета будет дообучаться модель. Возможные значения:

      • TextClassificationMultilabel — бинарная классификация или классификация с несколькими метками.
      • TextClassificationMulticlass — многоклассовая классификация.

    Результат:

    {
      "datasetId": "fds8hd01tset********",
      "dataset": {
        "datasetId": "fds8hd01tset********",
        "folderId": "b1gt6g8ht345********",
        "name": "My awesome dataset",
        "status": "DRAFT",
        "taskType": "<указанный_в_запросе_тип_задачи>",
        "createdAt": "2025-01-20T14:51:34Z",
        "updatedAt": "2025-01-20T14:51:34Z",
        "createdById": "ajeg2b2et02f********",
        "createdBy": "ajeg2b2et02f********"
      }
    }
    

    Сохраните идентификатор созданного датасета (значение поля datasetId) он понадобится при загрузке данных в датасет.

  2. Получите ссылку, по которой вы сможете загрузить данные в датасет:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '{"dataset_id": "<идентификатор_датасета>", "size_bytes": <размер_датасета>}' \
      llm.api.cloud.yandex.net:443 yandex.cloud.ai.dataset.v1.DatasetService/GetUploadDraftUrl | jq
    

    Где:

    • <IAM-токен> — IAM-токен сервисного аккаунта, полученный перед началом работы.
    • <идентификатор_датасета> — идентификатор датасета, сохраненный на предыдущем шаге.
    • <размер_датасета> — размер в байтах файла с данными для дообучения. В терминале получить размер файла можно с помощью команды ls -l <путь_к_файлу>.

    Результат:

    {
      "datasetId": "fdso08c1u1cq********",
      "uploadUrl": "https://storage.yandexcloud.net/ai-fomo-drafts-prod/b1gt6g8ht345********/fdso08c1u1cq********?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250120T105352Z&X-Amz-SignedHeaders=content-length%3Bhost&X-Amz-Expires=86400&X-Amz-Credential=YCAJE_WuJJ9D1r6huCoc8I3yO%2F20250120%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=611d7951994ae939acf4d32cc0c154c738d02adb2a04707a704f34ca********"
    }
    

    Поле uploadUrl ответа содержит ссылку, по которой вы сможете загрузить ваши данные в датасет.

    Совет

    Если вы не использовали утилиту jq, в полученной ссылке замените все последовательности символов \u0026 на &, чтобы использовать ее для загрузки датасета.

  3. Загрузите данные, указав полученную на предыдущем шаге ссылку и путь к файлу с данными для дообучения:

    curl \
      --request PUT \
      --upload-file <путь_к_файлу> \
      "<ссылка>"
    
  4. После окончания загрузки данных запустите валидацию датасета:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '{"dataset_id": "<идентификатор_датасета>"}' \
      llm.api.cloud.yandex.net:443 yandex.cloud.ai.dataset.v1.DatasetService/Validate
    

    Где:

    • <IAM-токен> — IAM-токен сервисного аккаунта, полученный перед началом работы.
    • <идентификатор_датасета> — идентификатор датасета, сохраненный ранее.

    Результат:

    {
      "id": "fdso01v2jdd4********",
      "createdAt": "2025-01-20T11:03:48Z",
      "modifiedAt": "2025-01-20T11:03:48Z"
    }
    

    Сохраните идентификатор операции валидации (поле id) — он понадобится на следующем шаге.

  5. Валидация датасета может занять некоторое время. Чтобы узнать статус операции и, при наличии, получить отчет о возникших ошибках, отправьте запрос:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '{"operation_id": "<идентификатор_операции_валидации>"}' \
      llm.api.cloud.yandex.net:443 yandex.cloud.operation.OperationService/Get
    

    Где:

    • <IAM-токен> — IAM-токен сервисного аккаунта, полученный перед началом работы.
    • <идентификатор_операции_валидации> — идентификатор операции валидации, сохраненный на предыдущем шаге.

    Результат:

    {
      "id": "fdso01v2jdd4********",
      "createdAt": "2025-01-20T11:03:48Z",
      "modifiedAt": "2025-01-20T11:04:46Z",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/yandex.cloud.ai.dataset.v1.ValidateDatasetResponse",
        "datasetId": "fdso08c1u1cq********",
        "isValid": true
      }
    }
    

    Значение поля isValid — true. Значит, валидация загруженного датасета прошла успешно.

Запустите дообучение

Консоль управления
SDK
cURL
  1. В консоли управления выберите каталог, на который у вашего аккаунта есть роли ai.playground.user, ai.datasets.user и ai.models.editor или выше.

  2. В списке сервисов выберите Foundation Models.

  3. На панели слева нажмите Дообучение моделей.

  4. Нажмите Дообучить модель.

  5. Введите имя и описания датасета. Требования к имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.
  6. В поле Задача выберите Классификация.

  7. Выберите Тип классификации: Многоклассовая или C несколькими метками.

  8. (Опционально) Добавьте или удалите метки дообучения. Они позволяют разделить и сгруппировать ресурсы на логические группы.

  9. В поле Модель выберите нужную модель.

  10. В поле Датасет нажмите Добавить.

  11. В открывшемся окне перейдите на вкладку Выбрать из существующих и выберите созданный ранее датасет.

  12. Нажмите Дополнительные параметры, чтобы провести тонкую настройку дообучения.

  13. Нажмите Начать дообучение.

  1. Создайте файл start-tuning.py и добавьте в него код:

    #!/usr/bin/env python3
    
    from __future__ import annotations
    import pathlib
    import uuid
    from yandex_cloud_ml_sdk import YCloudML
    
    
    def main():
        sdk = YCloudML(
            folder_id="<идентификатор_каталога>",
            auth="<API-ключ>",
        )
    
        # Посмотрим список датасетов, прошедших валидацию
        for dataset in sdk.datasets.list(status="READY", name_pattern="multiclass"):
            print(f"List of existing datasets {dataset=}")
    
        # Зададим датасет для обучения и базовую модель
        train_dataset = sdk.datasets.get("<идентификатор_датасета>")
        base_model = sdk.models.text_classifiers("yandexgpt-lite")
    
        # Определяем минимальные параметры
        # Используйте base_model.tune_deferred(), чтобы контролировать больше параметров
        # Запускаем дообучение
        tuned_model = base_model.tune(
            train_dataset, name=str(uuid.uuid4()), classification_type="<тип_классификации>"
        )
        print(f"Resulting {tuned_model}")
    
        # Можно обратиться к дообученной модели с помощью метода run()
        classification_result = tuned_model.run("Ничего себе!")
        print(f"{classification_result=}")
    
        # А можно сохранить URI дообученной модели
        # И вызывать дообученную модель по URI
        tuned_uri = tuned_model.uri
        model = sdk.models.text_classifiers(tuned_uri)
        classification_result = model.run("Круто!")
        print(f"{classification_result=}")
    
    
    if __name__ == "__main__":
        main()
    

    Где:

    • <идентификатор_каталога> — идентификатор каталога, в котором создан сервисный аккаунт.

    • <API-ключ> — API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.

      В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.

    • <идентификатор_датасета> — сохраненный на предыдущем шаге идентификатор созданного датасета.

    • <тип_классификации> — тип классификации, для которой будет дообучаться модель. Возможные значения:

      • binary — бинарная классификация.
      • multilabel — классификация с несколькими метками.
      • multiclass — многоклассовая классификация.
  2. Выполните созданный файл:

    python3 start-tuning.py
    

    Результат:

    Resulting TextClassifiersModel(uri=cls://b1gt6g8ht345********/yandexgpt-lite/
    latest@tamrqj184r59v********, config=TextClassifiersModelConfig(task_description=None, labels=None, 
    samples=None))
    classification_result=TextClassifiersModelResult(predictions=(TextClassificationLabel(label='гнев', 
    confidence=0.0026986361481249332), TextClassificationLabel(label='грусть', confidence=0.
    0013768149074167013), TextClassificationLabel(label='радость', confidence=0.00017048732843250036), 
    TextClassificationLabel(label='страх', confidence=0.9950377345085144), TextClassificationLabel
    (label='удивление', confidence=0.0007163778645917773)), model_version='')
    classification_result=TextClassifiersModelResult(predictions=(TextClassificationLabel(label='гнев', 
    confidence=0.00042847482836805284), TextClassificationLabel(label='грусть', confidence=1.
    9441255062702112e-05), TextClassificationLabel(label='радость', confidence=2.6669084718378144e-07), 
    TextClassificationLabel(label='страх', confidence=0.999543309211731), TextClassificationLabel
    (label='удивление', confidence=8.627005627204198e-06)), model_version='')
    

    Дообучение модели может занять до 1 суток в зависимости от объема датасета и степени загрузки системы.

    Используйте полученный URI дообученной модели (значение поля uri) при обращении к ней.

  3. Метрики дообучения доступны в формате TensorBoard. Загруженный файл можно открыть, например, в проекте Yandex DataSphere:

    metrics_url = new_model.get_metrics_url()
    download_tensorboard(metrics_url)
    
  1. Запустите дообучение:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d @ \
      llm.api.cloud.yandex.net:443 yandex.cloud.ai.tuning.v1.TuningService/Tune <<EOM
      {
        "base_model_uri": "cls://<идентификатор_каталога>/yandexgpt-lite/latest",
        "train_datasets": [{"dataset_id": "<идентификатор_датасета>", "weight": 1.0}],
        "name": "my first model",
        "<тип_классификации>": {}
      } 
    EOM
    

    Где:

    • <IAM-токен> — IAM-токен сервисного аккаунта, полученный перед началом работы.

    • <идентификатор_каталога> — идентификатор каталога, в котором дообучается модель.

    • <идентификатор_датасета> — идентификатор датасета, сохраненный ранее.

    • <тип_классификации> — тип классификации, для которой будет дообучаться модель. Возможные значения:

      • text_classification_multilabel — бинарная классификация или классификация с несколькими метками.
      • text_classification_multiclass — многоклассовая классификация.

    Результат:

    {
      "id": "ftnlljf53kil********",
      "createdAt": "2025-01-20T11:17:33Z",
      "modifiedAt": "2025-01-20T11:17:33Z",
      "metadata": {
        "@type": "type.googleapis.com/yandex.cloud.ai.tuning.v1.TuningMetadata"
      }
    }
    

    В ответе сервис вернет объект Operation. Сохраните идентификатор (id) операции, полученный в ответе.

  2. Дообучение модели может занять до 1 суток в зависимости от объема датасета и степени загрузки системы. Чтобы проверить готовность дообучения, запросите статус операции:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '{"operation_id": "<идентификатор_операции>"}' \
      llm.api.cloud.yandex.net:443 yandex.cloud.operation.OperationService/Get
    

    Где:

    • <IAM-токен> — IAM-токен сервисного аккаунта, полученный перед началом работы.
    • <идентификатор_операции> — идентификатор операции дообучения модели, полученный на предыдущем шаге.

    Если дообучение завершилось, объект Operation будет содержать URI дообученной модели в поле targetModelUri:

    {
      "id": "ftnc7at9r66t********",
      "createdAt": "2025-01-20T15:41:06Z",
      "modifiedAt": "2025-01-20T15:46:10Z",
      "done": true,
      "metadata": {
        "@type": "type.googleapis.com/yandex.cloud.ai.tuning.v1.TuningMetadata",
        "status": "COMPLETED",
        "tuningTaskId": "ftnc7at9r66t********"
      },
      "response": {
        "@type": "type.googleapis.com/yandex.cloud.ai.tuning.v1.TuningResponse",
        "status": "COMPLETED",
        "targetModelUri": "cls://b1gt6g8ht345********/yandexgpt-lite/latest@tamr8gqhetveg********",
        "tuningTaskId": "ftnc7at9r66t********"
      }
    }
    

    Используйте полученный URI дообученной модели (значение поля targetModelUri) при обращении к ней.

  3. Метрики дообучения доступны в формате TensorBoard. Получите ссылку, чтобы загрузить файл:

    grpcurl \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '{"task_id": "<идентификатор_задания>"}' \
      llm.api.cloud.yandex.net:443 yandex.cloud.ai.tuning.v1.TuningService/GetMetricsUrl
    

    Загруженный файл можно открыть, например, в проекте Yandex DataSphere.

Обращение к дообученному классификатору

После завершения операции дообучения сохраните URI дообученной модели вида cls://<URI_базовой_модели>/<версия>@<суффикс_дообучения>. Используйте его, чтобы отправлять синхронные запросы к дообученному классификатору.

См. также

  • Дообучение моделей в DataSphere
  • Больше примеров доступно в репозитории на GitHub.

Была ли статья полезна?

Предыдущая
Дообучить модель генерации текста
Следующая
Создать простого ассистента
Проект Яндекса
© 2025 ООО «Яндекс.Облако»