Hugging Face transformers库中beam_search()和group_beam_search()的区别是什么
beam_search()与group_beam_search()的核心差异 Hugging Face Transformers库中这两个方法确实共享一致的基础输入参数,都基于波束搜索逻辑生成序列,核心差异集中在波束组织逻辑、生成效果、适用场景等维度:
- 核心算法逻辑不同
普通beam_search()采用单组全局波束竞争机制:全程所有波束放在同一个池子里筛选,每一步只保留全局得分最高的num_beams个候选序列。group_beam_search()是Diverse Beam Search的官方实现:会把总波束拆分为num_beam_groups个互不重叠的独立小组,每个小组内部单独做波束筛选,组之间的候选不会互相竞争,最终从所有小组的最优结果中选择最终输出。 - 生成效果差异明显
普通beam_search()普遍存在生成内容重复、句式单一的问题,生成长文本时经常出现连续重复的短语、句子,多样性极差。
分组波束搜索通过多组独立探索不同的生成路径,大幅降低生成重复率,输出内容的多样性提升显著。 - 配置要求有细微区别
虽然二者公开参数整体兼容,但使用group_beam_search()时必须额外指定num_beam_groups参数,且该参数必须可以整除num_beams的取值,否则会触发参数校验错误;普通beam_search()不需要配置该参数。
补充说明:如果把num_beam_groups设置为1,group_beam_search()的运行逻辑和输出结果与普通beam_search()完全一致。 - 适用场景不同
普通beam_search()更适合对生成准确性要求高、不需要多样性的任务,比如机器翻译、结构化信息抽取生成、封闭域问答等。group_beam_search()更适合需要多样化输出的场景,比如创意文本生成、开放式问答、多轮对话生成、多候选摘要生成等。
内容的提问来源于stack exchange,提问作者dennlinger
相关产品推荐
相关产品推荐

