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()