欧美精品123_精品露脸国产偷人在视频_日韩美女免费线视频_成人av三级

一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

本文的標(biāo)題是《一文看懂自然語言處理:word 表示技術(shù)的變遷》來源于:由作者:陳琦采編而成,主要講述了原創(chuàng):冷血狂魔一、背景
自然語言處理就是要讓計(jì)算機(jī)理解人類的語言,至于到目前為止,計(jì)算機(jī)是否真的理

原創(chuàng):冷血狂魔

一、背景

自然語言處理就是要讓計(jì)算機(jī)理解人類的語言,至于到目前為止,計(jì)算機(jī)是否真的理解的人類的語言,這是一個(gè)未知之?dāng)?shù),我的理解是目前為止并沒有懂得人類語言,只是查表給出一個(gè)最大概率的回應(yīng)而已。那么自然語言處理(NLP)包括哪些領(lǐng)域的東西呢?文本分類(如:垃圾郵件分類、情感分析)、機(jī)器翻譯、摘要、文法分析、分詞、詞性標(biāo)注、實(shí)體識別(NER)、語音識別等等,都是NLP要解的問題。那么這些解了這些問題,計(jì)算機(jī)是否真的懂得人類語言的含義,現(xiàn)在還未知,本片文章不過多的展開討論。語言的單位是詞,那么計(jì)算機(jī)是如何來表示詞的,用什么技術(shù)來表示一個(gè)詞,就可以讓計(jì)算機(jī)理解詞的含義呢?本篇博客將進(jìn)行詳細(xì)的討論,從Bool模型,到向量空間模型、到各種word embedding(word2vec、elmo、GPT、BERT)

二、原始時(shí)代

在Deeplearning之前,表示一個(gè)詞,并沒有一個(gè)約定俗成的辦法,如何表示,取決于想解決的任務(wù)。

1、Bool模型

下面有兩句話,求文本相似度。

我喜歡張國榮

你喜歡劉德華

那么,布爾模型比較簡單粗暴,出現(xiàn)了詞所在維度為1,沒出現(xiàn)的所在維度為0,如下圖:


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

然后求兩個(gè)向量的cosine即可。

在bool模型中,由于特征值只有1和0兩個(gè)取值,不能很好的反應(yīng)特征項(xiàng)在文本中的重要程度。

2、V**(向量空間模型)

Bool模型其實(shí)可以看做是V**的特例,只不過V**每個(gè)維度填進(jìn)去的值是用了一些特殊的規(guī)則處理罷了,V**如下圖:


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

t表示特征項(xiàng),d表示一個(gè)Document,那么D可表示為D={t1,t2,t3……tN}的N維向量,w的值怎么填呢?只好的做法是TF*IDF,TF表示詞頻、IDF表示反詞頻,公式如下:

TF(t)=特征詞在文檔中出現(xiàn)次數(shù)/文檔總詞數(shù)

IDF(t)=log(N/(n+1)),其中N為文本集文本總數(shù),n為包含特征詞t的文檔數(shù)量

當(dāng)然TF*IDF也有他的缺陷,忽略了類中分布情況和忽略了類間分布情況,那么也有一些改進(jìn),例如:TF*IDF*IG,IG表示信息增益。

這些詞/文檔的表示方法,非常機(jī)械,反映不出詞與詞之間的上下文之間的關(guān)系、相似的關(guān)系等等。

三、深度學(xué)習(xí)時(shí)代

首先不得不提語言模型,語言模型在估測一個(gè)句子出現(xiàn)的概率,概率越大,越合理。

P(w1,w2,w3,……wn)=P(w1)*P(w2|w1)*P(w3|w1,w2)…P(wn|w1,w2….wn-1)

通常上面的式子沒辦法估測,于是會做一個(gè)馬爾科夫假設(shè),假設(shè)后面的詞只和前面的一個(gè)詞有關(guān),那么就簡化為下面的式子:

P(w1,w2,w3,……wn)=P(w1)*P(w2|w1)*P(w3|w2)…P(wn|wn-1)

