Sandy0909 commited on
Commit
f151edb
·
1 Parent(s): 0223aa2

Create app.py

Browse files

app.py is added

Files changed (1) hide show
  1. app.py +48 -0
app.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import BertTokenizer, BertForSequenceClassification, AdamW
3
+ import torch
4
+ import torch.nn as nn
5
+ from torch.utils.data import Dataset, DataLoader
6
+
7
+ # Config class
8
+ class Config:
9
+ BERT_PATH = "ahmedrachid/FinancialBERT"
10
+ MODEL_PATH = "model.bin"
11
+ TRAIN_BATCH_SIZE = 32
12
+ VALID_BATCH_SIZE = 32
13
+ EPOCHS = 10
14
+ MAX_LEN = 512
15
+ TOKENIZER = BertTokenizer.from_pretrained(BERT_PATH)
16
+
17
+ # FinancialBERT model class
18
+ class FinancialBERT(nn.Module):
19
+ def __init__(self):
20
+ super(FinancialBERT, self).__init__()
21
+ self.bert = BertForSequenceClassification.from_pretrained(Config.BERT_PATH, num_labels=3, hidden_dropout_prob=0.5)
22
+
23
+ def forward(self, input_ids, attention_mask, labels=None):
24
+ output = self.bert(input_ids, attention_mask=attention_mask, labels=labels)
25
+ return output.loss, output.logits
26
+
27
+ # Load model
28
+ model = FinancialBERT()
29
+ model.load_state_dict(torch.load(Config.MODEL_PATH, map_location=torch.device('cpu')))
30
+ model.eval()
31
+
32
+ # Tokenizer
33
+ tokenizer = Config.TOKENIZER
34
+
35
+ def predict_sentiment(sentences):
36
+ inputs = tokenizer(sentences, return_tensors="pt", truncation=True, padding=True, max_length=Config.MAX_LEN)
37
+ with torch.no_grad():
38
+ logits = model(**inputs)[1]
39
+ probs = torch.nn.functional.softmax(logits, dim=-1)
40
+ predictions = torch.argmax(probs, dim=-1)
41
+ return ['negative', 'neutral', 'positive'][predictions[0].item()]
42
+
43
+ # Streamlit app
44
+ st.title("Financial Sentiment Analysis")
45
+ sentence = st.text_area("Enter a financial sentence:", "")
46
+ if st.button("Predict"):
47
+ sentiment = predict_sentiment([sentence])
48
+ st.write(f"The predicted sentiment is: {sentiment}")