當前位置:成語大全網 - 英語詞典 - 使用BPE (Byte-Pair Encoding) 進行Tokenization對於Cross-lingual語言模型的意義是什麽?這樣是否有問題

使用BPE (Byte-Pair Encoding) 進行Tokenization對於Cross-lingual語言模型的意義是什麽?這樣是否有問題

BPE概述

Byte-Pair-Encoding是用於解決未登錄詞的壹種方法。首先簡單提壹句什麽是未登錄詞,未登錄詞可以理解為訓練語料庫中沒有出現的,但是在測試語料庫中出現的詞。我們在處理NLP任務時,通常會根據語料生成壹個詞典,把語料中詞頻大於某個閾值的詞放入詞典中,而低於該閾值的詞統統編碼成"#UNK"。這種處理方法的好處是簡單,但是問題也很大,在測試語料庫中如果出現了未登錄詞,那麽我們的模型很難處理這種詞。由於本文並不是為了解釋NLP中如何處理未登錄詞的,因此其他的廢話不多說,我們只說BPE算法是怎麽解決未登錄詞的。

通常我們的詞典都是word-level的,也就是說詞典是以單詞或者短語為基本單位的,但這就無可避免的會遇到未登錄詞的問題,因為不可能設計壹個非常大的能涵蓋所有單詞的詞典。此外另壹種詞典是character-lever,即以單個字母或漢字(中文)為基本單詞設計詞典,這種方法理論上可以解決未登錄詞的問題,因為所有的詞都是由字母組成的,但是這樣做的缺點是模型粒度太細,缺少語義信息,實際也有人做過實驗證明這種方法不好。

後來2016年rich等人提出了基於subword來生成詞典的方法,這種方法綜合了word-level和charater-level的優勢,從語料中學習所有單詞裏頻次高的字符子串,然後把這些頻次高的字符子串合並為壹個詞典。在這個詞典裏,既存在word-level級別的子串,也存在charater-level的子串。其中,用於尋找高頻子串的方法,就是本文即將解釋的BPE算法。

BEP算法很簡單,它主要是用來尋找字符串中的高頻子串的方法。具體來說,我們把語料庫中的每個單詞結尾添加壹個stop token “”。然後我們將每個單詞拆分成字母的形式。例如,起初我們有如下的words:

{'low': 5, 'lower': 2, 'newest': 6, 'widest': 3}

添加stop token並拆分後,變成了下面的形式:

{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w e s t </w>': 6, 'w i d e s t </w>': 3}

接下來我們計算相鄰兩字母出現的頻率,選擇頻率最高的壹對進行合並,在上面的例子中,'e’與’s’***出現了9次,頻率最高,我們將其合並:

{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w es t </w>': 6, 'w i d es t </w>': 3}

繼續重復剛剛的方法,發現’es’與’t’***出現了9次,頻率最高,將其合並:

{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w est </w>': 6, 'w i d est </w>': 3}

以此類推,叠代n次,直到達到預設的subwords詞表大小或下壹個最高頻的字節對出現頻率為1。