解决ValueError: too many values to unpack (expected 2)

报错: ValueError: too many values to unpack (expected 2)

复现RGCL 模型,遇到的问题,该代码里面报错原因是: collate_fn 里的 tokens 是多层嵌套列表 (每个样本是分词后的 token 列表,batch 打包后变成 [[token1,token2...], [xxx]]),但旧版 transformers(3.1.0)在 is_pretokenized=True 时内部解包逻辑不兼容,或者数据里混入了非法空样本、维度错乱。

解决方案

原 collate_fn:

复制代码
def collate_fn(data):
    u, i, r, tokens = zip(*data)
    encoding = bert_tokenizer(tokens, return_tensors='pt', padding=True,
                              truncation=True, is_pretokenized=True)
    return torch.Tensor(u), torch.Tensor(i), torch.Tensor(r), \
        encoding['input_ids'], encoding['attention_mask']

改成下面版本,去掉 is_pretokenized=True,改用字符串拼接 / 直接传原文本,彻底规避解包 bug:

复制代码
def collate_fn(data):
    u, i, r, token_lists = zip(*data)
    # 把分词列表还原成字符串,不用is_pretokenized
    text_list = [" ".join(toks) for toks in token_lists]
    encoding = bert_tokenizer(text_list, 
                             return_tensors='pt', 
                             padding=True,
                             truncation=True,
                             max_length=args.review_max_length)
    return torch.Tensor(u), torch.Tensor(i), torch.Tensor(r), \
        encoding['input_ids'], encoding['attention_mask']

infact,在修改代码之前,我还多次尝试改变transformers的版本但是还是报一样的错误,可能是没有改到正好可以用的那个版本。(ps.之前跑自己的模型也遇到过版本问题,修改transformers的版本就重新运行了)

完整报错:

复制代码
(base) root@autodl-container-6d25459816-01b42b10:~/Work/ReviewGraph-main/BERT# python bert_whitening.py

libgomp: Invalid value for environment variable OMP_NUM_THREADS
2026-07-06 00:23:43 - Load_Data - Start reading data to pandas.
Clean string: 100%|███████████████████████████████████████████████████████████████████████| 963441/963441 [01:36<00:00, 9971.91it/s]
Delete unused words: 100%|██████████████████████████████████████████████████████████████| 963441/963441 [00:08<00:00, 107299.97it/s]
2026-07-06 00:25:55 - Load_Data - Truncate review length to 56 words
Delete unused words: 100%|██████████████████████████████████████████████████████████████| 963441/963441 [00:03<00:00, 255554.45it/s]
check data split: 770753it [00:33, 23069.12it/s]
/root/Work/ReviewGraph-main/BERT/../load_data.py:190: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
  train_data = train_data.append([valid_data.loc[valid_drop_user_data_index],
pre tokenize: 100%|███████████████████████████████████████████████████████████████████████| 973763/973763 [09:04<00:00, 1789.32it/s]
  0%|                                                                                                      | 0/7608 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "bert_whitening.py", line 175, in <module>
    save_sentence_feat(args)
  File "/root/miniconda3/lib/python3.8/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
    return func(*args, **kwargs)
  File "bert_whitening.py", line 149, in save_sentence_feat
    for u, i, r, input_ids, mask in tqdm(data_loader):
  File "/root/miniconda3/lib/python3.8/site-packages/tqdm/std.py", line 1185, in __iter__
    for obj in iterable:
  File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 530, in __next__
    data = self._next_data()
  File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 570, in _next_data
    data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
  File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 52, in fetch
    return self.collate_fn(data)
  File "bert_whitening.py", line 100, in collate_fn
    encoding = bert_tokenizer(tokens, return_tensors='pt', padding=True,
  File "/root/miniconda3/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 3021, in __call__
    encodings = self._call_one(text=text, text_pair=text_pair, **all_kwargs)
  File "/root/miniconda3/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 3109, in _call_one
    return self.batch_encode_plus(
  File "/root/miniconda3/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 3311, in batch_encode_plus
    return self._batch_encode_plus(
  File "/root/miniconda3/lib/python3.8/site-packages/transformers/tokenization_utils.py", line 886, in _batch_encode_plus
    ids, pair_ids = ids_or_pair_ids
ValueError: too many values to unpack (expected 2)
相关推荐
天南散修5 分钟前
《802.11-2024》第06讲 · 介质接入:MAC 架构与 DCF(CSMA/CA)
linux·网络·wifi·802.11
Axis tech8 分钟前
Xsens&Manus全身数据采集解决方案,用精确数据训练您的具身智能
人工智能·科技·机器人
cpolar技术支持10 分钟前
磁盘明明没满,服务却写不进去?做个 inode 与分区占用只读报表页,cpolar 给异地同事看
linux·内网穿透·cpolar·inode·运维排障
2601_9556624612 分钟前
1300多种音色怎么挑?不同短视频场景的配音思路
人工智能·音视频
qq_252941316817 分钟前
多模态屋顶损伤与杂物检测数据集 | 屋顶检测 多模态 红外可见光 建筑巡检 目标检测9232期
人工智能·深度学习·yolo·目标检测·计算机视觉·屋顶
java1234_小锋20 分钟前
Arthas 4 宣布正式拥抱 AI
人工智能
TomEval24 分钟前
【测AI】第17篇:大模型评测方法论 —— LLM 怎么测?
人工智能·python·aigc·测试用例
2601_9656196924 分钟前
新闻数据可视化视频:AI自动生成图表动画的完整流程
人工智能·信息可视化·音视频
志尊宝28 分钟前
AI原生前端开发(018):端侧AI性能优化:模型加载、推理加速
人工智能·性能优化·ai-native
renhongxia128 分钟前
RAG检索增强生成:打通大模型与外部知识的通道
大数据·人工智能·算法