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

UnicodeCodepointTokenizer

[來源]

UnicodeCodepointTokenizer 類別

keras_nlp.tokenizers.UnicodeCodepointTokenizer(
    sequence_length=None,
    lowercase=True,
    normalization_form=None,
    errors="replace",
    replacement_char=65533,
    input_encoding="UTF-8",
    output_encoding="UTF-8",
    vocabulary_size=None,
    dtype="int32",
    **kwargs
)

一個 Unicode 字元標記器層。

這個標記器是一個無詞彙表的標記器,它將文字標記為 Unicode 字元碼位。

標記器輸出可以使用 sequence_length 參數進行填充和截斷,或者保持未截斷。確切的輸出將取決於輸入張量的秩。

如果輸入是一批字串(秩 > 0):預設情況下,該層將輸出一個 tf.RaggedTensor,其中輸出的最後一個維度是不規則的。如果設置了 sequence_length,該層將輸出一個密集的 tf.Tensor,其中所有輸入都已填充或截斷為 sequence_length

如果輸入是一個純量字串(秩 == 0):預設情況下,該層將輸出一個靜態形狀為 [None] 的密集 tf.Tensor。如果設置了 sequence_length,則輸出將是一個形狀為 [sequence_length] 的密集 tf.Tensor

輸出 dtype 可以通過 dtype 參數來控制,該參數應該是一個整數類型(“int16”、“int32”等)。

參數

  • lowercase:如果為 True,則輸入文字在標記化之前將首先轉換為小寫。
  • sequence_length:如果設置,輸出將轉換為密集張量,並進行填充/修剪,以便所有輸出的長度均為 sequence_length。
  • normalization_form:以下字串值之一(None、“NFC”、“NFKC”、“NFD”、“NFKD”)。如果設置,將在標記化之前將 Unicode 標準化為給定形式。
  • errors:必須是「replace」、「remove」或「strict」的其中之一。指定遇到無效程式碼點時 detokenize() 的行為。若值為 'strict',則標記器會在任何無效輸入格式上產生 InvalidArgument 錯誤。若值為 'replace',則標記器會將輸入中的任何無效格式替換為 replacement_char 程式碼點。若值為 'ignore',則標記器會略過輸入中的任何無效格式,並且不產生對應的輸出字元。
  • replacement_char:用於替換無效程式碼點的 unicode 程式碼點。(U+FFFD) 為 65533。預設值為 65533
  • input_encoding:「UTF-8」、「UTF-16-BE」或「UTF-32-BE」的其中之一。輸入文字的編碼方式。預設值為 "UTF-8"
  • output_encoding:「UTF-8」、「UTF-16-BE」或「UTF-32-BE」的其中之一。輸出文字的編碼方式。預設值為 "UTF-8"
  • vocabulary_size:透過將所有程式碼點限制在 [0, vocabulary_size) 範圍內,設定詞彙 vocabulary_size。實際上,這會使 vocabulary_size - 1 id 成為 OOV 值。

範例

基本用法。

>>> inputs = "Unicode Tokenizer"
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer()
>>> outputs = tokenizer(inputs)
>>> np.array(outputs)
array([117, 110, 105,  99, 111, 100, 101,  32, 116, 111, 107, 101, 110,
    105, 122, 101, 114], dtype=int32)

不規則輸出。

