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

WordPieceTokenizer

[來源]

WordPieceTokenizer 類別

keras_nlp.tokenizers.WordPieceTokenizer(
    vocabulary=None,
    sequence_length=None,
    lowercase=False,
    strip_accents=False,
    split=True,
    split_on_cjk=True,
    suffix_indicator="##",
    oov_token="[UNK]",
    special_tokens=None,
    special_tokens_in_strings=False,
    dtype="int32",
    **kwargs
)

一個 WordPiece 標記器層。

此層提供 BERT 和其他模型使用的 WordPiece 演算法的高效、圖形內實現。

為了讓此層開箱即用,該層將預先對輸入進行標記化,這將選擇性地將輸入小寫、去除重音符號,並在空格和標點符號處分割輸入。這些預標記化步驟中的每一個步驟都是不可逆的。detokenize 方法將使用空格連接單詞,並且不會完全反轉 tokenize

如果需要更自訂的預標記化步驟,則可以通過傳遞 lowercase=Falsestrip_accents=Falsesplit=False 來配置該層,使其僅應用嚴格的 WordPiece 演算法。在這種情況下,輸入應該是預先分割的字串張量或不規則張量。

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

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

如果輸入是標量字串(秩 == 0): 根據預設,該層將輸出一個具有靜態形狀 [None] 的密集 tf.Tensor。如果設定了 sequence_length,則輸出將是一個形狀為 [sequence_length] 的密集 tf.Tensor

輸出 dtype 可以通過 dtype 參數進行控制,該參數應該是整數或字串類型。

參數

  • vocabulary:字串清單或字串檔案路徑。如果傳遞清單,則清單中的每個元素都應該是單個 WordPiece 權杖字串。如果傳遞檔名,則該檔案應該是純文字檔案,每行包含一個 WordPiece 權杖。
  • sequence_length:整數。如果設定,輸出將轉換為密集張量,並進行填充/修剪,以便所有輸出的長度都為 sequence_length。
  • lowercase:布林值。如果為 True,則輸入文字將在分詞之前轉換為小寫。預設值為 False
  • strip_accents:布林值。如果為 True,則在分詞之前將從文字中移除所有重音符號。預設值為 False
  • split:布林值。如果為 True,則輸入將在空格和標點符號處拆分,並且所有標點符號都將保留為權杖。如果為 False,則應在呼叫分詞器之前拆分輸入(「預先分詞」),並作為完整單字的密集或參差不齊的張量傳遞。預設值為 True
  • split_on_cjk:布林值。如果為 True,則輸入將在 CJK 字元(即中日韓越語字元(https://zh.wikipedia.org/wiki/中日韓統一表意文字)上拆分。請注意,這僅在 split 為 True 時才適用。預設值為 True
  • suffix_indicator:字串。添加到 WordPiece 的字元,表示它是另一個子詞的後綴。例如「##ing」。預設值為 "##"
  • oov_token:字串。用於替換未知權杖的字串值。它必須包含在詞彙表中。預設值為 "[UNK]"
  • special_tokens_in_strings:布林值。一個布林值,指示分詞器是否應預期輸入字串中存在應進行分詞並正確映射到其 ID 的特殊權杖。預設值為 False。

參考

範例

參差不齊的輸出。

>>> vocab = ["[UNK]", "the", "qu", "##ick", "br", "##own", "fox", "."]
>>> inputs = "The quick brown fox."
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(
...     vocabulary=vocab,
...     lowercase=True,
... )
>>> outputs = tokenizer(inputs)
>>> np.array(outputs)
array([1, 2, 3, 4, 5, 6, 7], dtype=int32)

密集輸出。

>>> vocab = ["[UNK]", "the", "qu", "##ick", "br", "##own", "fox", "."]
>>> inputs = ["The quick brown fox."]
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(
...     vocabulary=vocab,
...     sequence_length=10,
...     lowercase=True,
... )
>>> outputs = tokenizer(inputs)
>>> np.array(outputs)
array([[1, 2, 3, 4, 5, 6, 7, 0, 0, 0]], dtype=int32)

字串輸出。

>>> vocab = ["[UNK]", "the", "qu", "##ick", "br", "##own", "fox", "."]
>>> inputs = "The quick brown fox."
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(
...     vocabulary=vocab,
...     lowercase=True,
...     dtype="string",
... )
>>> tokenizer(inputs)
['the', 'qu', '##ick', 'br', '##own', 'fox', '.']

反分詞。

>>> vocab = ["[UNK]", "the", "qu", "##ick", "br", "##own", "fox", "."]
>>> inputs = "The quick brown fox."
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(
...     vocabulary=vocab,
...     lowercase=True,
... )
>>> tokenizer.detokenize(tokenizer.tokenize(inputs))
'the quick brown fox .'

自訂拆分。

>>> vocab = ["[UNK]", "the", "qu", "##ick", "br", "##own", "fox", "."]
>>> inputs = "The$quick$brown$fox"
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(
...     vocabulary=vocab,
...     split=False,
...     lowercase=True,
...     dtype='string',
... )
>>> split_inputs = tf.strings.split(inputs, sep="$")
>>> tokenizer(split_inputs)
['the', 'qu', '##ick', 'br', '##own', 'fox']

[來源]

tokenize 方法

WordPieceTokenizer.tokenize(inputs)

將字串的輸入張量轉換為輸出權杖。

參數

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

[來源]

detokenize 方法

WordPieceTokenizer.detokenize(inputs)

將權杖轉換回字串。

參數

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

[來源]

get_vocabulary 方法

WordPieceTokenizer.get_vocabulary()

以字串權杖清單的形式取得分詞器詞彙表。


[來源]

vocabulary_size 方法

WordPieceTokenizer.vocabulary_size()

取得分詞器詞彙表的整數大小。


[來源]

token_to_id 方法

WordPieceTokenizer.token_to_id(token)

將字串權杖轉換為整數 ID。


[來源]

id_to_token 方法

WordPieceTokenizer.id_to_token(id)

將整數 ID 轉換為字串權杖。