自然語言處理-第三期-Bag of Word

背景

自然語言處理-第三期-Bag of Word

前兩期提到了NLP面對的問題還有情感分析的一個最最基礎的方法。 希望有引起大家的興趣。

本期給大家介紹 Bag of Word 詞袋法。這是將詞轉化為向量。

老規矩,我們將按照 解析面對的問題------->解析方法解決該問題的內在邏輯-------->該方法的優缺點 的順序。

Bag of Word 詞袋法

面對的問題

NLP面對的問題當然是語言處理。但是在第一期有提到,自然語言是Symbol或者說是符號化。Rocket之所以為火箭是因為大家約定俗成所致。

所以換一個角度看這個問題,人類語言雖然都是符號,但是其背後是有規律的或者共性的。比如“北京”,“上海”都代表著地方。所以自然語言處理是要找到其背後的特性;

上一段提到的是NLP的大目標,更進一步,我們非常粗略的將其分為 原始語言處理 和 分類及學習 兩部分。我自己的簡單理解是,原木加工成木材,木材加工成傢俱。 今天我們要涉及的是第一部分,原木加工部分。

一段文字,比如'I',"love","Music". 這段文字對於機器來說,就是原木,無法直接使用。那麼首先,要做的就是將其變成向量。

我之前有一個疑問,能理解為什麼機器不能直接處理文本,但是為什麼要轉化為【0,1,1,1,1】這種向量,為什麼不用自然數1,2,3,4 來代替呢?

可能是問題比較傻,我也沒有找到標準答案。我自己的理解:

  • 最重要的原因是多維數據能有更多的含義,比如我們站在“北京”,“上海”,“廣州” 這個維度。假設要數學上表達這三個詞意思相近,100維度的向量很容易就能涵蓋。但是如果是1,2,3,4 就很困難了。 比如1是北京,2是上海,3是廣州,那代表著北京與上海的意思表達 比 北京與廣州 更接近?
  • 另一個理解就是,如果是1,2,3,4 實際上就是一維度數據,這其實也是某種程度上的Symbolize符號化,只是換了個樣子。機器對其能做的也就是調換下順序,整數變小數等等。

Bag of Word內在邏輯

OK,上一段確定了,我們需要將文本向量化。 那麼下一個問題是How? 如何向量化呢?

其實轉化為向量,最直接的問題就是,如何確定向量的緯度,如何確定每個緯度的數字。 Bag of Word 提供了一個簡單的思路。

  1. 提取出文本獨特的word,然後給每個word賦予一個one hot vector,即【0,0,0,0,1】這種只有一個維度為1,其他為0。這類似於建立了一個詞庫;
  2. 在有一個詞庫之後,每個句子對應的向量就出來了。

下面舉個例子來說明,假設我們有以下這個文本庫:

“It was the best of times”

“It was the worst of times”

“It was the age of wisdom”

“It was the age of foolishness”

那麼我們的詞庫就是【‘It’, ‘was’, ‘the’, ‘best’, ‘of’, ‘times’, ‘worst’, ‘age’, ‘wisdom’, ‘foolishness’】10個數字

那麼“It was the best of times” 對應的向量就是【1,1,1,1,1,1,0,0,0,0】

如果是“It was the best best of times” 對應的向量是【1,1,1,2,1,1,0,0,0,0】

Bag of word 的解決辦法真的很直接,不是要向量嗎? 我就把所有的詞丟到一起,做一個大的向量。然後就出來了。


我個人看到這裡的時候,有想到一個問題,為什麼要這麼轉換向量呢? 雖然感覺簡單但是總覺得哪裡不對?

個人思考的結果:首先,這個問題的思路就反了。 正確的思路順序是 我們拿到純文本無法處理,需要轉化為向量。 Bag of Word提出了某種思路,將其向量化。 然後,我們再需要考慮這個方案的優缺點。 最後,我們如何評價這個方法最終是以應用結果來看的,並不是太簡單之類的。

Bag of Word 優缺點

優點:

  • 很明顯,Bag of Word的最明顯的優點就是簡單,方便。除了初始詞庫建立起來簡單,如果新增一個詞也能做到很簡單;
  • 從結果來看,很多不大樣本的情況下,其準確率也很可觀。具體的數據我並沒有驗證,但是通過學習資料的得出的結論;

缺點:

  • Bag of Word第一個缺點是,其只關注了詞出現的次數,並沒有考慮其順序;
  • 其實Bag of Word最大的缺點是在於Sparsity(稀疏,太離散)。這個大家肯定能想象到,當出現一個大樣本的情況下,詞庫的數量級可能達到10000+,這種情況下‘I love Musc' , 可能是【1,1,1,0,0,0........】 10000緯的數據裡面只有三個數字代表。這種情況最直接的後果是,1. 效率低, 當你做了10000次矩陣運算實際上只得到三個數, 2. 內存不夠用

下期預告

本期bag of word的方法是類似於將詞變成one hot vector 【0,0,0,1】這種形式。其最大的問題也很明顯,就是Sparsity 太離散。

那麼解決的思路也很直接,那就是降低緯度,矩陣中不再是0,1 而是自然數。那麼這個問題自然就迎刃而解了。

Word2Vec提供了一種普遍接受的思路,下一期會給大家帶來


分享到:


相關文章: