compute_word_piece_vocabulary
函数keras_hub.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
是文件名列表,则文件格式必须是纯文本文件,训练期间会逐行读取文本。
参数
tf.data.Dataset
,或一个文件名列表。None
。True
,输入文本将在分词前转换为小写。默认为 False
。True
,所有重音符号将在分词前从文本中移除。默认为 False
。True
,输入将按空格和标点符号分割,所有标点符号将保留为 token。如果为 False
,输入应在调用分词器之前分割(“预分词”),并作为完整单词的密集或 Ragged 张量传入。当 data
是文件名列表时,split
必须为 True
。默认为 True
。True
,输入将按 CJK 字符分割,即中文、日文、韩文和越南文(https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block))。注意,这仅在 split
为 True
时适用。默认为 True
。"##ing"
。默认为 "##"
。返回
返回词汇项列表。
示例
基本用法(来自 Dataset)。
>>> 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_hub.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_hub.tokenizers.compute_word_piece_vocabulary(inputs, 13)
自定义分割用法(来自 Dataset)。
>>> 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_hub.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_hub.tokenizers.compute_word_piece_vocabulary(
split_inputs, 13, split=False
)
tokenizer = keras_hub.tokenizers.WordPieceTokenizer(vocabulary=vocab)
inputs.map(tokenizer.tokenize)