# **BERT** ## 论文 `BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding` [BERT论文pdf地址](https://arxiv.org/pdf/1810.04805.pdf) ## 模型结构 ``` BERT的全称为Bidirectional Encoder Representation from Transformers,是一个预训练的语言表征模型。它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼接的方法进行预训练,而是采用新的masked language model(MLM),以致能生成深度的双向语言表征。 ``` ![bert_model](bert_model.png) ## 算法原理 ![bert](bert.png) ``` BERT并没有采用整个的Transformer结构(Encoder+Decoder),仅仅使用了Transformer结构里的Encoder部分,BERT将多层的Encoder搭建一起组成了它的基本网络结构。 ``` ## 环境配置 `注意dtk python torch apex 等版本要对齐` ### Docker(方式一) ``` docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10 进入docker安装没有的依赖 docker run -dit --network=host --name=bert-pytorch --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G -v /opt/hyhal:/opt/hyhal:ro --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10 docker exec -it bert-pytorch /bin/bash pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com #tensorflow安装包参考conda方式下载地址,tensorflow安装包在光合社区中下载 wget https://cancon.hpccube.com:65024/directlink/4/tensorflow/DAS1.1/tensorflow-2.13.1+das1.1.git56b06c8.abi1.dtk2404-cp310-cp310-manylinux_2_31_x86_64.whl pip install tensorflow-2.13.1+das1.1.git56b06c8.abi1.dtk2404-cp310-cp310-manylinux_2_31_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### Dockerfile(方式二) ``` docker build -t bert:latest . docker run -dit --network=host --name=bert-pytorch --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G -v /opt/hyhal:/opt/hyhal:ro --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 bert:latest docker exec -it bert-pytorch /bin/bash #tensorflow安装包参考conda方式下载地址 pip install tensorflow-2.13.1+das1.1.git56b06c8.abi1.dtk2404-cp310-cp310-manylinux_2_31_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### Conda(方式三) ``` #创建虚拟环境 conda create -n bert-pytorch python=3.10 ``` 关于本项目DCU显卡所需的工具包、深度学习库等均可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。 [apex](https://cancon.hpccube.com:65024/directlink/4/apex/DAS1.1/apex-1.1.0+das1.1.gitf477a3a.abi1.dtk2404.torch2.1.0-cp310-cp310-manylinux_2_31_x86_64.whl) [pytorch2.1.0](https://cancon.hpccube.com:65024/directlink/4/pytorch/DAS1.1/torch-2.1.0+das1.1.git3ac1bdd.abi1.dtk2404-cp310-cp310-manylinux_2_31_x86_64.whl) [tensorflow2.13.1](https://cancon.hpccube.com:65024/directlink/4/tensorflow/DAS1.1/tensorflow-2.13.1+das1.1.git56b06c8.abi1.dtk2404-cp310-cp310-manylinux_2_31_x86_64.whl) [DTK24.04.1](https://cancon.hpccube.com:65024/directlink/1/DTK-24.04.1/Ubuntu20.04.1/DTK-24.04.1-Ubuntu20.04.1-x86_64.tar.gz) 其它依赖库参照requirements.txt安装: ``` pip install -r requirements.txt ``` ## 数据集 pre_train 数据,本项目使用的是wiki20220401的数据,但数据集压缩后近20GB,解压后300GB下载速度慢,解压占大量空间。由于wiki数据集经常更新,官网并不保留旧版数据集,这里提供处理好的seq128和seq512的数据集网盘下载链接。 (seq128对应PHRASE1)链接:https://pan.baidu.com/s/13GA-Jmfr2qXrChjiM2UfFQ?pwd=l30u 提取码:l30u (seq512对应PHRASE2)链接:https://pan.baidu.com/s/1MBFjYNsGQzlnc8aEb7Pg4w?pwd=6ap2 提取码:6ap2 这里使用服务器已有的wiki数据集服务器上有已经下载处理好的数据,预训练数据分为PHRASE1、PHRASE2 `wiki数据集结构` ``` ──wikicorpus_en │   ├── training │    ├── wikicorpus_en_training_0.tfrecord.hdf5 │    ├── wikicorpus_en_training_1000.tfrecord.hdf5 │ └── ... │   └── test │    ├── wikicorpus_en_test_99.tfrecord.hdf5 │    ├── wikicorpus_en_test_9.tfrecord.hdf5 │ └── ... ``` ``` #wiki数据集下载与处理示例 cd cleanup_scripts mkdir -p wiki cd wiki wget https://dumps.wikimedia.org/enwiki/20200101/enwiki-20200101-pages-articles-multistream.xml.bz2 # Optionally use curl instead bzip2 -d enwiki-20200101-pages-articles-multistream.xml.bz2 cd .. # back to bert/cleanup_scripts git clone https://github.com/attardi/wikiextractor.git python3 wikiextractor/WikiExtractor.py wiki/enwiki-20200101-pages-articles-multistream.xml # Results are placed in bert/cleanup_scripts/text ./process_wiki.sh '