Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import numpy as np | |
| import torch | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| from transformers import pipeline | |
| emotion_labels = ['喜び', '悲しみ', '期待', '驚き', '怒り', '信頼', '悲しみ', '嫌悪'] | |
| sentiment_labels = ['ポジティブ', 'ニュートラル', 'ネガティブ'] | |
| def np_softmax(x): | |
| x_exp = torch.exp(torch.tensor(x) - torch.max(torch.tensor(x))) | |
| f_x = x_exp / x_exp.sum() | |
| return f_x | |
| def emotion_classifier(text): | |
| model.eval() | |
| tokens = tokenizer(text, truncation=True, return_tensors="pt") | |
| tokens.to(model.device) | |
| preds = model(**tokens) | |
| prob = np_softmax(preds.logits.cpu().detach().numpy()[0]) | |
| out_dict = {n: p.item() for n, p in zip(emotion_labels, prob)} | |
| return out_dict | |
| tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese-whole-word-masking") | |
| model = AutoModelForSequenceClassification.from_pretrained("jingwora/language-emotion-classification-ja", num_labels=8) | |
| def sentiment_classifier(text): | |
| clf = pipeline(model="lxyuan/distilbert-base-multilingual-cased-sentiments-student", return_all_scores=True) | |
| sentiment = clf(text) | |
| sentiment = {item['label']: item['score'] for item in sentiment[0]} | |
| sentiment = {sentiment_labels[i]: sentiment[label] for i, label in enumerate(sentiment)} # 日本語ラベル | |
| return sentiment | |
| examples = [ | |
| ["このお店は本当に素晴らしいです!サービスも料理も満足できるものばかりでした。"], | |
| ["料理の味が期待外れでした。改善が必要ですね。"], | |
| ["サービスは普通ですが、特に不満もありません。"], | |
| ["価格と品質のバランスが取れていると思います。"], | |
| ] | |
| demo = gr.Blocks( | |
| theme="freddyaboulton/dracula_revamped", | |
| ) | |
| with demo: | |
| gr.Markdown( | |
| """ | |
| # Emotion and Sentiment Classification | |
| Enter Japanese text and get the emotion probabilities and sentiment probablilities. | |
| """ | |
| ) | |
| text = gr.Textbox(lines=2) | |
| with gr.Row(): | |
| gr.Examples(examples=examples, inputs=text) | |
| b1 = gr.Button("Emotion Classification") | |
| label1 = gr.Label(num_top_classes=8) | |
| b1.click(emotion_classifier, inputs=text, outputs=label1) | |
| b2 = gr.Button("Sentiment Analysis") | |
| label2 = gr.Label(num_top_classes=3) | |
| b2.click(sentiment_classifier, inputs=text, outputs=label2) | |
| demo.launch() | |