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

使用预训练BART模型做文本摘要时遇IndexError报错的解决方法

解决BART模型处理长文档时的IndexError问题

这个报错的核心原因是你输入的文本token数量超过了philschmid/bart-large-cnn-samsum模型的最大输入长度限制——BART-large基础架构的最大输入token数为1024,当文本token化后长度超出这个阈值,模型内部的位置嵌入、注意力模块就会因索引越界抛出错误。

下面是几种可行的解决办法:

  • 直接截断输入
    调用pipeline时开启自动截断,并设置输入的最大token长度:

    summarizer = pipeline("summarization", model="philschmid/bart-large-cnn-samsum", truncation=True, max_length=1024)
    

    这里的max_length指的是输入的token数,不是字符数,模型会自动完成token截断操作。

  • 分段处理长文档
    要是不想截断文本丢失信息,可以把长文档拆成多个不超过模型最大输入长度的片段,分别生成摘要后再合并:

    def split_long_text(text, max_tokens=1024, tokenizer=None):
        tokens = tokenizer.encode(text)
        chunks = []
        for i in range(0, len(tokens), max_tokens):
            chunk_tokens = tokens[i:i+max_tokens]
            chunks.append(tokenizer.decode(chunk_tokens, skip_special_tokens=True))
        return chunks
    
    # 初始化流水线和分词器
    summarizer = pipeline("summarization", model="philschmid/bart-large-cnn-samsum")
    tokenizer = summarizer.tokenizer
    
    # 处理超长文本
    long_text = "你的超长文档内容..."
    text_chunks = split_long_text(long_text, tokenizer=tokenizer)
    chunk_summaries = [summarizer(chunk, max_length=150, min_length=30)[0]['summary_text'] for chunk in text_chunks]
    final_summary = " ".join(chunk_summaries)
    

    拆分时尽量按语义单元(比如段落、完整句子)分割,避免破坏上下文连贯性,保证摘要质量。

  • 换用长文本优化模型
    如果经常处理超长篇文档,可以替换为支持更长输入的模型,比如专门针对长文本训练的BART变体,这类模型的最大输入token数通常能达到2048甚至4096,从根源上避免长度限制问题。

内容的提问来源于stack exchange,提问作者Haris Jawed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:38:22