Keras 3 API 文档 / KerasNLP / 分词器 / 字节分词器

字节分词器

[源代码]

ByteTokenizer

keras_nlp.tokenizers.ByteTokenizer(
    lowercase=True,
    sequence_length=None,
    normalization_form=None,
    errors="replace",
    replacement_char=65533,
    dtype="int32",
    **kwargs
)

原始字节分词器。

此分词器是一个无词表的 tokenizer,它将文本作为来自 [0, 256) 的原始字节进行分词。

分词器的输出可以是使用 sequence_length 参数进行填充和截断,也可以是不进行截断。 确切的输出将取决于输入张量的秩。

如果输入是字符串批次:默认情况下,该层将输出一个 tf.RaggedTensor,其中输出的最后一维是不规则的。 如果设置了 sequence_length,该层将输出一个密集的 tf.Tensor,其中所有输入都已填充或截断到 sequence_length

如果输入是标量字符串:这里有两种情况。 如果设置了 sequence_length,输出将是一个密集的 tf.Tensor,形状为 [sequence_length]。 否则,输出将是一个密集的 tf.Tensor,形状为 [None]

输出数据类型可以通过 dtype 参数进行控制,该参数应为整数类型(“int16”、“int32”等)。

参数

  • lowercase:布尔值。 如果为 True,则输入文本将在分词之前转换为小写。
  • sequence_length:整数。 如果设置,输出将被转换为密集张量,并进行填充/修剪,以便所有输出都为 sequence_length。
  • normalization_form:字符串。 以下值之一:(None, "NFC", "NFKC", "NFD", "NFKD")。 如果设置,输入张量文本中的每个 UTF-8 字符串将在分词之前被规范化为给定的形式。
  • errors:'replace'、'remove'、'strict' 之一。 指定遇到无效 tokenizer 时 detokenize() 的行为。 'strict' 的值将导致操作对任何无效的输入格式产生 InvalidArgument 错误。 'replace' 的值将导致 tokenizer 将输入中的任何无效格式替换为 replacement_char 代码点。 'ignore' 的值将导致 tokenizer 跳过输入中的任何无效格式,并不会产生相应的输出字符。
  • replacement_char:整数。 当遇到无效字节序列并且 errors 设置为 "replace" 时使用的替换字符(与 https://tensorflowcn.cn/api_docs/python/tf/strings/unicode_transcode 的行为相同)。 (U+FFFD) 为 65533。 默认值为 65533

示例

基本用法。

>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer()
>>> outputs = tokenizer("hello")
>>> np.array(outputs)
array([104, 101, 108, 108, 111], dtype=int32)

不规则输出。

>>> inputs = ["hello", "hi"]
>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer()
>>> seq1, seq2 = tokenizer(inputs)
>>> np.array(seq1)
array([104, 101, 108, 108, 111])
>>> np.array(seq2)
array([104, 105])

密集输出。

>>> inputs = ["hello", "hi"]
>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer(sequence_length=8)
>>> seq1, seq2 = tokenizer(inputs)
>>> np.array(seq1)
array([104, 101, 108, 108, 111,   0,   0,   0], dtype=int32)
>>> np.array(seq2)
array([104, 105,   0,   0,   0,   0,   0,   0], dtype=int32)

分词,然后批处理以获得不规则输出。

>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer()
>>> ds = tf.data.Dataset.from_tensor_slices(["hello", "fun"])
>>> ds = ds.map(tokenizer)
>>> ds = ds.apply(tf.data.experimental.dense_to_ragged_batch(2))
>>> ds.take(1).get_single_element()
<tf.RaggedTensor [[104, 101, 108, 108, 111], [102, 117, 110]]>

批处理,然后分词以获得不规则输出。

>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer()
>>> ds = tf.data.Dataset.from_tensor_slices(["hello", "fun"])
>>> ds = ds.batch(2).map(tokenizer)
>>> ds.take(1).get_single_element()
<tf.RaggedTensor [[104, 101, 108, 108, 111], [102, 117, 110]]>

分词,然后批处理以获得密集输出(提供了 sequence_length)。

>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer(sequence_length=5)
>>> ds = tf.data.Dataset.from_tensor_slices(["hello", "fun"])
>>> ds = ds.map(tokenizer)
>>> ds = ds.apply(tf.data.experimental.dense_to_ragged_batch(2))
>>> ds.take(1).get_single_element()
<tf.Tensor: shape=(2, 5), dtype=int32, numpy=
array([[104, 101, 108, 108, 111],
       [102, 117, 110,   0,   0]], dtype=int32)>

批处理,然后分词以获得密集输出。(提供了 sequence_length)。

>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer(sequence_length=5)
>>> ds = tf.data.Dataset.from_tensor_slices(["hello", "fun"])
>>> ds = ds.batch(2).map(tokenizer)
>>> ds.take(1).get_single_element()
<tf.Tensor: shape=(2, 5), dtype=int32, numpy=
array([[104, 101, 108, 108, 111],
       [102, 117, 110,   0,   0]], dtype=int32)>

分词还原。

>>> inputs = [104, 101, 108, 108, 111]
>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer()
>>> tokenizer.detokenize(inputs)
'hello'

使用无效字节进行分词还原。

>>> # The 255 below is invalid utf-8.
>>> inputs = [104, 101, 255, 108, 108, 111]
>>> tokenizer = keras_nlp.tokenizers.ByteTokenizer(
...     errors="replace", replacement_char=88)
>>> tokenizer.detokenize(inputs)
'heXllo'

[源代码]

tokenize 方法

ByteTokenizer.tokenize(inputs)

将输入字符串张量转换为输出标记。

参数

  • inputs:输入张量,或输入张量的 dict/list/tuple。
  • *args:附加位置参数。
  • **kwargs:附加关键字参数。

[源代码]

detokenize 方法

ByteTokenizer.detokenize(inputs)

将标记转换回字符串。

参数

  • inputs:输入张量,或输入张量的 dict/list/tuple。
  • *args:附加位置参数。
  • **kwargs:附加关键字参数。

[源代码]

get_vocabulary 方法

ByteTokenizer.get_vocabulary()

获取分词器词表,以字符串项列表的形式。


[源代码]

vocabulary_size 方法

ByteTokenizer.vocabulary_size()

获取分词器词表的整数大小。


[源代码]

token_to_id 方法

ByteTokenizer.token_to_id(token)

将字符串标记转换为整数 ID。


[源代码]

id_to_token 方法

ByteTokenizer.id_to_token(id)

将整数 ID 转换为字符串标记。