小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【語言模型系列】原理篇一:從one-hot到Word2vec

 520jefferson 2020-08-15

這次的系列文章將會介紹NLP領(lǐng)域語言模型及詞向量表示的發(fā)展史,原理篇會從遠(yuǎn)古時代的one-hot出現(xiàn)講到時代新星bert及其改進(jìn),同時后續(xù)的實踐篇將會介紹預(yù)訓(xùn)練模型在房產(chǎn)領(lǐng)域的工業(yè)實踐應(yīng)用,帶你填上一個個的大坑。話不多說,操練起來~

語言模型及詞向量

何為語言模型?這是一個要貫穿整篇文章的問題。所謂語言模型,就是判斷一句話是不是人話的模型,也就判斷出是>的模型。當(dāng)然,計算機(jī)并不認(rèn)識周杰倫,它只知道0和1,所以我們讓模型進(jìn)行判斷時,需要將豐富的文字轉(zhuǎn)換成冷冰冰的數(shù)字,這樣計算機(jī)才能幫助我們進(jìn)行計算,這也就是詞向量的由來和存在的意義。

一個好的語言模型就是判斷一句人話的概率盡可能的高,判斷非人話的概率盡可能的低。那什么是一個好的詞向量呢?舉個例子,比如當(dāng)我們?nèi)祟惪吹健畐oman’和‘female’時,會覺得這兩個詞應(yīng)該是相似的意思,那么一個好的詞向量表示就是讓計算機(jī)通過計算這兩個詞向量,得出這兩個詞相似的結(jié)論。一般就是讓計算機(jī)通過計算兩個向量之間的距離來進(jìn)行判斷。所以如何讓計算機(jī)看到的詞向量和我們看到的詞具有相同的意義,這是研究詞向量的究極目標(biāo)。

語言模型往往需要借助詞向量進(jìn)行計算,一個好的語言模型的誕生往往會伴隨著質(zhì)量較高的詞向量的出現(xiàn),因此詞向量往往是語言模型的副產(chǎn)品。當(dāng)然,優(yōu)秀的事務(wù)往往不是一蹴而就的,語言模型和詞向量的發(fā)展也經(jīng)歷了多個階段。從詞向量的角度來簡單分類的話,大致可以分為one-hot表示和分布式表示兩個大階段,下面將從這個角度進(jìn)行介紹。

一、one-hot表示

one-hot的想法簡單粗暴,目的單純,在我們的大腦和計算機(jī)之間架起了第一道橋梁。one-hot將每一個詞表示成一個固定維度的向量,維度大小是詞表大小,向量中單詞所在位置為1,其他位置為0。舉個栗子,假設(shè)我們的詞庫里只有如下7個詞

my,on,the,bank,river,woman,female

那么bank這個單詞就可以表示為[0,0.0,1,0,0,0],on可以表示為[0,1,0,0,0,0,0],以此類推。

但是想法過于簡單總是會出問題的,one-hot存在的兩個明顯問題:維度災(zāi)難語義鴻溝

所謂維度災(zāi)難就是one-hot的向量維度是和詞庫大小一致的,一般我們的詞庫會很大,比如當(dāng)我們的詞庫里有100000個詞,那么一個詞向量的維度就是,這就導(dǎo)致one-hot表征的向量維度很大,使得數(shù)據(jù)樣本稀疏,距離計算困難,造成維度災(zāi)難。當(dāng)維度災(zāi)難發(fā)生時,一個樣本的特征就會過于多,導(dǎo)致模型學(xué)習(xí)過程中極其容易發(fā)生過擬合。

所謂語義鴻溝的問題是因為one-hot生成的詞向量都是彼此正交的,體現(xiàn)不出任何語義上的聯(lián)系。比如on表示為[0,1,0,0,0,0,0],woman表示為[0,0.0,0,0,1,0],female表示為[0,0.0,0,0,0,1],on和woman這兩個向量相乘結(jié)果是0,female和woman這兩個向量相乘也是0,所以無法表現(xiàn)出on和woman不相似,female和woman相似這種語義上的聯(lián)系。

