Xing Yiran

Results 30 comments of Xing Yiran

matching返回的分数是query和para的CLS向量表示点乘的结果,可以直接表示query和para的相关性。归一化取决于后续打算怎么用这个分数,有什么详细使用场景吗?

dual encoder得到的分数可以看作对“query和passage是否匹配”的二分类问题的打分,可以试试在得到返回分数后过一个sigmoid映射到0-1之间。

抱歉,之前说的有点不准确…… dual encoder的分数是q和tp [CLS]的内积,主要是用来对同一个q下的不同passage进行排序。不同的q下分数的大小也不同,只有排序结果才是相关性的反应。不太好用阈值和分数来确定q和passage的相关性(不像cross_encoder的分数是qtp放在一起打的分数,本身就用来表示相关性)。 如果一定要用这个分数表示相关性,可以尝试把训练时候的内积改为cosine形式,这样输出分数就在0~1之间,然后再观察一下分数在不同q下的分布看看能不能找到一个统一的阈值。 可以参考:https://github.com/PaddlePaddle/RocketQA/blob/c1f65374e9f8ae2c2e21a223d04bb53a348f1215/rocketqa/model/dual_encoder_train.py#L116

目前还不支持多个cpu,不过新版本我们已经在开发了,会尽快发布。

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

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

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

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训练数据可以一样也可以不一样,这个要看具体情况。

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

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