PaddlePaddle / RocketQA

🚀 RocketQA, dense retrieval for information retrieval and question answering, including both Chinese and English state-of-the-art models.
Apache License 2.0
767 stars 128 forks source link

data question #57

Open dzp17 opened 2 years ago

dzp17 commented 2 years ago

自定义数据集,送入到dual_encoder以及cross_encoder的数据集是一样的吗?

dzp17 commented 2 years ago

请问数据集的格式是quire para(正例) para(负例) 0 是这样的格式吗

procedure2012 commented 2 years ago

dual_encoder的数据格式:query \t title \t para \t title \t para \t 0 (没有空格)第一组title para是正例,第二组是负例 cross_encoder的数据格式:query \t title \t para \t label (没有空格)

dzp17 commented 2 years ago

dual_encoder的数据格式:query \t title \t para \t title \t para \t 0 (没有空格)第一组title para是正例,第二组是负例 cross_encoder的数据格式:query \t title \t para \t label (没有空格)

您好,可是rocketqa那里的示例里提供的数据集是query\ttitle\tpara\tlabel啊 有点懵了

procedure2012 commented 2 years ago

能说的详细点吗?具体是哪个文件?

dzp17 commented 2 years ago

Rocketqa中的examples中的data,example.py文件里就是用的这个data啊 我想用这个dual_encoder做召回再用cross_encoder做精排的

procedure2012 commented 2 years ago

examples/data这个文件夹里dual.train.tsv和cross.train.tsv这两个文件分别是dual_encoder和cross_encoder的训练文件,里面的格式就是我刚刚提到的。

dzp17 commented 2 years ago

哦哦 好的 我看错了 不好意思 dual_encodr后面的那个0是固定的吗,cross_encoder的就是label 就是取query\ttitle\tpara label 1代表正例,0代表负例吗 然后 训练完,将召回的top50的每一段话与问题做匹配得到最大的得分就是匹配结果了吗? dual_encoder与corss_encoder的数据集内容都是一样的 只是格式不同吗

procedure2012 commented 2 years ago
  1. 对的,0是固定占位用的
  2. 对的,1是正例0是负例
  3. dual和cross 都训练完后,先用dual encoder快速召回topK个title+para(K一般是100,你可以根据自己情况上下调整);然后将q和topK中的title+para合并成上述qtp的格式用精排打完分后重新排序就是最终端到端的检索排序结果(此时的top1就是得分最高的匹配结果)。
  4. example/data里的数据只是100条demo,最好用自己的训练数据或者直接使用已经训练好的模型。cross encoder和dual encoder训练数据可以一样也可以不一样,这个要看具体情况。
dzp17 commented 2 years ago

好的,谢谢 明白了

dzp17 commented 2 years ago

您好,还有一个问题 没有title用什么字符代替呢

procedure2012 commented 2 years ago

可以用“-”或者直接“”,这个影响不大

dzp17 commented 2 years ago

您好,我跑了自定义数据集,跑完是只有一个ce_en_models吗,里面只有step,将config.json文件里的model填这个吗

procedure2012 commented 2 years ago

对,ce_en_models里面就是在不同的step时保存的权重,将config文件里对应的位置改成step的名字就可以(压缩包要解压才可以加载权重)

dzp17 commented 2 years ago

很不对啊 自己训练的权重得到的dot值都是1e-8数量级,比用zh_dureader_ce的0.8差太远了 有点懵了

xyzkk3 commented 1 year ago
  1. 对的,0是固定占位用的
  2. 对的,1是正例0是负例
  3. dual和cross 都训练完后,先用dual encoder快速召回topK个title+para(K一般是100,你可以根据自己情况上下调整);然后将q和topK中的title+para合并成上述qtp的格式用精排打完分后重新排序就是最终端到端的检索排序结果(此时的top1就是得分最高的匹配结果)。
  4. example/data里的数据只是100条demo,最好用自己的训练数据或者直接使用已经训练好的模型。cross encoder和dual encoder训练数据可以一样也可以不一样,这个要看具体情况。

dualencoder的训练数据为什么有负例语料,是起到啥作用,求教下

zhangpeng-HEBUT commented 1 year ago

dual_encoder的数据格式:query \t title \t para \t title \t para \t 0 (没有空格)第一组title para是正例,第二组是负例 cross_encoder的数据格式:query \t title \t para \t label (没有空格)

您好,请问一下PAIR模型中的预训练数据和微调数据是否也是这种格式呢?