Sandy0909 commited on
Commit
4ecb763
·
1 Parent(s): f54c68c

Update app.py

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