You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hugging Face文本生成模型(GALACTICA/OPT)出现重复文本的问题咨询

文本生成模型输出重复问题的解决方法

核心问题分析

你遇到的长文本重复问题,主要源于默认生成策略(贪心采样)易陷入局部最优,且缺少重复抑制参数,导致模型不断复用已生成内容。结合你测试的GALACTICA和OPT模型,可通过以下参数调整解决:

具体优化方案

  • 添加重复惩罚参数
    在model.generate()中加入repetition_penalty(建议值1.1-1.5),降低模型重复生成已有文本的概率。修改后的GALACTICA代码示例:

    from transformers import AutoTokenizer, OPTForCausalLM
    
    tokenizer = AutoTokenizer.from_pretrained("facebook/galactica-1.3b")
    model = OPTForCausalLM.from_pretrained("facebook/galactica-1.3b", device_map="auto")
    
    input_text = "The benefits of deadlifting\n\n"
    input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")
    
    outputs = model.generate(
        input_ids,
        new_doc=False,
        top_p=0.7,
        max_length=1000,
        repetition_penalty=1.2,  # 新增重复惩罚参数
        do_sample=True  # 开启采样模式,避免贪心采样的重复问题
    )
    print(tokenizer.decode(outputs[0]))
    
  • 启用采样策略并调整温度
    默认贪心采样(do_sample=False)会每次选择概率最高的token,极易引发重复。开启do_sample=True后,搭配temperature(建议值0.8-1.0)调整随机性,同时可结合top_k限制候选token范围。修改OPT模型的生成代码:

    from transformers import GPT2Tokenizer, OPTForCausalLM
    
    model = OPTForCausalLM.from_pretrained("facebook/opt-350m")
    tokenizer = GPT2Tokenizer.from_pretrained("facebook/opt-350m")
    
    prompt = "The benefits of deadlifting can be listed as below:"
    inputs = tokenizer(prompt, return_tensors="pt")
    
    # Generate
    generate_ids = model.generate(
        inputs.input_ids,
        max_length=800,
        do_sample=True,
        temperature=0.9,
        top_k=50,
        repetition_penalty=1.2
    )
    print(tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0])
    
  • 禁止重复n元组
    添加no_repeat_ngram_size=2(或3),让模型避免生成重复的2元/3元短语,从根源阻断短文本重复:

    outputs = model.generate(
        input_ids,
        new_doc=False,
        top_p=0.7,
        max_length=1000,
        no_repeat_ngram_size=2,
        do_sample=True
    )
    
  • 模型与prompt优化

    • 小参数模型(如OPT-350m)长文本生成能力有限,可尝试同系列更大参数模型(如OPT-1.3B);
    • 优化prompt结构,加入具体引导,比如将prompt改为:"The benefits of deadlifting include multiple aspects: 1. Muscular development: ",给模型明确的输出框架,减少重复概率。

内容的提问来源于stack exchange,提问作者Furkan Gözükara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:15:34