詞嵌入是所有自然語(yǔ)言處理任務(wù)所必須要經(jīng)歷的步驟,非常的重要。詞向量在網(wǎng)絡(luò)上已經(jīng)有了大量的文章,但是,出于我們專欄的完整性系統(tǒng)性的考慮,筆者還是決定加上這樣一個(gè)專題。 計(jì)劃用3-4次,徹底說(shuō)清楚在自然語(yǔ)言處理中,詞向量的由來(lái),本質(zhì)和訓(xùn)練。公眾號(hào)專欄主要講基本原理,知識(shí)星球講實(shí)際的操作。 本篇主要講述詞向量的由來(lái)及本質(zhì)。 作者&編輯 | 小Dream哥 1 詞的向量化 首先,我們提出這樣一個(gè)問(wèn)題,一個(gè)文本,經(jīng)過(guò)分詞之后,送入某一個(gè)自然語(yǔ)言處理模型之前該如何表示? 例如,“人/如果/沒(méi)用/夢(mèng)想/,/跟/咸魚(yú)/還有/什么/差別”,向機(jī)器學(xué)習(xí)模型直接輸入字符串顯然是不明智的,不便于模型進(jìn)行計(jì)算和文本之間的比較。那么,我們需要一種方式來(lái)表示一個(gè)文本,這種文本表示方式要能夠便于進(jìn)行文本之間的比較,計(jì)算等。最容易想到的,就是對(duì)文本進(jìn)行向量化的表示。例如,根據(jù)語(yǔ)料庫(kù)的分詞結(jié)果,建立一個(gè)詞典,每個(gè)詞用一個(gè)向量來(lái)表示,這樣就可以將文本向量化了。 最早的文本向量化方法是詞袋模型,我們先來(lái)看看詞袋模型。 2 詞袋模型 要講詞向量,我們首先不得不說(shuō)的就是詞袋模型。詞袋模型是把文本看成是由一袋一袋的詞構(gòu)成的。例如,有這樣兩個(gè)文本: 1) “人/如果/沒(méi)有/夢(mèng)想/,/跟/咸魚(yú)/還有/什么/差別” 2) “人生/短短/幾十/年/,差別/不大/,/開(kāi)心/最/重要” 這兩個(gè)文本,可以構(gòu)成這樣一個(gè)詞典: {“人”,“如果”,“沒(méi)有”, “夢(mèng)想”, “,”,“跟”, “咸魚(yú)” , “還有”,“什么”, “差別”, “人生”, “短短”, “幾十”,“年”, “不大”, “開(kāi)心”, “最”, “重要”} 字典的長(zhǎng)度為18,每個(gè)詞對(duì)應(yīng)有一個(gè)index,所以詞“人”可以用一個(gè)18維的向量表示表示: {1,0,0,0,····,0} 詞“重要”可以用一個(gè)18維的向量表示表示: {0,0,0,0,····,1}, 那么,文本該怎么表示呢?詞袋模型把文本當(dāng)成一個(gè)由詞組成的袋子,記錄句子中包含各個(gè)詞的個(gè)數(shù): 文本1: {1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, 0} 文本2: {0,0,0,0,2,0,0,0,0,1,1,1,1,1,1,1,1,1} 我們大概總結(jié)一下,詞袋模型把文本看成是一個(gè)裝著詞的袋子,以文本2為例,用詞袋模型可以這樣描述它。文本2里有0個(gè)“人”,2個(gè)“,”, 1個(gè)“差別” 等等。所以詞袋模型有以下特點(diǎn): 1) 文本向量化之后的維度與詞典的大小相關(guān); 2) 詞袋模型沒(méi)有考慮詞語(yǔ)之間的順序關(guān)系。 這只是兩個(gè)句子,所以詞典的大小是18。當(dāng)語(yǔ)料庫(kù)很大時(shí),詞典的大小可以是幾千甚至幾萬(wàn),這樣大維度的向量,計(jì)算機(jī)很難去計(jì)算。 而且就算是只有一個(gè)詞的句子,它的維度仍然是幾千維,存在很大的浪費(fèi)。 此外,詞袋模型忽略了詞序信息,對(duì)語(yǔ)義理解來(lái)講是一個(gè)極大的信息浪費(fèi)。最后,詞袋模型會(huì)造成語(yǔ)義鴻溝現(xiàn)象,即兩個(gè)表達(dá)意思很接近的文本,可能其文本向量差距很大。 所以,詞袋模型并不是一個(gè)好的解決方案。接下來(lái),詞向量就“粉墨登場(chǎng)”了。 3 詞向量 相比于詞袋模型,詞向量是一種更為有效的表征方式。怎么理解呢?詞向量其實(shí)就是用一個(gè)一定維度(例如128,256維)的向量來(lái)表示詞典里的詞。 經(jīng)過(guò)訓(xùn)練之后的詞向量,能夠表征詞語(yǔ)之間的關(guān)系。例如,“香蕉”和“蘋(píng)果”之間的距離,會(huì)比“香蕉”和“茄子”之間的距離要近。 通過(guò)多維向量表示,也能更為方便的進(jìn)行計(jì)算。例如,“女人”+“漂亮” =“女神”。 那么,該如何獲取詞向量呢?我們先來(lái)看看神經(jīng)概率語(yǔ)言模型。 4 神經(jīng)概率語(yǔ)言模型 一個(gè)語(yǔ)言模型通常構(gòu)建為一句話的概率分布p(W),這里的p(W)實(shí)際上反映的是W作為一個(gè)句子出現(xiàn)的概率。 說(shuō)成大白話,語(yǔ)言模型就是計(jì)算某個(gè)句子出現(xiàn)的概率。 對(duì)于一個(gè)由T個(gè)詞按順序構(gòu)成的句子,P(W)實(shí)際上求解的是字符串的聯(lián)合概率,利用貝葉斯公式,鏈?zhǔn)椒纸馊缦拢?/span> 從上面可以看到,一個(gè)統(tǒng)計(jì)語(yǔ)言模型可以表示成,給定前面的的詞,求后面一個(gè)詞出現(xiàn)的條件概率。 我們?cè)谇驪(W)時(shí)實(shí)際上就已經(jīng)建立了一個(gè)模型,這里的諸多條件概率就是模型的參數(shù)。如果能夠通過(guò)語(yǔ)料,將這些參數(shù)已學(xué)習(xí)到,就能夠計(jì)算出一個(gè)句子出現(xiàn)的概率。 那么該如何學(xué)習(xí)這些條件概率呢?Yoshua Bengio在2003年《A Neural Probabilistic Language Model》一文中提出了一種神經(jīng)網(wǎng)絡(luò)的方法,用于語(yǔ)言模型的計(jì)算。 如上圖所示,是一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)。首先,將輸入語(yǔ)料進(jìn)行分詞,并向量化(隨機(jī)初始化成為一個(gè)N維的向量),然后將他們拼接起來(lái),用如下的公式表示: 隨后,將上述的拼接結(jié)果分別經(jīng)過(guò)一個(gè)激活函數(shù)和線性連接,并將二者的結(jié)果直接相加。此時(shí),y的維度是(|V|, 1),|V|表示語(yǔ)料詞表的大小。 最后,接一個(gè)softmax函數(shù),預(yù)測(cè)出下一個(gè)詞是目標(biāo)詞的概率。 訓(xùn)練時(shí),會(huì)設(shè)計(jì)損失函數(shù),用梯度下降的方法,優(yōu)化參數(shù)。 在訓(xùn)練過(guò)程中,我們優(yōu)化了如下的參數(shù): 其中C為我們之前隨機(jī)初始化的向量,但是在訓(xùn)練過(guò)程中,得到了不斷的優(yōu)化。 因此,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練完成之后,我們不但得到了一個(gè)能夠預(yù)測(cè)句子出現(xiàn)概率的模型,也得到了一份詞向量,它能夠表示詞語(yǔ)之間的關(guān)系。 5 總結(jié) 上面詳細(xì)介紹了詞向量的來(lái)歷和作用,并介紹了一種詞向量的訓(xùn)練方法。 在實(shí)際過(guò)程中,并不是用上述神經(jīng)網(wǎng)絡(luò)來(lái)訓(xùn)練詞向量的因?yàn)樵~向量是如此的重要,NLP工作者們?cè)O(shè)計(jì)了專門(mén)的網(wǎng)絡(luò)來(lái)訓(xùn)練詞向量。目前用的最多的有word2vec和GLove。這里出于篇幅,先不介紹,后面的文章來(lái)介紹。 詞向量是NLP開(kāi)始邁進(jìn)“現(xiàn)代化”的關(guān)鍵,是各種面試必問(wèn)的基礎(chǔ),需重視。 |
|
來(lái)自: 有三AI > 《待分類(lèi)》