pampad commited on
Commit
0587fbb
·
1 Parent(s): 7140e78

update app_task-2 v3

Browse files
Files changed (2) hide show
  1. README.md +1 -0
  2. pages/app_task-2.py +44 -30
README.md CHANGED
@@ -10,6 +10,7 @@ pinned: false
10
  app_port: 8501
11
  tags:
12
  - streamlit
 
13
  short_description: Streamlit template space
14
  license: unknown
15
  ---
 
10
  app_port: 8501
11
  tags:
12
  - streamlit
13
+ app_file: app.py
14
  short_description: Streamlit template space
15
  license: unknown
16
  ---
pages/app_task-2.py CHANGED
@@ -27,7 +27,7 @@ warnings.filterwarnings('ignore')
27
  import matplotlib.pyplot as plt
28
  import seaborn as sns
29
  from tqdm import tqdm
30
- from huggingface_hub import login, whoami
31
 
32
  # Очистка кеша при запуске
33
  cache_dir = "/app/.cache/transformers"
@@ -38,25 +38,21 @@ if os.path.exists(cache_dir):
38
  except:
39
  pass
40
 
41
- def check_hf_auth():
42
- """Проверка аутентификации HuggingFace"""
43
- hf_token = os.getenv('HUGGINGFACE_HUB_TOKEN')
44
-
45
- if not hf_token:
46
- st.error("❌ HuggingFace токен не найден")
47
- return False
48
-
49
  try:
50
- login(token=hf_token)
51
- user_info = whoami(token=hf_token)
52
- st.success(f"✅ Авторизован как: {user_info['name']}")
 
53
  return True
54
  except Exception as e:
55
- st.error(f"❌ Ошибка авторизации: {str(e)}")
56
  return False
57
 
58
- # Проверка перед загрузкой модели
59
- if not check_hf_auth():
 
60
  st.stop()
61
 
62
  device = 'cuda' if torch.cuda.is_available() else 'cpu'
@@ -68,20 +64,34 @@ tokenizer_rtt = AutoTokenizer.from_pretrained(model_name)
68
  model_full.eval()
69
 
70
  # функцция предсказания модели на основе полученного текста
71
- def text2toxicity(text, model=model_full):
72
- probably_box = []
73
- with torch.no_grad():
74
- # Токенизируем текст и перемещаем на нужное устройство
75
- inputs = tokenizer_rtt(text, return_tensors='pt', truncation=True, padding=True).to(device)
76
- # Токенизируем текст и перемещаем на нужное устройство
77
- proba = torch.sigmoid(model(**inputs).logits).squeeze(1).cpu().numpy()
78
- for p in proba:
79
- if p > 0.5:
80
- probably_box.append(f'Оскорбительный, p={p:.2f}')
81
- else:
82
- probably_box.append(f'Не оскорбительный, p={p:.2f}')
83
- return pd.DataFrame({'Исходный текст': text,
84
- рогноз': probably_box})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
 
86
  # **STREAMLIT**
87
 
@@ -91,7 +101,11 @@ st.header('Расчет вероятности токсичности текст
91
 
92
  txt_box = st.text_input("Вставьте текст в рамку для расчета вероятности")
93
  if txt_box:
94
- st.write(text2toxicity(txt_box))
 
 
 
 
95
 
96
  uploaded_file = st.file_uploader("Выберите файл в формате *.txt", type='txt')
97
  if uploaded_file is not None:
 
27
  import matplotlib.pyplot as plt
28
  import seaborn as sns
29
  from tqdm import tqdm
30
+ from huggingface_hub import login, whoami, model_info
31
 
32
  # Очистка кеша при запуске
33
  cache_dir = "/app/.cache/transformers"
 
38
  except:
39
  pass
40
 
41
+ def check_model_access(model_name):
42
+ """Проверка доступа к модели"""
 
 
 
 
 
 
43
  try:
44
+ info = model_info(model_name)
45
+ st.info(f"✅ Модель найдена: {info.modelId}")
46
+ if info.private:
47
+ st.warning("⚠️ Модель приватная - убедитесь в правах доступа")
48
  return True
49
  except Exception as e:
50
+ st.error(f"❌ Ошибка доступа к модели {model_name}: {str(e)}")
51
  return False
52
 
53
+ # Проверка модели
54
+ model_name = "pampad/mymodel_ruber_tt_1label"
55
+ if not check_model_access(model_name):
56
  st.stop()
57
 
58
  device = 'cuda' if torch.cuda.is_available() else 'cpu'
 
64
  model_full.eval()
65
 
66
  # функцция предсказания модели на основе полученного текста
67
+ def text2toxicity(text):
68
+ """Определение токсичности текста"""
69
+ try:
70
+ inputs = tokenizer_rtt(
71
+ text,
72
+ return_tensors="pt",
73
+ truncation=True,
74
+ padding=True,
75
+ max_length=512
76
+ )
77
+
78
+ with torch.no_grad():
79
+ outputs = model_full(**inputs)
80
+ # Для бинарной классификации - извлекаем единственное значение
81
+ proba = torch.sigmoid(outputs.logits).squeeze().cpu().numpy()
82
+
83
+ # Если это массив с одним элементом, извлекаем скаляр
84
+ if isinstance(proba, np.ndarray):
85
+ if proba.ndim == 0: # скаляр
86
+ return float(proba)
87
+ else: # массив
88
+ return float(proba[0]) # берем первый элемент
89
+ else:
90
+ return float(proba)
91
+
92
+ except Exception as e:
93
+ st.error(f"Ошибка при анализе текста: {str(e)}")
94
+ return 0.0
95
 
96
  # **STREAMLIT**
97
 
 
101
 
102
  txt_box = st.text_input("Вставьте текст в рамку для расчета вероятности")
103
  if txt_box:
104
+ p = text2toxicity(txt_box)
105
+ if p > 0.5:
106
+ st.write(f"Текст токсичный, p={p}")
107
+ else:
108
+ st.write(f"Текст не токсичный, p={p}")
109
 
110
  uploaded_file = st.file_uploader("Выберите файл в формате *.txt", type='txt')
111
  if uploaded_file is not None: