PaddleNLP已预置多个公开的预训练Embedding,用户可以通过使用paddlenlp.embeddings.TokenEmbedding
接口加载预训练Embedding,从而提升训练效果。以下通过文本分类训练的例子展示paddlenlp.embeddings.TokenEmbedding
对训练提升的效果。
-
PaddlePaddle 安装
本项目依赖于 PaddlePaddle 2.0 及以上版本,请参考 安装指南 进行安装
-
环境依赖
- python >= 3.6
- paddlepaddle-gpu >= 2.0.0-rc1
pip install paddlenlp==2.0.0b
下载词汇表文件dict.txt,用于构造词-id映射关系。
wget https://paddlenlp.bj.bcebos.com/data/dict.txt
我们以中文情感分类公开数据集ChnSentiCorp为示例数据集,可以运行下面的命令,在训练集(train.tsv)上进行模型训练,并在验证集(dev.tsv)验证。
CPU 启动:
# 使用paddlenlp.embeddings.TokenEmbedding
python train.py --vocab_path='./dict.txt' --use_gpu=False --lr=5e-4 --batch_size=64 --epochs=20 --use_token_embedding=True --vdl_dir='./vdl_dir'
# 使用paddle.nn.Embedding
python train.py --vocab_path='./dict.txt' --use_gpu=False --lr=1e-4 --batch_size=64 --epochs=20 --use_token_embedding=False --vdl_dir='./vdl_dir'
GPU 启动:
export CUDA_VISIBLE_DEVICES=0
# 使用paddlenlp.embeddings.TokenEmbedding
python train.py --vocab_path='./dict.txt' --use_gpu=True --lr=5e-4 --batch_size=64 --epochs=20 --use_token_embedding=True --vdl_dir='./vdl_dir'
# 使用paddle.nn.Embedding
python train.py --vocab_path='./dict.txt' --use_gpu=True --lr=1e-4 --batch_size=64 --epochs=20 --use_token_embedding=False --vdl_dir='./vdl_dir'
以上参数表示:
vocab_path
: 词汇表文件路径。use_gpu
: 是否使用GPU进行训练, 默认为True
。lr
: 学习率, 默认为5e-4。batch_size
: 运行一个batch大小,默认为64。epochs
: 训练轮次,默认为5。use_token_embedding
: 是否使用paddlenlp.embeddings.TokenEmbedding
,默认为True。vdl_dir
: VisualDL日志目录。训练过程中的VisualDL信息会在该目录下保存。默认为./vdl_dir
该脚本还提供以下参数:
save_dir
: 模型保存目录。init_from_ckpt
: 恢复模型训练的断点路径。embedding_name
: 预训练Embedding名称,默认为w2v.baidu_encyclopedia.target.word-word.dim300
. 支持的预训练Embedding可参考Embedding 模型汇总。
推荐使用VisualDL查看实验对比。以下为VisualDL的启动命令,其中logdir参数指定的目录需要与启动训练时指定的vdl_dir
相同。(更多VisualDL的用法,可参考VisualDL使用指南)
visualdl --logdir ./vdl_dir --port 8888 --host 0.0.0.0
在Chrome浏览器输入 ip:8888
(ip为启动VisualDL机器的IP)。
以下为示例实验效果对比图,蓝色是使用paddlenlp.embeddings.TokenEmbedding
进行的实验,绿色是使用没有加载预训练模型的Embedding进行的实验。可以看到,使用paddlenlp.embeddings.TokenEmbedding
的训练,其验证acc变化趋势上升,并收敛于0.90左右,收敛后相对平稳,不容易过拟合。而没有使用paddlenlp.embeddings.TokenEmbedding
的训练,其验证acc变化趋势向下,并收敛于0.86左右。从示例实验可以观察到,使用paddlenlp.embedding.TokenEmbedding
能提升训练效果。
Eval Acc:
Best Acc | |
---|---|
paddle.nn.Embedding | 0.8965 |
paddelnlp.embeddings.TokenEmbedding | 0.9082 |
- 感谢 Chinese-Word-Vectors提供Word2Vec中文Embedding预训练模型,GloVe Project提供的GloVe英文Embedding预训练模型,FastText Project提供的fasttext英文预训练模型。
- Li, Shen, et al. "Analogical reasoning on chinese morphological and semantic relations." arXiv preprint arXiv:1805.06504 (2018).
- Qiu, Yuanyuan, et al. "Revisiting correlations between intrinsic and extrinsic evaluations of word embeddings." Chinese Computational Linguistics and Natural Language Processing Based on Naturally Annotated Big Data. Springer, Cham, 2018. 209-221.
- Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation.
- T. Mikolov, E. Grave, P. Bojanowski, C. Puhrsch, A. Joulin. Advances in Pre-Training Distributed Word Representations