README.cn.md 3.2 KB
Newer Older
Q
Qiao Longfei 已提交
1

Q
Qiao Longfei 已提交
2
# 基于skip-gram的word2vector模型
Q
Qiao Longfei 已提交
3 4

## 介绍
Q
Qiao Longfei 已提交
5

Q
Qiao Longfei 已提交
6 7

## 运行环境
Q
Qiao Longfei 已提交
8
需要先安装PaddlePaddle Fluid
Q
Qiao Longfei 已提交
9 10

## 数据集
11
数据集使用的是来自1 Billion Word Language Model Benchmark的(http://www.statmt.org/lm-benchmark)的数据集.
Q
Qiao Longfei 已提交
12 13 14 15 16 17 18

下载数据集:
```bash
cd data && ./download.sh && cd ..
```

## 模型
Q
Qiao Longfei 已提交
19
本例子实现了一个skip-gram模式的word2vector模型。
Q
Qiao Longfei 已提交
20 21 22


## 数据准备
Q
Qiao Longfei 已提交
23 24 25
对数据进行预处理以生成一个词典。

```bash
26
python preprocess.py --data_path ./data/1-billion-word-language-modeling-benchmark-r13output/training-monolingual.tokenized.shuffled --dict_path data/1-billion_dict --is_local
Q
Qiao Longfei 已提交
27
```
J
JiabinYang 已提交
28 29 30 31 32 33 34 35
如果您想使用自定义的词典形如:
```bash
<UNK>
a
b
c
```
请将--other_dict_path设置为您存放将使用的词典的目录,并设置--with_other_dict使用它
Q
Qiao Longfei 已提交
36 37 38 39 40

## 训练
训练的命令行选项可以通过`python train.py -h`列出。

### 单机训练:
Q
Qiao Longfei 已提交
41

Q
Qiao Longfei 已提交
42
```bash
J
JiabinYang 已提交
43
export CPU_NUM=1
Q
Qiao Longfei 已提交
44
python train.py \
J
JiabinYang 已提交
45 46
        --train_data_path ./data/1-billion-word-language-modeling-benchmark-r13output/training-monolingual.tokenized.shuffled \
        --dict_path data/1-billion_dict \
J
JiabinYang 已提交
47
        --with_hs --with_nce --is_local \
Q
Qiao Longfei 已提交
48 49
        2>&1 | tee train.log
```
J
JiabinYang 已提交
50 51 52 53 54 55 56 57
如果您想使用自定义的词典形如:
```bash
<UNK>
a
b
c
```
请将--other_dict_path设置为您存放将使用的词典的目录,并设置--with_other_dict使用它
Q
Qiao Longfei 已提交
58 59 60 61 62 63 64 65 66 67

### 分布式训练

本地启动一个2 trainer 2 pserver的分布式训练任务,分布式场景下训练数据会按照trainer的id进行切分,保证trainer之间的训练数据不会重叠,提高训练效率

```bash
sh cluster_train.sh
```

## 预测
J
JiabinYang 已提交
68 69
在infer.py中我们在`build_test_case`方法中构造了一些test case来评估word embeding的效果:
我们输入test case( 我们目前采用的是analogical-reasoning的任务:找到A - B = C - D的结构,为此我们计算A - B + D,通过cosine距离找最近的C,计算准确率要去除候选中出现A、B、D的候选 )然后计算候选和整个embeding中所有词的余弦相似度,并且取topK(K由参数 --rank_num确定,默认为4)打印出来。
Q
Qiao Longfei 已提交
70

J
JiabinYang 已提交
71 72 73 74 75 76
如:
对于:boy - girl + aunt = uncle  
0 nearest aunt:0.89
1 nearest uncle:0.70
2 nearest grandmother:0.67
3 nearest father:0.64
Q
Qiao Longfei 已提交
77

J
JiabinYang 已提交
78 79
您也可以在`build_test_case`方法中模仿给出的例子增加自己的测试

80 81 82 83 84
要从测试文件运行测试用例,请将测试文件下载到“test”目录中
我们为每个案例提供以下结构的测试:
        `word1 word2 word3 word4`
所以我们可以将它构建成`word1  -  word2 + word3 = word4`

J
JiabinYang 已提交
85 86 87 88 89 90 91 92 93 94
训练中预测:

```bash
python infer.py --infer_during_train 2>&1 | tee infer.log
```
使用某个model进行离线预测:

```bash
python infer.py --infer_once --model_output_dir ./models/[具体的models文件目录] 2>&1 | tee infer.log
```
Q
Qiao Longfei 已提交
95 96 97 98 99
## 在百度云上运行集群训练
1. 参考文档 [在百度云上启动Fluid分布式训练](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/user_guides/howto/training/train_on_baidu_cloud_cn.rst) 在百度云上部署一个CPU集群。
1. 用preprocess.py处理训练数据生成train.txt。
1. 将train.txt切分成集群机器份,放到每台机器上。
1. 用上面的 `分布式训练` 中的命令行启动分布式训练任务.