NomClass / app.py
hh1199's picture
Update app.py
8abab19 verified
raw
history blame
2.86 kB
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()