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