Views
No views yet
1
2import torch
3from transformers import AutoTokenizer, AutoModelForSequenceClassification
4
5universal_model_name = "data-silence/frozen_news_classifier_ft"
6universal_tokenizer = AutoTokenizer.from_pretrained(universal_model_name)
7universal_model = AutoModelForSequenceClassification.from_pretrained(universal_model_name)
8
9# Перевод моделей в режим оценки и на нужное устройство
10device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
11universal_model = universal_model.to(device)
12universal_model.eval()
13
14id2label = {
15 0: 'climate', 1: 'conflicts', 2: 'culture', 3: 'economy', 4: 'gloss',
16 5: 'health', 6: 'politics', 7: 'science', 8: 'society', 9: 'sports', 10: 'travel'
17}
18
19
20def create_sentence_or_batch_embeddings(sent: list[str]) -> list[list[float]]:
21 """Получает эмбеддинги списка текстов"""
22 # Токенизация входного текста
23 inputs = universal_tokenizer(sent, return_tensors="pt", padding=True, truncation=True).to(device)
24 with torch.no_grad():
25 outputs = universal_model.base_model(**inputs)
26 embeddings = outputs.pooler_output
27 embeddings = torch.nn.functional.normalize(embeddings, dim=1)
28 return embeddings.tolist()
29
30
31def predict_category(news: list[str]) -> list[str]:
32 """Предсказывает категорию по тексту новости / новостей"""
33
34 # Токенизация с активацией выравнивания и усечения
35 inputs = universal_tokenizer(news, return_tensors="pt", truncation=True, padding=True)
36 # Получение логитов модели
37 with torch.no_grad():
38 outputs = universal_model(**inputs)
39 logits = outputs.logits
40
41 # Получение индексов предсказанных меток
42 predicted_labels = torch.argmax(logits, dim=-1).tolist()
43 # Преобразование индексов в категории
44 predicted_categories = [id2label[label] for label in predicted_labels]
45 return predicted_categories
46| Training Loss | Epoch | Step | Validation Loss | Accuracy | F1 | Precision | Recall |
|---|---|---|---|---|---|---|---|
| 0.8422 | 1.0 | 3596 | 0.8104 | 0.7681 | 0.7632 | 0.7669 | 0.7681 |
| 0.7923 | 2.0 | 7192 | 0.7738 | 0.7711 | 0.7666 | 0.7700 | 0.7711 |
| 0.7597 | 3.0 | 10788 | 0.7485 | 0.7754 | 0.7716 | 0.7741 | 0.7754 |
| 0.7564 | 4.0 | 14384 | 0.7314 | 0.7793 | 0.7753 | 0.7785 | 0.7793 |