embedding训练集构建
请问一下,我想实现文本检索任务,对篇章数据已经做了切分(分片): 问题1:embedding微调数据的构造上,是对分片后的数据用大模型生成query,来构建训练集吗?我们再制作向量化微调的监督数据怎么做的,能给一些意见吗? 问题2:要不要加入项目之外的数据,比如加入一些我们训练的原始数据(MTP数据)? 问题3:有1000+条手工标注的项目数据(query和对应答案),为了提升数据量,可以用大模型对query相似问扩充吗?
- 可以使用大模型生成微调数据,但建议对生成的数据进行质量把控,过滤掉低质的数据。目前我们使用的是开源的数据进行微调的,如t2ranking, dul-retriever, mmarco, 没有使用大模型构造数据。
- 如果有和你们任务相似的数据,可以加进去,否则,不建议加。如果想保证原模型在通用领域的能力,可以使用LM-Cocktail:https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail, 融合原模型和微调后的模型即可,更加方便快捷,不需要加入原始数据进行训练。
- 可以试试效果。
谢谢大佬。再想问一下,微调embedding模型,现在原始数据用大模型构建训练集质量有限,手工整理的数据只有1000+,还想提升embedding微调后的能力,以及泛化能力,能给出一些好的建议吗?
1000条数据基本够微调一个模型了,进一步提升可以考虑生成更多的数据以及使用reranker进行蒸馏(https://github.com/staoxiao/RetroMAE/tree/master/examples/reranker#prediction-for-knowledge-distillation)。保持泛化能力可以通过混合微调前和微调后的模型:https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail
好的,谢谢大佬提供的建议
搭车问一个问题,微调数据集的格式为{"query": str, "pos": List[str], "neg":List[str]},下载了智源的训练bge embedding的数据集,如 {'query': '很差的一本书', 'pos': ['很差的一本书,内容空泛,有的章节还文不对题' ], 'neg': ['冲着这个牌子一贯的高颜值,在特价时入手一两个还是极好的,吸管杯大小合适一岁宝宝开始自己拿,不过不经摔和图案掉漆是硬伤,喜欢这个牌子的可以姑且买之,价格合适时推荐。亚马逊正品保真,送货快,比自己海淘方便划算', '偏大,不是很满意,中间那段还是类似松紧带。', '质量不错…不过还没上身试…不知道上身效果如何…', '好像是姚老师上课的讲稿,非常通俗生动,十分有趣,文科小白也觉得压力不大。我想所谓大家可能就是这样吧,做人深藏不露,叙事深入浅出,从不会没事儿抖个机灵、掉个书袋。', '鞋子穿了不到两周,鞋底的logo脱落,找售后说超过规定时间不退不换,跟亚瑟士官方联系,竟然我回复我不影响使用,不予退换,我日了狗了,你们嚣张,我就这里发发牢骚', '电镀漆的效果一般,做工质量粗糙程度一般而已', '申请了退货还发货,找不到联系人,以后还是不来买了', '砂比较细腻,不会伤到脸,用完以后脸滑滑的,还是不错的', '书从管理的多维度,对建筑建设过程中的管理,做了系统性的介绍。', '因为工作的需要购买的,书是正版。质量好,有需要教材的亲可以考虑购买。' ]},这里面有两个点不太明白,一是关于query,按照RAG场景下使用的情况,这个query应该是个问句,如“这本书怎么样?“,但在下载下来的数据集中,这个query是个陈述句;二是落地到具体某一个业务场景(如法律或其他等)的时候,这个微调数据集如何构建,业务场景的数据就是一大堆质量较好的文档,如何根据这些文档构建query、pos、neg,以微调模型学到场景的embedding?
搭车问一个问题,微调数据集的格式为{"query": str, "pos": List[str], "neg":List[str]},下载了智源的训练bge embedding的数据集,如 {'query': '很差的一本书', 'pos': ['很差的一本书,内容空泛,有的章节还文不对题' ], 'neg': ['冲着这个牌子一贯的高颜值,在特价时入手一两个还是极好的,吸管杯大小合适一岁宝宝开始自己拿,不过不经摔和图案掉漆是硬伤,喜欢这个牌子的可以姑且买之,价格合适时推荐。亚马逊正品保真,送货快,比自己海淘方便划算', '偏大,不是很满意,中间那段还是类似松紧带。', '质量不错…不过还没上身试…不知道上身效果如何…', '好像是姚老师上课的讲稿,非常通俗生动,十分有趣,文科小白也觉得压力不大。我想所谓大家可能就是这样吧,做人深藏不露,叙事深入浅出,从不会没事儿抖个机灵、掉个书袋。', '鞋子穿了不到两周,鞋底的logo脱落,找售后说超过规定时间不退不换,跟亚瑟士官方联系,竟然我回复我不影响使用,不予退换,我日了狗了,你们嚣张,我就这里发发牢骚', '电镀漆的效果一般,做工质量粗糙程度一般而已', '申请了退货还发货,找不到联系人,以后还是不来买了', '砂比较细腻,不会伤到脸,用完以后脸滑滑的,还是不错的', '书从管理的多维度,对建筑建设过程中的管理,做了系统性的介绍。', '因为工作的需要购买的,书是正版。质量好,有需要教材的亲可以考虑购买。' ]},这里面有两个点不太明白,一是关于query,按照RAG场景下使用的情况,这个query应该是个问句,如“这本书怎么样?“,但在下载下来的数据集中,这个query是个陈述句;二是落地到具体某一个业务场景(如法律或其他等)的时候,这个微调数据集如何构建,业务场景的数据就是一大堆质量较好的文档,如何根据这些文档构建query、pos、neg,以微调模型学到场景的embedding?
- MTP数据是我们根据规则从海量文本中构建出来的,比如说query是标题,pos是正文内容。
- 微调数据集应根据下游任务场景进行构建。如果有一大堆质量高的文档,可以使用大模型让他根据文档提一些问题,query是生成的问题,pos是相应的文档或者文档中相应的段落,neg可以随机选取或者挖掘难样本。
谢谢回答,请问有什么好的大模型(内网环境,ChatGPT除外)可以根据文章生成问题和答案吗?
谢谢回答,请问有什么好的大模型(内网环境,ChatGPT除外)可以根据文章生成问题和答案吗?
这块我们没有太多经验,可以在开源社区选几个模型试试。 开源社区有一些方案可以参考:https://docs.llamaindex.ai/en/stable/examples/finetuning/embeddings/finetune_embedding.html
这块我们没有太多经验,可以在开源社区选几个模型试试。 开源社区有一些方案可以参考:https://docs.llamaindex.ai/en/stable/examples/finetuning/embeddings/finetune_embedding.html 好的,谢谢大佬
谢谢回答,请问有什么好的大模型(内网环境,ChatGPT除外)可以根据文章生成问题和答案吗?
这块我们没有太多经验,可以在开源社区选几个模型试试。 开源社区有一些方案可以参考:https://docs.llamaindex.ai/en/stable/examples/finetuning/embeddings/finetune_embedding.html
请问一下bge的微调最大需要多大显存的显卡?支持多卡不?
支持多卡,设置--nproc_per_node为卡的数量即可。
显存与参数*max_length, train_group_size, per_device_train_batch_size有关。一般显卡都能跑通,如果不行,可以通过设置--fp16, --deepspeed ./df_config.json , --gradient_checkpointing来降低显存。具体参考https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/finetune#3-train
支持多卡,设置
--nproc_per_node为卡的数量即可。 显存与参数*max_length, train_group_size, per_device_train_batch_size有关。一般显卡都能跑通,如果不行,可以通过设置--fp16, --deepspeed ./df_config.json , --gradient_checkpointing来降低显存。具体参考https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/finetune#3-train
谢谢
我的文档中有一个短句A,我让大模型根据A扩写句子为B,然后A作为query,B作为pos是可以的吧?(有点反直觉,不知道这个操作会不会影响效果)
- 可以使用大模型生成微调数据,但建议对生成的数据进行质量把控,过滤掉低质的数据。目前我们使用的是开源的数据进行微调的,如t2ranking, dul-retriever, mmarco, 没有使用大模型构造数据。
- 如果有和你们任务相似的数据,可以加进去,否则,不建议加。如果想保证原模型在通用领域的能力,可以使用LM-Cocktail:https://github.com/FlagOpen/FlagEmbedding/tree/master/LM_Cocktail, 融合原模型和微调后的模型即可,更加方便快捷,不需要加入原始数据进行训练。
- 可以试试效果。
请问一下您,有没有调用本地的大模型生成数据集的脚本呀?调用openai得模型也行