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
,輸入將會依空白和標點符號分割,並且所有標點符號都會保留為詞符。如果為 False
,輸入應該在呼叫斷詞器之前進行分割(「預先斷詞」),並以整個單字的密集或參差張量的形式傳遞。當 data
是檔案名稱列表時,split
必須為 True
。預設為 True
。True
,輸入將會依 CJK 字元分割,即中文、日文、韓文和越南文字符 (https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block))。請注意,這僅適用於 split
為 True
的情況。預設為 True
。"##ing"
。預設為 "##"
。回傳值
回傳詞彙表詞彙的列表。
範例
基本用法(來自資料集)。
>>> 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)
自訂分割用法(來自資料集)。
>>> 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)