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)
Формат промпта
Промпт состоит из трёх частей, и модель ожидает их все:
<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:(«продолжи диалог»), затем реплики, где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