KerasHub:預訓練模型 / API 文件 / 斷詞器 / compute_word_piece_vocabulary 函式

compute_word_piece_vocabulary 函式

[原始碼]

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 是一個檔案名稱列表,則檔案格式必須是純文字檔案,並且在訓練期間會逐行讀取文字。

參數

  • data:一個 tf.data.Dataset 或一個檔案名稱列表。
  • vocabulary_size:整數。要訓練的詞彙表的最大大小。
  • vocabulary_output_file:字串。要寫入詞彙表檔案的位置。預設為 None
  • lowercase:布林值。如果為 True,則輸入文字會在斷詞之前轉換為小寫。預設為 False
  • strip_accents:布林值。如果為 True,則會在斷詞之前從文字中移除所有重音符號。預設為 False
  • split:布林值。如果為 True,輸入將會依空白和標點符號分割,並且所有標點符號都會保留為詞符。如果為 False,輸入應該在呼叫斷詞器之前進行分割(「預先斷詞」),並以整個單字的密集或參差張量的形式傳遞。當 data 是檔案名稱列表時,split 必須為 True。預設為 True
  • split_on_cjk:布林值。如果為 True,輸入將會依 CJK 字元分割,即中文、日文、韓文和越南文字符 (https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block))。請注意,這僅適用於 splitTrue 的情況。預設為 True
  • suffix_indicator:字串。附加在 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_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)