Перейти к содержимому
Learning Machine

Cırtdan: открытая модель чат-бота на азербайджанском с персонажами

Cırtdan: открытая модель чат-бота на азербайджанском с персонажами

Cırtdan — открытая модель азербайджанского чат-бота на базе mT5-large, говорящая от лица персонажа: как она устроена, как запустить и её пределы.

Cırtdan — открытая модель азербайджанского чат-бота, которую мы опубликовали на Hugging Face в ноябре 2023 года. Вы даёте ей краткое описание персонажа на азербайджанском и начало диалога, а она продолжает разговор в этой роли. В статье рассказываем, как обучалась модель, как её запустить, каковы её ограничения и как она соотносится с чат-ботами, которые бизнес использует сегодня.

Что такое Cırtdan

  • Базовая модель: mT5-large.
  • Данные: более 1500 диалогов с персонажами, переведённых с русского.
  • Параметры обучения: 3 эпохи, размер батча 1 с накоплением градиента на 32 шага, оптимизатор Adafactor, скорость обучения 1e-4.
  • Лицензия: MIT, то есть модель можно использовать и в коммерческих проектах.

Cırtdan — это базовая версия. Она показывает, что компактная открытая модель может вести диалог на азербайджанском и держаться заданного характера, но для надёжных ответов её нужно дообучить на конкретной прикладной задаче.

Как запустить

Сначала установите библиотеки; токенизатору нужен SentencePiece:

pip install transformers[sentencepiece] torch

В карточке модели приведён такой пример:

import torch
from transformers import AutoTokenizer, MT5ForConditionalGeneration

model_name = 'learningmachineaz/cirtdan-azerbaijani-chatbot'

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = MT5ForConditionalGeneration.from_pretrained(model_name).to(device)
model.eval()

prompt = "<SC6>Sən bir oğlansan, müxtəlif məsələlər üzrə məsləhətçi. Çox ağıllısan. Həmsöhbətinə kömək etmək istəyirəm. Dialoqu davam et:\nHəmsöhbət: salam! necəsən?\nSən: <extra_id_0>"

input_ids = tokenizer.encode(prompt, return_tensors='pt').to(device)

out_ids = model.generate(
    input_ids=input_ids,
    do_sample=True,
    temperature=0.9,
    max_new_tokens=64,
    top_p=0.85,
    top_k=2,
    repetition_penalty=1.2
)

output = tokenizer.decode(out_ids[0][1:])

if '</s>' in output:
    output = output[:output.find('</s>')].strip()

output = output.replace('<extra_id_0>', '').strip()
output = output.split('Həmsöhbət')[0].strip()

print(output)

Формат промпта

Промпт состоит из трёх частей, и модель ожидает их все:

  1. <SC6> — служебный токен в самом начале.
  2. Персонаж: несколько предложений на азербайджанском о том, кто такой бот. В примере: «Sən bir oğlansan, müxtəlif məsələlər üzrə məsləhətçi. Çox ağıllısan. Həmsöhbətinə kömək etmək istəyirəm.» (молодой человек, консультант по разным вопросам, очень умный, хочет помочь собеседнику).
  3. Диалог: Dialoqu davam et: («продолжи диалог»), затем реплики, где Həmsöhbət: — пользователь, а Sən: — бот. Последняя строка Sən: <extra_id_0> отмечает место, которое заполняет модель.

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

Очистка ответа

В сыром выводе модели есть служебные токены, а иногда она начинает писать и следующую реплику пользователя. Поэтому код обрезает текст на </s>, удаляет <extra_id_0> и оставляет только то, что идёт до следующего Həmsöhbət.

Параметры генерации

Сэмплирование с temperature=0.9, top_p=0.85 и top_k=2 делает ответы живыми, но близкими к самым вероятным словам; repetition_penalty=1.2 мешает зацикливанию; max_new_tokens=64 держит ответы короткими, как в чате. Поскольку сэмплирование включено, один и тот же промпт может давать разные ответы.

Ограничения, о которых нужно знать

  • Переведённые данные. Обучающие диалоги переведены с русского, поэтому модель склонна изображать людей с русскими именами.
  • Базовая модель. Без дообучения на вашей задаче ответы недостаточно надёжны для реальных клиентов.
  • Нет знаний о вашем бизнесе. Модель знает только то, что видела при обучении; она не может посмотреть ваши цены, документы или статусы заказов.
  • Короткие ответы. С рекомендованными параметрами ответ — не более 64 новых токенов.

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

Как сегодня строятся чат-боты для бизнеса

Cırtdan полезна для исследований, обучения и экспериментов с диалогом на азербайджанском. Рабочий чат-бот для компании устроен иначе. Он отвечает по собственной базе знаний компании (сайт, документы, таблицы, каталог), а не по тому, что модель случайно запомнила; умеет выполнять действия, например проверить статус заказа или оформить запись; передаёт разговор человеку вместе с историей; защищён от попыток обманом вытянуть внутренние данные. Такого бота можно увидеть в работе в чате на этом сайте.

Попробуйте или создайте своего

Модель — на Hugging Face, подробности — на странице проекта. Если вам нужен азербайджанский чат-бот для клиентов или сотрудников, посмотрите нашу услугу разработки чат-ботов или опишите задачу.

  • Hugging Face
  • mT5
  • Chatbot
  • Azerbaijani

Связаться с нами

Отправьте нам Ваш Проект или Идею для расчёта сроков и стоимости. Мы рады любым Вашим идеям!

Rasul Rza 75, Баку, Азербайджан
[email protected]

Сайт защищён reCAPTCHA; действуют Политика конфиденциальности и Условия использования Google.

Отправляя форму, вы соглашаетесь с политикой конфиденциальности.