Upload 4 files
Browse files- app.py +51 -0
- requirements.txt +3 -0
- rubert_26650.pt +3 -0
- subject_dict.json +1 -0
app.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import torch
|
3 |
+
from transformers import AutoTokenizer, AutoModel, AutoModelForSequenceClassification
|
4 |
+
import json
|
5 |
+
import numpy as np
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
@st.cache_data # кэширование
|
10 |
+
def load_subject_dict():
|
11 |
+
with open('subject_dict.json') as json_file:
|
12 |
+
subject_dict = json.load(json_file)
|
13 |
+
return subject_dict
|
14 |
+
|
15 |
+
@st.cache_resource # кэширование
|
16 |
+
def load_model_and_tokenizer():
|
17 |
+
model_name = 'DeepPavlov/rubert-base-cased'
|
18 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
19 |
+
model = torch.load('rubert_26650.pt', weights_only=False)
|
20 |
+
return model, tokenizer # скачивание модели
|
21 |
+
|
22 |
+
model, tokenizer = load_model_and_tokenizer()
|
23 |
+
subject_dict = load_subject_dict()
|
24 |
+
|
25 |
+
st.title("Прогнозирование темы по условию математической задачи")
|
26 |
+
|
27 |
+
query = st.text_input("Текст задачи", value="Все зебры полосатые. Все полосатые животные - веселые. Верно ли, что все зебры веселые?")
|
28 |
+
|
29 |
+
st.header("Предлагаемые темы:")
|
30 |
+
if query:
|
31 |
+
tokens_info = tokenizer(
|
32 |
+
query,
|
33 |
+
padding=True,
|
34 |
+
truncation=False,
|
35 |
+
return_tensors="pt",
|
36 |
+
)
|
37 |
+
|
38 |
+
model.eval()
|
39 |
+
model.cpu()
|
40 |
+
with torch.no_grad():
|
41 |
+
out = model(**tokens_info)
|
42 |
+
probs = torch.nn.functional.softmax(out.logits, dim=-1)
|
43 |
+
top_k = 3
|
44 |
+
if top_k:
|
45 |
+
best_prob, best_idx = torch.topk(probs, top_k, dim=-1)
|
46 |
+
best_prob = best_prob[0].numpy()
|
47 |
+
best_prob /= best_prob.sum()
|
48 |
+
best_idx = best_idx[0].numpy()
|
49 |
+
for i in range(top_k):
|
50 |
+
st.write(f"**{subject_dict[str(best_idx[i])]}** (с вероятностью {best_prob[i]:2.1%})")
|
51 |
+
|
requirements.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
streamlit
|
2 |
+
torch
|
3 |
+
transformers
|
rubert_26650.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2790f7c8440d17af7d76966fb74a1a72f2dfd9b2086ac7be53882a99dbabc0d5
|
3 |
+
size 711751655
|
subject_dict.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"0": "\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0414\u0438\u0440\u0438\u0445\u043b\u0435", "1": "\u0422\u0435\u043e\u0440\u0438\u044f \u0447\u0438\u0441\u0435\u043b. \u0414\u0435\u043b\u0438\u043c\u043e\u0441\u0442\u044c", "2": "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438", "3": "\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f", "4": "\u0422\u0435\u043e\u0440\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432", "5": "\u041e\u0446\u0435\u043d\u043a\u0430 + \u043f\u0440\u0438\u043c\u0435\u0440", "6": "\u041f\u043b\u0430\u043d\u0438\u043c\u0435\u0442\u0440\u0438\u044f", "7": "\u0410\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b", "8": "\u041c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u044b", "9": "\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f", "10": "\u0422\u0435\u043e\u0440\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432", "11": "\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u0438\u043a\u0430 (\u043f\u0440\u043e\u0447\u0435\u0435)", "12": "\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430. \u0423\u0441\u0442\u043d\u044b\u0439 \u0441\u0447\u0435\u0442 \u0438 \u0442.\u043f.", "13": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430", "14": "\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430", "15": "\u0417\u0430\u0434\u0430\u0447\u0438-\u0448\u0443\u0442\u043a\u0438", "16": "\u0418\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u043f\u043e\u043b\u0443\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b", "17": "\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438 \u043a\u043e\u043d\u0442\u0440\u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438", "18": "\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0430", "19": "\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u0438\u043a\u0430", "20": "\u0414\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043e\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u0433\u043e", "21": "\u0422\u0435\u043e\u0440\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432", "22": "\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438", "23": "\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0441\u0442\u044c", "24": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u044b", "25": "\u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0438\u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0430\u043b\u0433\u0435\u0431\u0440\u0430", "26": "\u0421\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b", "27": "\u0414\u0440\u043e\u0431\u0438", "28": "\u0421\u0442\u0435\u0440\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f", "29": "\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e", "30": "\u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u041f\u0430\u0441\u043a\u0430\u043b\u044f \u0438 \u0431\u0438\u043d\u043e\u043c \u041d\u044c\u044e\u0442\u043e\u043d\u0430", "31": "\u0418\u043d\u0434\u0443\u043a\u0446\u0438\u044f", "32": "\u0410\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432", "33": "\u0410\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439", "34": "\u041a\u043e\u0440\u043d\u0438. \u0421\u0442\u0435\u043f\u0435\u043d\u044c \u0441 \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c", "35": "\u041c\u0435\u0442\u043e\u0434\u044b \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430", "36": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430", "37": "\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b", "38": "\u0427\u0438\u0441\u043b\u0430 \u041a\u0430\u0442\u0430\u043b\u0430\u043d\u0430", "39": "\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u041a\u043b\u0430\u0441\u0441\u044b \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438", "40": "\u041c\u043e\u0434\u0443\u043b\u044c \u0447\u0438\u0441\u043b\u0430", "41": "\u0422\u0435\u043e\u0440\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439", "42": "\u0422\u0435\u043e\u0440\u0438\u044f \u0433\u0440\u0443\u043f\u043f", "43": "\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u0430\u044f", "44": "\u0410\u043b\u0433\u0435\u0431\u0440\u0430 \u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 (\u043f\u0440\u043e\u0447\u0435\u0435)", "45": "\u0422\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u044f", "46": "\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u0413\u041c\u0422 \u043d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438", "47": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 (\u043f\u0440\u043e\u0447\u0435\u0435)", "48": "\u0410\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f", "49": "\u0427\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438", "50": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u043b", "51": "\u041c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c", "52": "\u0420\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438", "53": "\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0427\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u0430", "54": "\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f", "55": "\u0410\u0444\u0444\u0438\u043d\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f", "56": "\u0420\u044f\u0434\u044b", "57": "\u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430", "58": "\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445", "59": "\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438", "60": "\u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0435 \u0440\u044f\u0434\u044b", "61": "\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u044f\u0434\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439", "62": "\u041b\u0438\u043d\u0433\u0432\u0438\u0441\u0442\u0438\u043a\u0430", "63": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430", "64": "\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f", "65": "\u041b\u043e\u0433\u0438\u043a\u0430 \u0438 \u0442\u0435\u043e\u0440\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 (\u043f\u0440\u043e\u0447\u0435\u0435)", "66": "\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f (\u043f\u0440\u043e\u0447\u0435\u0435)", "67": "\u0412\u044b\u043f\u0443\u043a\u043b\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435"}
|