當(dāng)然也可以假設(shè)后面的詞和前面的N個(gè)詞有關(guān),這就是常說的N-gram。語言模型在elmo和gpt中有大用處。

1、word2vec

word2vec,其實(shí)是一個(gè)單隱層的神經(jīng)網(wǎng)絡(luò),的思想很簡單,請看下圖


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

上圖中李雷和韓梅梅,都跟著“在教室”這個(gè)詞,當(dāng)向神經(jīng)網(wǎng)絡(luò)輸入李雷或者韓梅梅,希望神經(jīng)網(wǎng)絡(luò)output“在教室”這個(gè)詞的幾率越高越好,那么神經(jīng)網(wǎng)絡(luò)的權(quán)重進(jìn)行調(diào)節(jié),把兩個(gè)不同的詞映射到了相同的空間,那么說明李雷和韓梅梅存在某種聯(lián)系,這就是word2vec的思想。word2vec有兩種,cbow和skip-gram,cbow是由上下文推出一個(gè)詞,skip-gram是由一個(gè)詞推出上下文,如下圖所示。我實(shí)踐的結(jié)果是cbow效果要更好一點(diǎn)。


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

這個(gè)代碼怎么實(shí)現(xiàn)呢?其實(shí)自己實(shí)現(xiàn)一個(gè)單隱層的神經(jīng)網(wǎng)絡(luò)就搞定了,output層激活函數(shù)為softmax,用cross entropy Loss,梯度下降即可。事實(shí)上,我們完全不用這么麻煩,DL4J已經(jīng)提供了**解決方案,幾行代碼就搞定了,代碼如下:

Word2Vec vec = new Word2Vec.Builder()
.minWordFrequency(5)
.iterations(1)
.layerSize(100)
.seed(42)
.windowSize(5)
.iterate(iter)
.tokenizerFactory(t)
.build();
vec.fit();

2、ELMO

ELMO取至Embeddings from Language Model的首寫字母,論文地址:https://arxiv.org/abs/1802.05365

Embeddings 是從語言模型中得到的。在講ELMO之前,先來說說word2vec有什么問題,word2vec固然可以表示詞與詞之間的語義以及相互之間的關(guān)系,但是word2vec是一個(gè)完全靜態(tài)的,也就是把所有信息都壓縮到一個(gè)固定維度的向量里。那么對于一詞多意,是表現(xiàn)力是比較有限的。請看下面的例子,

在 “欲信大義于天下”中 ,“信”是動詞,“伸張”的意思

在 “信義著于四海”中,“信”是名詞,“信用”的意思

如果“信”字壓縮成一個(gè)100維的向量,將很難區(qū)分這兩種意思的差別,那么這就需要Contextualized Word Embedding,根據(jù)不同的語境,對詞進(jìn)行編碼,于是ELMO來了。

EMLO的結(jié)構(gòu)很簡單,用了雙向的LSTM來訓(xùn)練一個(gè)語言模型。如下圖(圖片來至于臺大李宏毅的ppt)


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

模型training的過程很簡單,讀入一個(gè)詞,一詞下一個(gè)詞,反向讀一個(gè)詞,預(yù)測上一個(gè)詞,以此訓(xùn)練下去,直到收斂。中間紅框處的藍(lán)色和橙色的向量就是Embedding的向量,最后接起來就是我們所要的向量了,當(dāng)然這個(gè)bi-lstm也可以疊很多層。每一層都得到一個(gè)Embedding向量。


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

那么,使用的時(shí)候怎么用這個(gè)編碼值呢?這取決于下游任務(wù),比方說可以把每一層的Embedding向量求和取平均,或者加權(quán)求和等等,這個(gè)權(quán)重可以跟著任務(wù)一起train出來。

3、GPT

ELMO實(shí)現(xiàn)了對word進(jìn)行動態(tài)編碼,但是他用了LSTM,LSTM并不能記住很長的信息,且不利于并行計(jì)算。GPT用self attention改變這一結(jié)果,當(dāng)然這一切得益于google神作《Attention Is All You Need》論文地址:https://arxiv.org/pdf/1706.03762.pdf

