BERT学习笔记
Task
- 看懂高明豪老哥代码
- 熟悉BERT-Pytorch分类任务训练流程
- 了解如何加孪生神经网络为分类头
- 学一些融合技巧
- 学BERT生成预测结果
Refence
使用代码初读
注:run_classifier.py
DataProcessor
- 定位:是对输入进行数据处理的抽象父类
- 说明:自定义的processor里需要继承DataProcessor,并重载获取label的get_labels和获取单个输入的get_train_examples和get_dev_examples函数。
- 继承实例:
InputExample
类用于封装输入,之后再展开。
tokenization.convert_to_unicode
确保输入为str,否则使用utf-8解码
调用:在main()函数内:
然后获取参数对应的Processor实例
1
2
3
4
5
6
7
8
9
10
11
12if task_name not in processors:
raise ValueError("Task not found: %s" % (task_name))
processor = processors[task_name]()
label_list = processor.get_labels()
···
然后
在args.do_train里
train_examples = processor.get_train_examples(args.data_dir)
在args.do_eval里
eval_examples = processor.get_dev_examples(args.data_dir)InputExample类:一个简单的输入封装
其中guid是用于区分每一个InputExample
Tokenizer
首先看一下main()函数内的调用:
import tokenization
···
tokenizer = tokenization.FullTokenizer(
vocab_file=args.vocab_file, do_lower_case=args.do_lower_case)
追踪到FullTokenizer类:
再看BasicTokenizer
1 | def tokenize(self, text)内 |
再看 WordpieceTokenizer
1 | """Tokenizes a piece of text into its word pieces. |
由此,我认为FullTokenizer作用是将输入的文本清洗后细分到词再到单词碎片(Wordpiece)
convert_examples_to_features
1 | #位置:在模型输入之前 |
最终输入
1 | # Already been converted into WordPiece token ids |