Spaces:
Running
Running
File size: 5,553 Bytes
57645e8 66fabfa f4f65e1 c43dd36 52af11a 6bbd70d c43dd36 66fabfa 6bbd70d c43dd36 6bbd70d c43dd36 6bbd70d ead8089 6bbd70d ead8089 6bbd70d ead8089 6bbd70d c43dd36 ead8089 c43dd36 6bbd70d c43dd36 ead8089 6bbd70d ead8089 c43dd36 6bbd70d c43dd36 ead8089 6bbd70d ead8089 ff077e4 66fabfa ead8089 f5f461a 6bbd70d ead8089 f5f461a ead8089 f5f461a 6bbd70d ead8089 6bbd70d ead8089 6bbd70d ead8089 f5f461a 10035b7 6bbd70d 10035b7 6bbd70d 66fabfa c43dd36 60a6dd5 6bbd70d f5f461a 6bbd70d f5f461a 10035b7 6bbd70d f5f461a 6bbd70d f5f461a ead8089 f5f461a 6bbd70d f5f461a a4bd38b 6bbd70d f79a4e6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import gradio as gr
import time
from transformers import pipeline
from datasets import load_dataset
# Загружаем банковский датасет
dataset = load_dataset("Romjiik/Russian_bank_reviews", split="train")
# Примеры для few-shot
few_shot_examples = []
for row in dataset.select(range(2)):
review = row["review"]
example = f"Клиент: {review}\nКлассификация: прочее"
few_shot_examples.append(example)
# Инструкции
cot_instruction = (
"Ты — ассистент банка. Проанализируй обращение клиента и классифицируй его по теме."
" Сначала рассуждай шаг за шагом, затем выведи финальную категорию."
)
simple_instruction = (
"Ты — банковский помощник. Классифицируй обращение клиента одним словом — категорией."
)
# Промпты
def build_cot_prompt(user_input):
examples = "\n\n".join(few_shot_examples)
return (
f"{cot_instruction}\n\n{examples}\n\nКлиент: {user_input}\n"
f"Рассуждение:"
)
def build_simple_prompt(user_input):
examples = "\n\n".join(few_shot_examples)
return (
f"{simple_instruction}\n\n{examples}\n\nКлиент: {user_input}\n"
f"Категория:"
)
# Рабочие модели с поддержкой русского языка и легкие
models = {
"ChatGPT-like (FRED-T5-small)": pipeline("text2text-generation", model="cointegrated/translation-t5-russian-finetuned", tokenizer="cointegrated/translation-t5-russian-finetuned", device=-1),
"DeepSeek-like (ruGPT3-small)": pipeline("text-generation", model="ai-forever/rugpt3small_based_on_gpt2", tokenizer="ai-forever/rugpt3small_based_on_gpt2", device=-1),
"GigaChat-like (RuBERT-tiny2)": pipeline("text-classification", model="cointegrated/rubert-tiny2", tokenizer="cointegrated/rubert-tiny2", device=-1),
}
# Генерация ответов
def generate_dual_answers(user_input):
results = {}
prompt_cot = build_cot_prompt(user_input)
prompt_simple = build_simple_prompt(user_input)
for name, pipe in models.items():
# CoT
start_cot = time.time()
try:
out_cot = pipe(prompt_cot, max_new_tokens=150, do_sample=True, top_p=0.9, temperature=0.7)[0]
answer_cot = out_cot.get("generated_text", out_cot.get("label", "-"))
except:
answer_cot = "Ошибка в CoT"
end_cot = round(time.time() - start_cot, 2)
# Simple
start_simple = time.time()
try:
out_simple = pipe(prompt_simple, max_new_tokens=150, do_sample=True, top_p=0.9, temperature=0.7)[0]
answer_simple = out_simple.get("generated_text", out_simple.get("label", "-"))
except:
answer_simple = "Ошибка в обычном"
end_simple = round(time.time() - start_simple, 2)
results[name] = {
"cot_answer": answer_cot.strip(),
"cot_time": end_cot,
"simple_answer": answer_simple.strip(),
"simple_time": end_simple
}
return (
results["ChatGPT-like (FRED-T5-small)"]["cot_answer"], f"{results['ChatGPT-like (FRED-T5-small)']['cot_time']} сек",
results["ChatGPT-like (FRED-T5-small)"]["simple_answer"], f"{results['ChatGPT-like (FRED-T5-small)']['simple_time']} сек",
results["DeepSeek-like (ruGPT3-small)"]["cot_answer"], f"{results['DeepSeek-like (ruGPT3-small)']['cot_time']} сек",
results["DeepSeek-like (ruGPT3-small)"]["simple_answer"], f"{results['DeepSeek-like (ruGPT3-small)']['simple_time']} сек",
results["GigaChat-like (RuBERT-tiny2)"]["cot_answer"], f"{results['GigaChat-like (RuBERT-tiny2)']['cot_time']} сек",
results["GigaChat-like (RuBERT-tiny2)"]["simple_answer"], f"{results['GigaChat-like (RuBERT-tiny2)']['simple_time']} сек",
)
# Интерфейс Gradio
with gr.Blocks() as demo:
gr.Markdown("## 🤖 Классификация клиентских обращений — CoT vs обычный промпт")
inp = gr.Textbox(label="Обращение клиента", placeholder="Например: Я не могу войти в личный кабинет", lines=2)
btn = gr.Button("Классифицировать")
gr.Markdown("### ChatGPT-like (FRED-T5-small)")
cot1, cot1_time = gr.Textbox(label="CoT ответ"), gr.Textbox(label="Время CoT")
simple1, simple1_time = gr.Textbox(label="Обычный ответ"), gr.Textbox(label="Время обычного")
gr.Markdown("### DeepSeek-like (ruGPT3-small)")
cot2, cot2_time = gr.Textbox(label="CoT ответ"), gr.Textbox(label="Время CoT")
simple2, simple2_time = gr.Textbox(label="Обычный ответ"), gr.Textbox(label="Время обычного")
gr.Markdown("### GigaChat-like (RuBERT-tiny2)")
cot3, cot3_time = gr.Textbox(label="CoT ответ"), gr.Textbox(label="Время CoT")
simple3, simple3_time = gr.Textbox(label="Обычный ответ"), gr.Textbox(label="Время обычного")
btn.click(generate_dual_answers, inputs=[inp], outputs=[
cot1, cot1_time, simple1, simple1_time,
cot2, cot2_time, simple2, simple2_time,
cot3, cot3_time, simple3, simple3_time,
])
if __name__ == '__main__':
demo.launch()
|