二、分布式表示

鑒于one-hot表示的缺點(diǎn),我們希望能有低維稠密的詞向量出現(xiàn),同時這些向量之間能夠存在語義上的聯(lián)系,所以分布式表示就帶著歷史使命出現(xiàn)了。分布式表示描述的是將文本分散嵌入到另一個空間,一般是將高維映射到低維稠密的向量空間。分布式表示依據(jù)的理論是Harris在1954年提出的分布式假說,即:上下文相似的詞,其語義也相似。

2.1 基于SVD

這一類方法的一般操作是將共現(xiàn)矩陣進(jìn)行SVD分解,即,然后取分解后的的作為詞向量矩陣(一般取U的子矩陣)。所以啥是共現(xiàn)矩陣,啥是SVD呢?

2.1.1 共現(xiàn)矩陣

共現(xiàn)矩陣一般有兩種,第一種叫Window based Co-occurrence Matrix,是通過統(tǒng)計指定窗口大小的單詞共現(xiàn)次數(shù)構(gòu)成的矩陣,舉個栗子,假設(shè)我們的語料庫中只有三個句子

I like deep learning.I like NLP.I enjoy flying.

選取窗口大小為3,那么構(gòu)成的共現(xiàn)矩陣如下圖所示

共現(xiàn)矩陣1

第二種叫Word-Document Matrix,是將單詞在文檔中出現(xiàn)的頻率構(gòu)成矩陣,再舉個栗子,假設(shè)我們一共有三篇文檔

document1: I like deep learning. I enjoy deep learningdocument2: I like NLP.document3: I enjoy flying.

那么構(gòu)成的共現(xiàn)矩陣如下圖所示

共現(xiàn)矩陣2

2.1.2 SVD

前面提到,SVD是將矩陣進(jìn)行分解,,其中的矩陣,的矩陣,的矩陣,的矩陣,如何求解得到這三個矩陣呢?

首先回顧一下特征值和特征向量的定義:

其中,A是的實對稱矩陣,是一個維向量,則稱是一個特征值,是矩陣的特征值對應(yīng)的一個特征向量。如果我們求出了個特征值及其對應(yīng)的特征向量,如果這個特征向量線性無關(guān),那么矩陣就可以表示為

其中,是有個特征向量組成的的矩陣,是由個特征值為主對角線的維矩陣。一般會將進(jìn)行標(biāo)準(zhǔn)化,即,,也就是得到了,那么就可以表示為

需要注意的是,直接進(jìn)行特征分解的矩陣是方陣,而在SVD中的矩陣不一定是方陣,這時需要再做一些推導(dǎo)。

由于,所以

因為是一個的方陣,所以通過求解的特征向量,就可以得到矩陣。同理,通過求解的特征向量,就可以得到矩陣,通過對的特征值矩陣求平方根,就可以得到矩陣的奇異值矩陣\Sigma$。至此,我們得到了矩陣A的分解。

值得注意的是,奇異值是從大到小排列的,通常前10%甚至1%的奇異值的和就占了所有奇異值和的99%以上,奇異值在集合意義上代表了特征的權(quán)重,所以我們一般不會選擇將整個矩陣作為詞向量矩陣,而是選擇前k維,最終的詞向量表大小就是,是詞表大小,是詞向量維度。

基于SVD的方法得到了稠密的詞向量,相比于之前的one-hot有了一定提升,能夠表現(xiàn)單詞之間一定的語義關(guān)系,但是這種方法也存在很多問題:

  • 矩陣過于稀疏。因為在構(gòu)建共現(xiàn)矩陣時,必然有很多詞是沒有共現(xiàn)的
  • 分解共現(xiàn)矩陣的復(fù)雜度很高
  • 高頻無意義的詞影響共現(xiàn)矩陣分解的效果,如is,a
  • 一詞多義問題,即同一個詞具有不同含義卻被表示為一個向量,比如bank既有銀行的意思,也有岸邊的意思,但在這里被表示為統(tǒng)一的向量

