/ Модель

Характеристики

Контекст
512 токенов
Параметры
167 млн
Лицензия
AGPL 3.0
Архитектура
bert · dense
Базовая модель
chinese-bert-wwm-ext
Библиотека
transformers
Опубликована
8 дек 2024

CNMBert

Заполнение пропусковТекст → текст3 профессии

CNMBert — китайская BERT-модель для раскрытия сокращений, записанных начальными буквами пиньиня, в полные китайские выражения.

24скачиваний за 30 дней3лайкавеса обновлены1 янв 2025

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

CNMBert — китайская BERT-модель, разработанная для преобразования сокращений, записанных начальными буквами пиньиня, в китайские слова и выражения. Она основана на hfl/chinese-bert-wwm-ext и адаптирована к этой задаче изменением задачи предобучения. В метаданных указана архитектура BertForMaskedLM, 167,2 млн параметров, максимальный контекст 512 токенов и формат safetensors.

Модель предназначена для раскрытия сокращений вроде «bhys» в «不好意思» и «ys» в «原神». README также описывает варианты CNMBert-Default и CNMBert-MoE, обученные на корпусе из двух миллионов записей Википедии и Zhihu, и приводит сравнительные показатели точности и ранжирования. Автор заявляет о результатах уровня SOTA относительно дообученных GPT-моделей и GPT-4o; это утверждение README, не независимая оценка.

Для применения требуются китайский текст и соответствующий токенизатор; модель выдаёт текстовые кандидаты для подстановки вместо сокращения. README отмечает ограниченную обобщающую способность из-за небольшого обучающего корпуса и допускает дополнительное дообучение. Лицензия модели — AGPL-3.0.

Сценарии применения

  • раскрытие пиньиньных инициальных сокращений в китайских сообщениях
  • подстановка китайских слов вместо сокращений в пользовательском тексте
  • получение кандидатов расшифровки для модерации или поиска по китайским сообщениям

Ограничения

README предупреждает об ограниченной способности к обобщению из-за обучения на сравнительно небольшом корпусе примерно из двух миллионов записей; точность может быть недостаточной. Заявления о превосходстве над GPT-моделями приведены автором README и не подтверждены независимой оценкой.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

CNMBert Github

zh-CN-Multi-Mask-Bert (CNMBert)

image


一个用来翻译拼音缩写的模型

此模型基于Chinese-BERT-wwm训练而来,通过修改其预训练任务来使其适配拼音缩写翻译任务,相较于微调过的GPT模型以及GPT-4o达到了sota


什么是拼音缩写

形如:

"bhys" -> "不好意思"

"ys" -> "原神"

这样的,使用拼音首字母来代替汉字的缩写,我们姑且称之为拼音缩写。

如果对拼音缩写感兴趣可以看看这个↓

大家为什么会讨厌缩写? - 远方青木的回答 - 知乎

CNMBert

Model模型权重Memory Usage (FP16)Model SizeQPSMRRAcc
CNMBert-DefaultHuggingface0.4GB131M12.5659.7049.74
CNMBert-MoEHuggingface0.8GB329M3.2061.5351.86
  • 所有模型均在相同的200万条wiki以及知乎语料下训练
  • QPS 为 queries per second (由于没有使用c重写predict所以现在性能很糟...)
  • MRR 为平均倒数排名(mean reciprocal rank)
  • Acc 为准确率(accuracy)

Usage

from transformers import AutoTokenizer, BertConfig

from CustomBertModel import predict
from MoELayer import BertWwmMoE

加载模型

# use CNMBert with MoE
# To use CNMBert without MoE, replace all "Midsummra/CNMBert-MoE" with "Midsummra/CNMBert" and use BertForMaskedLM instead of using 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]


# 默认的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。

引用

如果您对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}, 
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers · fill-mask

Можно запустить

Подбираем GPU…

Класс архитектуры
BertForMaskedLM
Ревизия весов
7802eae

0 моделей