HuggingFace 🤗 造福大家已经不是第一次了,前不久放出预处理工具 Tokenizers,然后写了篇博客,让预训练模型彻底成了傻瓜式。
自己试用了一下,就简单的把这部分抽了出来。
地址:https://github.com/andy-yangz/easy_bert_pretrain
顺便写写使用感想。
主要是将之前 Transformers 库里面关于 Tokenizer 的一些代码直接抽出来,加上训练各种 Tokenize 策略的代码,然后用 Rust 语言实现了一下。
现在还处于开发的早期,使用过程中还是会碰到一些问题。
主要包含的 Tokenizer 有:
ByteLevelBPETokenizer,字节级别的 BPE (Byte Pair Encoding) 训练和 tokenize,facebook 那几个预训练模型比如 Roberta 就用的这个,应对多语言比较方便;
CharBPETokenizer,比字节高一个级别,字级别的 BPE,其实就是最经典 Sennrich 教授用的那个,subword-nmt;
SentencePieceTokenizer,现在越来越搞不清这些命名之间的关系了,不过看代码应该是在 BPE 过程之前加了一个 pretokenization 过程,先对文本进行预处理再 BPE;
BertWordPieceTokenizer,应该就是基于 unigram language model 那篇论文来做的。
关于详细的字词算法,可以参考我这篇:子词技巧:The Tricks of Subword
Tokenizers 库速度非常快!
这个就不用多说了,各种方便,最近对预训练脚本也给了更好的 example,直接用里面的 run_language_modeling.py
就行。
pipeline 功能感觉还处于开发阶段,一些功能没有完善,比如说我调自己的模型就总出问题。
文档里面有,差不多就是,安装好
tokenizers==0.5.0
transformers==2.5.0
然后准备好数据,设置好参数先跑 tokenize 脚本,之后直接跑训练脚本。
So easy!妈妈再也不用担心我的预训练了(妈妈:我本来也没担心过)。
推荐阅读
大幅减少GPU显存占用:可逆残差网络(The Reversible Residual Network)
AINLP-DBC GPU 云服务器租用平台建立,价格足够便宜
我们建了一个免费的知识星球:AINLP芝麻街,欢迎来玩,期待一个高质量的NLP问答社区
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。