gpt4 book ai didi

tensorflow - 通过 Huggingface 标记器映射文本数据

转载 作者:行者123 更新时间:2023-12-04 12:10:17 27 4
gpt4 key购买 nike

我的编码功能如下所示:

from transformers import BertTokenizer, BertModel

MODEL = 'bert-base-multilingual-uncased'
tokenizer = BertTokenizer.from_pretrained(MODEL)

def encode(texts, tokenizer=tokenizer, maxlen=10):
# import pdb; pdb.set_trace()
inputs = tokenizer.encode_plus(
texts,
return_tensors='tf',
return_attention_masks=True,
return_token_type_ids=True,
pad_to_max_length=True,
max_length=maxlen
)

return inputs['input_ids'], inputs["token_type_ids"], inputs["attention_mask"]

我想通过这样做来即时编码我的数据:

x_train = (tf.data.Dataset.from_tensor_slices(df_train.comment_text.astype(str).values)
.map(encode))

但是,这会导致错误:
ValueError: Input is not valid. Should be a string, a list/tuple of strings or a list/tuple of integers.

现在根据我在 encode 中设置断点时的理解那是因为我正在发送一个非 numpy 数组。我如何让 Huggingface Transformers 以 tensorflow 字符串作为输入很好地发挥作用?

如果您需要一个虚拟数据框,它是:
df_train = pd.DataFrame({'comment_text': ['Today was a good day']*5})

我试过的

所以我尝试使用 from_generator这样我就可以将字符串解析为 encode_plus功能。但是,这不适用于 TPU。

AUTO = tf.data.experimental.AUTOTUNE

def get_gen(df):
def gen():
for i in range(len(df)):
yield encode(df.loc[i, 'comment_text']) , df.loc[i, 'toxic']
return gen

shapes = ((tf.TensorShape([maxlen]), tf.TensorShape([maxlen]), tf.TensorShape([maxlen])), tf.TensorShape([]))

train_dataset = tf.data.Dataset.from_generator(
get_gen(df_train),
((tf.int32, tf.int32, tf.int32), tf.int32),
shapes
)
train_dataset = train_dataset.batch(BATCH_SIZE).prefetch(AUTO)

版本信息:
transformers.__version__, tf.__version__ => ('2.7.0', '2.1.0')

最佳答案

bert 的分词器处理字符串、字符串列表/元组或整数列表/元组。因此,请检查您的数据是否已转换为字符串。为了在整个数据集上应用分词器,我使用了 Dataset.map,但这在图形模式下运行。所以,我需要将它包装在一个 tf.py_function 中。 tf.py_function 将常规张量(带有一个值和一个 .numpy() 方法来访问它)传递给包装的 python 函数。使用 py_function 后,我的数据被转换为字节,因此我应用 tf.compat.as_str 将字节转换为字符串。

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
def encode(lang1, lang2):
lang1 = tokenizer.encode(tf.compat.as_str(lang1.numpy()), add_special_tokens=True)
lang2 = tokenizer.encode(tf.compat.as_str(lang2.numpy()), add_special_tokens=True)
return lang1, lang2
def tf_encode(pt, en):
result_pt, result_en = tf.py_function(func = encode, inp = [pt, en], Tout=[tf.int64, tf.int64])
result_pt.set_shape([None])
result_en.set_shape([None])
return result_pt, result_en
train_dataset = dataset3.map(tf_encode)
BUFFER_SIZE = 200
BATCH_SIZE = 64

train_dataset = train_dataset.shuffle(BUFFER_SIZE).padded_batch(BATCH_SIZE,
padded_shapes=(60, 60))
a,p = next(iter(train_dataset))

关于tensorflow - 通过 Huggingface 标记器映射文本数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61555097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com