2.2 基于語言模型

基于語言模型的方法拋棄了共現(xiàn)矩陣這種問題重重的東西,轉(zhuǎn)而通過構(gòu)建語言模型來產(chǎn)生詞向量。so,啥是語言模型呢?

標(biāo)準(zhǔn)定義:對于語言序列,語言模型就是計算該序列出現(xiàn)的概率,即

通俗理解:構(gòu)建一個模型,使得看起來像人話的句子序列出現(xiàn)的概率大,非人話的句子序列出現(xiàn)的概率小,也就是>

語言模型一般包括統(tǒng)計語言模型和神經(jīng)網(wǎng)絡(luò)語言模型,統(tǒng)計語言模型一般就是指N-gram語言模型,神經(jīng)網(wǎng)絡(luò)語言模型包括NNLM、Word2vec等。

2.2.1 N-gram

N-gram就是一個語言模型,其目的并非產(chǎn)生詞向量,一般用于判斷語句是否合理或者搜索sug推薦,這里簡單一提。

前面說了,語言模型計算一句人話的概率,也就是,利用鏈?zhǔn)椒▌t可知

直接計算上式計算量太大,所以N-gram模型引入馬爾科夫假設(shè),即當(dāng)前詞出現(xiàn)的概率只與其前n-1個詞有關(guān)

當(dāng)語料足夠大時

真正常用的N-gram的n不會超過3,一般為n=2。當(dāng)n=2時,利用上式計算一句話的概率

2.2.2 NNLM

使用語言模型產(chǎn)生詞向量的一個里程碑論文是Bengio在2003年提出的NNLM,該模型通過使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練得到了一個語言模型,同時產(chǎn)生了副產(chǎn)品詞向量。模型的總體架構(gòu)如下圖所示,表達(dá)的思想是利用前n-1個詞去預(yù)測第n個詞的概率,所以這里的輸入是n-1個詞,輸出是一個維度為詞表大小的向量,代表每個詞出現(xiàn)的概率。

NNLM原理結(jié)構(gòu)圖

這個結(jié)構(gòu)在現(xiàn)在看起來是很簡單

  • 首先輸入層將當(dāng)前詞的前個詞作為上文,通過對詞向量表進(jìn)行l(wèi)ook-up得到詞向量表示,每個詞的維度是

  • 然后將這個詞向量進(jìn)行拼接,得到一個維度是的長向量,然后經(jīng)過隱層計算,得到一個的向量,模型訓(xùn)練過程中最大的運(yùn)算量就在這一層

    參數(shù),其中是偏置,是參數(shù)矩陣,是將詞向量直連到輸出時的參數(shù),可以置為0,是超參數(shù)。

    利用softmax對輸出概率進(jìn)行歸一化

  • 使用交叉熵作為損失函數(shù),所以對于單個樣本,其優(yōu)化目標(biāo)是就是最大化,利用隨機(jī)梯度下降進(jìn)行優(yōu)化

優(yōu)化結(jié)束后,得到了一個語言模型,同時得到了詞向量矩陣。

NNLM模型在獲取詞向量上的工作是奠基性的,但是其模型訓(xùn)練的復(fù)雜度還是過高,后續(xù)很多算法都是在NNLM的基礎(chǔ)上進(jìn)行改進(jìn),比如耳熟能詳?shù)腤ord2vec對其訓(xùn)練的復(fù)雜度進(jìn)行了針對性的改進(jìn)。

前面所講的都是一些開胃小菜,建立該系列文章的核心概念--詞向量。接下來我們將會對經(jīng)典算法Word2vec單獨(dú)拿出來進(jìn)行詳細(xì)的原理介紹~

三、word2vec

