模型简介
模型特点
模型能力
使用案例
许可证:Apache-2.0
语言:
- 英语
评估指标:
- 精确率
- 召回率
- F1分数
- 准确率
新版本:v1.1
数据集:
- 自定义
- ChatGPT
流水线标签:文本分类
库名称:transformers
标签:
- 情感
- 分类
- 文本分类
- BERT
- 表情符号
- 情绪
- v1.0
- 情感分析
- 自然语言处理
- 轻量级
- 聊天机器人
- 社交媒体
- 心理健康
- 短文本
- 情绪检测
- 变换器
- 实时
- 表达性
- 人工智能
- 机器学习
- 英语
- 推理
- 边缘人工智能
- 智能回复
- 语气分析
基础模型:
- boltuix/bert-lite
- boltuix/bitBERT
😊 BERT-Emotion —— 用于实时情绪检测的轻量级BERT 🌟
目录
- 📖 概述
- ✨ 主要特性
- 💫 支持的情绪
- ⚙️ 安装
- 📥 下载说明
- 🚀 快速入门:情绪检测
- 📊 评估
- 💡 使用场景
- 🖥️ 硬件要求
- 📚 训练数据
- 🔧 微调指南
- ⚖️ 与其他模型的对比
- 🏷️ 标签
- 📄 许可证
- 🙏 致谢
- 💬 支持与社区
- ✍️ 联系方式
概述
BERT-Emotion
是一款基于 bert-lite 和 NeuroBERT-Mini 的轻量级自然语言处理模型,专为边缘和物联网设备上的短文本情绪检测而优化。其量化后的大小仅为 ~20MB,包含 ~6M 参数,能够将文本分类为13种丰富的情感类别(如快乐、悲伤、愤怒、爱等),并具有高准确率。该模型针对低延迟和离线运行进行了优化,非常适合隐私优先的应用场景,如聊天机器人、社交媒体情感分析以及资源受限环境(如移动应用、可穿戴设备和智能家居设备)中的心理健康监测。
- 模型名称:BERT-Emotion
- 大小:~20MB(量化后)
- 参数:~6M
- 架构:轻量级 BERT(4层,隐藏层大小128,4个注意力头)
- 描述:用于情绪检测的轻量级4层、128隐藏层模型
- 许可证:Apache-2.0 —— 可免费用于商业和个人用途
主要特性
- ⚡ 紧凑设计:~20MB 的存储占用,适合存储有限的设备。
- 🧠 丰富情绪检测:分类13种情绪,并映射到生动的表情符号。
- 📶 离线能力:无需互联网连接即可运行。
- ⚙️ 实时推理:针对CPU、移动NPU和微控制器优化。
- 🌍 多样化应用:支持短文本的情绪检测、情感分析和语气分析。
支持的情绪
BERT-Emotion 将文本分类为13种情感类别,每种情感均映射到一个生动的表情符号以增强可读性:
情感 | 表情符号 |
---|---|
悲伤 | 😢 |
愤怒 | 😠 |
爱 | ❤️ |
惊讶 | 😲 |
恐惧 | 😱 |
快乐 | 😄 |
中性 | 😐 |
厌恶 | 🤢 |
羞愧 | 🙈 |
内疚 | 😔 |
困惑 | 😕 |
渴望 | 🔥 |
讽刺 | 😏 |
安装
安装所需的依赖项:
pip install transformers torch
确保您的环境支持 Python 3.6+,并有约20MB的存储空间用于模型权重。
下载说明
- 通过 Hugging Face:
- 访问模型页面:boltuix/bert-emotion。
- 下载模型文件(约20MB)或克隆仓库:
git clone https://huggingface.co/boltuix/bert-emotion
- 通过 Transformers 库:
- 直接在 Python 中加载模型:
from transformers import AutoModelForSequenceClassification, AutoTokenizer model = AutoModelForSequenceClassification.from_pretrained("boltuix/bert-emotion") tokenizer = AutoTokenizer.from_pretrained("boltuix/bert-emotion")
- 直接在 Python 中加载模型:
- 手动下载:
- 从 Hugging Face 模型中心下载量化后的模型权重(Safetensors 格式)。
- 解压并集成到您的边缘/IoT 应用中。
快速入门:情绪检测
基础推理示例
使用 Hugging Face 流水线对短文本输入进行情绪分类:
from transformers import pipeline
# 加载微调后的 BERT-Emotion 模型
sentiment_analysis = pipeline("text-classification", model="boltuix/bert-emotion")
# 分析情绪
result = sentiment_analysis("i love you")
print(result)
输出:
[{'label': 'Love', 'score': 0.8442274928092957}]
这表明情绪为 爱 ❤️,置信度为 84.42%。
带表情符号映射的扩展示例
通过人类可读的情绪和表情符号增强输出:
from transformers import pipeline
# 加载微调后的 BERT-Emotion 模型
sentiment_analysis = pipeline("text-classification", model="boltuix/bert-emotion")
# 定义标签到表情符号的映射
label_to_emoji = {
"Sadness": "😢",
"Anger": "😠",
"Love": "❤️",
"Surprise": "😲",
"Fear": "😱",
"Happiness": "😄",
"Neutral": "😐",
"Disgust": "🤢",
"Shame": "🙈",
"Guilt": "😔",
"Confusion": "😕",
"Desire": "🔥",
"Sarcasm": "😏"
}
# 输入文本
text = "i love you"
# 分析情绪
result = sentiment_analysis(text)[0]
label = result["label"].capitalize()
emoji = label_to_emoji.get(label, "❓")
# 输出
print(f"文本: {text}")
print(f"预测情绪: {label} {emoji}")
print(f"置信度: {result['score']:.2%}")
输出:
文本: i love you
预测情绪: Love ❤️
置信度: 84.42%
注:针对特定领域或额外情感类别微调模型以提高准确率。
评估
BERT-Emotion 在涉及13种短文本样本的情绪分类任务上进行了评估,这些样本与物联网和社交媒体场景相关。模型预测13种情绪标签之一,成功标准为正确预测标签。
测试句子
句子 | 预期情绪 |
---|---|
I love you so much! | 爱 |
This is absolutely disgusting! | 厌恶 |
I'm so happy with my new phone! | 快乐 |
Why does this always break? | 愤怒 |
I feel so alone right now. | 悲伤 |
What just happened?! | 惊讶 |
I'm terrified of this update failing. | 恐惧 |
Meh, it's just okay. | 中性 |
I shouldn't have said that. | 羞愧 |
I feel bad for forgetting. | 内疚 |
Wait, what does this mean? | 困惑 |
I really want that new gadget! | 渴望 |
Oh sure, like that's gonna work. | 讽刺 |
评估代码
from transformers import pipeline
# 加载微调后的 BERT-Emotion 模型
sentiment_analysis = pipeline("text-classification", model="boltuix/bert-emotion")
# 定义标签到表情符号的映射
label_to_emoji = {
"Sadness": "😢",
"Anger": "😠",
"Love": "❤️",
"Surprise": "😲",
"Fear": "😱",
"Happiness": "😄",
"Neutral": "😐",
"Disgust": "🤢",
"Shame": "🙈",
"Guilt": "😔",
"Confusion": "😕",
"Desire": "🔥",
"Sarcasm": "😏"
}
# 测试数据
tests = [
("I love you so much!", "Love"),
("This is absolutely disgusting!", "Disgust"),
("I'm so happy with my new phone!", "Happiness"),
("Why does this always break?", "Anger"),
("I feel so alone right now.", "Sadness"),
("What just happened?!", "Surprise"),
("I'm terrified of this update failing.", "Fear"),
("Meh, it's just okay.", "Neutral"),
("I shouldn't have said that.", "Shame"),
("I feel bad for forgetting.", "Guilt"),
("Wait, what does this mean?", "Confusion"),
("I really want that new gadget!", "Desire"),
("Oh sure, like that's gonna work.", "Sarcasm")
]
results = []
# 运行测试
for text, expected in tests:
result = sentiment_analysis(text)[0]
predicted = result["label"].capitalize()
confidence = result["score"]
emoji = label_to_emoji.get(predicted, "❓")
results.append({
"sentence": text,
"expected": expected,
"predicted": predicted,
"confidence": confidence,
"emoji": emoji,
"pass": predicted == expected
})
# 打印结果
for r in results:
status = "✅ 通过" if r["pass"] else "❌ 失败"
print(f"\n🔍 {r['sentence']}")
print(f"🎯 预期: {r['expected']}")
print(f"🔝 预测: {r['predicted']} {r['emoji']} (置信度: {r['confidence']:.4f})")
print(status)
# 总结
pass_count = sum(r["pass"] for r in results)
print(f"\n🎯 总通过数: {pass_count}/{len(tests)}")
示例结果(假设)
- 句子: I love you so much!
预期: 爱
预测: 爱 ❤️ (置信度: 0.8442)
结果: ✅ 通过 - 句子: I feel so alone right now.
预期: 悲伤
预测: 悲伤 😢 (置信度: 0.7913)
结果: ✅ 通过 - 总通过数: ~11/13(取决于微调)。
BERT-Emotion 在短文本的情绪分类中表现出色,尤其在物联网和社交媒体场景中。微调可进一步提升对复杂情绪(如羞愧或讽刺)的识别能力。
评估指标
指标 | 近似值 |
---|---|
✅ 准确率 | 13类情绪任务中约90–95% |
🎯 F1分数 | 多类分类中表现均衡 |
⚡ 延迟 | 树莓派上<45ms |
📏 召回率 | 轻量级模型中具有竞争力 |
注:指标因硬件(如树莓派4、安卓设备)和微调而异。请在目标设备上测试以获得准确结果。
使用场景
BERT-Emotion 专为边缘和物联网场景设计,适用于需要实时情绪检测的短文本应用。主要应用包括:
- 聊天机器人情绪理解:检测用户情绪,例如“我爱你”(预测“爱 ❤️”)以个性化回复。
- 社交媒体情感标记:分析帖子,例如“这太恶心了!”(预测“厌恶 🤢”)用于内容审核。
- 心理健康上下文检测:监测用户情绪,例如“我感到很孤独”(预测“悲伤 😢”)用于健康应用。
- 智能回复与反应:根据情绪建议回复,例如“我太高兴了!”(预测“快乐 😄”)推荐积极表情符号。
- 情感语气分析:调整物联网设备设置,例如“我吓坏了!”(预测“恐惧 😱”)调暗灯光以提供舒适感。
- 语音助手:本地情绪感知解析,例如“为什么总是坏?”(预测“愤怒 😠”)优先处理问题。
- 玩具机器人:情绪驱动互动,例如“我真的很想要!”(预测“渴望 🔥”)触发生动动画。
- 健身追踪器:分析反馈,例如“等等,什么?”(预测“困惑 😕”)澄清指令。
硬件要求
- 处理器:CPU、移动NPU或微控制器(如ESP32-S3、树莓派4)
- 存储:约20MB用于模型权重(量化后,Safetensors格式)
- 内存:约60MB RAM用于推理
- 环境:离线或低连接性场景
量化确保了高效的内存使用,适合资源受限的设备。
训练数据
- 自定义情绪数据集:包含13种标记情绪的短文本数据(如快乐、悲伤、爱),源自自定义数据集和ChatGPT数据集。通过社交媒体和物联网用户反馈增强,以提升在聊天机器人、社交媒体和智能设备场景中的表现。
建议针对特定领域数据进行微调以获得最佳结果。
微调指南
为适应自定义情绪检测任务(如特定聊天机器人或物联网交互):
- 准备数据集:收集带有13种情绪类别的标记数据。
- 使用 Hugging Face 微调:
# !pip install transformers datasets torch --upgrade import torch from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments from datasets import Dataset import pandas as pd # 1. 准备示例情绪数据集 data = { "text": [ "I love you so much!", "This is absolutely disgusting!", "I'm so happy with my new phone!", "Why does this always break?", "I feel so alone right now." ], "label": [2, 7, 5, 1, 0] # 情绪:0到12 } df = pd.DataFrame(data) dataset = Dataset.from_pandas(df) # 2. 加载分词器和模型 model_name = "boltuix/bert-emotion" tokenizer = BertTokenizer.from_pretrained(model_name) model = BertForSequenceClassification.from_pretrained(model_name, num_labels=13) # 3. 分词数据集 def tokenize_function(examples): return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=64) tokenized_dataset = dataset.map(tokenize_function, batched=True) # 4. 手动将所有字段转换为PyTorch张量(NumPy 2.0安全) def to_torch_format(example): return { "input_ids": torch.tensor(example["input_ids"]), "attention_mask": torch.tensor(example["attention_mask"]), "label": torch.tensor(example["label"]) } tokenized_dataset = tokenized_dataset.map(to_torch_format) # 5. 定义训练参数 training_args = TrainingArguments( output_dir="./bert_emotion_results", num_train_epochs=5, per_device_train_batch_size=2, logging_dir="./bert_emotion_logs", logging_steps=10, save_steps=100, eval_strategy="no", learning_rate=3e-5, report_to="none" # 如不需要,禁用W&B自动记录 ) # 6. 初始化训练器 trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_dataset, ) # 7. 微调模型 trainer.train() # 8. 保存微调后的模型 model.save_pretrained("./fine_tuned_bert_emotion") tokenizer.save_pretrained("./fine_tuned_bert_emotion") # 9. 示例推理 text = "I'm thrilled with the update!" inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=64) model.eval() with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits predicted_class = torch.argmax(logits, dim=1).item() labels = ["Sadness", "Anger", "Love", "Surprise", "Fear", "Happiness", "Neutral", "Disgust", "Shame", "Guilt", "Confusion", "Desire", "Sarcasm"] print(f"文本'{text}'的预测情绪: {labels[predicted_class]}")
- 部署:将微调后的模型导出为ONNX或TensorFlow Lite格式以用于边缘设备。
与其他模型的对比
模型 | 参数 | 大小 | 边缘/IoT 专注度 | 支持的任务 |
---|---|---|---|---|
BERT-Emotion | ~6M | ~20MB | 高 | 情绪检测、分类 |
BERT-Lite | ~2M | ~10MB | 高 | MLM、NER、分类 |
NeuroBERT-Mini | ~7M | ~35MB | 高 | MLM、NER、分类 |
DistilBERT | ~66M | ~200MB | 中 | MLM、NER、分类、情感分析 |
BERT-Emotion 专为13类情绪检测优化,在边缘设备的短文本情感分析中表现优于通用模型(如BERT-Lite),同时比DistilBERT更高效。
标签
#BERT-Emotion
#边缘自然语言处理
#情绪检测
#设备端人工智能
#离线自然语言处理
#移动人工智能
#情感分析
#文本分类
#表情符号
#情绪
#轻量级变换器
#嵌入式自然语言处理
#智能设备人工智能
#低延迟模型
#物联网人工智能
#高效BERT
#自然语言处理2025
#上下文感知
#边缘机器学习
#智能家居人工智能
#情绪感知
#语音人工智能
#环保人工智能
#聊天机器人
#社交媒体
#心理健康
#短文本
#智能回复
#语气分析
许可证
Apache-2.0 许可证:可免费用于个人和商业用途。详见 LICENSE。
致谢
- 基础模型:boltuix/bert-lite、[boltuix/bitBERT]
- 优化者:Boltuix,针对边缘AI应用进行微调和量化
- 库:Hugging Face
transformers
团队提供模型托管和工具
支持与社区
如有问题、疑问或贡献:
- 访问 Hugging Face 模型页面
- 在仓库提交问题
- 加入Hugging Face讨论或通过拉取请求贡献
- 查阅 Transformers 文档 获取指导
欢迎社区反馈以提升BERT-Emotion在物联网和边缘应用中的表现!
联系方式
- 📬 邮箱:boltuix@gmail.com








