Spaces:
Sleeping
Sleeping
Update app.py
#1
by
not-lain
- opened
app.py
CHANGED
@@ -1,73 +1,19 @@
|
|
1 |
-
from transformers import
|
2 |
-
import torch
|
3 |
import gradio as gr
|
4 |
-
|
5 |
-
model = BertForSequenceClassification.from_pretrained('ProsusAI/finbert')
|
6 |
-
|
7 |
-
|
8 |
|
9 |
def predict(input_text):
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
This function splits the input_ids and attention_mask into chunks of size 'chunksize'.
|
16 |
-
It also adds special tokens (101 for [CLS] and 102 for [SEP]) at the start and end of each chunk.
|
17 |
-
If the length of a chunk is less than 'chunksize', it pads the chunk with zeros at the end.
|
18 |
-
|
19 |
-
Returns:
|
20 |
-
input_id_chunks (List[torch.Tensor]): List of chunked input_ids.
|
21 |
-
attention_mask_chunks (List[torch.Tensor]): List of chunked attention_masks.
|
22 |
-
"""
|
23 |
-
chunksize = 512
|
24 |
-
input_id_chunks = list(tokens['input_ids'][0].split(chunksize - 2))
|
25 |
-
attention_mask_chunks = list(tokens['attention_mask'][0].split(chunksize - 2))
|
26 |
-
|
27 |
-
for i in range(len(input_id_chunks)):
|
28 |
-
input_id_chunks[i] = torch.cat([
|
29 |
-
torch.tensor([101]), input_id_chunks[i], torch.tensor([102])
|
30 |
-
])
|
31 |
-
|
32 |
-
attention_mask_chunks[i] = torch.cat([
|
33 |
-
torch.tensor([1]), attention_mask_chunks[i], torch.tensor([1])
|
34 |
-
])
|
35 |
-
|
36 |
-
pad_length = chunksize - input_id_chunks[i].shape[0]
|
37 |
-
|
38 |
-
if pad_length > 0:
|
39 |
-
input_id_chunks[i] = torch.cat([
|
40 |
-
input_id_chunks[i], torch.Tensor([0] * pad_length)
|
41 |
-
])
|
42 |
-
attention_mask_chunks[i] = torch.cat([
|
43 |
-
attention_mask_chunks[i], torch.Tensor([0] * pad_length)
|
44 |
-
])
|
45 |
-
|
46 |
-
return input_id_chunks, attention_mask_chunks
|
47 |
-
input_id_chunks, attention_mask_chunks = get_input_ids_and_attention_mask_chunk()
|
48 |
-
input_ids = torch.stack(input_id_chunks)
|
49 |
-
attention_mask = torch.stack(attention_mask_chunks)
|
50 |
-
input_dict = {
|
51 |
-
'input_ids' : input_ids.long(),
|
52 |
-
'attention_mask' : attention_mask.int()
|
53 |
-
}
|
54 |
-
outputs = model(**input_dict)
|
55 |
-
probabilities = torch.nn.functional.softmax(outputs[0], dim = -1 )
|
56 |
-
mean_probabilities = probabilities.mean(dim = 0)
|
57 |
-
output = torch.argmax(mean_probabilities).item()
|
58 |
-
if output==0:
|
59 |
-
return "positive"
|
60 |
-
elif output==1:
|
61 |
-
return "negative"
|
62 |
-
|
63 |
-
elif output==2 :
|
64 |
-
return "neutral"
|
65 |
|
66 |
gradio_app = gr.Interface(
|
67 |
predict,
|
68 |
inputs=gr.Textbox(label="Write a text"),
|
69 |
-
outputs=gr.
|
70 |
-
title="
|
71 |
live=True,
|
72 |
allow_flagging="never",
|
73 |
)
|
|
|
1 |
+
from transformers import pipeline
|
|
|
2 |
import gradio as gr
|
3 |
+
pipe = pipeline("text-classification" , model = "ProsusAI/finbert")
|
|
|
|
|
|
|
4 |
|
5 |
def predict(input_text):
|
6 |
+
predictions = pipe(input_text,top_k=3 )
|
7 |
+
out = {}
|
8 |
+
for item in predictions:
|
9 |
+
out[item["label"]] = item["score"]
|
10 |
+
return out
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
gradio_app = gr.Interface(
|
13 |
predict,
|
14 |
inputs=gr.Textbox(label="Write a text"),
|
15 |
+
outputs=gr.Label(),
|
16 |
+
title="Sentiment Analysis",
|
17 |
live=True,
|
18 |
allow_flagging="never",
|
19 |
)
|