File size: 4,709 Bytes
11dc9a8
3d1b8c7
7f33b70
3832023
ac12bb2
c246e4e
adec7fa
a3d5133
 
12c27ac
 
 
ab2c9b6
 
12c27ac
87d0433
11dc9a8
 
 
ac12bb2
2b0d3f5
 
12c27ac
2b0d3f5
 
378829d
ab2c9b6
58f8ede
 
12c27ac
58f8ede
378829d
ac12bb2
58f8ede
 
12c27ac
58f8ede
adec7fa
17bb07c
b59e911
 
6ae39df
c5274ee
c246e4e
c5274ee
b59e911
12c27ac
b59e911
ae14ac6
6984e16
ae14ac6
6984e16
e831013
a401c4a
 
 
 
 
 
 
 
ae14ac6
b59e911
92533eb
b4aeeaf
3c22553
 
 
adec7fa
b4aeeaf
b59e911
 
b4aeeaf
 
92533eb
11dc9a8
92533eb
6311754
e93fd31
 
b4aeeaf
 
11dc9a8
79b77b1
a3435d2
b59e911
8734074
7ab8162
 
 
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
94
95
96
97
98
99
100
101
102
103
104
105
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'})


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
    random_sample = predictions_df.sample()
    print('hey')
    #random_sample_ds = Dataset.from_pandas(random_sample)
    #random_sample.to_csv('/Users/torileatherman/Github/ID2223_scalable_machine_learning/news_articles_sentiment/sample.csv', index=False)
    #random_sample_ds.push_to_hub('torileatherman/sample', index=False)
    random_headline = random_sample['Headline_string'].iloc[0]
    random_prediction = random_sample['Prediction'].iloc[0]
    return random_headline, random_prediction


def thanks(sentiment):
    labeled_sentiments = []
    labeled_sentiments.append(sentiment)
    #counter = len(labeled_sentiments)
    #counter = str(counter)
    #login(token = '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')
    #create_repo("torileatherman/"+counter+"labeled_data")
    labeled_sentiments = pd.DataFrame(labeled_sentiments, columns = ['Manual Predictions'])
    labeled_sentiments.to_csv('/Users/torileatherman/Github/ID2223_scalable_machine_learning/news_articles_sentiment/manual_labels.csv', index=False)
    #labeled_sentiments = Dataset.from_pandas(labeled_sentiments)
    #labeled_sentiments.push_to_hub("torileatherman/"+counter+"labeled_data")
    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()