Sandy0909 commited on
Commit
a6ad2ae
·
1 Parent(s): 26e4bac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -15
app.py CHANGED
@@ -1,36 +1,48 @@
1
  import streamlit as st
2
- from transformers import BertTokenizer, BertForSequenceClassification
3
  import torch
 
 
4
 
5
  # Config class
6
  class Config:
7
- TOKENIZER_PATH = "ahmedrachid/FinancialBERT" # Use tokenizer from the original model
8
- MODEL_PATH = "Sandy0909/finance_sentiment"
 
 
 
9
  MAX_LEN = 512
10
- TOKENIZER = BertTokenizer.from_pretrained(TOKENIZER_PATH)
11
 
12
- class FinancialBERT(torch.nn.Module):
 
13
  def __init__(self):
14
  super(FinancialBERT, self).__init__()
15
- self.bert = BertForSequenceClassification.from_pretrained(Config.MODEL_PATH, num_labels=3, hidden_dropout_prob=0.5)
16
 
17
- def forward(self, input_ids, attention_mask, labels=None):
18
- output = self.bert(input_ids, attention_mask=attention_mask, labels=labels)
19
  return output.loss, output.logits
20
 
21
  # Load model
22
  model = FinancialBERT()
 
23
  model.eval()
24
 
25
- # Streamlit App
26
- st.title("Financial Sentiment Analysis")
27
- sentence = st.text_area("Enter a financial sentence:", "")
28
- if st.button("Predict"):
29
- tokenizer = Config.TOKENIZER
30
- inputs = tokenizer([sentence], return_tensors="pt", truncation=True, padding=True, max_length=Config.MAX_LEN)
31
  with torch.no_grad():
32
  logits = model(**inputs)[1]
33
  probs = torch.nn.functional.softmax(logits, dim=-1)
34
  predictions = torch.argmax(probs, dim=-1)
35
- sentiment = ['negative', 'neutral', 'positive'][predictions[0].item()]
 
 
 
 
 
 
36
  st.write(f"The predicted sentiment is: {sentiment}")
 
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, token_type_ids=None, labels=None):
24
+ output = self.bert(input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids, 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}")