BERT生成元描述报错__call__()意外接收max_length关键字参数
错误产生原因
- 分词器类型不匹配警告是依赖版本不兼容导致:当前Colab环境默认安装的
transformers、summarizer库版本和教程编写时的版本存在差异,默认加载的BART模型对应的分词器类没有被正确识别,该警告不会直接造成程序崩溃。 - 触发运行终止的核心原因是参数传递错误:你使用的
Summarizers封装类的调用方法不接受max_length关键字参数,该参数不属于实例调用时的合法入参,因此抛出TypeError。另外你参考的教程使用的是抽取式BERT摘要器,本身就不支持通过max_length直接控制输出文本长度,这个参数是生成式Transformer模型pipeline的参数,和你当前调用的封装类接口不匹配。
修复步骤
- 首先在Colab笔记本最开头添加依赖安装命令,固定兼容的库版本,解决分词器警告,执行完后重启Colab运行时:
pip install bert-extractive-summarizer==0.10.1 transformers==4.26.0 sentencepiece --quiet
- 修改原有业务代码,调整参数传递逻辑,修正后的可运行代码如下:
from summarizer import Summarizer # 初始化摘要模型 model = Summarizer() # 抽取式摘要通过num_sentences控制输出句子数量,调整数值让最终输出长度在160字符左右即可 result = model(body, num_sentences=3) full = ''.join(result) print(full) # 将结果存入列表 metadesc.append(full) # 把结果写入DataFrame列 df['Meta Desc'] = metadesc # 导出csv时加上index=False避免生成多余的索引列 output = df.to_csv('output.csv', index=False)
- 补充说明:如果你要使用生成式BART模型做摘要、需要用
max_length严格控制输出长度,初始化模型时要把生成参数放在generation_kwargs配置里,示例如下:
from summarizer import Summarizer model = Summarizer( model="facebook/bart-large-cnn", tokenizer="facebook/bart-large-cnn", generation_kwargs={"max_length": 160, "min_length": 60, "no_repeat_ngram_size": 2} ) result = model(body) full = ''.join(result)
内容的提问来源于stack exchange,提问作者nybergan
相关产品推荐
相关产品推荐

