模型概述
模型特點
模型能力
使用案例
🚀 NeuroBERT-Tiny — 適用於邊緣計算與物聯網的輕量級BERT模型
NeuroBERT-Tiny是一款專為邊緣計算和物聯網設備設計的輕量級NLP模型。它基於google-bert/bert-base-uncased優化而來,擁有僅約15MB的小巧體積和~4M的參數,卻能在資源受限的環境中實現高效的上下文語言理解。該模型支持離線操作,具備低延遲的特性,非常適合對隱私要求較高且網絡連接有限的應用場景。
🚀 快速開始
模型概述
NeuroBERT-Tiny
是一個超輕量級的NLP模型,它源自google/bert-base-uncased,針對邊緣和物聯網設備的即時推理進行了優化。該模型量化後的大小約為15MB,參數約為4M,能夠在移動應用、可穿戴設備、微控制器和智能家居設備等資源受限的環境中實現高效的上下文語言理解。它專為低延遲和離線操作而設計,非常適合對隱私要求較高且網絡連接有限的應用場景。
- 模型名稱:NeuroBERT-Tiny
- 大小:約15MB(量化後)
- 參數:約4M
- 架構:輕量級BERT(2層,隱藏層大小為128,2個注意力頭)
- 許可證:MIT — 可免費用於商業和個人用途
安裝依賴
安裝所需的依賴項:
pip install transformers torch
確保你的環境支持Python 3.6+,並且有大約15MB的存儲空間用於存儲模型權重。
下載模型
通過Hugging Face下載
- 訪問模型地址 boltuix/NeuroBERT-Tiny。
- 下載模型文件(約15MB)或克隆倉庫:
git clone https://huggingface.co/boltuix/NeuroBERT-Tiny
通過Transformers庫加載
在Python中直接加載模型:
from transformers import AutoModelForMaskedLM, AutoTokenizer
model = AutoModelForMaskedLM.from_pretrained("boltuix/NeuroBERT-Tiny")
tokenizer = AutoTokenizer.from_pretrained("boltuix/NeuroBERT-Tiny")
手動下載
從Hugging Face模型中心下載量化後的模型權重,然後提取並集成到你的邊緣/物聯網應用中。
快速上手示例
掩碼語言建模
使用掩碼語言建模預測物聯網相關句子中缺失的單詞:
from transformers import pipeline
# 啟動模型
mlm_pipeline = pipeline("fill-mask", model="boltuix/NeuroBERT-Mini")
# 測試效果
result = mlm_pipeline("Please [MASK] the door before leaving.")
print(result[0]["sequence"]) # 輸出: "Please open the door before leaving."
文本分類
對物聯網命令進行意圖檢測或文本分類:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# 加載分詞器和分類模型
model_name = "boltuix/NeuroBERT-Tiny"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
model.eval()
# 示例輸入
text = "Turn off the fan"
# 對輸入進行分詞
inputs = tokenizer(text, return_tensors="pt")
# 獲取預測結果
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=1)
pred = torch.argmax(probs, dim=1).item()
# 定義標籤
labels = ["OFF", "ON"]
# 打印結果
print(f"文本: {text}")
print(f"預測意圖: {labels[pred]} (置信度: {probs[0][pred]:.4f})")
文本: Turn off the FAN
預測意圖: OFF (置信度: 0.5328)
注意:針對特定的分類任務對模型進行微調可以提高準確性。
✨ 主要特性
- 超輕量級:約15MB的佔用空間,適合存儲空間有限的設備。
- 上下文理解:儘管模型體積小,但仍能捕捉語義關係。
- 離線能力:無需互聯網連接即可完全正常運行。
- 即時推理:針對CPU、移動NPU和微控制器進行了優化。
- 應用廣泛:支持掩碼語言建模(MLM)、意圖檢測、文本分類和命名實體識別(NER)。
📦 安裝指南
安裝依賴
pip install transformers torch
環境要求
確保你的環境支持Python 3.6+,並且有大約15MB的存儲空間用於存儲模型權重。
💻 使用示例
基礎用法
掩碼語言建模
from transformers import pipeline
# 啟動模型
mlm_pipeline = pipeline("fill-mask", model="boltuix/NeuroBERT-Mini")
# 測試效果
result = mlm_pipeline("Please [MASK] the door before leaving.")
print(result[0]["sequence"]) # 輸出: "Please open the door before leaving."
文本分類
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# 加載分詞器和分類模型
model_name = "boltuix/NeuroBERT-Tiny"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
model.eval()
# 示例輸入
text = "Turn off the fan"
# 對輸入進行分詞
inputs = tokenizer(text, return_tensors="pt")
# 獲取預測結果
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=1)
pred = torch.argmax(probs, dim=1).item()
# 定義標籤
labels = ["OFF", "ON"]
# 打印結果
print(f"文本: {text}")
print(f"預測意圖: {labels[pred]} (置信度: {probs[0][pred]:.4f})")
高級用法
模型評估
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch
# 加載模型和分詞器
model_name = "boltuix/NeuroBERT-Tiny"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForMaskedLM.from_pretrained(model_name)
model.eval()
# 測試數據
tests = [
("She is a [MASK] at the local hospital.", "nurse"),
("Please [MASK] the door before leaving.", "shut"),
("The drone collects data using onboard [MASK].", "sensors"),
("The fan will turn [MASK] when the room is empty.", "off"),
("Turn [MASK] the coffee machine at 7 AM.", "on"),
("The hallway light switches on during the [MASK].", "night"),
("The air purifier turns on due to poor [MASK] quality.", "air"),
("The AC will not run if the door is [MASK].", "open"),
("Turn off the lights after [MASK] minutes.", "five"),
("The music pauses when someone [MASK] the room.", "enters")
]
results = []
# 運行測試
for text, answer in tests:
inputs = tokenizer(text, return_tensors="pt")
mask_pos = (inputs.input_ids == tokenizer.mask_token_id).nonzero(as_tuple=True)[1]
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits[0, mask_pos, :]
topk = logits.topk(5, dim=1)
top_ids = topk.indices[0]
top_scores = torch.softmax(topk.values, dim=1)[0]
guesses = [(tokenizer.decode([i]).strip().lower(), float(score)) for i, score in zip(top_ids, top_scores)]
results.append({
"句子": text,
"預期結果": answer,
"預測結果": guesses,
"是否通過": answer.lower() in [g[0] for g in guesses]
})
# 打印結果
for r in results:
status = "✅ 通過" if r["是否通過"] else "❌ 失敗"
print(f"\n句子: {r['句子']}")
print(f"預期結果: {r['預期結果']}")
print("前5個預測結果 (單詞 : 置信度):")
for word, score in r['預測結果']:
print(f" - {word:12} | {score:.4f}")
print(status)
# 總結
pass_count = sum(r["是否通過"] for r in results)
print(f"\n總通過數: {pass_count}/{len(tests)}")
模型微調
為了使NeuroBERT-Tiny適應自定義的物聯網任務(例如特定的智能家居命令),可以按照以下步驟進行微調:
#!pip uninstall -y transformers torch datasets
#!pip install transformers==4.44.2 torch==2.4.1 datasets==3.0.1
import torch
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
from datasets import Dataset
import pandas as pd
# 1. 準備示例物聯網數據集
data = {
"文本": [
"Turn on the fan",
"Switch off the light",
"Invalid command",
"Activate the air conditioner",
"Turn off the heater",
"Gibberish input"
],
"標籤": [1, 1, 0, 1, 1, 0] # 1表示有效的物聯網命令,0表示無效命令
}
df = pd.DataFrame(data)
dataset = Dataset.from_pandas(df)
# 2. 加載分詞器和模型
model_name = "boltuix/NeuroBERT-Tiny" # 使用NeuroBERT-Tiny
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)
# 3. 對數據集進行分詞
def tokenize_function(examples):
return tokenizer(examples["文本"], padding="max_length", truncation=True, max_length=64) # 針對物聯網命令設置較短的最大長度
tokenized_dataset = dataset.map(tokenize_function, batched=True)
# 4. 設置PyTorch格式
tokenized_dataset.set_format("torch", columns=["input_ids", "attention_mask", "標籤"])
# 5. 定義訓練參數
training_args = TrainingArguments(
output_dir="./iot_neurobert_results",
num_train_epochs=5, # 針對小數據集增加訓練輪數
per_device_train_batch_size=2,
logging_dir="./iot_neurobert_logs",
logging_steps=10,
save_steps=100,
evaluation_strategy="no",
learning_rate=3e-5, # 針對NeuroBERT-Tiny調整學習率
)
# 6. 初始化訓練器
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset,
)
# 7. 微調模型
trainer.train()
# 8. 保存微調後的模型
model.save_pretrained("./fine_tuned_neurobert_iot")
tokenizer.save_pretrained("./fine_tuned_neurobert_iot")
# 9. 示例推理
text = "Turn on the light"
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()
print(f"預測類別: {'有效的物聯網命令' if predicted_class == 1 else '無效命令'}")
模型部署
將微調後的模型導出為ONNX或TensorFlow Lite格式,以便在邊緣設備上部署。
📚 詳細文檔
評估指標
指標 | 數值(近似值) |
---|---|
準確率 | 約為BERT-base的90 - 95% |
F1分數 | 在MLM/NER任務中保持平衡 |
推理延遲 | 在樹莓派上小於50ms |
召回率 | 在輕量級模型中具有競爭力 |
注意:指標會根據硬件(如樹莓派4、安卓設備)和微調情況而有所不同。在目標設備上進行測試以獲得準確的結果。
應用場景
NeuroBERT-Tiny專為計算資源和網絡連接有限的邊緣和物聯網場景而設計。主要應用包括:
- 智能家居設備:解析命令,如 “Turn [MASK] the coffee machine”(預測 “on”)或 “The fan will turn [MASK]”(預測 “off”)。
- 物聯網傳感器:解釋傳感器上下文,如 “The drone collects data using onboard [MASK]”(預測 “sensors”)。
- 可穿戴設備:即時意圖檢測,如 “The music pauses when someone [MASK] the room”(預測 “enters”)。
- 移動應用:離線聊天機器人或語義搜索,如 “She is a [MASK] at the hospital”(預測 “nurse”)。
- 語音助手:本地命令解析,如 “Please [MASK] the door”(預測 “shut”)。
- 玩具機器人:交互式玩具的輕量級命令理解。
- 健身追蹤器:本地文本反饋處理,如情感分析。
- 汽車助手:無需雲API的離線命令消歧。
硬件要求
- 處理器:CPU、移動NPU或微控制器(如ESP32、樹莓派)
- 存儲空間:約15MB用於存儲模型權重(量化後以減小佔用空間)
- 內存:約50MB RAM用於推理
- 環境:離線或低網絡連接環境
量化處理確保了最小的內存使用,使其非常適合微控制器。
訓練數據
- 自定義物聯網數據集:精心策劃的數據,專注於物聯網術語、智能家居命令和傳感器相關上下文(源自chatgpt-datasets)。這有助於提高模型在命令解析和設備控制等任務上的性能。
建議在特定領域的數據上進行微調以獲得最佳效果。
與其他模型的比較
模型 | 參數數量 | 大小 | 邊緣/物聯網專注度 | 支持的任務 |
---|---|---|---|---|
NeuroBERT-Tiny | 約4M | 約15MB | 高 | MLM、NER、分類 |
DistilBERT | 約66M | 約200MB | 中等 | MLM、NER、分類 |
TinyBERT | 約14M | 約50MB | 中等 | MLM、分類 |
NeuroBERT-Tiny針對物聯網的優化訓練和量化處理使其比DistilBERT等較大的模型更適合微控制器。
🔧 技術細節
模型架構
NeuroBERT-Tiny採用輕量級BERT架構,包含2層,隱藏層大小為128,2個注意力頭。這種架構設計在保證模型性能的同時,儘可能減小了模型的大小和計算量。
量化處理
為了進一步減小模型的大小和內存佔用,NeuroBERT-Tiny採用了量化技術。量化後的模型大小約為15MB,能夠在資源受限的設備上高效運行。
訓練優化
模型在自定義的物聯網數據集上進行了訓練,該數據集專注於物聯網術語、智能家居命令和傳感器相關上下文。這種針對性的訓練使得模型在物聯網任務上表現出色。
📄 許可證
本項目採用MIT許可證,可免費用於商業和個人用途。詳情請見 LICENSE。
致謝
- 基礎模型:google-bert/bert-base-uncased
- 優化者:boltuix,為邊緣AI應用進行了量化處理
- 庫:Hugging Face的
transformers
團隊提供了模型託管和工具
支持與社區
如果你有任何問題、疑問或想要貢獻代碼,可以:
- 訪問 Hugging Face模型頁面
- 在 倉庫 中提交問題
- 參與Hugging Face上的討論或通過拉取請求進行貢獻
- 查看 Transformers文檔 獲取指導
深入瞭解
如果你想深入瞭解NeuroBERT-Tiny的設計和實際應用,請閱讀 Boltuix.com上的完整文章,其中包括架構概述、應用場景和微調技巧。
我們歡迎社區的反饋,以進一步提升NeuroBERT-Tiny在物聯網和邊緣計算應用中的性能!



