README.md 4.9 KB
Newer Older
Z
Zeyu Chen 已提交
1 2
# Word Embedding with PaddleNLP

3
## 简介
Z
Zeyu Chen 已提交
4

J
Jack Zhou 已提交
5
PaddleNLP已预置多个公开的预训练Embedding,用户可以通过使用`paddlenlp.embeddings.TokenEmbedding`接口加载预训练Embedding,从而提升训练效果。以下通过文本分类训练的例子展示`paddlenlp.embeddings.TokenEmbedding`对训练提升的效果。
6 7 8 9 10 11 12 13 14 15 16 17


## 快速开始

### 安装说明

* PaddlePaddle 安装

   本项目依赖于 PaddlePaddle 2.0 及以上版本,请参考 [安装指南](http://www.paddlepaddle.org/#quick-start) 进行安装

* 环境依赖

J
Jack Zhou 已提交
18 19
   - python >= 3.6
   - paddlepaddle-gpu >= 2.0.0-rc1
20

J
Jack Zhou 已提交
21 22 23
   ```
   pip install paddlenlp==2.0.0b
   ```
24 25 26 27 28 29 30 31 32 33 34

### 下载词表

下载词汇表文件dict.txt,用于构造词-id映射关系。

```bash
wget https://paddlenlp.bj.bcebos.com/data/dict.txt
```

### 启动训练

J
Jack Zhou 已提交
35
我们以中文情感分类公开数据集ChnSentiCorp为示例数据集,可以运行下面的命令,在训练集(train.tsv)上进行模型训练,并在验证集(dev.tsv)验证。
36 37 38 39

CPU 启动:

```
J
Jack Zhou 已提交
40 41
# 使用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'
42

J
Jack Zhou 已提交
43 44
# 使用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'
45 46 47 48 49 50
```

GPU 启动:
```
export CUDA_VISIBLE_DEVICES=0

J
Jack Zhou 已提交
51 52
# 使用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'
53

J
Jack Zhou 已提交
54 55
# 使用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'
56 57 58 59 60
```

以上参数表示:

* `vocab_path`: 词汇表文件路径。
61
* `use_gpu`: 是否使用GPU进行训练, 默认为`True`
62 63 64
* `lr`: 学习率, 默认为5e-4。
* `batch_size`: 运行一个batch大小,默认为64。
* `epochs`: 训练轮次,默认为5。
J
Jack Zhou 已提交
65
* `use_token_embedding`: 是否使用`paddlenlp.embeddings.TokenEmbedding`,默认为True。
66 67 68 69 70 71 72 73 74 75 76 77 78
* `vdl_dir`: VisualDL日志目录。训练过程中的VisualDL信息会在该目录下保存。默认为`./vdl_dir`

该脚本还提供以下参数:

* `save_dir`: 模型保存目录。
* `init_from_ckpt`: 恢复模型训练的断点路径。
* `embedding_name`: 预训练Embedding名称,默认为`w2v.baidu_encyclopedia.target.word-word.dim300`. 支持的预训练Embedding可参考[Embedding 模型汇总](../../docs/embeddings.md)

### 启动VisualDL

推荐使用VisualDL查看实验对比。以下为VisualDL的启动命令,其中logdir参数指定的目录需要与启动训练时指定的`vdl_dir`相同。(更多VisualDL的用法,可参考[VisualDL使用指南](https://github.com/PaddlePaddle/VisualDL#2-launch-panel)

```
J
Jack Zhou 已提交
79
visualdl --logdir ./vdl_dir --port 8888 --host 0.0.0.0
80 81 82 83 84 85
```

### 训练效果对比

在Chrome浏览器输入 `ip:8888` (ip为启动VisualDL机器的IP)。

J
Jack Zhou 已提交
86
以下为示例实验效果对比图,蓝色是使用`paddlenlp.embeddings.TokenEmbedding`进行的实验,绿色是使用没有加载预训练模型的Embedding进行的实验。可以看到,使用`paddlenlp.embeddings.TokenEmbedding`的训练,其验证acc变化趋势上升,并收敛于0.90左右,收敛后相对平稳,不容易过拟合。而没有使用`paddlenlp.embeddings.TokenEmbedding`的训练,其验证acc变化趋势向下,并收敛于0.86左右。从示例实验可以观察到,使用`paddlenlp.embedding.TokenEmbedding`能提升训练效果。
87 88 89

Eval Acc:

90
![eval acc](https://user-images.githubusercontent.com/16698950/102076935-79ac5480-3e43-11eb-81f8-6e509c394fbf.png)
91

92 93 94 95
|                                     |    Best Acc    |
| ------------------------------------| -------------  |
| paddle.nn.Embedding                 |    0.8965      |
| paddelnlp.embeddings.TokenEmbedding |    0.9082      |
W
wawltor 已提交
96 97

## 致谢
J
Jack Zhou 已提交
98
- 感谢 [Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供Word2Vec中文Embedding预训练模型,[GloVe Project](https://nlp.stanford.edu/projects/glove)提供的GloVe英文Embedding预训练模型,[FastText Project](https://fasttext.cc/docs/en/english-vectors.html)提供的fasttext英文预训练模型。
99 100 101 102

## 参考论文
- 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.
J
Jack Zhou 已提交
103 104
- 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