从jieba分词到BERT-wwm——中文自然语言处理(NLP)基础分享系列(12)

本文是NLP基础分享系列的最后一期,介绍了transformer与transformers的区别,以及Huggingface Transformers库的使用。重点讲解了全词掩码的Bert-wwm-ext模型,通过实例展示了如何使用Transformers库进行模型微调,最终在有限的样本上实现了超过孪生LSTM模型的性能。
摘要由CSDN通过智能技术生成

在Huggingface transformers平台上微调BERT-wwm-ext

今天是本系列的最后一期。

transformer 与 transformers

为了避免命名带来的混淆,我们首先来厘清一下:transformer 与 transformers。

• transformer

在上一期里,我们已经做过介绍,transformer是一种具有多头自注意力机制的、可以取代RNN/LSTM的神经网络单元结构。

本质上它是一种深度学习技术。

• transformers

今天提到的transformers,是Huggingface🤗公司开发的一套python库包,它提供一个平台框架,使得transformer技术实现的各类模型能通过一致化的接口方式呈现和调用。在其主页上它是这么自我介绍的:

🤗 Transformers 提供 API 来轻松下载和训练最先进的预训练模型。使用预训练模型可以降低您的计算成本、碳足迹,并节省您从头开始训练模型的时间。这些模型可用于不同的模式,例如:

📝 文本:超过 100 种语言的文本分类、信息提取、问答、摘要、翻译和文本生成。

🖼️ 图像:图像分类、对象检测和分割。

🗣️ 音频:语音识别和音频分类。

🐙 多模态:表格问答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问答。

该库支持三个最流行的深度学习库之间的无缝集成:PyTorch、TensorFlow和JAX。在一个框架中用三行代码训练模型,然后加载它以与另一个框架进行推理。

每个🤗 Transformers 架构都在独立的 Python 模块中定义,因此可以轻松定制它们以进行研究和实验。

本质上它是一种研发工具产品。

BERT-wwm-ext

Google在发布公开论文『Attention Is All You Need』的同时,推出了开源的transformer架构BERT(Bidirectional Encoder Representation from Transformers)。可以说BERT开辟了NLP的新时代,产学研界参考BERT推出了很多类似的变种模型,如:RoBERTa、BART等。

在中文的类BERT研究中,除了Google原生的bert-base-chinese之外,Bert-wwm、MacBert、ChineseBert等模型创新了不同的机制进行优化,具有比较大的知名度和影响力。

我们今天将基于哈工大与科大讯飞联合实验室(HFL)研发的Bert-wwm-ext进行微调,实现我们的场景任务目标——辨别新闻标题A和B的关系分类。
与原始的bert-base-chinese中文采用单字掩码方式不同,Bert-wwm-ext提供了所谓全词掩码(Whole Word Masking)的预训练方式。如下图所示:
在这里插入图片描述

全词掩码有两个优点:

1、部分解决了MLM独立性假设,使得预测token之间拥有了一定的关联性

2、提高了MLM任务难度,使得模型需要更多依赖远距离的上下文来判断掩码部分的内容

接下来将看到,使用🤗 Transformers 库将使我们的代码非常简化:虽然Bert-wwm-ext 的网络结构的复杂程度要远远超过前面的孪生LSTM网络,但实现的代码行数却会大大降低。

from huggingface_hub import snapshot_download
#从官方的huggingface_hub下载模型配置、参数、模型词库等信息

snapshot_download(repo_id="hfl/chinese-bert-wwm-ext", ignore_regex=["*.h5", "*.ot", "*.msgpack"])
c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\huggingface_hub\utils\_deprecation.py:92: FutureWarning: Deprecated argument(s) used in 'snapshot_download': ignore_regex. Will not be supported from version '0.12'.

Please use `allow_patterns` and `ignore_patterns` instead.
  warnings.warn(message, FutureWarning)





'C:\\Users\\HP/.cache\\huggingface\\hub\\models--hfl--chinese-bert-wwm-ext\\snapshots\\2a995a880017c60e4683869e817130d8af548486'
from transformers import AutoConfig,AutoTokenizer,AutoModel,AutoModelForSequenceClassification
model_name = 'C:\\Users\\HP/.cache\\huggingface\\hub\\models--hfl--chinese-Bert-wwm-ext\\snapshots\\2a995a880017c60e4683869e817130d8af548486' 
config = AutoConfig.from_pretrained(model_name) 
tokenizer = AutoTokenizer.from_pretrained(model_name) 

model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=3) #新闻标题A和B的关系标签有3种类型 
Some weights of the model che
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值