- Our customized version of bert for pytorch
这是笔者基于 Meelfy 的 pytorch_pretrained_BERT 库进行部分定制化修改的模型库。
本项目的初衷是为了满足个人实验的方便,因此不会经常更新。
- 原始的模型库 pytorch_pretrained_BERT 中的功能仍然支持;
- 支持层次分解位置编码。
- 支持基于词颗粒度的woBERT。
Pytorch 权重(这里提供的是WoBERT Plus模型):
- chinese_wobert_plus.zip(提取码: fg6j)
-
安装:
pip install torchKbert
-
典型的使用例子请参考官方 examples 目录。
-
若想使用层次分解位置编码,使 BERT 可以处理长文本,在
model
中传入参数is_hierarchical=True
即可。示例如下:model = BertModel(config) encoder_outputs, _ = model(input_ids, token_ids, input_mask, is_hierarchical=True)
-
若想使用基于词颗粒度的中文WoBERT,只需在构建
BertTokenizer
对象时传入新参数:from torchKbert.tokenization import BertTokenizer tokenizer = BertTokenizer( vocab_file=vocab_path, pre_tokenizer=lambda s: jieba.cut(s, HMM=False))
不传入时,默认为
None
。分词时默认以词为单位,若想恢复使用以字为单位,只需在tokenize
时传入新参数pre_tokenize=False
:tokenzier.tokenize(text, pre_tokenize=False)
之前一直在用 Meelfy 编写的 pytorch_pretrained_BERT,调用预训练模型或进行微调已经十分方便。后来因个人的需求,所以就想改写一个支持层次分解位置编码的版本。
苏神的 bert4keras 已经实现了这样的功能。但因个人惯于使用 pytorch,已经很久不用 keras 了,所以才打算自己改写一个。
- 2021.03.07 : 添加层次分解位置编码。
- 2021.05.27 : 添加基于词颗粒度的中文WoBERT。
- 2022.03.27 : 参照 pytorch_transformers 对 BertPretrainedModel 代码实现进行了重构。
- 感谢 Meelfy 实现的 pytorch_pretrained_BERT,本实现完全基于 pytorch_pretrained_BERT 的源码。
- 感谢苏神的 insight 和无私分享:层次分解位置编码,让BERT可以处理超长文本。
- WoBERT: Word-based Chinese BERT model - ZhuiyiAI。