Word2vec是谷歌團(tuán)隊在2013年開源推出的一個專門用于獲取詞向量的工具包,其核心算法是對NNLM運(yùn)算量最大的那部分進(jìn)行了效率上的改進(jìn),讓我們來一探究竟。

3.1 Word2vec原理解析

word2vec有兩種模型--CBOW和Skip-gram,這兩個模型目的都是通過訓(xùn)練語言模型任務(wù),得到詞向量。CBOW的語言模型任務(wù)是給定上下文預(yù)測當(dāng)前詞,Skip-gram的語言模型任務(wù)是根據(jù)當(dāng)前詞預(yù)測其上下文。

Word2vec還提供了兩種框架--Hierarchical Softmax和Negative-Sampling,所以word2vec有四種實現(xiàn)方式,下面將對其原理進(jìn)行介紹。

3.1.1 CBOW

3.1.1.1 結(jié)構(gòu)

CBOW的核心思想就是利用給定上下文,預(yù)測當(dāng)前詞,其結(jié)構(gòu)表示為

CBOW結(jié)構(gòu)

我們知道基于神經(jīng)網(wǎng)絡(luò)的語言模型的目標(biāo)函數(shù)通常是對數(shù)似然函數(shù),這里CBOW的目標(biāo)函數(shù)應(yīng)該就是

其中是單詞的上下文,是詞典。所以我們關(guān)注的重點(diǎn)應(yīng)該就是的構(gòu)造上,NNLM和Word2vec的本質(zhì)區(qū)別也是在于該條件概率函數(shù)的構(gòu)造方式不同。

3.1.1.2 原理

3.1.1.2.1 基于Hierarchical Softmax

CBOW模型的訓(xùn)練任務(wù)是在給定上下文,預(yù)測當(dāng)前詞?;贖ierarchical Softmax的CBOW結(jié)構(gòu)相當(dāng)于在NNLM上的改進(jìn),如下圖所示

基于Hierarchical Softmax的CBOW模型

CBOW模型一共是有三層,分別是輸入層(input layer),投影層(projection layer)和輸出層(output layer)。

輸入層:輸入是當(dāng)前詞的上下文,共個詞向量

投影層:投影層將個詞向量進(jìn)行累加,得到,即,這里不包含當(dāng)前詞的向量表示

輸出層:輸出是一個用語料中出現(xiàn)的詞為葉子結(jié)點(diǎn)構(gòu)建的Huffman樹,結(jié)點(diǎn)的權(quán)值是各詞在語料中出現(xiàn)的次數(shù)。圖中的Huffman樹共個結(jié)點(diǎn),對應(yīng)語料中的個詞,非葉子結(jié)點(diǎn)個,即圖中標(biāo)黃的。

基于Hierarchical Softmax的CBOW模型和之前介紹的NNLM的主要區(qū)別:

  • 從輸入層到投影層,CBOW采用的是求和,而NNLM是拼接
  • CBOW沒有隱藏層
  • 輸出層,基于Hierarchical Softmax的CBOW是樹形結(jié)構(gòu),NNLM是線性結(jié)構(gòu)

之前說過,NNLM的主要運(yùn)算量就是在于隱藏層和輸出層的softmax的計算量,基于Hierarchical Softmax的方法通過對這些關(guān)鍵點(diǎn)進(jìn)行了針對性的優(yōu)化,去掉了隱藏層,更改了輸出結(jié)構(gòu),大大提升了運(yùn)算效率。下面介紹基于Hierarchical Softmax的CBOW是如何利用樹結(jié)構(gòu)訓(xùn)練得到詞向量的。

對于huffman的某個葉子結(jié)點(diǎn),假設(shè)該結(jié)點(diǎn)對應(yīng)詞典中的詞,定義以下符號

  • :從根結(jié)點(diǎn)出發(fā)到達(dá)對應(yīng)的葉子結(jié)點(diǎn)的路徑
  • :路徑中包含的結(jié)點(diǎn)個數(shù)
  • :路徑中的個結(jié)點(diǎn),其中代表根結(jié)點(diǎn),代表詞對應(yīng)的結(jié)點(diǎn)
  • :詞的Huffman編碼,由位編碼構(gòu)成,即根結(jié)點(diǎn)不對應(yīng)編碼
  • :路徑中非葉子結(jié)點(diǎn)對應(yīng)的向量,代表路徑中第個非葉子結(jié)點(diǎn)對應(yīng)的向量

