Cnmbert
一個用於翻譯拼音縮寫的模型,基於Chinese-BERT-wwm訓練,適配拼音縮寫翻譯任務。
下載量 31
發布時間 : 12/8/2024
模型概述
CNMBert是一個專門用於將拼音縮寫轉換為完整中文詞彙的模型,適用於處理網絡用語中的拼音縮寫。
模型特點
拼音縮寫翻譯
專門針對中文網絡用語中的拼音縮寫進行翻譯轉換
多掩碼支持
支持同時處理多個掩碼位置,提高翻譯效率
雙向預測
通過雙向預測提升準確率約2%
嚴格校驗
可校驗輸出是否為有效中文詞彙
模型能力
拼音縮寫翻譯
多掩碼填充
中文文本處理
使用案例
網絡用語處理
拼音縮寫轉換
將網絡聊天中的拼音縮寫轉換為完整中文詞彙
如將'bhys'轉換為'不好意思'
社交媒體分析
網絡用語理解
幫助分析社交媒體中的縮寫用語
🚀 CNMBert
CNMBert 是一個用於翻譯拼音縮寫的模型,它基於 Chinese-BERT-wwm 訓練而來,通過修改預訓練任務適配拼音縮寫翻譯,在該任務上相較於微調過的 GPT 模型以及 GPT-4o 達到了 SOTA 水平。
🚀 快速開始
安裝依賴
from transformers import AutoTokenizer, BertConfig
from CustomBertModel import predict
from MoELayer import BertWwmMoE
加載模型
# 使用帶 MoE 的 CNMBert
# 若要使用不帶 MoE 的 CNMBert,將所有 "Midsummra/CNMBert-MoE" 替換為 "Midsummra/CNMBert",並使用 BertForMaskedLM 代替 BertWwmMoE
tokenizer = AutoTokenizer.from_pretrained("Midsummra/CNMBert-MoE")
config = BertConfig.from_pretrained('Midsummra/CNMBert-MoE')
model = BertWwmMoE.from_pretrained('Midsummra/CNMBert-MoE', config=config).to('cuda')
# model = BertForMaskedLM.from_pretrained('Midsummra/CNMBert').to('cuda')
預測詞語
print(predict("我有兩千kq", "kq", model, tokenizer)[:5])
print(predict("快去給魔理沙看b吧", "b", model, tokenizer[:5]))
輸出示例
['塊錢', 1.2056937473156175], ['塊前', 0.05837443749364857], ['開千', 0.0483869208528063], ['可千', 0.03996622172280445], ['口氣', 0.037183335575008414]
['病', 1.6893256306648254], ['吧', 0.1642467901110649], ['唄', 0.026976384222507477], ['包', 0.021441461518406868], ['報', 0.01396679226309061]
✨ 主要特性
- 適配拼音縮寫翻譯:通過修改預訓練任務,使模型能夠有效處理拼音縮寫到漢字的轉換。
- 多模型可選:提供 CNMBert-Default 和 CNMBert-MoE 兩種模型,滿足不同需求。
- 多種預測模式:支持束搜索和回溯的無剪枝暴力搜索,可根據需求選擇。
📦 安裝指南
文檔未提及具體安裝步驟,可參考相關依賴庫的安裝方法進行安裝。
💻 使用示例
基礎用法
# 加載模型和分詞器
from transformers import AutoTokenizer, BertConfig
from CustomBertModel import predict
from MoELayer import BertWwmMoE
# 加載模型
tokenizer = AutoTokenizer.from_pretrained("Midsummra/CNMBert-MoE")
config = BertConfig.from_pretrained('Midsummra/CNMBert-MoE')
model = BertWwmMoE.from_pretrained('Midsummra/CNMBert-MoE', config=config).to('cuda')
# 預測詞語
print(predict("我有兩千kq", "kq", model, tokenizer)[:5])
高級用法
# 使用回溯的無剪枝暴力搜索
def backtrack_predict(sentence: str,
predict_word: str,
model,
tokenizer,
top_k=10,
fast_mode=True,
strict_mode=True):
# 調用示例
print(backtrack_predict("我有兩千kq", "kq", model, tokenizer)[:5])
📚 詳細文檔
什麼是拼音縮寫
形如 "bhys" -> "不好意思","ys" -> "原神" 這樣,使用拼音首字母來代替漢字的縮寫,我們稱之為拼音縮寫。更多關於拼音縮寫的討論可參考 大家為什麼會討厭縮寫? - 遠方青木的回答 - 知乎。
CNMBert 模型對比
模型 | 模型權重 | Memory Usage (FP16) | 模型大小 | QPS | MRR | Acc |
---|---|---|---|---|---|---|
CNMBert-Default | Huggingface | 0.4GB | 131M | 12.56 | 59.70 | 49.74 |
CNMBert-MoE | Huggingface | 0.8GB | 329M | 3.20 | 61.53 | 51.86 |
說明:
- 所有模型均在相同的 200 萬條 wiki 以及知乎語料下訓練。
- QPS 為 queries per second(由於沒有使用 c 重寫 predict 所以現在性能很糟...)。
- MRR 為平均倒數排名(mean reciprocal rank)。
- Acc 為準確率(accuracy)。
預測函數說明
# 默認的 predict 函數使用束搜索
def predict(sentence: str,
predict_word: str,
model,
tokenizer,
top_k=8,
beam_size=16, # 束寬
threshold=0.005, # 閾值
fast_mode=True, # 是否使用快速模式
strict_mode=True): # 是否對輸出結果進行檢查
# 使用回溯的無剪枝暴力搜索
def backtrack_predict(sentence: str,
predict_word: str,
model,
tokenizer,
top_k=10,
fast_mode=True,
strict_mode=True):
注意事項
⚠️ 重要提示
由於 BERT 的自編碼特性,導致其在預測 MASK 時,順序不同會導致預測結果不同,如果啟用
fast_mode
,則會正向和反向分別對輸入進行預測,可以提升一點準確率(2% 左右),但是會帶來更大的性能開銷。strict_mode
會對輸入進行檢查,以判斷其是否為一個真實存在的漢語詞彙。
如何微調模型
請參考 TrainExample.ipynb,在數據集的格式上,只要保證 csv 的第一列為要訓練的語料即可。
Q&A
Q:感覺這個東西準確度有點低啊。
A:可以嘗試設置 fast_mode
和 strict_mode
為 False
。 模型是在很小的數據集(200w)上進行的預訓練,所以泛化能力不足很正常,可以在更大數據集或者更加細分的領域進行微調,具體微調方式和 Chinese-BERT-wwm 差別不大,只需要將 DataCollactor
替換為 CustomBertModel.py
中的 DataCollatorForMultiMask
。
🔧 技術細節
文檔未提供詳細技術細節。
📄 許可證
本項目採用 AGPL-3.0 許可證。
引用
如果您對 CNMBert 的具體實現感興趣的話,可以參考
@misc{feng2024cnmbertmodelhanyupinyin,
title={CNMBert: A Model For Hanyu Pinyin Abbreviation to Character Conversion Task},
author={Zishuo Feng and Feng Cao},
year={2024},
eprint={2411.11770},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2411.11770},
}
Phi 2 GGUF
其他
Phi-2是微軟開發的一個小型但強大的語言模型,具有27億參數,專注於高效推理和高質量文本生成。
大型語言模型 支持多種語言
P
TheBloke
41.5M
205
Roberta Large
MIT
基於掩碼語言建模目標預訓練的大型英語語言模型,採用改進的BERT訓練方法
大型語言模型 英語
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基礎模型的蒸餾版本,在保持相近性能的同時更輕量高效,適用於序列分類、標記分類等自然語言處理任務。
大型語言模型 英語
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一個多語言大語言模型,針對多語言對話用例進行了優化,在常見的行業基準測試中表現優異。
大型語言模型 英語
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基於100種語言的2.5TB過濾CommonCrawl數據預訓練的多語言模型,採用掩碼語言建模目標進行訓練。
大型語言模型 支持多種語言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基於Transformer架構的英語預訓練模型,通過掩碼語言建模目標在海量文本上訓練,支持文本特徵提取和下游任務微調
大型語言模型 英語
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI發佈的開放預訓練Transformer語言模型套件,參數量從1.25億到1750億,旨在對標GPT-3系列性能,同時促進大規模語言模型的開放研究。
大型語言模型 英語
O
facebook
6.3M
198
1
基於transformers庫的預訓練模型,適用於多種NLP任務
大型語言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多語言大語言模型系列,包含8B、70B和405B參數規模,支持8種語言和代碼生成,優化了多語言對話場景。
大型語言模型
Transformers 支持多種語言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基礎版是由Google開發的文本到文本轉換Transformer模型,參數規模2.2億,支持多語言NLP任務。
大型語言模型 支持多種語言
T
google-t5
5.4M
702
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98