每天十道 NLP 精華練習題,讓你一步步在 NLP 之路越走越遠!同時,我們非常歡迎大家發表自己在機器學習/深度學習面試當中所遇到的各種問題~
-自然語言處理-
為什麼需要詞向量?
眾所周知,不管是機器學習還是深度學習本質上都是對數字的數字,Word Embedding (詞嵌入) 做的事情就是將單詞對映到向量空間裡,並用向量來表示。可以透過一個簡單的對比來看出:
One-hot Vector
對應的詞所在的位置設為 1,其他為 0;
例如:King, Queen, Man and Woman 這句裡面 Queen 對應的向量就是[0,1,0,0][0,1,0,0]
不足:難以發現詞之間的關係,以及難以捕捉句法(結構)和語義(意思)之間的關係
Word2Vec
基本思想是把每個詞表徵為KK 維的實數向量(每個實數都對應著一個特徵,可以是和其他單詞之間的聯絡),將相似的單詞分組對映到向量空間的不同部分。也就是 Word2Vec 能在沒有人為干涉下學習到單詞之間的關係。
舉個最經典的例子:
king- man + woman = queen
實際上的處理是:從
king
提取了
maleness
的含義,加上了
woman
具有的
femaleness
的意思,最後答案就是
queen
。
藉助表格來理解就是:
比如,animal 那一列表示的就是左邊的詞與 animal 這個概念的相關性
One-hot 表示文字資訊的缺點是什麼?
隨著語料庫的增加,資料特徵的維度會越來越大,產生一個維度很高,又很稀疏的矩陣。
這種表示方法的分詞順序和在句子中的順序是無關的,不能保留詞與詞之間的關係資訊。
共現矩陣是什麼?是否存在問題?
共現矩陣顧名思義就是共同出現的意思,詞文件的共現矩陣主要用於發現主題 (topic),用於主題模型,如 LSA。
局域窗中的 word-word 共現矩陣可以挖掘語法和語義資訊,例如:
I like deep learning。
I like NLP。
I enjoy flying
有以上三句話,設定滑窗為 2,可以得到一個詞典:{“I like”,“like deep”,“deep learning”,“like NLP”,“I enjoy”,“enjoy flying”,“I like”}。
我們可以得到一個共現矩陣 (對稱矩陣):
中間的每個格子表示的是行和列組成的片語在詞典中共同出現的次數,也就體現了共現的特性。
構架共現矩陣的細節
功能詞的處理
功能詞:如 “the”, “he”, “has”, 。。。
法1)直接忽略
在一些分類問題上可以這麼做;如果目標是詞向量,則不建議使用這種方法
法2)設定閾值 min(x, t)
其中 x 為功能詞語其他詞的共現次數,t 為設定的閾值
可以嘗試使用一些方法代替單純的計數,如皮爾遜相關係數,負數記為 0
存在的問題:
向量維數隨著詞典大小線性增長。
儲存整個詞典的空間消耗非常大。
一些模型如文字分類模型會面臨稀疏性問題。
模型會欠穩定,每新增一份語料進來,穩定性就會變化。
GloVe 與 Word2Vec 的區別是什麼?
Word2Vec 本質上是一個神經網路。Glove 也利用了反向傳播來更新詞向量,但是結構要更簡單,所以 GloVe 的速度更快。
Glove 認為 Word2Vec 對高頻詞的處理還不夠,導致速度慢;GloVe 認為共現矩陣可以解決這個問題
實際 Word2Vec 已結有了一些對高頻詞的措施 > 高頻詞的處理
從效果上看,雖然 GloVe 的訓練速度更快,但是詞向量的效能在通用性上要弱一些:在一些任務上表現優於 Word2Vec,但是在更多的任務上要比 Word2Vec 差。