demo / app.py
yumonji
dkasdj
610251b
# app.py
import gradio as gr
from transformers import pipeline
import torch # GPU/CPUの判定に使う
# --- グローバル変数として感情分析パイプラインを保持 ---
MODEL_NAME = "koheiduck/bert-japanese-finetuned-sentiment"
sentiment_analyzer = None
def load_sentiment_analyzer():
global sentiment_analyzer
if sentiment_analyzer is None:
print(f"Loading sentiment analysis model: {MODEL_NAME}...")
try:
# GPUが利用可能ならGPU、なければCPU
device = 0 if torch.cuda.is_available() else -1
sentiment_analyzer = pipeline(
"sentiment-analysis",
model=MODEL_NAME,
tokenizer=MODEL_NAME, # モデル名と同じトークナイザーを指定 (明示的)
device=device
)
print(f"Model {MODEL_NAME} loaded successfully on {'GPU' if device == 0 else 'CPU'}.")
except Exception as e:
print(f"Error loading model {MODEL_NAME}: {e}")
return sentiment_analyzer
# --- 推論を実行する関数 ---
def analyze_sentiment_gradio(text_input):
analyzer = load_sentiment_analyzer()
if analyzer is None:
return "エラー: モデルのロードに失敗しました。"
if not text_input:
return "テキストを入力してください。"
try:
print(f"Analyzing sentiment for: {text_input}")
result = analyzer(text_input)
# 結果の形式はモデルによって異なるので、適宜調整
# このモデルの場合、[{'label': 'ポジティブ', 'score': 0.99...}] のようなリストを返す
if result and isinstance(result, list) and len(result) > 0:
label = result[0]['label']
score = result[0]['score']
return f"感情: {label} (スコア: {score:.4f})"
else:
return "分析結果の取得に失敗しました。"
except Exception as e:
print(f"Error during sentiment analysis: {e}")
return f"エラーが発生しました: {str(e)}"
# --- Gradioインターフェースの作成 ---
# Space起動時にモデルロードを試みる
load_sentiment_analyzer()
iface = gr.Interface(
fn=analyze_sentiment_gradio,
inputs=gr.Textbox(lines=5, placeholder="ここに日本語の文章を入力してください...", label="分析したい文章"),
outputs=gr.Textbox(label="感情分析結果"),
title="日本語 感情分析デモ",
description=f"'{MODEL_NAME}' モデルを使用した感情分析デモです。文章を入力して「Submit」を押してください。"
)
# Hugging Face Spacesでは、通常は iface.launch() は不要です。
# Gradio SDKが `app.py` 内の `iface` という名前のGradio Interfaceインスタンスを自動で見つけて起動します。
# もし起動しない場合や、ローカルでテストしたい場合は以下のようにします。
# if __name__ == "__main__":
iface.launch()