模型概述
模型特點
模型能力
使用案例
🚀 😊 BERT-Emotion — 用於即時情緒檢測的輕量級BERT 🌟
BERT-Emotion是一款輕量級的BERT模型,專為即時情緒檢測而設計。它能夠在資源受限的環境中,如移動應用、可穿戴設備和智能家居設備,高效地進行短文本的情緒分類。該模型體積小巧,僅約20MB,參數約6M,適合對隱私要求較高的應用場景,如聊天機器人、社交媒體情感分析和心理健康監測等。
🚀 快速開始
模型概述
BERT-Emotion
是一個基於 bert-lite 和 NeuroBERT-Mini 的輕量級NLP模型,經過微調後可用於在邊緣和物聯網設備上進行短文本情緒檢測。該模型量化後大小約為20MB,參數約6M,能夠將文本分類為13種豐富的情緒類別(如幸福、悲傷、憤怒、愛等),具有較高的準確性。它針對低延遲和離線操作進行了優化,非常適合對隱私要求較高的應用,如聊天機器人、社交媒體情感分析和心理健康監測等,尤其適用於資源受限的環境,如移動應用、可穿戴設備和智能家居設備。
- 模型名稱:BERT-Emotion
- 大小:約20MB(量化後)
- 參數:約6M
- 架構:輕量級BERT(4層,隱藏層大小128,4個注意力頭)
- 描述:用於情緒檢測的輕量級4層、128隱藏層模型
- 許可證:Apache-2.0 — 可免費用於商業和個人用途
安裝依賴
pip install transformers torch
確保你的環境支持Python 3.6+,並且有大約20MB的存儲空間用於存儲模型權重。
下載模型
通過Hugging Face下載
- 訪問模型地址 boltuix/bert-emotion。
- 下載模型文件(約20MB)或克隆倉庫:
git clone https://huggingface.co/boltuix/bert-emotion
通過Transformers庫加載
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForSequenceClassification.from_pretrained("boltuix/bert-emotion")
tokenizer = AutoTokenizer.from_pretrained("boltuix/bert-emotion")
手動下載
從Hugging Face模型中心下載量化後的模型權重(Safetensors格式),並將其集成到你的邊緣/IoT應用中。
快速上手示例
基礎用法
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%
注意:可以針對特定領域或額外的情緒類別對模型進行微調,以提高準確性。
✨ 主要特性
- ⚡ 緊湊設計:約20MB的體積適合存儲容量有限的設備。
- 🧠 豐富的情緒檢測:能夠將文本分類為13種情緒,並通過表情符號進行直觀展示。
- 📶 離線能力:無需互聯網連接即可正常工作。
- ⚙️ 即時推理:針對CPU、移動NPU和微控制器進行了優化。
- 🌍 廣泛的應用場景:支持短文本的情緒檢測、情感分析和語氣分析。
📦 支持的情緒
BERT-Emotion能夠將文本分類為13種情緒類別,每種情緒都對應一個表情符號,以增強可解釋性:
情緒 | 表情符號 |
---|---|
悲傷 | 😢 |
憤怒 | 😠 |
愛 | ❤️ |
驚訝 | 😲 |
恐懼 | 😱 |
幸福 | 😄 |
中立 | 😐 |
厭惡 | 🤢 |
羞愧 | 🙈 |
內疚 | 😔 |
困惑 | 😕 |
渴望 | 🔥 |
諷刺 | 😏 |
💻 使用示例
基礎用法
from transformers import pipeline
# 加載微調後的BERT-Emotion模型
sentiment_analysis = pipeline("text-classification", model="boltuix/bert-emotion")
# 分析情緒
result = sentiment_analysis("i love you")
print(result)
高級用法
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%}")
📚 詳細文檔
評估
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({
"句子": text,
"預期情緒": expected,
"預測情緒": predicted,
"置信度": confidence,
"表情符號": emoji,
"是否通過": predicted == expected
})
# 打印結果
for r in results:
status = "✅ 通過" if r["是否通過"] else "❌ 失敗"
print(f"\n🔍 {r['句子']}")
print(f"🎯 預期: {r['預期情緒']}")
print(f"🔝 預測: {r['預測情緒']} {r['表情符號']} (置信度: {r['置信度']:.4f})")
print(status)
# 總結
pass_count = sum(r["是否通過"] 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專為需要即時短文本情緒檢測的邊緣和物聯網場景而設計。主要應用包括:
- 聊天機器人情緒理解:檢測用戶情緒,例如 “I love you”(預測為 “愛 ❤️”),以實現個性化回覆。
- 社交媒體情感標籤:分析帖子,例如 “This is disgusting!”(預測為 “厭惡 🤢”),用於內容審核。
- 心理健康情境檢測:監測用戶情緒,例如 “I feel so alone”(預測為 “悲傷 😢”),用於健康應用。
- 智能回覆和反應:根據情緒建議回覆,例如 “I’m so happy!”(預測為 “幸福 😄”),推薦積極的表情符號。
- 情感語氣分析:調整物聯網設備設置,例如 “I’m terrified!”(預測為 “恐懼 😱”),調暗燈光以提供舒適感。
- 語音助手:本地情緒感知解析,例如 “Why does it break?”(預測為 “憤怒 😠”),優先處理問題。
- 玩具機器人:基於情緒的交互,例如 “I really want that!”(預測為 “渴望 🔥”),實現有趣的動畫效果。
- 健身追蹤器:分析反饋,例如 “Wait, what?”(預測為 “困惑 😕”),澄清說明。
硬件要求
- 處理器:CPU、移動NPU或微控制器(如ESP32 - S3、樹莓派4)
- 存儲:約20MB用於存儲模型權重(量化後,Safetensors格式)
- 內存:約60MB RAM用於推理
- 環境:離線或低連接環境
量化確保了高效的內存使用,使其適用於資源受限的設備。
訓練數據
- 自定義情緒數據集:精心策劃的短文本數據,包含13種標註的情緒(如幸福、悲傷、愛等),數據來源於自定義數據集和ChatGPT數據集。通過社交媒體和物聯網用戶反饋進行增強,以提高在聊天機器人、社交媒體和智能設備場景中的性能。
建議使用特定領域的數據進行微調以獲得最佳效果。
微調指南
要將BERT-Emotion應用於自定義情緒檢測任務(例如特定的聊天機器人或物聯網交互),可以按照以下步驟進行:
- 準備數據集:收集包含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架構,包含4層,隱藏層大小為128,有4個注意力頭。這種設計使得模型在保持高效的同時,能夠準確地進行情緒檢測。
訓練優化
模型經過量化處理,將大小壓縮至約20MB,同時保持了較高的性能。在訓練過程中,使用了自定義的情緒數據集,並結合了社交媒體和物聯網場景的數據,以提高模型在實際應用中的表現。
📄 許可證
Apache-2.0許可證:可免費用於個人和商業用途。詳情請見 LICENSE。
致謝
- 基礎模型:boltuix/bert-lite,[boltuix/bitBERT]
- 優化者:Boltuix,針對邊緣AI應用進行了微調與量化
- 庫:Hugging Face
transformers
團隊提供模型託管和工具
支持與社區
如果您有任何問題、疑問或想要貢獻代碼,請:
- 訪問 Hugging Face模型頁面
- 在 倉庫 中提交問題
- 參與Hugging Face的討論或通過拉取請求進行貢獻
- 查看 Transformers文檔 以獲取指導
我們歡迎社區反饋,以進一步提升BERT-Emotion在物聯網和邊緣應用中的性能!
聯繫信息
- 📬 郵箱:boltuix@gmail.com
標籤
#BERT-Emotion
#edge-nlp
#emotion-detection
#on-device-ai
#offline-nlp
#mobile-ai
#sentiment-analysis
#text-classification
#emojis
#emotions
#lightweight-transformers
#embedded-nlp
#smart-device-ai
#low-latency-models
#ai-for-iot
#efficient-bert
#nlp2025
#context-aware
#edge-ml
#smart-home-ai
#emotion-aware
#voice-ai
#eco-ai
#chatbot
#social-media
#mental-health
#short-text
#smart-replies
#tone-analysis








