ByteTokenizer
类keras_hub.tokenizers.ByteTokenizer(
lowercase=True,
sequence_length=None,
normalization_form=None,
errors="replace",
replacement_char=65533,
dtype="int32",
**kwargs
)
原始字节分词器。
此分词器是无词汇分词器,它会将文本作为 [0, 256) 范围内的原始字节进行分词。
分词器输出可以通过 sequence_length
参数进行填充和截断,也可以不截断。具体输出将取决于输入张量的秩。
如果输入是字符串批次:默认情况下,该层将输出一个 tf.RaggedTensor
,其中输出的最后一个维度是不规则的。如果设置了 sequence_length
,则该层将输出一个密集 tf.Tensor
,其中所有输入都已填充或截断到 sequence_length
。
如果输入是标量字符串:这里有两种情况。如果设置了 sequence_length
,则输出将是一个形状为 [sequence_length]
的密集 tf.Tensor
。否则,输出将是一个形状为 [None]
的密集 tf.Tensor
。
输出的数据类型可以通过 dtype
参数控制,该参数应为整数类型(“int16”、“int32”等)。
参数
sequence_length
。detokenize()
的行为。'strict'
值将导致操作在任何无效输入格式上生成 InvalidArgument
错误。'replace'
值将导致分词器将输入中的任何无效格式替换为 replacement_char
码点。'ignore'
值将导致分词器跳过输入中的任何无效格式,并且不生成相应的输出字符。errors
设置为“replace”时使用的替换字符(与 https://tensorflowcn.cn/api_docs/python/tf/strings/unicode_transcode 的行为相同)。(U+FFFD) 是 65533
。默认为 65533
。示例
基本用法。
>>> tokenizer = keras_hub.tokenizers.ByteTokenizer()
>>> outputs = tokenizer("hello")
>>> np.array(outputs)
array([104, 101, 108, 108, 111], dtype=int32)
不规则输出。
>>> inputs = ["hello", "hi"]
>>> tokenizer = keras_hub.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_hub.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_hub.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_hub.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_hub.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_hub.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_hub.tokenizers.ByteTokenizer()
>>> tokenizer.detokenize(inputs)
'hello'
使用无效字节进行反分词。
>>> # The 255 below is invalid utf-8.
>>> inputs = [104, 101, 255, 108, 108, 111]
>>> tokenizer = keras_hub.tokenizers.ByteTokenizer(
... errors="replace", replacement_char=88)
>>> tokenizer.detokenize(inputs)
'heXllo'
tokenize
方法ByteTokenizer.tokenize(inputs)
将字符串输入张量转换为输出标记。
参数
detokenize
方法ByteTokenizer.detokenize(inputs)
将标记转换回字符串。
参数
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 转换为字符串标记。