0

我在 1 分 25 秒关注此视频中的代码,其中显示:

def tokenize_and_chunk(texts):
  return tokenizer(
    texts["text"], truncation=True, max_length=context_length,
    return overflowing_tokens=True
  )

tokenized_datasets = raw_datasets.map(
  tokenize_and_chunk, batched=True, remove_columns=["text"]
)

这是我尝试运行此代码时遇到的错误:

model_name = "t5-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

context_length = 1000

def tokenize_and_chunk(texts):
    return tokenizer(
      texts["text"], truncation=True, max_length=context_length,
      return_overflowing_tokens=True,
  )

dataset = Dataset.from_pandas(pd.DataFrame([{"id": "123", "text": "Here are many words! "*5000}]))  

显示一个精细的数据集:

Dataset({
    features: ['id', 'text'],
    num_rows: 1
})

好的,让我们运行分词器:

toknized_datasets = dataset.map(tokenize_and_chunk, batched=True, remove_columns=["text"])

 0%
0/1 [00:00<?, ?ba/s]

---------------------------------------------------------------------------
ArrowInvalid                              Traceback (most recent call last)
<ipython-input-69-d1216744e2ab> in <module>
----> 1 toknized_datasets = dataset.map(tokenize_and_chunk, batched=True, remove_columns=["text"])

ArrowInvalid: Column 1 named id expected length 5 but got length 1
4

1 回答 1

1

您的数据集不仅包含“文本”列,还包含“id”列。
删除列“id”并运行地图功能 - 现在一切正常。

此外,在您的视频教程中。
如果您使用“imdb”数据集(在第 48 秒)查看他的示例,那么他将删除列“label”,只留下他的数据集一列“text”。

编辑
要使您的数据集在将其传递给地图函数之前不删除“id”的情况下工作,您必须更改remove_columns=["text"]remove_columns=["id", "text"]

于 2022-01-21T21:44:02.973 回答