|
一、 背景介紹 深度學(xué)習(xí)已經(jīng)在圖像、語(yǔ)音等多個(gè)領(lǐng)域取得了重大突破,但在自然語(yǔ)言處理領(lǐng)域很長(zhǎng)一段時(shí)間內(nèi),一直沒(méi)有取得激動(dòng)人心的成果,很大一部分原因是因?yàn)槲谋静幌駡D像自帶天然的網(wǎng)格,能夠直接的轉(zhuǎn)換成數(shù)值型數(shù)據(jù),從而提取特征(如向量或者矩陣表示)。 于是,如何從文本中提取特征成為了一個(gè)熱點(diǎn)問(wèn)題。從2013年google 研究員Tomas Mikolov 發(fā)表兩篇論文(《Efficient Estimation of Word Representations in Vector Space》、《Distributed Representations of Words and Phrases and their Compositionality》)提出Word2Vec工具提取詞向量,讓自然語(yǔ)言處理向前邁了一大步,本文從原理上闡述Word2Vec的實(shí)現(xiàn)。 二、 詞向量 1. 詞向量表示 詞向量是將文本分詞后,以向量的形式表示每一個(gè)詞語(yǔ),這種轉(zhuǎn)換方式成為embedding,中文稱之為詞嵌入,早期使用一種叫one-hot Representation的表示詞向量,例如: “今天\上午\上完\體育課\,\下午\放假?!?/span> 分詞后用向量表示每一個(gè)單詞,其中每個(gè)單詞維度為單詞數(shù),每一個(gè)單詞所在位置為1,其他為0,如今天=[1,0,0,0,0,0,0],上午=[0,1,0,0,0,0,0] 這種表達(dá)詞語(yǔ)的向量空間為系數(shù)矩陣,便于做計(jì)算,但是這種表示詞語(yǔ)的方法有兩個(gè)缺點(diǎn):一是在做一些深度學(xué)習(xí)的運(yùn)算時(shí),會(huì)造成維災(zāi)難;二是這樣表示詞語(yǔ)沒(méi)有體現(xiàn)詞語(yǔ)之間的關(guān)聯(lián)性。 另一種Distributed Representation是Hinton在1986年提出通過(guò)訓(xùn)練將每個(gè)詞映射為K維實(shí)數(shù)向量,通過(guò)詞之間的距離判斷詞語(yǔ)之間的語(yǔ)義相似度。Word2Vec就是用這種詞向量表示方式,下面會(huì)講到如何生成k維實(shí)數(shù)詞向量。 2. 神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型(Neural Network Language Model) 看過(guò)大部分的獲取詞向量的方法,基本都是在訓(xùn)練模型的同時(shí),得到詞向量的,其中最經(jīng)典的應(yīng)該是Bengio在NIPS上發(fā)表的《Can Artificial Neural Networks Learn Language Models?》,文中提出以三層神經(jīng)網(wǎng)絡(luò)構(gòu)建語(yǔ)言模型的方法,如圖: 圖中最下方的wt-n+1,…,wt-2,wt-1為前n-1個(gè)詞,現(xiàn)在需要根據(jù)這已知的n-1個(gè)詞語(yǔ)去預(yù)測(cè)下一個(gè)詞wt。C(w)表示為詞語(yǔ)w的詞向量,這里要注意的是,C(w)開始是未知的。將前n-1個(gè)單詞拼接成一個(gè)矩陣放入到隱藏層(第二層),輸入Hx+d通過(guò)tanh函數(shù)輸出,最后以一個(gè)softmax函數(shù)歸一化輸出,計(jì)算公式為: 其中U是隱藏層到輸出層的參數(shù),整個(gè)模型后半部分就是一個(gè)標(biāo)準(zhǔn)的三層神經(jīng)網(wǎng)絡(luò)模型,而前面的wx為直接輸入層到輸出層的一個(gè)線性變換,這個(gè)模型中大部分的計(jì)算都在U和隱層的計(jì)算上。最后再用隨機(jī)梯度下降的方法求解模型參數(shù)。這樣就得到了一個(gè)語(yǔ)言模型和每個(gè)詞的詞向量了。 我們從概率分布的角度去理解: 一個(gè)文本s=w1,w2,w3,…,wt,概率表示為: 由于當(dāng)文本比較大時(shí),參數(shù)過(guò)多,一般用簡(jiǎn)化模型Ngram模型: 利用一個(gè)簡(jiǎn)單的前向反饋神經(jīng)網(wǎng)絡(luò)g,由一個(gè)tanh和一個(gè)softmax輸出層組成,通過(guò)將embedding層輸出的N-1個(gè)詞向量映射為一個(gè)長(zhǎng)度為V的概率分布向量,從而對(duì)詞典中的word在輸出context下條件概率做出預(yù)估: 通過(guò)最小化一個(gè)cross-entropy的正則化損失函數(shù)來(lái)調(diào)整模型的參數(shù)θ: 3. Word2vec 由于NNLM存在一些問(wèn)題(如NNLM只能處理定長(zhǎng)的序列、NNLM訓(xùn)練太慢等等),Mikolov在2013年發(fā)表兩篇文章并推出Word2Vec工具計(jì)算詞向量。讓我們來(lái)看看,它是怎么實(shí)現(xiàn)算法的。 對(duì)原始的NNLM模型作如下改造: 1.移除前向反饋神經(jīng)網(wǎng)絡(luò)中非線性的hidden layer,直接將中間層的embedding layer與輸出層的softmax layer連接; 2.忽略上下文環(huán)境的序列信息,輸入的所有詞向量均匯總到同一個(gè)embedding layer; 3.將詞語(yǔ)加入到上下文環(huán)境、得到的CBow模型如下圖所示: 從數(shù)學(xué)上看,CBow模型等價(jià)于一個(gè)詞袋模型的向量乘以一個(gè)embedding矩陣,然后得到一個(gè)連續(xù)的embedding向量,從形式上看,CBow模型是由前n個(gè)詞語(yǔ)和后n個(gè)詞語(yǔ)去預(yù)測(cè)當(dāng)前詞的模型。反過(guò)來(lái)用目標(biāo)詞語(yǔ)對(duì)前后n個(gè)詞語(yǔ)的預(yù)測(cè)過(guò)程中得到的模型叫Skip-gram模型: 計(jì)算過(guò)程如下: 其中,Vi為wi的輸入向量,Uj為wj的輸出向量。由此可見Skip-gram是輸入向量和輸出向量之間的余弦相似度。然后進(jìn)行softmax歸一化。 為了減少訓(xùn)練過(guò)程中的計(jì)算時(shí)間,作者使用了一些tricks如隨機(jī)抽樣、高頻詞亞采樣、huffman編碼等等去優(yōu)化訓(xùn)練過(guò)程。有興趣的朋友可以看看源代碼和實(shí)現(xiàn)。 下面貼一下自己根據(jù)作者提供的C++實(shí)現(xiàn)版本訓(xùn)練上百萬(wàn)財(cái)經(jīng)新聞得出結(jié)果: 其中第一行是輸入詞語(yǔ)(這里是農(nóng)業(yè)),下面列出來(lái)的是與輸入詞相關(guān)度最高的詞語(yǔ)。 三、 總結(jié)與展望 Word2Vec是谷歌實(shí)現(xiàn)詞向量的一個(gè)很好的工具實(shí)現(xiàn),它對(duì)序列局部數(shù)據(jù)有著很好的解釋,我們可以用來(lái)進(jìn)行文本分類、新聞推薦、情感分析等工作。也為后期能將文本數(shù)據(jù)放入到CNN、RNN以及變體對(duì)語(yǔ)言進(jìn)行各種語(yǔ)義組合模型提供了很大幫助。同時(shí)也引出思考,既然詞語(yǔ)能夠用向量表示,那么句子和文檔是否也能用向量表示,也能不能用矩陣、隊(duì)列、棧表示。這也值得更進(jìn)一步的去探討與研究。 - End - 更多債券相關(guān)的資訊、干貨、經(jīng)驗(yàn)以及投資技巧等,請(qǐng)?zhí)砑油“債券在線”,關(guān)注鵬元數(shù)據(jù)官方微信;鵬元數(shù)據(jù)擁有旗下品牌“itSaiD它說(shuō)”,大數(shù)據(jù)債券風(fēng)險(xiǎn)預(yù)警平臺(tái),提供精準(zhǔn)及時(shí)的大數(shù)據(jù)金融風(fēng)控系列產(chǎn)品以及有效的解決方案,為傳統(tǒng)金融機(jī)構(gòu)、互聯(lián)網(wǎng)金融機(jī)構(gòu)、非金融企業(yè)、政府、個(gè)人等用戶提供最具價(jià)值的大數(shù)據(jù)信用風(fēng)險(xiǎn)評(píng)價(jià)服務(wù)。 |
|
|
來(lái)自: 昵稱16619343 > 《辦公技能》