File size: 2,861 Bytes
7ab3fbc 8abab19 7ab3fbc 86bd5a4 8abab19 86bd5a4 7ab3fbc 8abab19 19a9f33 8abab19 86bd5a4 8abab19 86bd5a4 8abab19 1515adb 7ab3fbc 8abab19 86bd5a4 8abab19 86bd5a4 8abab19 7ab3fbc 8abab19 7ab3fbc 8abab19 |
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 |
import gradio as gr
from transformers import pipeline
import re
classifier = pipeline(
"zero-shot-classification",
model="cointegrated/rubert-tiny2-2ch", # Специальная версия для классификации
device=-1
)
def preprocess(text: str) -> str:
"""Нормализация текста для улучшения качества классификации"""
text = re.sub(r"[^а-яА-ЯёЁa-zA-Z0-9]", " ", text) # Удаляем спецсимволы
text = re.sub(r"\s+", " ", text).strip().lower() # Нормализуем пробелы и регистр
return text
def classify(item: str, categories: str) -> str:
# Предобработка входящих данных
item = preprocess(item)
categories_list = [preprocess(c) for c in categories.split(",")]
# Формируем контекстные примеры для улучшения понимания
hypothesis_template = (
"Примеры категоризации:\n"
"- 'молоток' → инструменты\n"
"- 'морковь' → овощи\n"
"Теперь определи категорию для: '{}' → "
)
result = classifier(
item,
candidate_labels=categories_list,
hypothesis_template=hypothesis_template,
multi_label=False
)
# Фильтр низкой уверенности
if result['scores'][0] < 0.5:
return "Не удалось определить категорию"
return f"{result['labels'][0].capitalize()} (точность: {result['scores'][0]:.2f})"
iface = gr.Interface(
fn=classify,
inputs=[
gr.Textbox(label="Название товара",
placeholder="Например: Перфоратор DeWalt"),
gr.Textbox(label="Категории через запятую",
value="Инструменты, Овощи, Техника, Упаковка")
],
outputs=gr.Textbox(label="Результат"),
examples=[
["Болгарка Makita", "Инструменты, Техника, Электроника"],
["Свёкла столовая", "Овощи, Фрукты, Семена"],
["Картонная коробка 40x60", "Упаковка, Мебель, Инструменты"]
],
title="Умный классификатор товаров",
description="🚀 Версия с улучшенной точностью за счет:\n"
"- Специальной модели классификации\n"
"- Предобработки текста\n"
"- Контекстных примеров\n"
"- Фильтра низкой уверенности"
)
iface.launch() |