>>> inputs = ["पुस्तक", "کتاب"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer()
>>> seq1, seq2 = tokenizer(inputs)
>>> np.array(seq1)
array([2346, 2369, 2360, 2381, 2340, 2325])
>>> np.array(seq2)
array([1705, 1578, 1575, 1576])

密集輸出。

>>> inputs = ["पुस्तक", "کتاب"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     sequence_length=8)
>>> seq1, seq2 = tokenizer(inputs)
>>> np.array(seq1)
array([2346, 2369, 2360, 2381, 2340, 2325,    0,    0], dtype=int32)
>>> np.array(seq2)
array([1705, 1578, 1575, 1576,    0,    0,    0,    0], dtype=int32)

標記化,然後批次處理以進行不規則輸出。

>>> inputs = ["Book", "पुस्तक", "کتاب"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer()
>>> ds = tf.data.Dataset.from_tensor_slices(inputs)
>>> ds = ds.map(tokenizer)
>>> ds = ds.apply(tf.data.experimental.dense_to_ragged_batch(3))
>>> ds.take(1).get_single_element()
<tf.RaggedTensor [[98, 111, 111, 107],
    [2346, 2369, 2360, 2381, 2340, 2325],
    [1705, 1578, 1575, 1576]]>

批次處理,然後標記化以進行不規則輸出。

>>> inputs = ["Book", "पुस्तक", "کتاب"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer()
>>> ds = tf.data.Dataset.from_tensor_slices(inputs)
>>> ds = ds.batch(3).map(tokenizer)
>>> ds.take(1).get_single_element()
<tf.RaggedTensor [[98, 111, 111, 107],
    [2346, 2369, 2360, 2381, 2340, 2325],
    [1705, 1578, 1575, 1576]]>

標記化,然後批次處理以進行密集輸出 (提供 sequence_length)。

>>> inputs = ["Book", "पुस्तक", "کتاب"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     sequence_length=5)
>>> ds = tf.data.Dataset.from_tensor_slices(inputs)
>>> ds = ds.map(tokenizer)
>>> ds = ds.apply(tf.data.experimental.dense_to_ragged_batch(3))
>>> ds.take(1).get_single_element()
<tf.Tensor: shape=(3, 5), dtype=int32, numpy=
array([[  98,  111,  111,  107,    0],
    [2346, 2369, 2360, 2381, 2340],
    [1705, 1578, 1575, 1576,    0]], dtype=int32)>

批次處理,然後標記化以進行密集輸出 (提供 sequence_length)。

>>> inputs = ["Book", "पुस्तक", "کتاب"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     sequence_length=5)
>>> ds = tf.data.Dataset.from_tensor_slices(inputs)
>>> ds = ds.batch(3).map(tokenizer)
>>> ds.take(1).get_single_element()
<tf.Tensor: shape=(3, 5), dtype=int32, numpy=
array([[  98,  111,  111,  107,    0],
    [2346, 2369, 2360, 2381, 2340],
    [1705, 1578, 1575, 1576,    0]], dtype=int32)>

使用截斷進行標記化。

>>> inputs = ["I Like to Travel a Lot", "मैं किताबें पढ़ना पसंद करता हूं"]
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     sequence_length=5)
>>> outputs = tokenizer(inputs)
>>> np.array(outputs)
array([[ 105,   32,  108,  105,  107],
       [2350, 2376, 2306,   32, 2325]], dtype=int32)

使用 vocabulary_size 進行標記化。

>>> latin_ext_cutoff = 592
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     vocabulary_size=latin_ext_cutoff)
>>> outputs = tokenizer("¿Cómo estás?")
>>> np.array(outputs)
array([191,  99, 243, 109, 111,  32, 101, 115, 116, 225, 115,  63],
      dtype=int32)
>>> outputs = tokenizer("आप कैसे हैं")
>>> np.array(outputs)
array([591, 591,  32, 591, 591, 591, 591,  32, 591, 591, 591],
      dtype=int32)

反標記化。

>>> inputs = tf.constant([110, 105, 110, 106,  97], dtype="int32")
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer()
>>> tokenizer.detokenize(inputs)
'ninja'

使用填補進行反標記化。

>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     sequence_length=7)
>>> dataset = tf.data.Dataset.from_tensor_slices(["a b c", "b c", "a"])
>>> dataset = dataset.map(tokenizer)
>>> dataset.take(1).get_single_element()
<tf.Tensor: shape=(7,), dtype=int32,
    numpy=array([97, 32, 98, 32, 99,  0,  0], dtype=int32)>
>>> detokunbatched = dataset.map(tokenizer.detokenize)
>>> detokunbatched.take(1).get_single_element()
<tf.Tensor: shape=(), dtype=string, numpy=b'a b c'>

使用無效位元組進行反標記化。

>>> inputs = tf.constant([110, 105, 10000000, 110, 106,  97])
>>> tokenizer = keras_nlp.tokenizers.UnicodeCodepointTokenizer(
...     errors="replace", replacement_char=88)
>>> tokenizer.detokenize(inputs)
'niXnja'

[來源]

tokenize 方法

UnicodeCodepointTokenizer.tokenize(inputs)

將字串的輸入張量轉換為輸出標記。

參數

  • inputs:輸入張量,或輸入張量的 dict/list/tuple。
  • *args:其他位置引數。
  • **kwargs:其他關鍵字引數。

[來源]

detokenize 方法

UnicodeCodepointTokenizer.detokenize(inputs)

將標記轉換回字串。

參數

  • inputs:輸入張量,或輸入張量的 dict/list/tuple。
  • *args:其他位置引數。
  • **kwargs:其他關鍵字引數。

[來源]

get_vocabulary 方法

UnicodeCodepointTokenizer.get_vocabulary()

將標記器詞彙作為字串詞彙清單取得。


[來源]

vocabulary_size 方法

UnicodeCodepointTokenizer.vocabulary_size()

取得標記器詞彙的大小。None 表示未提供詞彙大小


[來源]

token_to_id 方法

UnicodeCodepointTokenizer.token_to_id(token)

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


[來源]

id_to_token 方法

UnicodeCodepointTokenizer.id_to_token(id)

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