Keras 3 API 文件 / KerasNLP / 預處理層 / RandomSwap 層

RandomSwap 層

[來源]

RandomSwap 類別

keras_nlp.layers.RandomSwap(
    rate,
    max_swaps=None,
    skip_list=None,
    skip_fn=None,
    skip_py_fn=None,
    seed=None,
    name=None,
    dtype="int32",
    **kwargs
)

透過隨機交換詞彙來擴充輸入。

當您需要使用論文 [EDA:用於提升文字分類任務性能的簡易數據增強技術] (https://arxiv.org/pdf/1901.11196.pdf) 中所述的交換增強來生成新數據時,此層將會派上用場。該層預期輸入已被預先分割成詞彙級別的輸入。這允許控制增強的級別,您可以按字符分割以進行字符級別的交換,或按詞彙分割以進行詞彙級別的交換。

輸入數據應作為張量、tf.RaggedTensor 或列表傳遞。對於批次輸入,輸入應為列表的列表或二階張量。對於非批次輸入,每個元素都應為列表或一階張量。

參數

  • rate:給定詞彙被選中與另一個隨機詞彙交換的概率。
  • max_swaps:要執行的最大交換次數。
  • skip_list:不應視為刪除候選詞彙的詞彙值列表。
  • skip_fn:一個函數,它將標量張量詞彙作為輸入,並返回標量張量 True/False 值作為輸出。值 True 表示不應將該詞彙視為刪除候選詞彙。此函數必須是可追蹤的——它應由 TensorFlow 運算組成。
  • skip_py_fn:一個函數,它將 Python 詞彙值作為輸入,並返回 TrueFalse 作為輸出。值 True 表示不應將該詞彙視為刪除候選詞彙。與 skip_fn 參數不同,此參數不需要是可追蹤的——它可以是任何 Python 函數。
  • seed:隨機數生成器的種子。

範例

詞彙級別的使用。

>>> keras.utils.set_random_seed(1337)
>>> x = ["Hey I like", "Keras and Tensorflow"]
>>> x = list(map(lambda x: x.split(), x))
>>> augmenter = keras_nlp.layers.RandomSwap(rate=0.4, seed=42)
>>> y = augmenter(x)
>>> list(map(lambda y: " ".join(y), y))
['like I Hey', 'and Keras Tensorflow']

字符級別的使用。

>>> keras.utils.set_random_seed(1337)
>>> x = ["Hey Dude", "Speed Up"]
>>> x = list(map(lambda x: list(x), x))
>>> augmenter = keras_nlp.layers.RandomSwap(rate=0.4, seed=42)
>>> y = augmenter(x)
>>> list(map(lambda y: "".join(y), y))
['deD yuHe', 'SUede pp']

搭配 skip_list 使用。

>>> keras.utils.set_random_seed(1337)
>>> x = ["Hey I like", "Keras and Tensorflow"]
>>> x = list(map(lambda x: x.split(), x))
>>> augmenter = keras_nlp.layers.RandomSwap(rate=0.4,
...     skip_list=["Keras"], seed=42)
>>> y = augmenter(x)
>>> list(map(lambda y: " ".join(y), y))
['like I Hey', 'Keras and Tensorflow']

搭配 skip_fn 使用。

>>> def skip_fn(word):
...     return tf.strings.regex_full_match(word, r"[I, a].*")
>>> keras.utils.set_random_seed(1337)
>>> x = ["Hey I like", "Keras and Tensorflow"]
>>> x = list(map(lambda x: x.split(), x))
>>> augmenter = keras_nlp.layers.RandomSwap(rate=0.9, max_swaps=3,
...     skip_fn=skip_fn, seed=11)
>>> y = augmenter(x)
>>> list(map(lambda y: " ".join(y), y))
['like I Hey', 'Keras and Tensorflow']

搭配 skip_py_fn 使用。

>>> def skip_py_fn(word):
...     return len(word) < 4
>>> keras.utils.set_random_seed(1337)
>>> x = ["He was drifting along", "With the wind"]
>>> x = list(map(lambda x: x.split(), x))
>>> augmenter = keras_nlp.layers.RandomSwap(rate=0.8, max_swaps=2,
...     skip_py_fn=skip_py_fn, seed=15)
>>> y = augmenter(x)
>>> list(map(lambda y: " ".join(y), y))
['He was along drifting', 'wind the With']