LawsonAbs的认知与思考,望各位读者审慎阅读。

总结


本文分成两个部分,分别是 ​​tokenizer​​​ 的使用;​​BertModel​​​ 模型(以 ​​bert-base-uncased​​为例)的使用代码部分详细可见我​​Github​​ 本系列属于 ​​Bert​​ 实战训练中的第一篇,系列文章持续更新。


1 ​​Tokenizer​​ 详解

1.1 处理细节

  • 一句话会被分析的干干净净
    这句话的意思是:甚至是该句中的符号,都会被单独割出来。如下所示:

Bert实战一之处理单条句子_sed可以看到 ​​​A ditch digger, was entrenched in his career.​​​ 这句话被 ​​tokenizer()​​ 处理后的结果


1.2 处理结果

需要把一句话交给 ​​Tokenzier​​处理之后,才可以交给 ​​Bert​​的model(如​​BertModel​​)处理。

​tokenizer​​ 处理得到的结果 是一个 字典。该字典包含三项:


  • input_ids
  • token_type_ids
  • attention_mask

Bert实战一之处理单条句子_持续更新_02

1.2 tokenize()方法

相反,如果只是单纯的想得到这个字,就可以使用:

from transformers import AutoModel,AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('/home/lawson/pretrain/bert-base-uncased')
print(tokenizer.tokenize("sdf"))

最后的运行结果就是:

​['sd', '##f']​

因为 bert使用的字典中,并没有 ​​sdf​​这个单词,所以就将其分解成了这种形式。

1.3 得到返回的位置

有时候我们想根据 输入的句子得到 某个词在句子中的位置,那么这个时候就可以使用 return_offsets_mapping 这个参数。需要注意的是,这个参数只有在继承类 ​​PreTrainedTokenizer​​ 的 Tokenizer 中才有。

Bert实战一之处理单条句子_pytorch_03

2 ​​BertModel​​ 详解

这里可以结合 ​​BertModel​​的doc文档看看它最后的输出是什么:

Bert实战一之处理单条句子_pytorch_04最后返回的结果是一个 ​​tuple​​ 【这个很重要,容易出错】

①② 是肯定会返回的参数,而③是可选的返回值。平常我们在使用的时候,①② 就已经够了。

  • ​hidden_size​​ 指的就是单个token对应的最后向量的维度。

3.实例

Bert实战一之处理单条句子_pytorch_05

Bert实战一之处理单条句子_自然语言处理_06Bert实战一之处理单条句子_BERT_07

Bert实战一之处理单条句子_pytorch_08