README.cn.md 2.6 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
Q
Qiao Longfei 已提交
27
```
Q
Qiao Longfei 已提交
28 29 30 31 32

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

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

Q
Qiao Longfei 已提交
34 35
```bash
python train.py \
J
JiabinYang 已提交
36 37
        --train_data_path ./data/1-billion-word-language-modeling-benchmark-r13output/training-monolingual.tokenized.shuffled \
        --dict_path data/1-billion_dict \
Q
Qiao Longfei 已提交
38 39 40 41 42 43 44 45 46 47 48 49
        2>&1 | tee train.log
```

### 分布式训练

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

```bash
sh cluster_train.sh
```

## 预测
J
JiabinYang 已提交
50 51
在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 已提交
52

J
JiabinYang 已提交
53 54 55 56 57 58
如:
对于: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 已提交
59

J
JiabinYang 已提交
60 61 62 63 64 65 66 67 68 69 70 71
您也可以在`build_test_case`方法中模仿给出的例子增加自己的测试

训练中预测:

```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 已提交
72 73 74 75 76
## 在百度云上运行集群训练
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. 用上面的 `分布式训练` 中的命令行启动分布式训练任务.