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

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

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

原創:冷血狂魔

一、背景

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

二、原始時代

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

1、Bool模型

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

我喜歡張國榮

你喜歡劉德華

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


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

然后求兩個向量的cosine即可。

在bool模型中,由于特征值只有1和0兩個取值,不能很好的反應特征項在文本中的重要程度。

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

Bool模型其實可以看做是V**的特例,只不過V**每個維度填進去的值是用了一些特殊的規則處理罷了,V**如下圖:


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

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

TF(t)=特征詞在文檔中出現次數/文檔總詞數

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

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

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

三、深度學習時代

首先不得不提語言模型,語言模型在估測一個句子出現的概率,概率越大,越合理。

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

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

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

當然也可以假設后面的詞和前面的N個詞有關,這就是常說的N-gram。語言模型在elmo和gpt中有大用處。

1、word2vec

word2vec,其實是一個單隱層的神經網絡,的思想很簡單,請看下圖


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

上圖中李雷和韓梅梅,都跟著“在教室”這個詞,當向神經網絡輸入李雷或者韓梅梅,希望神經網絡output“在教室”這個詞的幾率越高越好,那么神經網絡的權重進行調節,把兩個不同的詞映射到了相同的空間,那么說明李雷和韓梅梅存在某種聯系,這就是word2vec的思想。word2vec有兩種,cbow和skip-gram,cbow是由上下文推出一個詞,skip-gram是由一個詞推出上下文,如下圖所示。我實踐的結果是cbow效果要更好一點。


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

這個代碼怎么實現呢?其實自己實現一個單隱層的神經網絡就搞定了,output層激活函數為softmax,用cross entropy Loss,梯度下降即可。事實上,我們完全不用這么麻煩,DL4J已經提供了**解決方案,幾行代碼就搞定了,代碼如下:

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固然可以表示詞與詞之間的語義以及相互之間的關系,但是word2vec是一個完全靜態的,也就是把所有信息都壓縮到一個固定維度的向量里。那么對于一詞多意,是表現力是比較有限的。請看下面的例子,

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

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

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

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


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

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


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

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

3、GPT

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

GPT是怎么樣的運作流程呢?其實就是用self attention訓練一個語言模型,請看下圖:


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

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

4、Bidirectional Encoder Representations from Transformers (BERT)

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


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

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


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


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

BERT充分考慮了上下文,對word進行編碼,于是很好的體現語義和上下文的關系,在很多比賽中遙遙領先。

四、總結

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

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

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

原創文章,作者:陳琦,如若轉載,請注明出處:http://www.uuuxu.com/20220513317883.html

主站蜘蛛池模板: 张家川| 石首市| 桦甸市| 沧州市| 海林市| 南召县| 大港区| 沭阳县| 神木县| 万全县| 任丘市| 渝北区| 无锡市| 凤庆县| 金阳县| 济源市| 文山县| 镇巴县| 石楼县| 龙泉市| 堆龙德庆县| 新乡县| 库伦旗| 渑池县| 涟源市| 藁城市| 乐安县| 山丹县| 郸城县| 阿克| 洞头县| 武清区| 扎兰屯市| 神木县| 莒南县| 通江县| 新巴尔虎左旗| 西吉县| 濮阳市| 东乡| 石景山区|