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

如何训练T5/BART等Seq2Seq模型实现单字符串转多字符串?

如何用T5/BART实现单字符串到字符串列表的Seq2Seq训练?

你遇到的错误本质是:Hugging Face的Tokenizer不支持直接传入二维字符串列表作为输入,它只能处理单文本序列或成对文本序列,所以才会抛出TypeError: TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]]。

要解决这个问题,核心思路是把二维的标签列表转换成Tokenizer能处理的单文本格式,后续解码时再拆分回列表,具体可以这么做:

方案1:用特殊分隔符拼接标签列表

这是最直接的方法,步骤如下:

  1. 选一个不会出现在标签文本里的特殊分隔符(比如自定义的###SPLIT###,或者模型自带的特殊token如T5的<sep>)
  2. 将每个样本的标签列表用分隔符拼接成单个字符串
  3. 正常用Tokenizer处理拼接后的标签文本
  4. 模型生成结果后,再用同样的分隔符拆分回列表

修改后的代码示例

tokenizer = AutoTokenizer.from_pretrained(args.model_name)

# 处理输入文本(保持原有逻辑)
encodings = tokenizer(texts, truncation=True, padding=True, return_tensors='pt')

# 处理标签:把二维列表转为单字符串
# 这里用自定义分隔符,也可以替换成模型自带的特殊token
SEPARATOR = "###SPLIT###"
labels_processed = [SEPARATOR.join(label_group) for label_group in labels]
decodings = tokenizer(labels_processed, truncation=True, padding=True, return_tensors='pt')

dataset_tokenized = Dataset(encodings, decodings)

避免拆分错误的注意事项

  • 确保分隔符绝对不会出现在训练数据的标签文本中,如果不确定,可以提前对标签文本中的分隔符做转义(比如把原文本中的###SPLIT###替换成###ESCAPED_SPLIT###,解码时再还原)
  • 优先使用模型预定义的特殊token(如T5的<extra_id_*>系列),这类token不会出现在自然文本中,拆分可靠性更高

方案2:利用模型原生的多输出支持(以T5为例)

T5本身支持用<extra_id_0>、<extra_id_1>这类特殊token来分隔多个输出项,比如把标签列表转为"<extra_id_0> 第一个标签 <extra_id_1> 第二个标签..."的格式,解码时通过识别这些特殊token来拆分列表,这种方式比自定义分隔符更适配模型的训练逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:10:49