Spaces:
Runtime error
Runtime error
| 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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') | |
| # Load batch predictions data set | |
| 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 = {} | |
| # Number of articles shown | |
| n = 5 | |
| def article_selection(sentiment): | |
| if sentiment == "Positive": | |
| predictions = positive_preds | |
| predictions_shuffled = predictions.sample(frac=1,weights=predictions['Confidence']) | |
| top3 = predictions_shuffled[0:n] | |
| top3_result = top3[['Headline_string','Url']] | |
| top3_result.rename(columns = {'Headline_string':'Headlines', 'Url':'URL'}) | |
| return top3_result | |
| elif sentiment == "Negative": | |
| predictions = negative_preds | |
| predictions_shuffled = predictions.sample(frac=1,weights=predictions['Confidence']) | |
| top3 = predictions_shuffled[0:n] | |
| top3_result = top3[['Headline_string','Url']] | |
| top3_result.rename(columns = {'Headline_string':'Headlines', 'Url':'URL'}) | |
| return top3_result | |
| else: | |
| predictions = neutral_preds | |
| predictions_shuffled = predictions.sample(frac=1,weights=predictions['Confidence']) | |
| top3 = predictions_shuffled[0:n] | |
| 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 = "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." | |
| ) | |
| with gr.Blocks() as manual_label_demo: | |
| gr.Markdown("<h1 style='text-align: center;'> Label our Data</h1> This application will show you a recent news headline and our predicted sentiment. To help us 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(label = ' ')) | |
| demo = gr.TabbedInterface([suggestion_demo, manual_label_demo], ["Get recommended news articles", "Help improve our model"]) | |
| demo.launch() |