diff --git a/models/recall/word2vec/README.md b/models/recall/word2vec/README.md index b91f8927e416499ce94c3393ca226c31908f234e..18c9a433d65b7db8d975f1f99e428928f346a3a0 100644 --- a/models/recall/word2vec/README.md +++ b/models/recall/word2vec/README.md @@ -4,13 +4,13 @@ ``` ├── data #样例数据 - ├── train + ├── train ├── convert_sample.txt - ├── test + ├── test ├── sample.txt - ├── dict + ├── dict ├── word_count_dict.txt - ├── word_id_dict.txt + ├── word_id_dict.txt ├── preprocess.py # 数据预处理文件 ├── __init__.py ├── README.md # 文档 @@ -61,7 +61,13 @@ 预测:单机CPU;配置请参考[PaddleRec 离线预测](https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/predict.md) ## 数据处理 -本示例中数据处理共包含三步: +为和样例数据路径区分,全量训练数据、测试数据、词表文件会依次保存在data/all_train, data/all_test, data/all_dict文件夹中。 +``` +mkdir -p data/all_dict +mkdir -p data/all_train +mkdir -p data/all_test +``` +本示例中全量数据处理共包含三步: - Step1: 数据下载。 ``` # 全量训练集 @@ -98,16 +104,12 @@ ``` 第三步,为更好地利用多线程进行训练加速,我们需要将训练文件分成多个子文件,默认拆分成1024个文件,文件保存在data/train目录下。 ``` - rm -rf data/train/* - python preprocess.py --data_resplit --input_corpus_dir=raw_data/convert_text8 --output_corpus_dir=data/train + python preprocess.py --data_resplit --input_corpus_dir=raw_data/convert_text8 --output_corpus_dir=data/all_train ``` -- Step3: 数据整理。 将训练文件统一放在data/train目录下,测试文件统一放在data/test目录下,词典相关文件放在data/dict目录下。 +- Step3: 路径整理。 ``` - rm -rf data/test/* - mv raw_data/data/test_dir/* data/test/ - - mv raw_data/word_count_dict.txt data/dict/ - mv raw_data/word_id_dict.txt data/dict/ + mv raw_data/word_count_dict.txt data/all_dict/ + mv raw_data/word_count_dict.txt_word_to_id_ data/all_dict/word_id_dict.txt rm -rf raw_data ``` 方便起见, 我们提供了一键式数据处理脚本: @@ -173,14 +175,15 @@ PaddleRec预测配置: print_interval: 1 phases: [phase2] ``` -为复现论文效果,我们提供了一个自定义预测脚本,自定义预测中,我们会跳过预测结果是输入A,B,C的情况,计算预测准确率。执行命令如下: + +为复现论文效果,我们提供了一个自定义预测脚本,自定义预测中,我们会跳过预测结果是输入A,B,C的情况,然后计算预测准确率。执行命令如下: ``` python infer.py --test_dir ./data/test --dict_path ./data/dict/word_id_dict.txt --batch_size 20000 --model_dir ./increment_w2v/ --start_index 0 --last_index 5 --emb_size 300 ``` ### 运行 ``` -python -m paddlerec.run -m paddlerec.models.recall.w2v +python -m paddlerec.run -m paddlerec.models.recall.word2vec ``` ### 结果展示 @@ -217,16 +220,28 @@ Infer phase2 of epoch 3 done, use time: 4.43099021912, global metrics: acc=[1.] ## 论文复现 -用原论文的完整数据复现论文效果需要在config.yaml修改超参: -- batch_size: 修改config.yaml中dataset_train数据集的batch_size为100。 -- epochs: 修改config.yaml中runner的epochs为5。 +1. 用原论文的完整数据复现论文效果需要在config.yaml修改超参: +- name: dataset_train + batch_size: 100 # 1. 修改batch_size为100 + type: DataLoader + data_path: "{workspace}/data/all_train" # 2. 修改数据为全量训练数据 + word_count_dict_path: "{workspace}/data/all_dict/ word_count_dict.txt" # 3. 修改词表为全量词表 + data_converter: "{workspace}/w2v_reader.py" + +- name: single_cpu_train + - epochs: # 4. 修改config.yaml中runner的epochs为5。 修改后运行方案:修改config.yaml中的'workspace'为config.yaml的目录位置,执行 ``` python -m paddlerec.run -m /home/your/dir/config.yaml #调试模式 直接指定本地config的绝对路径 ``` -使用cpu训练5轮,自定义测试(跳过输入)准确率为0.540。 +2. 使用自定义预测程序预测全量测试集: +``` +python infer.py --test_dir ./data/all_test --dict_path ./data/all_dict/word_id_dict.txt --batch_size 20000 --model_dir ./increment_w2v/ --start_index 0 --last_index 5 --emb_size 300 +``` + +结论:使用cpu训练5轮,自定义预测准确率为0.540,每轮训练时间7小时左右。 ## 进阶使用 ## FAQ diff --git a/models/recall/word2vec/data_prepare.sh b/models/recall/word2vec/data_prepare.sh index 6ca2e7f2df8d10fcc5c84b42f7de7929b6b9d0da..29e33ed20aaf1eb12602ca92be81e8d1a408eac9 100644 --- a/models/recall/word2vec/data_prepare.sh +++ b/models/recall/word2vec/data_prepare.sh @@ -14,25 +14,26 @@ # See the License for the specific language governing permissions and # limitations under the License. +mkdir -p data/all_dict +mkdir -p data/all_train +mkdir -p data/all_test # download train_data mkdir raw_data -wget --no-check-certificate https://paddlerec.bj.bcebos.com/word2vec/1-billion-word-language-modeling-benchmark-r13output.tar +#wget --no-check-certificate https://paddlerec.bj.bcebos.com/word2vec/1-billion-word-language-modeling-benchmark-r13output.tar tar xvf 1-billion-word-language-modeling-benchmark-r13output.tar mv 1-billion-word-language-modeling-benchmark-r13output/training-monolingual.tokenized.shuffled/ raw_data/ +# download test data +#wget --no-check-certificate https://paddlerec.bj.bcebos.com/word2vec/test_dir.tar +tar xzvf test_dir.tar -C raw_data +mv raw_data/data/test_dir/* data/all_test/ + # preprocess data python preprocess.py --build_dict --build_dict_corpus_dir raw_data/training-monolingual.tokenized.shuffled --dict_path raw_data/word_count_dict.txt python preprocess.py --filter_corpus --dict_path raw_data/word_count_dict.txt --input_corpus_dir raw_data/training-monolingual.tokenized.shuffled --output_corpus_dir raw_data/convert_text8 --min_count 5 --downsample 0.001 -mv raw_data/word_count_dict.txt data/dict/ -mv raw_data/word_count_dict.txt_word_to_id_ data/dict/word_id_dict.txt +python preprocess.py --data_resplit --input_corpus_dir=raw_data/convert_text8 --output_corpus_dir=data/all_train -rm -rf data/train/* -rm -rf data/test/* -python preprocess.py --data_resplit --input_corpus_dir=raw_data/convert_text8 --output_corpus_dir=data/train - -# download test data -wget --no-check-certificate https://paddlerec.bj.bcebos.com/word2vec/test_dir.tar -tar xzvf test_dir.tar -C raw_data -mv raw_data/data/test_dir/* data/test/ +mv raw_data/word_count_dict.txt data/all_dict/ +mv raw_data/word_count_dict.txt_word_to_id_ data/all_dict/word_id_dict.txt rm -rf raw_data