NLP《詞彙表示方法(一)one-hot向量表示》

星海千尋發表於2020-11-01

詞語是NLP裡面最基本的要處理的單元,詞語組合成能句子,句子組成段落,段落組成文章,因此,最基本要處理的就是詞語了,我們知道,詞語都是一個個的符號表示的。我們怎麼用數值化的方式表示呢,這樣才能方便計算機去計算處理。

在字元編碼中也被分配了一定的數字來代表某個字元,比如UTF-8等字元編碼方式。每一個數字都可以對應於某個字元,對於一些離散的應用來說,這個編碼也就夠了,但是這種編碼僅僅能對字元做個區分表示而已。

一:詞語的表示
原始的方法就是one-hot向量的方法。
假如我們有個詞庫,一共有V個詞彙,羅列了所有的詞語,組成一個V維度的向量,給每個詞語排一個編號,如果表示某個詞語,則該詞語對應編號位置設定為1,其餘位置都是0,這個比較好理解,簡單舉個例子。

例如我有一個詞彙表:【籃球,足球,羽毛球,乒乓球,排球】
則籃球可以是表示成:[1,0,0,0,0]
則乒乓球可以是表示成:[0,0,0,1,0]

這是一種離散的表示方式,非常稀疏,想象一下如果詞彙庫很大,100W級別的,那麼只有一個位置是1,其他的位置都是0,帶來了巨大的計算量和儲存量,資料顯得很稀疏。
且資料之間沒有什麼聯絡,資料之間的距離都是一樣的,cos值餘弦相似度都是0,都是看做是完全獨立的存在,詞彙之間毫無相關,這個很明顯不符合常理的,因此這樣的表示方法不適合NLP的語言模型計算,畢竟語言詞語是有相互聯絡的,不是完全獨立的存在。

但它也有用武之處,比如適用於表示類別的離散值應用場景下,還記得我們之前學習過那麼多的神經網路模型,對於類別的資料,MNIST資料(不需要進行任何比較的,且獨立的,相互等價的離散取值的情況下),都是用的是one-hot向量啊。

二:詞袋模型(Bag of words)
就是想象成一個袋子,裡面裝的就是各個詞語,但是裡面的詞語沒有順序,只有頻率統計。

比如有詞庫【我,愛,籃球,你,喜歡,科研,和】
句子1:我愛籃球和愛科研
句子2:你喜歡籃球
句子1的詞袋模型就是:[1,2,1,0,0,1,1]
句子2的詞袋模型就是:[0,0,0,1,1,1,0]

這樣我們就得到每個句子的詞袋統計模型,其實也就是向量,如果我們想計算兩個句子的相似度,也就是兩個向量的相似度,可以用到歐氏距離相似度,也可以用到餘弦相似度(求cos)。

該模型表示文字有如下優點:
1:簡單,方便,快速建立
2:對於簡單的NLP問題還可以解決的,比如文字分類,文學類的,科技類的,體育類的,金融類的文章的詞語使用,和詞頻統計就會不一樣。因此可以簡單用於文字分類。

該模型表示文字有如下缺點:
1:句子中的詞語順序資訊丟失,因為詞語的順序也是很有含義的,畢竟句子“我愛你”比“你我愛”這個句子更像人話,但是詞袋模型下是一樣的。
2:句子中的詞語的重要性的關鍵詞也丟失了,這隻能看到某個詞語的出現次數或者頻率,但是某關鍵詞(重要性高的詞語)不代表出現的頻率就很高,如果不理解這個意思,請參考TF-IDF的學習。

三:TF-IDF
這個我之前已經學過了,可以參考之前學習的文件,這個演算法是能夠得到某個句子或者文件的關鍵詞,能提取得到重要性高的關鍵詞,不僅僅是有詞語的頻率統計(TF),還有詞語的重要程度(IDF)。

如上都是基於傳統的統計模型的,簡單的NLP處理。
後面將會逐漸學習基於神經網路模型的語言模型。

相關文章