File size: 4,317 Bytes
11dc9a8
3d1b8c7
7f33b70
3832023
ac12bb2
c246e4e
adec7fa
a3d5133
 
12c27ac
 
 
ab2c9b6
 
12c27ac
87d0433
97d7a04
fd7e6d1
97d7a04
 
11dc9a8
 
 
ac12bb2
2b0d3f5
 
12c27ac
2b0d3f5
 
378829d
ab2c9b6
58f8ede
 
12c27ac
58f8ede
378829d
ac12bb2
58f8ede
 
12c27ac
58f8ede
adec7fa
17bb07c
b59e911
97d7a04
b59e911
 
12c27ac
97d7a04
b59e911
ae14ac6
6984e16
ae14ac6
97d7a04
 
 
 
b59e911
97d7a04
 
 
244bc0b
97d7a04
 
 
 
fd7e6d1
97d7a04
 
 
 
92533eb
b4aeeaf
3c22553
 
 
adec7fa
b4aeeaf
92533eb
11dc9a8
92533eb
6311754
e93fd31
 
b4aeeaf
 
11dc9a8
79b77b1
6accc58
b59e911
8734074
7ab8162
 
 
b59e911
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
94
95
96
97
98
99
100
import gradio as gr
from datasets import load_dataset, Dataset
import pandas as pd
from huggingface_hub import create_repo
from huggingface_hub import login
login(token='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')

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

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

# Load training data set
dataset = load_dataset("torileatherman/sentiment_analysis_training", split='train')
training_df = pd.DataFrame(dataset)
random_sample = {}

def article_selection(sentiment):
    if sentiment == "Positive":
        predictions = positive_preds
        top3 = predictions[0:3]
        top3_result = top3[['Headline_string','Url']]
        top3_result.rename(columns = {'Headline_string':'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_string':'Headlines', 'Url':'URL'})
        return top3_result
    else:
        predictions = neutral_preds
        top3 = predictions[0:3]
        top3_result = top3[['Headline_string','Url']]
        top3_result.rename(columns = {'Headline_string':'Headlines', 'Url':'URL'})
        return top3_result

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


def thanks(sentiment):

    # Create int label 
    mapping = gender = {'Negative': 0,'Neutral': 1, 'Positive':2}
    sentiment = int(mapping[sentiment])
    
    global training_df
    # Append training data set
    training_df = training_df.append({'Sentiment': sentiment, 'Headline_string': random_sample['Headline_string'].iloc[0], 'Headline': random_sample['Headline'].iloc[0] }, ignore_index=True)
    training_df = training_df.drop_duplicates(subset='Headline_string').reset_index(drop=True)
    
    # Upload training data set
    ds = Dataset.from_pandas(training_df)
    try: 
        ds.push_to_hub("torileatherman/sentiment_analysis_training")
    except StopIteration:
        pass

    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.
        '''


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:
    gr.Markdown("<h1 style='text-align: center;'> Label our Data</h1> This application will show you a random news headline and our predicted sentiment. In order to improve our model, choose the real sentiment of this headline from our dropdown and submit!")
    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())


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


demo.launch()