文中僅代表個人觀點,如有異議,歡迎**。
在機器學習的研究中,從我們的處理物件上來看可以分為:影象、語音、文字。
本文重點討論對文字的處理。也就是說,我們處理的物件是文字,但是機器不像人啊!沒辦法像人類一樣對文件進行閱讀。
所以!!我們要做的就是把文字進行表示,而我們的這種表示方法可以讓機器讀懂文件的內容。
於是,出現了one-hot編碼。
one-hot編碼就是把我們處理的文字用二進位制進行表示,每個字的維度是字典的大小。
拿個例子來說吧:
我們的字典是:自然語言處理
由於該字典有6個字,所以字典的維度為6.
自:[1 0 0 0 0 0]
然:[0 1 0 0 0 0]
語:[0 0 1 0 0 0]
言:[0 0 0 1 0 0]
處:[0 0 0 0 1 0]
理:[0 0 0 0 0 1]
從以上例子可以看出,表示每個字的矩陣中,只有乙個1,其餘都是0.
以上的例子的字典僅僅包含6個字,但是現實生活中字典的大小要遠大於這個數字,維度要遠大於6維。維度大帶來的是計算的問題。
為了解決這個問題,word2vec就誕生了。
和one-hot的功能相同,word2vec也是對詞向量進行表示,但是word2vec的表示方法不再是稀疏表示。並且word2vec的表示方法可以使語義相近的詞的距離也較近。
例如:上海、北京、廣州等這些城市的距離較近,這是one-hot表示遠遠做不到的,也是word2vec表示的強大優點所在。
word2vec模型有兩種模式:cbow和skip-gram。
cbow是根據上下文**目標詞,skip-gram是根據目標詞**上下文。
word2vec也是神經網路,該神經網路的輸入為one-hot編碼,輸出為**的上下文或者中心詞。剛才說到,我們的word2vec是用來對詞進行表示啊,我們詞向量的表示就是隱層輸出或者出入到隱層的權重。
現在我們再來分析一下為什麼用word2vec就能把具有相同語義的詞聚集在一起呢?
例如:句子a:李華今天去學校上學了。
句子b:王寧今天去學校上學了。
句子a的主語是李華、句子b的主語是王寧。在word2vec中,兩個句子具有相同的語義,當出現「今天去學校上學了」這個上下文的時候,「李華」和「王寧」這兩個向量響應的概率比較大(因為這是我們訓練好的)。換言之,「李華」和「王寧」兩個向量在二維平面上,相比於大山、黃河之類的距離會比較近。這也就是為什麼word2vec可以把具有相同語境的詞聚類到一塊。
但是,word2vec是把具有相同語境的詞給聚類到一塊了,也存在缺點。例如:word2vec依賴於訓練樣本、再有就是具有相同上下文的詞也不一定具相同的意思。例如:「這個書包很漂亮」和「這個書包很醜」,word2vec會把「漂亮」和「醜」聚類到一塊,但是「漂亮」和「醜」並不是一類詞(描述事物「好」或者「壞」)。
近年來,神經網路得到了廣泛的應用。大家都在嘗試把神經網路應用在語言模型上。於是,基於神經網路的語言模型得到了應用。由於rnn固有的網路結構,使rnn在處理序列問題上具有較好的效能。
因此,基於rnn的encoder-decoder語言模型脫穎而出。
encoder-decoder模型包含encoder和decoder兩部分。
該模型將輸入對映到乙個固定維度的向量,然後再將該固定維度的向量對映到輸出。
根據encode-decoder模型的結構特徵,我們可以看出該模型可以較好的去捕捉語言的規律性。
當然,基於rnn的encoder-decoder語言模型只是一種,當然存在基於lstm的encoder-decoder語言模型及其變種。
但是,encoder-decoder語言模型是把所有長度的輸入均對映到乙個固定長度的中間向量。我們可以思考一下,如果輸入維度較小,我們中間向量可以很好的表示輸入資訊,那麼如果輸入維度較大呢??也即是說:當輸入維度較小的時候,會出現資訊冗餘,當輸入較大的時候,會出現資訊丟失的情況。
為了解決這個問題,注意力機制應運而生。
注意力,包括:聯合encoder-decoder模型和注意力、注意力模型(不使用cnn和rnn)。
基於encoder-decoder的注意力機制是根據輸入,在組建中間變數的時候,對每個輸入得到的中間變數賦予一定的權重。例如:「我要去理髮店剪頭髮」,在這個句子中「店」作為輸入時,上下文「剪頭髮」、「去理髮」的的權重要大於「我」的權重。
注意力機制,就是用權重來賦予「重點」和「非重點」的區分。
注意力模型同樣包含encoder-decoder部分。具體此處不再詳細描述,可參閱attention is all you need的這篇文章進行學習。
從RNN到LSTM GRU 語言模型
rnn最重要的是特徵就是每一時刻的結構和引數都是共享的。先放一張盜圖 rnn就好像天生為序列而生的神經網路,舉個簡單的例子,序列標註,比如詞性標註,如圖所示,x是我們輸入,h是我們的輸出,也就是詞性。有人可能就會說,我們使用一般的神經網路也可以做到這樣。乙個詞乙個樣本就可以了,這裡的話就破壞了句子的...
從模型到演算法 目錄
出於對資料分析 資料探勘方面的興趣,以及在未來工作上的幫助。本博打算多看一些相關書籍與部落格,總結及翻譯相應的知識點。使得自己對這塊的知識越來越了解,總結的文章初步分為以下章節 第一章,eda 資料探索 第二章,線性回歸與模型診斷 第三章,從線性概率模型到廣義線性模型 第四章,模型中特徵子集的選擇 ...
從DTO到充血模型
充血模型是marting fowler提出的概念,表示乙個包含領域知識 業務邏輯 的物件。與充血模型相對的是貧血模型。貧血模型是偽裝成領域模型的資料容器 data holder 貧血模型只包含getter setter,沒有任何領域知識。乙個和貧血模型非常相近的概念是dto。dto只有getter ...