hh1199 commited on
Commit
8abab19
·
verified ·
1 Parent(s): 86bd5a4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -17
app.py CHANGED
@@ -1,17 +1,31 @@
1
  import gradio as gr
2
  from transformers import pipeline
 
3
 
4
  classifier = pipeline(
5
  "zero-shot-classification",
6
- model="cointegrated/rubert-tiny2",
7
- device=-1 # Используем CPU для стабильности на бесплатных инстансах
8
  )
9
 
 
 
 
 
 
 
10
  def classify(item: str, categories: str) -> str:
11
- # Формируем гипотезу для классификации
12
- hypothesis_template = "Этот текст относится к категории {}."
 
13
 
14
- categories_list = [c.strip() for c in categories.split(",")]
 
 
 
 
 
 
15
 
16
  result = classifier(
17
  item,
@@ -20,24 +34,32 @@ def classify(item: str, categories: str) -> str:
20
  multi_label=False
21
  )
22
 
23
- # Возвращаем категорию с наибольшим скором
24
- return f"{result['labels'][0]} (уверенность: {result['scores'][0]:.2f})"
 
 
 
25
 
26
  iface = gr.Interface(
27
  fn=classify,
28
  inputs=[
29
- gr.Textbox(label="Название товара", placeholder="Введите наименование товара"),
30
- gr.Textbox(label="Категории (через запятую)",
31
- value="Овощи, Инструменты, Техника, Упаковка")
 
32
  ],
33
- outputs=gr.Textbox(label="Результат классификации"),
34
  examples=[
35
- ["Молоток", "Овощи, Инструменты, Техника"],
36
- ["Свекла", "Фрукты, Овощи, Ягоды"],
37
- ["Ноутбук", "Техника, Мебель, Инструменты"]
38
  ],
39
- title="Классификатор товаров",
40
- description="Введите название товара и список категорий через запятую"
 
 
 
 
41
  )
42
 
43
- iface.launch(debug=True)
 
1
  import gradio as gr
2
  from transformers import pipeline
3
+ import re
4
 
5
  classifier = pipeline(
6
  "zero-shot-classification",
7
+ model="cointegrated/rubert-tiny2-2ch", # Специальная версия для классификации
8
+ device=-1
9
  )
10
 
11
+ def preprocess(text: str) -> str:
12
+ """Нормализация текста для улучшения качества классификации"""
13
+ text = re.sub(r"[^а-яА-ЯёЁa-zA-Z0-9]", " ", text) # Удаляем спецсимволы
14
+ text = re.sub(r"\s+", " ", text).strip().lower() # Нормализуем пробелы и регистр
15
+ return text
16
+
17
  def classify(item: str, categories: str) -> str:
18
+ # Предобработка входящих данных
19
+ item = preprocess(item)
20
+ categories_list = [preprocess(c) for c in categories.split(",")]
21
 
22
+ # Формируем контекстные примеры для улучшения понимания
23
+ hypothesis_template = (
24
+ "Примеры категоризации:\n"
25
+ "- 'молоток' → инструменты\n"
26
+ "- 'морковь' → овощи\n"
27
+ "Теперь определи категорию для: '{}' → "
28
+ )
29
 
30
  result = classifier(
31
  item,
 
34
  multi_label=False
35
  )
36
 
37
+ # Фильтр низкой уверенности
38
+ if result['scores'][0] < 0.5:
39
+ return "Не удалось определить категорию"
40
+
41
+ return f"{result['labels'][0].capitalize()} (точность: {result['scores'][0]:.2f})"
42
 
43
  iface = gr.Interface(
44
  fn=classify,
45
  inputs=[
46
+ gr.Textbox(label="Название товара",
47
+ placeholder="Например: Перфоратор DeWalt"),
48
+ gr.Textbox(label="Категории через запятую",
49
+ value="Инструменты, Овощи, Техника, Упаковка")
50
  ],
51
+ outputs=gr.Textbox(label="Результат"),
52
  examples=[
53
+ ["Болгарка Makita", "Инструменты, Техника, Электроника"],
54
+ ["Свёкла столовая", "Овощи, Фрукты, Семена"],
55
+ ["Картонная коробка 40x60", "Упаковка, Мебель, Инструменты"]
56
  ],
57
+ title="Умный классификатор товаров",
58
+ description="🚀 Версия с улучшенной точностью за счет:\n"
59
+ "- Специальной модели классификации\n"
60
+ "- Предобработки текста\n"
61
+ "- Контекстных примеров\n"
62
+ "- Фильтра низкой уверенности"
63
  )
64
 
65
+ iface.launch()