FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

关于llm产生的teacher score的疑问

Open YCaigogogo opened this issue 2 years ago • 11 comments

作者您好,关于llm teacher score,有个问题想请问下:

  1. 请问产生数据集中的这些llm score大概需要在何种计算设备上运行多长时间呢。

YCaigogogo avatar Dec 13 '23 16:12 YCaigogogo

Hi,msmarco大约有40w条查询,每个查询要给200个candidate评分,因此是80M个打分操作,我们使用8xA100(40G)大概花费了15h。可以适当调小candidate的数量。

namespace-Pt avatar Dec 15 '23 02:12 namespace-Pt

谢谢回复,我注意到论文里面说只有“conversational search and tool learning datasets”没有使用llm score,但我看到代码实现中run_lm_score.py 支持“qa” "convsearch" "lrlm" "chat"四种任务的score的构建,这似乎与论文有些矛盾?还是我理解错误了。以及您的回复只涉及了msmarco,是说其他的task不需要构建llm score嘛

YCaigogogo avatar Dec 15 '23 17:12 YCaigogogo

代码支持给convsearch生成llm score,但我们最后没用,因为convsearch上answer比较长,可能llm score没那么准,用score效果甚至不如只用标签。别的task也需要(qa,chat,lrlm,icl),msmarco只是个例子,用于你推断打分时间。

namespace-Pt avatar Dec 15 '23 17:12 namespace-Pt

hello,谢谢回复,我还有三个地方没有太理解,可能是我的理解有些偏差,想请问一下:

  1. 您说convsearch上次你们并没有用llm score,但论文中的table 4中“w.o. LLM Reward”的实验结果为0.4945,低于加上LLM Reward的实验结果0.5053,文中的意思似乎是使用了LLM Reward会更好
  2. 我看到代码中data.py文件中各task的training setting中只有qa和icl默认打开了stable_distill,但论文中table4的结果看起来除了tool分发task之外,stable_distill均能提升模型的性能,所以想问下是否需要对qa和icl以外的其他任务使用stable_distill
  3. 想请问下实验中各task的reward temperature以及训练中的超参数等是如何确定的呢。

YCaigogogo avatar Dec 17 '23 08:12 YCaigogogo

hi,

  1. 因为我们是multi-task training,因此convsearch任务可能受到别的任务的影响,使其在w.o. LLM Reward时其效果低于w. LLM Reward,但两行结果我们都没有在convsearch上使用LLM Reward;
  2. 我们默认只在qa和icl上使用了,因为chat和lrlm不存在一个共享的corpus,因此in-batch negative是没有意义的,从而降低了stabilize_distill的有效性(其能够将distillation loss转化为一系列对比学习loss的加权平均,而对比学习强烈依赖于inbatch negative)但是在chat和lrlm上我们设置了teacher_temperature=0.1, 这也在一定程度上缓解了teacher_scores分布太平均的问题
  3. 我们follow了Replugteacher_temperature设置为0.1;如果设置为1效果会较差。

namespace-Pt avatar Dec 17 '23 10:12 namespace-Pt

谢谢回复!想请问下能否提供run_lm_score.py处理之前的数据集文件呢,我观察到如lrlm任务中的样本的score_inputs会被del掉,导致再次运行run_lm_scores.py时会出现如下报错: File "/data/yic/FlagEmbedding-master/FlagEmbedding/llm_embedder/run_lm_score.py", line 98, in _process score_input = score_inputs[i] TypeError: 'NoneType' object is not subscriptable

YCaigogogo avatar Dec 18 '23 06:12 YCaigogogo

我们这也没存打分前的文件 :disappointed_relieved: 你可以自己生成一份,思路如下:

  1. 确定chunk_size(一个chunk多少token)和candidate_num(从多少个candidate chunk中检索)
  2. 将长文本编码成input_ids并按照chunk_size分块,截取连续的candidate_num+2
  3. 最后一个chunk是answer_inputs,倒数第二个是query_inputs,剩下的都是score_inputs
  4. context_inputs设为空列表即可

namespace-Pt avatar Dec 18 '23 12:12 namespace-Pt

好的,lrlm在构建llm的inputs有使用template吗,还是直接按照{score_inputs}{query_inputs}{answer_inputs}的格式拼接在一起的?

YCaigogogo avatar Dec 18 '23 13:12 YCaigogogo

代码里有写,三个都是input_ids列表,直接拼起来。

namespace-Pt avatar Dec 18 '23 13:12 namespace-Pt

@namespace-Pt 您好,关于llm teacher score,我注意到Retrieve Anything To Augment Large Language Models论文中Eq (1)是直接将logit value相乘,而在代码中是调用modeling_lm.py中LM类的compute_nlls来计算的,最终的分数是cross entropy loss取负号,想问一下这样的做法相比于直接将logit value相乘得到的分数对性能有什么区别和影响?

duyc168 avatar May 15 '24 03:05 duyc168

@duyc168 hi, crossentropy就是把概率相乘变成了log概率相加,本质上没有区别。没有试过直接用概率做蒸馏

namespace-Pt avatar May 16 '24 07:05 namespace-Pt