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

使用Hugging Face对DataFrame文本分词后列值为空的解决方法

问题原因与解决方案

你的代码核心问题是:tokenizer处理文本列表后返回的是字典结构(包含input_ids、attention_mask等键,每个键对应一个长度等于样本数的列表),而pandas无法直接将这种字典赋值给单个列,导致生成的Tokenized_Text列无法正确加载数据,表现为空值。

修正方案

方案1:提取分词后的原始tokens存入列

如果你需要的是可读的分词文本列表,可以这样修改代码:

import pandas as pd
from transformers import AutoTokenizer

df = pd.read_csv('subject_messages.csv')
# 先处理可能的空文本,避免分词报错
df["Message"] = df["Message"].fillna("")

model_ckpt = "dccuchile/bert-base-spanish-wwm-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)

# 批量分词并提取tokens
tokenized_output = tokenizer(df["Message"].to_list(), padding=False, truncation=True)
# 将每个样本的input_ids解码为tokens
df["Tokenized_Text"] = [tokenizer.decode(ids, skip_special_tokens=True).split() for ids in tokenized_output["input_ids"]]

df.to_csv("tokenized_telegram_messages.csv", index=False)

方案2:保留完整分词输出(拆分多列)

如果需要保留tokenizer输出的全部信息(比如input_ids、attention_mask),可以将字典的每个键转为单独的列:

import pandas as pd
from transformers import AutoTokenizer

df = pd.read_csv('subject_messages.csv')
df["Message"] = df["Message"].fillna("")

model_ckpt = "dccuchile/bert-base-spanish-wwm-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)

tokenized_output = tokenizer(df["Message"].to_list(), padding=False, truncation=True)
# 将字典的每个键转为DataFrame的列
for key, value in tokenized_output.items():
    df[key] = value

df.to_csv("tokenized_telegram_messages.csv", index=False)

额外注意事项

  • 必须处理DataFrame中的空文本(用fillna("")),否则分词器遇到NaN会抛出异常,间接导致列值异常。
  • 加上padding=False和truncation=True可以避免因文本长度不一致导致的批量处理问题,确保每个样本的分词结果独立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:09:56