否可直接使用bge-m3的dense和sparse用于检索任务
您好,请教两个问题: 1.是否可以不微调而直接对文档库使用bge-m3进行embeding,将dense和sparse导入milvus用于检索任务(没有正例和负例样本) 2. 我发现获取的sparse向量的维度是跟句子分词后的长度是对应的(我理解sparse向量类似于词袋模型 ,维度应该是vocab的维度),这就是说不同的句子sparse的维度是不同的?
- 可以,bge是通用基础模型。
- 完整的稀疏向量维度是一致的。例子https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/BGE_M3#generate-embedding-for-text中获取的是一个dict,其中是包含的token以及对应的的权重,相当于系数向量中有值的部分(其他部分都是0)。
好的,非常感谢!再问两个问题啊: 1.使用sparse向量进行检索的话是否需要将句子中的停用词和标点等无用标识去掉,以提高检索的准确性? 2.是否支持并开源无监督版的对比学习训练代码?
- 不需要,训练的时候也没有去处停用词。但手动去除的话可能可以提高效果,这块我们也没有尝试过
- 无监督版/半监督的对比学习训练代码和有监督是一样的,参考https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/finetune, 只是数据是通过固定的方式进行构造的(如标题-正文),而不是人工标注数据。
奥奥,非常感谢! 最近又发现了几个问题,可否帮忙看下啊? 目前的需求是对相似文章的段落做内容召回,将bge-m3输出的sparse+稠密向量导入milvus使用混合检索以及基于倒数排序融合(RRF): 1.检索结果中的distance此时等同于分数吗,就是distance越大,相似度越高? 2.需对召回结果设置一个阈值,这个阈值的话该怎样设置(distance比较低且都比较接近)? 3.返回的top3中,distance似乎都不高,而且很奇怪的是(1)top1和top2的内容不同,但distance相同, (2)top2和top3的内容相同,但distance不同。 4.rerank的无监督版本的微调,是否可以参照embeding的策略 “标题-正文” ?
同问,这个阈值多少合适。