本文關(guān)鍵詞:NLP鹰祸、詞向量侥猩、word2vec秫筏、ELMo莫杈、語(yǔ)言模型
該系列更新的第二篇已在個(gè)人微信公眾號(hào)「AI極客 」發(fā)布:
詞向量(2)--從ELMo到Bert
后續(xù)更新文章互例,首發(fā)于個(gè)人公眾號(hào),敬請(qǐng)關(guān)注筝闹!
0. 前言
"詞和句子的嵌入已成為所有基于深度學(xué)習(xí)的自然語(yǔ)言處理(NLP)系統(tǒng)的重要組成部分媳叨,它們?cè)诠潭ㄩL(zhǎng)度的稠密向量中編碼單詞和句子,以大幅度提高神經(jīng)網(wǎng)絡(luò)處理文本數(shù)據(jù)的能力丁存。"
大趨勢(shì)是對(duì)通用嵌入的追求:在大型語(yǔ)料庫(kù)上預(yù)訓(xùn)練好的嵌入肩杈,可以插入各種下游任務(wù)模型(情感分析,分類解寝,翻譯…)扩然,通過(guò)在更大的數(shù)據(jù)集中學(xué)習(xí)一些常用的詞句表示,從而自動(dòng)提高它們的性能聋伦。
這是一種遷移學(xué)習(xí)夫偶。
作為NLP領(lǐng)域的愛(ài)好者,在我之前的多個(gè)文章里已經(jīng)很多次提到詞向量技術(shù)了(基于TextCNN的文本分類中)觉增,它的代表技術(shù)word2vec更是“老生常談”了...
一直想寫(xiě)一篇有關(guān)于word2vec的文章兵拢,一直沒(méi)有抽出時(shí)間(因?yàn)槔碚摂?shù)學(xué)公式太多了,編輯公示太痛苦了)...
直到一次偶然的面試:被問(wèn)到一個(gè)關(guān)于動(dòng)態(tài)詞向量的問(wèn)題(ELMo逾礁,當(dāng)時(shí)懵逼了)…事后查閱了一些詞向量相關(guān)的文獻(xiàn)说铃,才發(fā)現(xiàn)自己原來(lái)還停留在靜態(tài)詞向量的word2vec的世界里访惜,面試官是想考察我對(duì)最新技術(shù)的洞察力!
詞向量為文本數(shù)據(jù)提供了一種數(shù)值化的表示方法腻扇,這是文本數(shù)據(jù)能夠被計(jì)算機(jī)處理的基礎(chǔ)债热,也是機(jī)器學(xué)習(xí)技術(shù)能夠應(yīng)用于文本數(shù)據(jù)處理的重要前提基礎(chǔ)。
1. 詞向量技術(shù)
自然語(yǔ)言是一套用來(lái)表達(dá)含義的復(fù)雜系統(tǒng)幼苛。在這套系統(tǒng)中窒篱,詞是表義的基本單元。顧名思義舶沿,詞向量是用來(lái)表示詞的向量墙杯,也可被認(rèn)為是詞的特征向量。
這通常需要把維數(shù)為詞典大小的高維空間嵌入到一個(gè)更低維數(shù)的連續(xù)向量空間括荡。把詞映射為實(shí)數(shù)域上向量的技術(shù)也叫詞嵌入(word embedding)高镐。近年來(lái),詞向量已逐漸成為自然語(yǔ)言處理的基礎(chǔ)知識(shí)畸冲。
那么避消,我們應(yīng)該如何使用向量表示詞呢?
1.1詞向量的獲取方式
詞向量的獲取方式可以大體分為兩類:一類是基于統(tǒng)計(jì)方法(例如:基于共現(xiàn)矩陣召夹、SVD),另一種是基于語(yǔ)言模型的恕沫。
(1).基于共現(xiàn)矩陣的方式
通過(guò)統(tǒng)計(jì)一個(gè)事先指定大小的窗口內(nèi)的word共現(xiàn)次數(shù)监憎,以word周邊的共現(xiàn)詞的次數(shù)做為當(dāng)前word的vector。具體來(lái)說(shuō)婶溯,我們通過(guò)從大量的語(yǔ)料文本中構(gòu)建一個(gè)共現(xiàn)矩陣來(lái)定義word representation鲸阔。
例如,有語(yǔ)料如下:
I like deep learning.
I like NLP.
I enjoy flying.
則其共現(xiàn)矩陣X如下:
矩陣定義的詞向量在一定程度上緩解了one-hot向量相似度為0的問(wèn)題迄委,但沒(méi)有解決數(shù)據(jù)稀疏性和維度災(zāi)難的問(wèn)題褐筛。
(2). SVD(奇異值分解)
既然基于co-occurrence矩陣得到的離散詞向量存在著高維和稀疏性的問(wèn) 題,一個(gè)自然而然的解決思路是對(duì)原始詞向量進(jìn)行降維叙身,從而得到一個(gè)稠密的連續(xù)詞向量渔扎。
首先,統(tǒng)計(jì)一個(gè)詞語(yǔ)的共生矩陣X信轿。X是一個(gè)|V|×|V| 大小的矩陣晃痴,Xij表示在所有語(yǔ)料中,詞匯表V
中第i個(gè)詞和第j個(gè)詞同時(shí)出現(xiàn)的詞數(shù)财忽,|V|為詞匯表的大小倘核。對(duì)X做矩陣分解(如奇異值分解,Singular Value Decomposition [參考資料])得到矩陣正交矩陣U即彪,對(duì)U進(jìn)行歸一化得到矩陣紧唱,即視為所有詞的詞向量:
SVD得到了word的稠密(dense)矩陣,該矩陣具有很多良好的性質(zhì):語(yǔ)義相近的詞在向量空間相近,甚至可以一定程度反映word間的線性關(guān)系漏益。
但這樣的傳統(tǒng)做法有很多問(wèn)題:
- 由于很多詞沒(méi)有出現(xiàn)蛹锰,導(dǎo)致矩陣極其稀疏,因此需要對(duì)詞頻做額外處理來(lái)達(dá)到好的矩陣分解效果遭庶;
- 矩陣非常大宁仔,維度太高
- 需要手動(dòng)去掉停用詞(如although, a,...),不然這些頻繁出現(xiàn)的詞也會(huì)影響矩陣分解的效果峦睡。
(3)語(yǔ)言模型
在介紹詞向量模型之前翎苫,先簡(jiǎn)單的介紹一個(gè)概念:語(yǔ)言模型。 語(yǔ)言模型旨在為語(yǔ)句的聯(lián)合概率函數(shù)P(w1,...,wT)
建模, 其中wi表示句子中的第i個(gè)詞榨了。語(yǔ)言模型的目標(biāo)是煎谍,希望模型對(duì)有意義的句子賦予大概率,對(duì)沒(méi)意義的句子賦予小概率龙屉。 這樣的模型可以應(yīng)用于很多領(lǐng)域呐粘,如機(jī)器翻譯、語(yǔ)音識(shí)別转捕、信息檢索作岖、詞性標(biāo)注、手寫(xiě)識(shí)別等五芝,它們都希望能得到一個(gè)連續(xù)序列的概率痘儡。 以信息檢索為例,當(dāng)你在搜索“how long is a football bame”時(shí)(bame是一個(gè)醫(yī)學(xué)名詞)枢步,搜索引擎會(huì)提示你是否希望搜索"how long is a football game", 這是因?yàn)楦鶕?jù)語(yǔ)言模型計(jì)算出“how long is a football bame”的概率很低沉删,而與bame近似的,可能引起錯(cuò)誤的詞中醉途,game會(huì)使該句生成的概率最大矾瑰。
對(duì)語(yǔ)言模型的目標(biāo)概率P(w1,...,wT),如果假設(shè)文本中每個(gè)詞都是相互獨(dú)立的隘擎,則整句話的聯(lián)合概率可以表示為其中所有詞語(yǔ)條件概率的乘積殴穴,即:
然而我們知道語(yǔ)句中的每個(gè)詞出現(xiàn)的概率都與其前面的詞緊密相關(guān), 所以實(shí)際上通常用條件概率表示語(yǔ)言模型:
上面只是簡(jiǎn)單的介紹了語(yǔ)言模型,推薦閱讀的關(guān)于N-gram模型以及神經(jīng)概率語(yǔ)言模型以便于學(xué)習(xí)后續(xù)的word2vec模型嵌屎。
2.代表技術(shù)之一 word2vec
2013年推正,Google團(tuán)隊(duì)發(fā)表了word2vec工具 [1]。word2vec工具主要包含兩個(gè)模型:跳字模型(skip-gram)和連續(xù)詞袋模型(continuous bag of words宝惰,簡(jiǎn)稱CBOW)植榕,以及兩種近似訓(xùn)練法:負(fù)采樣(negative sampling)和層序softmax(hierarchical softmax)。值得一提的是尼夺,word2vec的詞向量可以較好地表達(dá)不同詞之間的相似和類比關(guān)系尊残。
word2vec自提出后被廣泛應(yīng)用在自然語(yǔ)言處理任務(wù)中炒瘸。它的模型和訓(xùn)練方法也啟發(fā)了很多后續(xù)的詞嵌入模型。本節(jié)將重點(diǎn)介紹word2vec的模型和訓(xùn)練方法寝衫。
Skip-gram模型(跳字模型):
在跳字模型中顷扩,我們用一個(gè)詞來(lái)預(yù)測(cè)它在文本序列周?chē)脑~。
舉個(gè)例子慰毅,假設(shè)文本序列是:
“I love you very much”
跳字模型所關(guān)心的是隘截,給定“you”生成鄰近詞“I”、“l(fā)ove”汹胃、“very”和“much”的條件概率婶芭。
在這個(gè)例子中,“you”叫中心詞着饥,“I”犀农、“l(fā)ove”、“very”和“much”叫背景詞宰掉。
由于“you”只生成與它距離不超過(guò)2的背景詞呵哨,該時(shí)間窗口的大小為2[與N-gram類似]。
我們來(lái)描述一下跳字模型[用最大似然估計(jì)的思想]:
假設(shè)詞典索引集V的大小為|V|轨奄,且{0,1,…,|V|?1}孟害。給定一個(gè)長(zhǎng)度為T(mén)的文本序列中,文本序列中第t的詞為w(t)挪拟。當(dāng)時(shí)間窗口大小為m時(shí)纹坐,跳字模型需要最大化給定任一中心詞生成所有背景詞的概率:
上式的最大似然估計(jì)與最小化以下?lián)p失函數(shù)等價(jià):
我們可以用v和u分別表示 中心詞 和 背景詞 的向量。
換言之舞丛,對(duì)于詞典中索引為i的詞,它在作為中心詞和背景詞時(shí)的向量表示分別是vi和ui果漾。而詞典中所有詞的這兩種向量正是跳字模型所要學(xué)習(xí)的模型參數(shù)球切。為了將模型參數(shù)植入損失函數(shù),我們需要使用模型參數(shù)表達(dá)損失函數(shù)中的給定中心詞生成背景詞的條件概率绒障。給定中心詞吨凑,假設(shè)生成各個(gè)背景詞是相互獨(dú)立的。設(shè)中心詞wc在詞典中索引為c户辱,背景詞wo在詞典中索引為o鸵钝,損失函數(shù)中的給定中心詞生成背景詞的條件概率可以通過(guò)softmax函數(shù)定義為:
上式:給定任何一個(gè)中心詞Wc,產(chǎn)生背景詞Wo的概率
每一個(gè)詞庐镐,在模型中有兩個(gè)詞向量恩商,一個(gè)是作為中心詞時(shí)的詞向量,一個(gè)是作為背景詞時(shí)的詞向量
利用隨機(jī)梯度下降求解:
當(dāng)序列長(zhǎng)度T較大時(shí)必逆,我們通常在每次迭代時(shí)隨機(jī)采樣一個(gè)較短的子序列來(lái)計(jì)算有關(guān)該子序列的損失怠堪。然后揽乱,根據(jù)該損失計(jì)算詞向量的梯度并迭代詞向量。具體算法可以參考“梯度下降和隨機(jī)梯度下降——從零開(kāi)始”一節(jié)粟矿。 作為一個(gè)具體的例子凰棉,下面我們看看如何計(jì)算隨機(jī)采樣的子序列的損失有關(guān)中心詞向量的梯度。和上面提到的長(zhǎng)度為T(mén)的文本序列的損失函數(shù)類似陌粹,隨機(jī)采樣的子序列的損失實(shí)際上是對(duì)子序列中給定中心詞生成背景詞的條件概率的對(duì)數(shù)求平均撒犀。通過(guò)微分,我們可以得到上式中條件概率的對(duì)數(shù)有關(guān)中心詞向量vc的梯度:
該式也可改寫(xiě)作:
上面的迭代更新計(jì)算開(kāi)銷(xiāo)太大L椭取或舞!每次都需要遍歷整個(gè)字典,對(duì)應(yīng)的解決方案在后面(這也是word2vec為啥這么牛逼的原因...厲害的不是這個(gè)工具本身哗讥,而是一種思想的應(yīng)用)
隨機(jī)采樣的子序列有關(guān)其他詞向量的梯度同理可得嚷那。訓(xùn)練模型時(shí),每一次迭代實(shí)際上是用這些梯度來(lái)迭代子序列中出現(xiàn)過(guò)的中心詞和背景詞的向量杆煞。訓(xùn)練結(jié)束后魏宽,對(duì)于詞典中的任一索引為i的詞,我們均得到該詞作為中心詞和背景詞的兩組詞向量vi和ui决乎。在自然語(yǔ)言處理應(yīng)用中队询,我們會(huì)使用跳字模型的中心詞向量。
CBOW(連續(xù)詞袋模型)
連續(xù)詞袋模型與跳字模型類似,與跳字模型最大的不同是:
連續(xù)詞袋模型用一個(gè)中心詞在文本序列周?chē)脑~來(lái)預(yù)測(cè)該中心詞构诚。
舉個(gè)例子蚌斩,假設(shè)文本序列為:
“I love you very much”
連續(xù)詞袋模型所關(guān)心的是,鄰近詞“I”范嘱、“l(fā)ove”送膳、“very”和“much”一起生成中心詞“you”的概率。
假設(shè)詞典索引集的大小為V丑蛤,且V={0,1,…,|V|?1}</nobr>叠聋。給定一個(gè)長(zhǎng)度為T(mén)的文本序列中,文本序列中第t個(gè)詞為wu(t)受裹。當(dāng)時(shí)間窗口大小為m時(shí)碌补,連續(xù)詞袋模型需要最大化由背景詞生成任一中心詞的概率
上式的最大似然估計(jì)與最小化以下?lián)p失函數(shù)等價(jià):
我們可以用v和u分別表示背景詞和中心詞的向量(注意符號(hào)和跳字模型中的不同)。換言之棉饶,對(duì)于詞典中索引為i的詞厦章,它在作為背景詞和中心詞時(shí)的向量表示分別是vi和ui。而詞典中所有詞的這兩種向量正是連續(xù)詞袋模型所要學(xué)習(xí)的模型參數(shù)照藻。為了將模型參數(shù)植入損失函數(shù)袜啃,我們需要使用模型參數(shù)表達(dá)損失函數(shù)中的給定背景詞生成中心詞的概率。設(shè)中心詞wc在詞典中索引為c幸缕,背景詞wo1囊骤、wo2晃择、...wo2m在詞典中索引為o1、o2也物、....o2m-1宫屠、o2m,損失函數(shù)中的給定背景詞生成中心詞的概率可以通過(guò)softmax函數(shù)定義為
和跳字模型一樣滑蚯,當(dāng)序列長(zhǎng)度T較大時(shí)浪蹂,我們通常在每次迭代時(shí)隨機(jī)采樣一個(gè)較短的子序列來(lái)計(jì)算有關(guān)該子序列的損失。然后告材,根據(jù)該損失計(jì)算詞向量的梯度并迭代詞向量坤次。 通過(guò)微分,我們可以計(jì)算出上式中條件概率的對(duì)數(shù)有關(guān)任一背景詞向量voi(i=1,2,....2m)的梯度為:
該式也可寫(xiě)作
隨機(jī)采樣的子序列有關(guān)其他詞向量的梯度同理可得斥赋。和跳字模型一樣缰猴,訓(xùn)練結(jié)束后,對(duì)于詞典中的任一索引為i的詞疤剑,我們均得到該詞作為背景詞和中心詞的兩組詞向量vi和ui滑绒。
在自然語(yǔ)言處理應(yīng)用中,我們會(huì)使用連續(xù)詞袋模型的背景詞向量隘膘。
近似訓(xùn)練法
我們可以看到疑故,無(wú)論是skip-gram(跳字模型)還是CBOW(連續(xù)詞袋模型),每一步梯度計(jì)算的開(kāi)銷(xiāo)與詞典V的大小相關(guān)弯菊。
因?yàn)橛?jì)算softmax的時(shí)考慮了字典上的所有可能性
當(dāng)詞典較大時(shí)纵势,例如幾十萬(wàn)到上百萬(wàn),這種訓(xùn)練方法的計(jì)算開(kāi)銷(xiāo)會(huì)較大管钳。因此钦铁,我們將使用近似的方法來(lái)計(jì)算這些梯度,從而減小計(jì)算開(kāi)銷(xiāo)才漆。常用的近似訓(xùn)練法包括負(fù)采樣和層序softmax育瓜。
(1)負(fù)采樣(Negative Sample)
我們以跳字模型為例討論負(fù)采樣。
實(shí)際上栽烂,詞典V的大小之所以會(huì)在損失中出現(xiàn),是因?yàn)榻o定中心詞wc生成背景詞wo的條件概率P(w0∣wc)
使用了softmax運(yùn)算恋脚,而softmax運(yùn)算正是考慮了背景詞可能是詞典中的任一詞(使用了全部詞)腺办,并體現(xiàn)在分母上。
下面糟描,我們可以使用σ(x)=1/(1+exp(?x))函數(shù)來(lái)表達(dá)中心詞wc和背景詞wo同時(shí)出現(xiàn)在該訓(xùn)練數(shù)據(jù)窗口的概率怀喉。
σ(x)屬于[0,1]
那么,給定中心詞wc生成背景詞wo的條件概率的對(duì)數(shù)可以近似為:
[上式的含義:中心詞wc與背景詞wo同時(shí)出(D=1)現(xiàn)概率船响,且中心詞wc與噪音詞wk不同時(shí)出現(xiàn)(D=0)的概率躬拢。]
假設(shè)噪聲詞wk在詞典中的索引為ik躲履,上式可改寫(xiě)為:
因此,有關(guān)給定中心詞wc生成背景詞wo的損失是:
假設(shè)詞典V很大聊闯,每次迭代的計(jì)算開(kāi)銷(xiāo)由O(|V|)變?yōu)镺(|K|)工猜。當(dāng)我們把K取較小值時(shí),負(fù)采樣每次迭代的計(jì)算開(kāi)銷(xiāo)將較小菱蔬。
當(dāng)然篷帅,我們也可以對(duì)連續(xù)詞袋模型進(jìn)行負(fù)采樣。有關(guān)給定背景詞
wt-m拴泌、wt-m+1魏身、...、wt+m生成中心詞wc的損失:
在負(fù)采樣中可以近似為:
同樣蚪腐,當(dāng)我們把K取較小值時(shí)箭昵,負(fù)采樣每次迭代的計(jì)算開(kāi)銷(xiāo)將較小。
(2)層序softmax[]
層序softmax是另一種常用的近似訓(xùn)練法回季。它利用了二叉樹(shù)這一數(shù)據(jù)結(jié)構(gòu)家制。樹(shù)的每個(gè)葉子節(jié)點(diǎn)代表著詞典V中的每個(gè)詞。
假設(shè)L(w)為從二叉樹(shù)的根節(jié)點(diǎn)到詞w<的葉子節(jié)點(diǎn)的路徑(包括根和葉子節(jié)點(diǎn))上的節(jié)點(diǎn)數(shù)茧跋。設(shè)n(w,j)為該路徑上第j個(gè)節(jié)點(diǎn)慰丛,并設(shè)該節(jié)點(diǎn)的向量為un(w,j)。以上圖為例:L(w3)=4瘾杭。設(shè)詞典中的詞wi的詞向量為vi诅病。那么,跳字模型和連續(xù)詞袋模型所需要計(jì)算的給定詞wi生成詞w的條件概率為:
其中σ(x)=1/(1+exp(?x))粥烁,leftChild(n)是節(jié)點(diǎn)n的左孩子節(jié)點(diǎn)贤笆,如果判斷x為真,[x]=1讨阻;反之[x]=?1芥永。由于σ(x)+σ(?x)=1,給定詞wi生成詞典V中任一詞的條件概率之和為1這一條件也將滿足:
讓我們計(jì)算給定詞wi生成詞w3的條件概率钝吮。我們需要將wi的詞向量vi和根節(jié)點(diǎn)到w3路徑上的非葉子節(jié)點(diǎn)向量一一求內(nèi)積埋涧。由于在二叉樹(shù)中由根節(jié)點(diǎn)到葉子節(jié)點(diǎn)w3的路徑上需要向左、向右奇瘦、再向左地遍歷棘催,我們得到:
整個(gè)遍歷的路徑已經(jīng)通過(guò)Huffman編碼唯一的確定了
在使用softmax的跳字模型和連續(xù)詞袋模型中,詞向量和二叉樹(shù)中非葉子節(jié)點(diǎn)向量是需要學(xué)習(xí)的模型參數(shù)耳标。
假設(shè)詞典V很大醇坝,每次迭代的計(jì)算開(kāi)銷(xiāo)由O(|V|)下降至O(log2|V|)。
推薦資料:學(xué)習(xí)word2vec的經(jīng)典資料
3.ELMo--動(dòng)態(tài)詞向量
ELMo官網(wǎng):https://allennlp.org/elmo
艾倫研究所開(kāi)發(fā)次坡,并于6月初在NAACL 2018年發(fā)布ELMo(深度語(yǔ)境化的單詞表示)呼猪。
ELMO(Embeddings from Language Models) 画畅,被稱為時(shí)下最好的通用詞和句子嵌入方法,來(lái)自于語(yǔ)言模型的詞向量表示宋距,也是利用了深度上下文單詞表征轴踱,該模型的優(yōu)勢(shì):
(1)能夠處理單詞用法中的復(fù)雜特性(比如句法和語(yǔ)義)
(2)這些用法在不同的語(yǔ)言上下文中如何變化(比如為詞的多義性建模)
ELMo與word2vec最大的不同:
Contextual: The representation for each word depends on the entire context in which it is used.
(即詞向量不是一成不變的,而是根據(jù)上下文而隨時(shí)變化乡革,這與word2vec或者glove具有很大的區(qū)別)
舉個(gè)例子:針對(duì)某一詞多義的詞匯w="蘋(píng)果"
文本序列1=“我 買(mǎi)了 六斤 蘋(píng)果寇僧。”
文本序列2=“我 買(mǎi)了一個(gè) 蘋(píng)果 7沸版∴铱”
上面兩個(gè)文本序列中都出現(xiàn)了“蘋(píng)果”這個(gè)詞匯,但是在不同的句子中视粮,它們我的含義顯示是不同的细办,一個(gè)屬于水果領(lǐng)域,一個(gè)屬于電子產(chǎn)品呢領(lǐng)域蕾殴,如果針對(duì)“蘋(píng)果”這個(gè)詞匯同時(shí)訓(xùn)練兩個(gè)詞向量來(lái)分別刻畫(huà)不同領(lǐng)域的信息呢笑撞?答案就是使用ELMo。
ELMo是雙向語(yǔ)言模型biLM的多層表示的組合钓觉,基于大量文本茴肥,ELMo模型是從深層的雙向語(yǔ)言模型(deep bidirectional language model)中的內(nèi)部狀態(tài)(internal state)學(xué)習(xí)而來(lái)的,而這些詞向量很容易加入到QA荡灾、文本對(duì)齊瓤狐、文本分類等模型中,后面會(huì)展示一下ELMo詞向量在各個(gè)任務(wù)上的表現(xiàn)批幌。
它首先在大文本語(yǔ)料庫(kù)上預(yù)訓(xùn)練了一個(gè)深度雙向語(yǔ)言模型(biLM)础锐,然后把根據(jù)它的內(nèi)部狀態(tài)學(xué)到的函數(shù)作為詞向量。實(shí)驗(yàn)表明荧缘,這些學(xué)到的詞表征可以輕易地加入到現(xiàn)有的模型中皆警,并在回答問(wèn)題、文本蘊(yùn)含截粗、情感分析等 6 個(gè)不同的有難度的 NLP 問(wèn)題中大幅提高最佳表現(xiàn)信姓。實(shí)驗(yàn)表明顯露出預(yù)訓(xùn)練模型的深度內(nèi)部狀態(tài)這一做法非常重要楣富,這使得后續(xù)的模型可以混合不同種類的半監(jiān)督信號(hào)蜂奸。
3.1 ELMo的安裝與使用
AllenNLP是一個(gè)相對(duì)成熟的基于深度學(xué)習(xí)的NLP工具包,它構(gòu)建于 PyTorch之上乌庶,該工具包中集成了ELMo方法从诲。
可以直接使用pip安裝:
pip install allennlp
適用于python3.6以上的版本
或者,你也可以嘗試一下這個(gè)工具包ELMoForManyLangs:
#基于 ELMo 的向量化方法
#詳細(xì)資料參考 https://github.com/berkay-onder/ELMoForManyLangs
from elmoformanylangs import Embedder
import numpy as np
e = Embedder(r'../auxiliary_data/zhs.model/')
sents = [['今', '天', '天氣', '真', '好', '阿'],
['潮水', '退', '了', '就', '知道', '誰(shuí)', '沒(méi)', '穿', '褲子']]
# the list of lists which store the sentences
# after segment if necessary.
embs = e.sents2elmo(sents)
print(embs)
print(np.mean(embs[0],axis=0))
print (len(np.mean(embs[0],axis=0)))
# will return a list of numpy arrays
# each with the shape=(seq_len, embedding_size)
使用ELMo獲得詞向量替換Glove的詞向量作為多項(xiàng)特定NLP模型的輸入靡羡,在ELMo的論文實(shí)驗(yàn)中表明具有一定的效果提升:
4.結(jié)束
詞向量技術(shù)為文本的額數(shù)值化表示提供了解決方案系洛,不同的詞向量技術(shù)可以提取詞匯的不同角度或?qū)蛹?jí)的語(yǔ)義信息俊性,作為NLP各項(xiàng)任務(wù)模型的輸入,對(duì)于提升模型的效果覺(jué)有顯著的作用描扯。