iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
AI & Data

30 天學會深度學習和 Tensorflow系列 第 20

19. 深度學習甜點系列:以字頻為主的語言模型

  • 分享至 

  • xImage
  •  

RNN 的網路結構,讓它得以捕捉序列之間的相依關係,而語言模型經常仰賴序列間的相依關係,來訓練最佳的模型。那麼,倒底什麼是語言模型呢?

一個語言模型會以一個單字序列為輸入,輸出一個機率值,這個機率值是衡量此輸入是否符合該訓練模型的語言結構。舉例而言,我們訓練了一個英文文法的語言模型,給定兩個輸入,那麼符合英文文法的輸入就會輸出一個較高的機率值。如:“The apple and pair salad” 這個輸入不具有英文語義上的意義,自然在英文語言模型有較小,或近似於零的機率值。

在今日,因為語言資料透過網路而可輕易取得,訓練一個語言模型,多仰賴所謂的統計模型方法。也就是,蒐集一個擁有巨大訓練句子的訓練語言集,使用統計學習演算法,從這個巨大的訓練語言集中找尋單詞的出現機率和單詞間共同出現的機率來建立語言模型。這個巨大的語言訓練資料集,在自然語言處理上有其專屬的名稱,被稱為 Corpus(複數為 Corpora)。

通常,從網路爬蟲抓下來的文件,都還需經過前處理,才能作為語言模型的輸入。前處理包括了tokenization 和 word normalization 。有時,針對過長的句子,還需做 sentence segmentation,好讓語言模型能夠處理。

Tokenization 的作用在於將整個句子以字詞的單位切開,而從一個字串成為一個具有不同長度的一維的字詞序列。通常在這個階段,我們會稱呼切割下來的字詞為 token,而非 word。因為如何程式設計一個 Tokenizer,用以切割句子,也是一門學問。在切割單詞時,有時需要考慮標點符號,是否需要當成一個 token。

Word normalization 包含了將取代數字,或人名這些在統計上因為計數少,在語言中有可取代為別的獨特稀少值,所以通常可以遺棄或以特別的 token 來表示。其他常做的 word normalization 包含了將單詞中的 word stem 取出,並取代原單詞。Word stem 是字詞中不隨主詞變化的部分,這在歐語系的語言中常見。

通常在進行前處理時,會以一個現有的字彙集(vocabulary),或同時進行建立這個訓練集的字彙集。這個字彙集是 token 對索引的對映。當在做前處理時,可以依據 word normalization 的規則,而將未曾收錄於字彙集內的 token,或前所述的特殊名詞,標為特別的 token,如 <UNK>,意思為未知的 token。

標為<UNK>單詞,有兩個功用:一是將稀少的 token 其真正內容並不影響文義,集合成一個單類,而增加統計上的識別度。

另外一個功用,則是做 Out Of Vocabulary 通常又簡稱為 OOV 的標示,譯為不在字典中。但,通常 OOV 的處理還包括了丟棄不在字典中的詞,這類的 token 通常是所謂的 stop words,或經常出現的單詞。因為這些單詞太過高頻率的出現,以致於他們所帶有的 information content 非常的低,簡言之,就是任何句子都可以見到他們,任何其他單詞都能和這些單詞共同出現。這在統計學習上,也不具有辨識能力,最好的情況下是將之丟棄。

談完了訓練語言模型的資料前處理,我們要談的是現行語言模型中最簡單的模型,Bag of Words(BoW)模型。這個 BoW 的模型,是以字頻為主的語言模型。這類的字頻模型,把字詞在句子中的位置資訊捨棄,而以字頻的方式來建立關於字詞的向量表示,或稱為 word embedding。因為不儲存字詞間的順序變化,大幅簡化了計算時所需的記憶體,而被廣泛使用為基準模型。這個語言模型雖然簡單,但是對於 spam filter 類似的應用相當有用。

而什麼是 Word embedding? Word embedding 是字詞在特徵空間中的向量表示,在往後的文章會對 word embedding 的特性做詳細介紹。

而如何從離散的字詞映對到連續的向量空間中,則有不同的做法。其中一種 word embedding 的映射函式,就是以 BoW 的語言模型訓練而成,而一般的步驟如下:

  1. 計算 N-gram 的字頻矩陣,這裡的 N 可以從 1 到任意整數。若 N 取得愈大,則短字詞共同出現的頻率,或順序可以被保留。然而當 N 取得過大,則有字頻矩陣過於稀疏,字彙集過於龐大的問題,而造成使用矩陣分解來做降維時的困難增加。
  2. 給予字頻矩陣裡的字詞不同的權重。常見的權重方式為 Tf-Idf 權重,這種權重方式會對一個句子中過於頻繁出現的字詞給予較少的權重,誠如之前所言,這些過多出現的字詞不具有能夠識別的資訊,所以只能當作雜訊抑制。
  3. 對字頻矩陣以矩陣分解的方式做降維。多半使用的方式是用 Latent Semantics Analysis。這個方式是用相近於 PCA 的矩陣分解方法,先將原矩陣轉做線性轉換至新的特徵向量空間,然後只取出能解釋現有訓練資料的主要成分來當作新的特徵向量空間的基底。但由於,字頻矩陣多是稀疏且 singular 矩陣,所以多以 SVD 做矩陣分解,而非影像中常用的 PCA。

GloVe 是 Global vectors for word representation 的簡稱,主要計算 target word 和 context word 共同出現的頻率,並利用下圖所列的損失函式,並用 least square 方法來求得最佳的 embedding 矩陣。

GloVe model


上一篇
18. 深度學習甜點系列:RNN 的秘密武器 - 記憶單元
下一篇
20. 深度學習甜點系列:以單字為基礎的語言模型
系列文
30 天學會深度學習和 Tensorflow30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言