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
764 stars 130 forks source link

数据集是否可以增加问题的id列 #81

Closed wenlincheng closed 1 year ago

wenlincheng commented 1 year ago

业务场景中一般都需要知道搜索出来的问题的id,以进行后续的处理,在导入数据集的时候是否可以增加一列用于存储问题的id

id_1\ttitle_1\tparagraph_1\n
id_2\ttitle_2\tparagraph_2\n
...
procedure2012 commented 1 year ago
  1. 训练和测试集的列数应该和demo提供的示例保持一致,否则需要修改代码才能运行程序。
  2. 如果修改代码到需要的列数(和默认列数不一样),文档和模型里提供的各种模型会因为模型结构改变而无法使用。
  3. 在不改动列数的情况下,提供的模型虽然可以成功加载但是因为对应列信息发生变化导致效果不好。

总结: 如果在训练时需要加入其他信息,最好保证列数和默认列数一样,并且利用自己的数据重新训练一个模型。否则需要改动代码。 如果新加入的信息不影响训练效果,可以单独用一个文件保存这个信息(保证和数据按行一一对应),在召回结果中/排序结果中保存行号,这样可以将这个信息补充回最终结果。

wenlincheng commented 1 year ago

单独用一个文件保存这个信息还是挺复杂的。在创建向量索引的阶段可以将id一起存在索引库里吗,这样在查找索引的阶段就可以把对应的id一起查出来

procedure2012 commented 1 year ago

RocketQA的代码提供了计算query和para向量和计算点积的部分,提供建库所需要的数据。example提供了使用Faiss、JINA、es进行建立索引的方法。当然,数据量小也可以自己做索引。

如果是自己搞索引可以自由实现这个功能,如果是使用Faiss之类的工具可能要看一下文档是不是支持。这个主要还是看建立索引的工具是不是支持这样的操作,RocketQA代码只提供到计算向量和点积为止,建库和查找是靠工具完成的。

但一般Faiss查找索引时支持返回行号作为标识,用行号对应保存其他信息的单独文件也不是很复杂。

wenlincheng commented 1 year ago

RocketQA的代码提供了计算query和para向量和计算点积的部分,提供建库所需要的数据。example提供了使用Faiss、JINA、es进行建立索引的方法。当然,数据量小也可以自己做索引。

如果是自己搞索引可以自由实现这个功能,如果是使用Faiss之类的工具可能要看一下文档是不是支持。这个主要还是看建立索引的工具是不是支持这样的操作,RocketQA代码只提供到计算向量和点积为止,建库和查找是靠工具完成的。

但一般Faiss查找索引时支持返回行号作为标识,用行号对应保存其他信息的单独文件也不是很复杂。

非常感谢详细的解答。我使用的是es,在建索引的阶段添加了id字段实现了这个需求。