Keras 3 API 文档 / KerasNLP / 分词器 / compute_word_piece_vocabulary 函数

compute_word_piece_vocabulary 函数

[来源]

compute_word_piece_vocabulary 函数

keras_nlp.tokenizers.compute_word_piece_vocabulary(
    data,
    vocabulary_size,
    vocabulary_output_file=None,
    lowercase=False,
    strip_accents=False,
    split=True,
    split_on_cjk=True,
    suffix_indicator="##",
    reserved_tokens=["[PAD]", "[CLS]", "[SEP]", "[UNK]", "[MASK]"],
)

用于训练 WordPiece 词汇表的实用程序。

从输入数据集或文件名列表训练 WordPiece 词汇表。

对于自定义数据加载和预分词 (split=False),输入 data 应该是一个 tf.data.Dataset。如果 data 是文件名列表,则文件格式需要是纯文本文件,文本会在训练期间逐行读取。

参数

  • data: 一个 tf.data.Dataset 或文件名列表。
  • vocabulary_size: int。要训练的词汇表的最大大小。
  • vocabulary_output_file: str。写入词汇表文件的路径。默认为 None
  • lowercase: bool。如果为 True,则在分词之前输入文本将转换为小写。默认为 False
  • strip_accents: bool。如果为 True,则在分词之前将从文本中删除所有重音符号。默认为 False
  • split: bool。如果为 True,则输入将在空格和标点符号处拆分,并且所有标点符号将作为标记保留。如果为 False,则输入应在调用分词器之前进行拆分(“预分词”),并作为完整单词的密集或不规则张量传递。当 data 是文件名列表时,split 需要为 True。默认为 True
  • split_on_cjk: bool。如果为 True,则输入将在 CJK 字符处拆分,即中文、日文、韩文和越南语字符 (https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block))。请注意,这仅在 splitTrue 时适用。默认为 True
  • suffix_indicator: str。添加到 WordPiece 前面的字符,表示它是另一个子词的后缀。例如 "##ing"。默认为 "##"
  • reserved_tokens: 字符串列表。必须包含在词汇表中的标记列表。

返回值

返回词汇表项的列表。

示例

基本用法(来自数据集)。

>>> inputs = tf.data.Dataset.from_tensor_slices(["bat sat pat mat rat"])
>>> vocab = compute_word_piece_vocabulary(inputs, 13)
>>> vocab
['[PAD]', '[CLS]', '[SEP]', '[UNK]', '[MASK]', 'a', 'b', 'm', 'p', 'r', 's', 't', '##at']
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(vocabulary=vocab, oov_token="[UNK]")
>>> outputs = inputs.map(tokenizer.tokenize)
>>> for x in outputs:
...     print(x)
tf.Tensor([ 6 12 10 12  8 12  7 12  9 12], shape=(10,), dtype=int32)

基本用法(来自文件名)。

with open("test.txt", "w+") as f:
    f.write("bat sat pat mat rat\n")
inputs = ["test.txt"]
vocab = keras_nlp.tokenizers.compute_word_piece_vocabulary(inputs, 13)

自定义拆分用法(来自数据集)。

>>> def normalize_and_split(x):
...     "Strip punctuation and split on whitespace."
...     x = tf.strings.regex_replace(x, r"\p{P}", "")
...     return tf.strings.split(x)
>>> inputs = tf.data.Dataset.from_tensor_slices(["bat sat: pat mat rat.\n"])
>>> split_inputs = inputs.map(normalize_and_split)
>>> vocab = compute_word_piece_vocabulary(
...     split_inputs, 13, split=False,
... )
>>> vocab
['[PAD]', '[CLS]', '[SEP]', '[UNK]', '[MASK]', 'a', 'b', 'm', 'p', 'r', 's', 't', '##at']
>>> tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(vocabulary=vocab)
>>> inputs.map(tokenizer.tokenize)

自定义拆分用法(来自文件名)。

def normalize_and_split(x):
    "Strip punctuation and split on whitespace."
    x = tf.strings.regex_replace(x, r"\p{P}", "")
    return tf.strings.split(x)
with open("test.txt", "w+") as f:
    f.write("bat sat: pat mat rat.\n")
inputs = tf.data.TextLineDataset(["test.txt"])
split_inputs = inputs.map(normalize_and_split)
vocab = keras_nlp.tokenizers.compute_word_piece_vocabulary(
    split_inputs, 13, split=False
)
tokenizer = keras_nlp.tokenizers.WordPieceTokenizer(vocabulary=vocab)
inputs.map(tokenizer.tokenize)