Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00

130 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gradient Cache 策略 [DPR](https://arxiv.org/abs/2004.04906)
### 实验结果
`Gradient Cache` 的实验结果如下,使用的评估指标是`Accuracy`
| DPR method | TOP-5 | TOP-10 | TOP-50| 说明 |
| :-----: | :----: | :----: | :----: | :---- |
| Gradient_cache | 68.1 | 79.4| 86.2 | DPR 结合 GC 策略训练
| GC_Batch_size_512 | 67.3 | 79.6| 86.3| DPR 结合 GC 策略训练,且 batch_size 设置为512|
实验对应的超参数如下:
| Hyper Parameter | batch_size| learning_rate| warmup_steps| epoches| chunk_size|max_grad_norm |
| :----: | :----: | :----: | :----: | :---: | :----: | :----: |
| \ | 128/512| 2e-05 | 1237 | 40 | 2| 16/8 |
## 数据准备
我们使用 Dense Passage Retrieval 的[原始仓库](https://github.com/Elvisambition/DPR)
中提供的数据集进行训练和评估。可以使用[download_data.py](https://github.com/Elvisambition/DPR/blob/main/dpr/data/download_data.py)
脚本下载所需数据集。 数据集详细介绍见[原仓库](https://github.com/Elvisambition/DPR) 。
### 数据格式
```
[
{
"question": "....",
"answers": ["...", "...", "..."],
"positive_ctxs": [{
"title": "...",
"text": "...."
}],
"negative_ctxs": ["..."],
"hard_negative_ctxs": ["..."]
},
...
]
```
### 数据下载
在[原始仓库](https://github.com/Elvisambition/DPR)
下使用命令
```
python data/download_data.py --resource data.wikipedia_split.psgs_w100
python data/download_data.py --resource data.retriever.nq
python data/download_data.py --resource data.retriever.qas.nq
```
### 单独下载链接
[data.retriever.nq-train](https://dl.fbaipublicfiles.com/dpr/data/retriever/biencoder-nq-train.json.gz)
[data.retriever.nq-dev](https://dl.fbaipublicfiles.com/dpr/data/retriever/biencoder-nq-dev.json.gz)
[data.retriever.qas.nq-dev](https://dl.fbaipublicfiles.com/dpr/data/retriever/nq-dev.qa.csv)
[data.retriever.qas.nq-test](https://dl.fbaipublicfiles.com/dpr/data/retriever/nq-test.qa.csv)
[data.retriever.qas.nq-train](https://dl.fbaipublicfiles.com/dpr/data/retriever/nq-train.qa.csv)
[psgs_w100.tsv](https://dl.fbaipublicfiles.com/dpr/wikipedia_split/psgs_w100.tsv.gz)
## 代码结构及说明
```
|—— train_gradient_cache_DPR.py # gradient_cache实现dense passage retrieval训练脚本
|—— train_gradient_cache.py # gradient_cache算法简单实现
|—— NQdataset.py # NQ数据集封装
|—— generate_dense_embeddings.py # 生成文本的稠密表示
|—— faiss_indexer.py # faiss相关indexer封装
|—— dense_retriever.py # 召回,指标检测
|—— qa_validation.py # 相关计算匹配函数
|—— tokenizers.py # tokenizer封装
```
## 模型训练
### 基于 [Dense Passage Retriever](https://arxiv.org/abs/2004.04906) 策略训练
```
python train_gradient_cache_DPR.py \
--batch_size 128 \
--learning_rate 2e-05 \
--save_dir save_biencoder
--warmup_steps 1237 \
--epoches 40 \
--max_grad_norm 2 \
--train_data_path ./dataset_dir/biencoder-nq-train.json \
--chunk_size 16 \
```
参数含义说明
* `batch_size`: 批次大小
* `learning_rate`: 学习率
* `save_dir`: 模型保存位置
* `warmupsteps`: 预热学习率参数
* `epoches`: 训练批次大小
* `max_grad_norm`: 详见 ClipGradByGlobalNorm
* `train_data_path`: 训练数据存放地址
* `chunk_size`: chunk 的大小
## 生成文章稠密向量表示
```
python generate_dense_embeddings.py \
--ctx_file ./dataset_dir/psgs_w100.tsv \
--out_file test_generate \
--que_model_path ./save_dir/question_model_40 \
--con_model_path ./save_dir/context_model_40
```
参数含义说明
* `ctx_file`: ctx 文件读取地址
* `out_file`: 生成后的文件输出地址
* `que_model_path`: question model path
* `con_model_path` context model path
## 针对全部文档的检索器验证
```
python dense_retriever.py --hnsw_index \
--out_file out_file \
--encoded_ctx_file ./test_generate \
--ctx_file ./dataset_dir/psgs_w100.tsv \
--qa_file ./dataset_dir/nq.qa.csv \
--que_model_path ./save_dir/question_model_40 \
--con_model_path ./save_dir/context_model_40
```
参数含义说明
* `hnsw_index`:使用 hnsw_index
* `outfile`: 输出文件地址
* `encoded_ctx_file`: 编码后的 ctx 文件
* `ctx_file`: ctx 文件
* `qa_file` qa_file 文件
* `que_model_path`: question encoder model
* `con_model_path`: context encoder model