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 分词器层。

此层提供了一种高效的、图内实现的 WordPiece 算法,该算法被 BERT 和其他模型使用。

为了使此层在开箱即用时更有用,该层将预先对输入进行分词,这将可选地将输入转换为小写、去除重音符号以及在空格和标点符号处分割输入。这些预分词步骤中的每一个都是不可逆的。detokenize 方法将用空格连接单词,并且不会完全反转 tokenize

如果需要更自定义的预分词步骤,可以通过传递 lowercase=Falsestrip_accents=Falsesplit=False 来配置该层,使其仅应用严格的 WordPiece 算法。在这种情况下,输入应该是预先分割的字符串张量或不规则张量。

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

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

如果输入是标量字符串(秩 == 0):默认情况下,该层将输出一个密集的 tf.Tensor,其静态形状为 [None]。如果设置了 sequence_length,则输出将是一个密集的 tf.Tensor,其形状为 [sequence_length]

输出数据类型可以通过 dtype 参数控制,该参数应为整数或字符串类型。

参数

  • vocabulary:字符串列表或字符串文件名路径。如果传递列表,则列表的每个元素都应为单个 WordPiece 令牌字符串。如果传递文件名,则文件应为纯文本文件,每行包含一个 WordPiece 令牌。
  • sequence_length:int。如果设置,则输出将转换为密集张量并填充/修剪,以便所有输出都为 sequence_length。
  • lowercase:bool。如果为 True,则在分词之前将输入文本转换为小写。默认为 False
  • strip_accents:bool。如果为 True,则在分词之前将从文本中删除所有重音符号。默认为 False
  • split:bool。如果为 True,则输入将在空格和标点符号处分割,并且所有标点符号都将作为令牌保留。如果为 False,则应在调用分词器之前分割输入(“预分词”),并将其作为完整单词的密集或不规则张量传递。默认为 True
  • split_on_cjk:bool。如果为 True,则输入将在 CJK 字符上分割,即中文、日文、韩文和越南文字符 (https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block))。请注意,这仅在 split 为 True 时适用。默认为 True
  • suffix_indicator:str。附加到 WordPiece 前面的字符,以指示它是另一个子词的后缀。例如“##ing”。默认为 "##"
  • oov_token:str。用于替换未知令牌的字符串值。它必须包含在词汇表中。默认为 "[UNK]"
  • special_tokens_in_strings:bool。一个布尔值,指示分词器是否应在输入字符串中期望特殊令牌,这些令牌应被正确分词并映射到其 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:输入张量,或输入张量的字典/列表/元组。
  • *args:其他位置参数。
  • **kwargs:其他关键字参数。

[源代码]

detokenize 方法

WordPieceTokenizer.detokenize(inputs)

将令牌转换回字符串。

参数

  • inputs:输入张量,或输入张量的字典/列表/元组。
  • *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 转换为字符串令牌。