下面通過一個示例說明運(yùn)算原理,如下圖所示,考慮當(dāng)前詞=“足球”,那么圖中的紅色邊串起來的5個結(jié)點(diǎn)就構(gòu)成路徑,其長度,是路徑的5個結(jié)點(diǎn),其中對應(yīng)的是根結(jié)點(diǎn),分別是1,0,0,1,即當(dāng)前詞“足球”的Huffman編碼為1001,分別是路徑上4個非葉子結(jié)點(diǎn)對應(yīng)的向量。

CBOW原理示例

所以,講了這么多,我們的重點(diǎn)究竟是怎么構(gòu)建的呢?

我們知道詞庫里的每一個詞都可以被表示為一個Huffman編碼,如果把Huffman樹每一個結(jié)點(diǎn)都看成一次二分類,那么這個語言模型的任務(wù)就變成輸入上下文,使得當(dāng)前詞的Huffman編碼對應(yīng)的路徑的概率最大。這里約定將一個結(jié)點(diǎn)進(jìn)行二分類時,分到左邊為負(fù)類,分到右邊為正類(主要為了和源碼對應(yīng)),即

由前面介紹的邏輯回歸可以知道,結(jié)點(diǎn)分為正類的概率是

所以分為負(fù)類的概率就是。這里的就是當(dāng)前詞的上下文通過求和得到的,就是每一個結(jié)點(diǎn)的,是待訓(xùn)練參數(shù)。

舉個栗子,還是前面說的當(dāng)前詞是“足球”,從根結(jié)點(diǎn)出發(fā)到達(dá)這個詞一共需要經(jīng)過4次二分類

  • 第一次:
  • 第二次:
  • 第三次:
  • 第四次:

所以對于當(dāng)前詞“足球”,我們的條件概率函數(shù)為

由上面的小例子,我們可以擴(kuò)展出一般的條件概率公式

其中

寫成整體表達(dá)式

所以我們要優(yōu)化的目標(biāo)函數(shù)就是

使用隨機(jī)梯度上升法進(jìn)行目標(biāo)函數(shù)優(yōu)化,下面推導(dǎo)一下梯度的計算

所以,更新參數(shù)

其中,是學(xué)習(xí)率。

同理可以計算得到

我們最終想優(yōu)化的向量是詞表中的每一個詞向量,而是當(dāng)前詞上下文的累加,那么該如何更新每個詞的向量表示呢?word2vec中的做法很簡單直接,就是將的梯度變化等效于每個詞的梯度變化,即

至此,基于Hierarchical Softmax的CBOW模型的原理就介紹完了,通過不斷訓(xùn)練就可以得到我們想要的詞向量表。

3.1.1.2.2 基于Negative-Sampling

基于Negative-Sampling(負(fù)采樣,NEG)的方法的目的是進(jìn)一步提升訓(xùn)練速度,同時改善詞向量的質(zhì)量。NEG不再使用相對復(fù)雜的huffman樹,而是使用簡單的隨機(jī)負(fù)采樣,大幅度提升性能。

CBOW是利用上下文預(yù)測當(dāng)前詞,那么將當(dāng)前詞替換為其他詞時,就構(gòu)成了一個負(fù)樣本。

書面一點(diǎn),對于給定的,詞就是一個正樣本,其他詞就是負(fù)樣本,假設(shè)我們通過負(fù)采樣方法選取好一個關(guān)于的負(fù)樣本子集。得到樣本集后,我們的目標(biāo)是最大化

其中

所以

