File size: 3,754 Bytes
11dc9a8
adec7fa
7485bd9
7f33b70
adec7fa
 
 
 
 
 
a3d5133
 
ab2c9b6
040c0c0
 
ab2c9b6
 
87d0433
 
11dc9a8
 
 
040c0c0
2b0d3f5
 
 
 
 
378829d
ab2c9b6
58f8ede
 
 
 
378829d
040c0c0
58f8ede
 
 
 
adec7fa
17bb07c
b59e911
 
 
 
 
ae14ac6
 
 
b59e911
92533eb
b4aeeaf
3c22553
 
 
adec7fa
b4aeeaf
b59e911
 
b4aeeaf
 
92533eb
11dc9a8
92533eb
6311754
e93fd31
 
b4aeeaf
 
11dc9a8
79b77b1
a3435d2
b59e911
8734074
5149066
ffa78eb
a3435d2
b59e911
 
92533eb
 
0551e7e
 
5a265b2
ab2c9b6
92533eb
 
11dc9a8
79b77b1
11dc9a8
 
8734074
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import gradio as gr
import hopsworks
from datasets import load_dataset
import pandas as pd

project = hopsworks.login()
fs = project.get_feature_store()

dataset_api = project.get_dataset_api()

dataset = load_dataset("torileatherman/sentiment_analysis_batch_predictions", split='train')
predictions_df = pd.DataFrame(dataset)
grouped_predictions = predictions_df.groupby(predictions_df.Sentiment)
#positive_preds = grouped_predictions.get_group(2)
#neutral_preds = grouped_predictions.get_group(1)
negative_preds = grouped_predictions.get_group(0)

predictions_df['Sentiment'] = predictions_df['Sentiment'].map({0: 'Negative', 1: 'Neutral', 2: 'Positive'})


def article_selection(sentiment):
    if sentiment == "Positive":
        predictions = negative_preds
        top3 = predictions[0:3]
        top3_result = top3[['Headline_string','Url']]
        top3_result.rename(columns = {'Headline_str':'Headlines', 'Url':'URL'})
        return top3_result
    
    elif sentiment == "Negative":
        predictions = negative_preds
        top3 = predictions[0:3]
        top3_result = top3[['Headline_string','Url']]
        top3_result.rename(columns = {'Headline_str':'Headlines', 'Url':'URL'})
        return top3_result
    else:
        predictions = negative_preds
        top3 = predictions[0:3]
        top3_result = top3[['Headline_string','Url']]
        top3_result.rename(columns = {'Headline_str':'Headlines', 'Url':'URL'})
        return top3_result

def manual_label():
    # Selecting random row from batch data
    random_sample = predictions_df.sample()
    random_headline = random_sample['Headline_string'].iloc[0]
    random_prediction = random_sample['Sentiment'].iloc[0]
    return random_headline, random_prediction

def thanks(sentiment):
    return f"""Thank you for making our model better!"""
    

description1 =  '''
        This application recommends news articles depending on the sentiment of the headline.
        Enter your preference of what type of news articles you would like recommended to you today: Positive, Negative, or Neutral.
        '''

description2 =  '''
        This application will show you a random news headline and our predicted sentiment.
        In order to improve our model, mark the real sentiment of this headline!
        '''

suggestion_demo = gr.Interface(
    fn=article_selection,
    title = 'Recommending News Articles',
    inputs = gr.Dropdown(["Positive","Negative","Neutral"], label="What type of news articles would you like recommended?"),
    outputs = "dataframe",
    #outputs = [gr.Textbox(label="Recommended News Articles (1/3)"),gr.Textbox(label="Recommended News Articles (2/3)"),gr.Textbox(label="Recommended News Articles (3/3)")],
    description = description1
)

with gr.Blocks() as manual_label_demo:
    description = description2
    generate_btn = gr.Button('Show me a headline!')
    generate_btn.click(fn=manual_label, outputs=[gr.Textbox(label="News Headline"),gr.Textbox(label="Our Predicted Sentiment")])
    drop_down_label = gr.Dropdown(["Positive","Negative","Neutral"], label="Select the true sentiment of the news article.")
    submit_btn =  gr.Button('Submit your sentiment!')
    submit_btn.click(fn=thanks, inputs=drop_down_label, outputs=gr.Textbox())

manual_label_demo1 = gr.Interface(
    fn=thanks,
    title="Manually Label a News Article",
    inputs=[gr.Textbox(label = "Paste in URL of news article here."),
            gr.Dropdown(["Positive","Negative","Neutral"], label="Select the sentiment of the news article.")],
    outputs = gr.Textbox(label="Output"),
    description = description2
)


demo = gr.TabbedInterface([suggestion_demo, manual_label_demo], ["Get recommended news articles", "Help improve our model"])


demo.launch()