GPT是怎么樣的運(yùn)作流程呢?其實(shí)就是用self attention訓(xùn)練一個(gè)語言模型,請看下圖:


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

每個(gè)詞之和前面的詞做attention,預(yù)測下一個(gè)詞,例如讀入開始標(biāo)記BOS,然后自己和自己做attention,預(yù)測“潮水”,讀入BOS、潮水,然后和BOS、潮水做attention,預(yù)測“退了”,類推下去,直到結(jié)束。在很多語料上train下去,就得到了一個(gè)非常強(qiáng)大的語言模型,可以動態(tài)的進(jìn)行編碼。使用的時(shí)候可以固定住這些attention層的參數(shù),然后訓(xùn)練其他的下游任務(wù),例如做情感分類問題,可以把這些attention層放在幾個(gè)全連接層前面,固定參數(shù),只訓(xùn)練后面的全連接層,通過softmax或者sigmoid進(jìn)行分類。

4、Bidirectional Encoder Representations from Transformers (BERT)

GPT有個(gè)缺陷,就是編碼只依賴上文信息,沒有加入下文信息,那么BERT很好的解決了這個(gè)問題。BERT其實(shí)是transformer的encoder部分,如下圖


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

train BERT有兩種方法,Masked LM和Next Sentence Prediction,Masked LM是隨機(jī)掩蓋住一些詞,讓BERT猜測蓋住的詞什么。Next Sentence Prediction是讓BERT推斷兩個(gè)句子是不是有上下文關(guān)系。


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)


一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)

BERT充分考慮了上下文,對word進(jìn)行編碼,于是很好的體現(xiàn)語義和上下文的關(guān)系,在很多比賽中遙遙領(lǐng)先。

四、總結(jié)

自然語言處理從原始的布爾模型,到向量空間模型,再到word2vec,再到ELMO,再到GPT,再到BERT,一路走來,技術(shù)的更替。目前為止,BERT依然是比較領(lǐng)先的word Embedding方法,在大部分自然語言處理任務(wù)中,作為預(yù)訓(xùn)練任務(wù),是我們首先應(yīng)該嘗試的辦法。也許,用不了多久,又會有新的技術(shù)出來,刷新成績,我們拭目以待。但即便是現(xiàn)在為止,機(jī)器是否真的理解了人類的語言,這還是一個(gè)尚待論證的問題。路漫漫其修遠(yuǎn)兮,吾將上下而求索。

最后,我自己是一名從事了多年開發(fā)的Python老程序員,辭職目前在做自己的Python私人定制課程,今年年初我花了一個(gè)月整理了一份最適合2019年學(xué)習(xí)的Python學(xué)習(xí)干貨,可以送給每一位喜歡Python的小伙伴,想要獲取的可以關(guān)注我的頭條號并在后臺私信我:01,即可免費(fèi)獲取。

一文看懂自然語言處理:word 表示技術(shù)的變遷(一文看懂自然語言處理)
本文原作者為陳琦,轉(zhuǎn)載請注明:出處!如該文有不妥之處,請聯(lián)系站長刪除,謝謝合作~

原創(chuàng)文章,作者:陳琦,如若轉(zhuǎn)載,請注明出處:http://www.uuuxu.com/20220513317883.html

主站蜘蛛池模板: 衡阳市| 名山县| 安新县| 青铜峡市| 汝城县| 开化县| 吴旗县| 哈尔滨市| 凤翔县| 平顺县| 安图县| 咸丰县| 长宁区| 张家口市| 房产| 龙游县| 汾西县| 安福县| 延吉市| 文昌市| 景德镇市| 饶河县| 泰安市| 文安县| 雷山县| 大田县| 枞阳县| 丘北县| 双辽市| 岳阳市| 巫山县| 平乡县| 肥西县| 昭觉县| 彭水| 济南市| 墨玉县| 维西| 西宁市| 滁州市| 永清县|