ND0210 commited on
Commit
5040714
1 Parent(s): 7dcb300

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -50
app.py CHANGED
@@ -3,55 +3,36 @@ import pandas as pd
3
  import numpy as np
4
  import io
5
  import requests
6
- from sklearn.naive_bayes import MultinomialNB
7
- from sklearn.feature_extraction.text import TfidfVectorizer
8
-
9
- csv_url = "https://github.com/NguyenDung0210/oop/raw/main/Cleaned%20Data.csv"
10
- content = requests.get(csv_url).content
11
-
12
- try:
13
- df = pd.read_csv(io.StringIO(content.decode('utf-8')), sep=",")
14
- except pd.errors.ParserError as e:
15
- print("Error parsing CSV file:", str(e))
16
-
17
- X = df['Title']
18
- y = df['Encoded Tag']
19
-
20
- tfidf_vectorizer = TfidfVectorizer()
21
- X_tfidf = tfidf_vectorizer.fit_transform(X)
22
-
23
- # Train the Naive Bayes model
24
- nb = MultinomialNB(alpha=0.4)
25
- nb.fit(X_tfidf, y)
26
-
27
- # Function to make predictions
28
- encoded = {0:'Chính trị', 1:'Giáo dục', 2:'Giải trí', 3:'Kinh doanh', 4:'Sức khỏe'}
29
- def predict_category(Title):
30
- title_tfidf = tfidf_vectorizer.transform([Title])
31
- probabilities = nb.predict_proba(title_tfidf)[0]
32
- data = {"Category": [encoded[i] for i in range(len(encoded))],
33
- "Probability (%)": [f"{probabilities[i]*100:.2f}%" for i in range(len(probabilities))]}
34
- df = pd.DataFrame(data)
35
- return encoded[np.argmax(probabilities)], df
36
-
37
- # Create the Gradio interfaces
38
- iface = gr.Interface(
39
- fn=predict_category,
40
- inputs=gr.Textbox(label="Title"),
41
- outputs=[
42
- gr.Textbox(label="Prediction"),
43
- gr.Dataframe(label="Probs", type='pandas')
44
- ],
45
- title="Text Classification App",
46
- description="Enter a news title and get the predicted category.",
47
- examples=[
48
- ["Phó Thủ tướng ghi sổ tang tưởng niệm các nạn nhân trong vụ khủng bố ở Nga"],
49
- ["Thiếu giáo viên: Dự kiến cho phép tuyển dụng người có trình độ cao đẳng"],
50
- ['Diễn viên Thu Quỳnh chia sẻ điều bất ngờ không tính toán trước'],
51
- ["Nhóm khách vay mua nhà đất bị nợ xấu, ngân hàng tá hỏa biết khách còn nợ khủng"],
52
- ["Điều kiện để các giáo sư y khoa Hàn Quốc không từ chức hàng loạt"]
53
- ]
54
  )
55
 
56
- # Run the interface
57
- iface.launch()
 
3
  import numpy as np
4
  import io
5
  import requests
6
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
7
+ import torch.nn.functional as F
8
+
9
+ genres = ['Kinh tế', 'Giáo dục', 'Xe', 'Sức khoẻ', 'Công nghệ - Game']
10
+
11
+ tokenizer = AutoTokenizer.from_pretrained("mob2711/phoBERT_finetune_news_classification")
12
+ model = AutoModelForSequenceClassification.from_pretrained("mob2711/phoBERT_finetune_news_classification")
13
+
14
+ def tokenize(text):
15
+ encoded_text = tokenizer(text, padding=True, truncation=True, return_tensors="pt")
16
+ return encoded_text
17
+
18
+ def predict_proba(text_data):
19
+ encoded_data = tokenize(text_data)
20
+ with torch.no_grad():
21
+ outputs = model(**encoded_data)
22
+ logits = outputs.logits
23
+ probabilities = F.softmax(logits, dim=-1)[0]
24
+ label_probs = {genres[id]: prob for id, prob in enumerate(probabilities)}
25
+ return label_probs
26
+
27
+ # Interface
28
+ input_text = gr.Textbox(lines=2, label="Enter the title")
29
+ output_text = gr.Label(label="Predicted Probabilities")
30
+
31
+ demo = gr.Interface(
32
+ fn=predict_proba,
33
+ inputs=input_text,
34
+ outputs=output_text,
35
+ title="Newspaper Title Classifier",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  )
37
 
38
+ demo.launch()