搜索
您的当前位置:首页正文

RAG之微调垂域BGE的经验之谈【总结】

来源:榕意旅游网

RAG之微调垂域BGE的经验之谈

1、数据集格式

2、对于微调数据的构造

Method 1

bge基础模型向量化数据

对每个query召回top10

计算top10的重排得分  #重排得分的计算方法是?Bge-reranker-large

#关于重排参考文章:

两两计算query、answer、target_query、target_answer的bge_cos-sim、jacard 相似性系数、lcs、编辑距离

使用重排得分、bge相似度、jacard相似度系数等数值组合,筛选出训练的数据

Query targetquery Answer targetanswer

writer.writerow(["query", "answer", "target_query", "target_answer", "rerank_score",

      "query_tgt_query_bge_cos", "query_tgt_query_lcs_score", "query_tgt_query_edit_dist", "query_tgt_query_jaccard",

      "answer_tgt_query_bge_cos", "answer_tgt_query_lcs_score", "answer_tgt_query_edit_dist", "answer_tgt_query_jaccard",

      "query_tgt_answer_bge_cos", "query_tgt_answer_lcs_score", "query_tgt_answer_edit_dist", "query_tgt_answer_jaccard",

      "answer_tgt_answer_bge_cos", "answer_tgt_answer_lcs_score", "answer_tgt_answer_edit_dist", "answer_tgt_answer_jaccard"

       ])

Method 2

使用bge基础模型向量化数据

对每个query召回top100

过滤出0.4到0.7的数据作为负样本/或者从range_for_sampling范围内随机抽样

注:负样本的构造是用以上两种方法生成。

正样本的构造 

LLM根据段落生成问答对,query是生成的问题,passage是给定的段落,如此构成一个正例对。LLM生成的数据过滤下来后,不到1w条

Prompt:

    prompt = f"""

'''

{paragraph}

'''

请你从以上文献段落中抽取问答对, 务必严格遵守以下要求:抽取出来的问题和答案必须包含主语谓语宾语, 不得出现 本研究、本实验 等指代不明的词语, 请确保抽取出的问题必须能在原文中找到答案, 返回结果的格式请严格按照'''中的格式

'''

[

    {{

        "问题": "问题1内容",

        "回答": "问题1的答案"

    }},

    {{

        "问题": "问题2内容",

        "回答": "问题2的答案"

    }},

    {{

        "问题": "问题3内容",

        "回答": "问题3的答案"

    }}

]

'''

"""       

3、训练参数

Batch_size要大(结合gradient_accumulation_steps使用),否则小的batch_size训练过程中loss非常陡,效果很差

4、可改进的地方

用训练好的向量模型去构造困难样例,再去训练基座模型,是否效果会更好

将负样本从阈值区间采样,改为取相对来说更相近的前TopK个

参考文章:

因篇幅问题不能全部显示,请点此查看更多更全内容

Top