Keras 3 API 文件 / KerasNLP / 標記器 / ByteTokenizer

ByteTokenizer

[來源]

ByteTokenizer 類別

keras_nlp.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 可以透過 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:int。遇到無效位元組序列且 errors 設定為「replace」時要使用的替換字元(行為與 https://tensorflow.dev.org.tw/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()

取得 tokenizer 詞彙表作為字串詞彙的清單。


[來源]

vocabulary_size 方法

ByteTokenizer.vocabulary_size()

取得 tokenizer 詞彙表的整數大小。


[來源]

token_to_id 方法

ByteTokenizer.token_to_id(token)

將字串標記轉換為整數 ID。


[來源]

id_to_token 方法

ByteTokenizer.id_to_token(id)

將整數 ID 轉換為字串標記。