這里,還是代表上下文的詞向量之和,表示詞對應(yīng)的一個待訓(xùn)練輔助向量。直觀上看,這就是最大化的同時,最小化,其中,也就是最大化正樣本的概率的同時最小化負(fù)樣本的概率。

對于給定的語料庫C,最終的目標(biāo)函數(shù)是

為了推導(dǎo)梯度更新的過程,令

所以

同理

3.1.2 Skip-gram

3.1.2.1 結(jié)構(gòu)

Skip-gram的核心思想就是利用給定的當(dāng)前詞,預(yù)測上下文,其結(jié)構(gòu)表示為

Skip-gram結(jié)構(gòu)

我們知道基于神經(jīng)網(wǎng)絡(luò)的語言模型的目標(biāo)函數(shù)通常是對數(shù)似然函數(shù),這里Skip-gram的目標(biāo)函數(shù)應(yīng)該就是

其中是單詞的上下文,是詞典。所以我們關(guān)注的重點(diǎn)應(yīng)該就是的構(gòu)造上。

3.1.2.2 原理

3.1.2.2.1 基于Hierarchical Softmax

前面說了,Skip-gram的語言模型任務(wù)是根據(jù)當(dāng)前詞預(yù)測其上下文,原理上和CBOW很相似,基于Hierarchical Softmax的Skip-gram的結(jié)構(gòu)如下圖所示

基于Hierarchical Softmax的Skip-gram模型

輸入層:中心詞的詞向量

投影層:恒等投影,只是為了和CBOW模型進(jìn)行對稱類比

輸出層:和CBOW一樣,是一顆huffman樹

Skip-gram的重點(diǎn)是條件概率函數(shù)的構(gòu)造,SKip-gram中對于該條件概率函數(shù)的定義為

所以,Skip-gram的目標(biāo)函數(shù)為

所以

同理

3.1.2.2.2 基于 Negative-Sampling

基于負(fù)采樣的skip-gram模型基本與前面基于負(fù)采樣的CBOW推導(dǎo)的類似,目標(biāo)函數(shù)為

也就是當(dāng)給定當(dāng)前詞時,希望其上下文出現(xiàn)的概率最大,其中

這里代表的就是上下文中某個詞出現(xiàn)的概率,表示處理詞時生成的負(fù)樣本子集,是輸入的當(dāng)前詞,是待訓(xùn)練的輔助向量。

所以

可以看出來,這里需要對上下文中的每一個詞做一次負(fù)采樣。實際上,作者在源碼實現(xiàn)過程中并沒有這么做,而是針對進(jìn)行了次負(fù)采樣,這樣依賴,我們的目標(biāo)函數(shù)變成

其中

這里表示處理詞時生成的負(fù)采樣子集。

最終的目標(biāo)函數(shù)變成

考慮梯度更新,令

所以

同理

3.2 Word2vec不可忽視的問題

Word2vec算法雖然在前些年取得了良好的效果,但是也有不足之處,其中最不可忽視的問題就是一詞多義的問題。Word2vec中最后對每一個詞生成一個固定的向量表示,那么對于相同單詞有多個含義時,就不能很好的解決。比如bank,既有銀行的意思,也有岸邊的意思,當(dāng)算法的結(jié)果只有一個固定向量對其進(jìn)行表征時,必然導(dǎo)致這個詞的表征不夠準(zhǔn)確。

既然存在問題,那就存在解決問題的方法,現(xiàn)在比較火的預(yù)訓(xùn)練相關(guān)的算法就解決了這個問題。具體咋回事呢?下一篇文章見~

作者介紹

李東超,2019年6月畢業(yè)于北京理工大學(xué)信息與電子學(xué)院,畢業(yè)后加入貝殼找房語言智能與搜索部,主要從事自然語言理解等相關(guān)工作。

下期精彩

【語言模型系列】原理篇二:從ELMo到ALBERT

招賢納士



歡迎加入AINLP預(yù)訓(xùn)練模型交流群

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多