WJL110's picture
Update app.py
431a71c verified
import gradio as gr
from transformers import pipeline
# --- 全局变量和模型加载 ---
# 在应用启动时,我们只加载一次模型,这对于性能至关重要。
# 这样可以避免每次用户查询时都重新加载模型。
# 1. 使用 pipeline 加载你的情感分类模型
# 注意:模型名称需要是 Hugging Face Hub 上的准确名称
classifier = pipeline("text-classification", model="WJL110/emotion-classifier")
# 2. 定义标签映射,将模型输出的 LABEL_0 等转换为更友好的中文标签
label_map = {
"LABEL_0": "快乐",
"LABEL_1": "愤怒",
"LABEL_2": "悲伤"
}
# --- 核心推理函数 ---
# 这个函数将被 Gradio 调用。它接收用户输入,并返回模型预测结果。
def classify_emotion(text):
"""
对输入的文本进行情感分析。
"""
if not text.strip(): # 处理空输入
return "请输入一些文本进行分析。"
# 使用模型进行预测
# pipeline 返回一个列表,其中包含一个字典,例如:[{'label': 'LABEL_0', 'score': 0.99}]
result = classifier(text)[0]
# 从结果中提取标签和置信度,并进行格式化
predicted_label = result['label']
confidence = result['score']
# 将技术标签转换为中文情感名称
emotion = label_map[predicted_label]
# 返回一个格式化的字符串作为结果
return f"预测情感: **{emotion}**\n置信度: **{confidence:.4f}**"
# --- Gradio 界面定义 ---
# 使用 gr.Interface 创建一个简单的 Web 界面
# fn: 指定要调用的函数 (我们的 classify_emotion)
# inputs: 指定输入组件 (一个文本框)
# outputs: 指定输出组件 (一个文本框,我们设置它能渲染 Markdown)
# title, description: 设置界面的标题和描述
demo = gr.Interface(
fn=classify_emotion,
inputs=gr.Textbox(
label="输入文本",
placeholder="在这里输入你想分析情感的句子,例如:今天天气真好!"
),
outputs=gr.Textbox(
label="分析结果",
lines=3, # 设置输出框的高度
interactive=False # 用户不能编辑输出框
),
title="情感分析器 (Emotion Classifier)",
description="这个应用使用 `WJL110/emotion-classifier` 模型来分析文本中的情感倾向,可识别快乐、愤怒和悲伤三种情绪。"
)
# --- 启动应用 ---
# 当这个脚本被直接运行时,启动 Gradio 服务
if __name__ == "__main__":
# 在 Hugging Face Spaces 上,需要将 share 设置为 False
# server_name="0.0.0.0" 是让应用在容器的所有网络接口上监听,这是 Spaces 所必需的
demo.launch(server_name="0.0.0.0", share=False)