基于Transformers的自然语言处理入门【五】-Bert应用

基于Transformers的自然语言处理入门【五】-Bert应用

1 Bert基本的结构

HuggingFace 是一家总部位于纽约的聊天机器人初创服务商,很早就捕捉到 BERT 大潮流的信号并着手实现基于 pytorch 的 BERT 模型。这一项目最初名为 pytorch-pretrained-bert,在复现了原始效果的同时,提供了易用的方法以方便在这一强大模型的基础上进行各种玩耍和研究。

随着使用人数的增加,这一项目也发展成为一个较大的开源社区,合并了各种预训练语言模型以及增加了 Tensorflow 的实现,并且在 2019 年下半年改名为 Transformers。截止写文章时(2021 年 3 月 30 日)这一项目已经拥有 43k+ 的star,可以说 Transformers 已经成为事实上的 NLP 基本工具。
在这里插入图片描述
pytorch 版的 BERT 相关代码,从代码结构、具体实现与原理,以及使用的角度进行分析。 主要包含内容:
1.BERT Tokenization 分词模型(BertTokenizer)
2.BERT Model 本体模型(BertModel)

  • BertEmbeddings
  • BertEncoder
  • BertLayer
    ◦BertAttention
    ◦BertIntermediate
    ◦BertOutput
  • BertPooler

1.1 BERT Tokenization分词模型(BertTokenizer)

BertTokenizer是基于BasicTokenizer和WordPieceTokenizer的分词器:

  • BasicTokenizer负责处理的第一步——按标点、空格等分割句子,并处理是否统一小写,以及清理非法字符。
  1. 对于中文字符,通过预处理(加空格)来按字分割;
  2. 同时可以通过never_split指定对某些词不进行分割;
  3. 这一步是可选的(默认执行)。
  • WordPieceTokenizer在词的基础上,进一步将词分解为子词(subword)。
    subword 介于 char 和 word 之间,既在一定程度保留了词的含义,又能够照顾到英文中单复数、时态导致的词表爆炸和未登录词的 OOV(Out-Of-Vocabulary)问题,将词根与时态词缀等分割出来,从而减小词表,也降低了训练难度;
    例如,tokenizer 这个词就可以拆解为“token”和“##izer”两部分,注意后面一个词的“##”表示接在前一个词后面。 BertTokenizer 有以下常用方法:
    •from_pretrained:从包含词表文件(vocab.txt)的目录中初始化一个分词器;
    •tokenize:将文本(词或者句子)分解为子词列表;
    •convert_tokens_to_ids:将子词列表转化为子词对应下标的列表;
    •convert_ids_to_tokens :与上一个相反;
    •convert_tokens_to_string:将 subword 列表按“##”拼接回词或者句子;
    •encode:对于单个句子输入,分解词并加入特殊词形成“[CLS], x, [SEP]”的结构并转换为词表对应下标的列表;对于两个句子输入(多个句子只取前两个),分解词并加入特殊词形成“[CLS], x1, [SEP], x2, [SEP]”的结构并转换为下标列表;
    •decode:可以将 encode 方法的输出变为完整句子。 以及,类自身的方法:

1.2 BERT本体模型

BertModel 主要为 transformer encoder 结构,包含三个部分:
1.embeddings,即BertEmbeddings类的实体,根据单词符号获取对应的向量表示;
2.encoder,即BertEncoder类的实体;
3.pooler,即BertPooler类的实体,这一部分是可选的。

【参考】DataWhale

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值