LLM合成数据notes

MoDS

使用reward-model-deberta-v3-large-v2奖励模型对QA对打分筛选高质量QA,再使用bert计算句子相似度使用kCenterGreedy选取多样性指令,再进行微调,微调后对LLM结果进行筛选低分,再补充表现不佳的数据进行SFT。
ps:看任务,我自己用reward-model-deberta-v3-large-v2测的分数感觉不行,做不了筛选。

magpie
由于LLM自回归训练所以能够自动生成用户输入,添加左侧模版,输入LLM自动生成指令,再将生成的指令输入LLM(本地/调用api)获得输出。使用guard_model_path=“meta-llama/Meta-Llama-Guard-2-8B”,reward_model_path=“sfairXC/FsfairX-LLaMA3-RM-v0.1"等调用api对生成数据进行安全性、奖励、质量、难度等打分,再筛选符合要求的数据。使用SentenceTransformer(all-mpnet-base-v2)构建Faiss索引,然后对每个文本搜索最近的k个邻居,计算余弦距离来判断相似度进行去重。
使用model = ArmoRMPipeline(“RLHFlow/ArmoRM-Llama3-8B-v0.1”, trust_remote_code=True, device_map=f"cuda:{args.device}”)对指令的回复进行打分。

<|begin_of_text|><|start_header_id|>user<|end_header_id|>

多轮对话

"mt_append_template": "<|start_header_id|>user<|end_header_id|>\n\n",
mt_system_prompt = "You are a helpful Al assistant. The user will engage in a multi-round conversation with you, asking initial questions and following up with additional related questions. Your goal is to provide thorough,relevant and insightful responses to help the user with their queries."
print(f"Generating responses for turn {turn}...")
prompts = []
for item in batch:
    if not args.tokenizer_template:
        conv = get_conversation_template(MODEL_NAME)
        if turn == 2:
            conv.append_message(conv.roles[0], item[f'instruction'])
            conv.append_message(conv.roles[1], item[f'response'])
        else:
            conv.append_message(conv.roles[0], item[f'instruction'])
            conv.append_message(conv.roles[1], item[f'response'])
            for i in range(2, turn):
                conv.append_message(conv.roles[0], item[f'instruction_{i}'])
                conv.append_message(conv.roles[1], item[f'response_{i}'])
        conv.append_message(conv.roles[0], item[f'instruction_{turn}'])
        conv.append_message(conv.roles[1], None)
        template = conv.get_prompt()
    else:
        chat = []
        if turn == 2:
            chat.append({"role": "user", "content": item[f'instruction']})
            chat.append({"role": "assistant", "content": item[f'response']})
        else:
            chat.append({"role": "user", "content": item[f'instruction']})
            chat.append({"role": "assistant", "content": item[f'response']})
            for i in range(2, turn):
                chat.append({"role": "user", "content": item[f'instruction_{i}']})
                chat.append({"role": "assistant", "content": item[f'response_{i}']})
        chat.append({"role": "user", "content": item[f'instruction_{turn}']})
        template = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
    prompts.append(template)
outputs = llm.generate(prompts, response_params)
for i, item in enumerate(batch):
    item[f'response_{turn}'] = outputs[i].outputs[0].text.strip()

self-instruct
从175条种子任务(每条带有一个instruct和一条示例)使用LLM进行指令生成,根据是否是分类任务进行区分,对生成的instruct生成回复,再进行过滤筛选。每个instruction随机取五个实例,再随机去掉字段前缀,提高模型泛化能力。使用集合去重(prompt, completion)对,再随机打乱。

使用RougeL分数去重

RichRAG:使用RAG增强,具体还没细看 存个档

DataGen:待补

deita:
复杂性、质量性、多样性


Q:实际使用中怎么保证LLM生成数据的多样性?
A:提高temperature,多样化的指令。

数据集质量评估指标
ppl、gpt4得分、ifd、datainf、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值