Word Embedding&word2vec

最近新接觸文本分類問題,對于我來數(shù)第一個(gè)問題就是Word Embedding這個(gè)詞到底是什么意思,因此也就開始學(xué)習(xí)了相關(guān)知識
http://licstar.net/archives/328

一、Word Embedding定義

Embedding是數(shù)學(xué)領(lǐng)域的有名詞,是指某個(gè)對象 X 被嵌入到另外一個(gè)對象 Y 中,映射 f : X → Y ,例如有理數(shù)嵌入實(shí)數(shù)。
Word Embedding 是NLP中一組語言模型和特征學(xué)習(xí)技術(shù)的總稱,把詞匯表中的單詞或者短語映射成由實(shí)數(shù)構(gòu)成的向量上(映射)

二、One-Hot

最簡單的Word Embedding,是指將所有詞排成一列,對于詞A,只有在它的位置置1,其他位置置0,維度就是所有詞的數(shù)目。

缺點(diǎn):
(1)沒有考慮單詞之間相對位置的關(guān)系
(2)詞向量可能非常長

為了考慮相互位置關(guān)系,會想到n-gram方法,但它可能會導(dǎo)致計(jì)算量的急劇增長。

N-Gram

N-Gram是基于一個(gè)假設(shè):第n個(gè)詞出現(xiàn)與前n-1個(gè)詞相關(guān),而與其他任何詞不相關(guān)(這也是隱馬爾可夫當(dāng)中的假設(shè))。指給定的一段文本或語音中N個(gè)項(xiàng)目(item)的序列

兩個(gè)重要應(yīng)用場景:
(1)基于一定的語料庫,利用N-Gram預(yù)計(jì)或者評估一個(gè)句子是否合理。
(2)評估兩個(gè)字符串之間的差異程度。這是模糊匹配中常用的一種手段。

N=1時(shí)稱為unigram,N=2稱為bigram,N=3稱為trigram,以此類推。

例:將“informationretrieval”視為一段文本,它的5-grams的items依次為:
infor, nform, forma, ormat, rmati, matio, ation, tionr, ionre, onret, nretr, retri, etrie, triev, rieva, ieval

1、字符串間模糊匹配

(1)N-gram距離

兩個(gè)字符串s,t分別利用N-Gram語言模型來表示時(shí),則對應(yīng)N-gram子串中公共部分的長度就稱之為N-Gram距離。例如:假設(shè)有字符串s,那么按照N-Gram方法得到N個(gè)分詞組成的子字符串,其中相同的子字符串個(gè)數(shù)作為N-Gram距離計(jì)算的方式。具體如下所示:

字符串:s="ABC",對字符串進(jìn)行分詞,考慮字符串首尾的字符begin和end,得到begin,A,B,C,end。這里采用二元語言模型,則有:(begin,A)、(A,B)、(B,C)、(C,end)。

字符串:t="AB",對字符串進(jìn)行分詞,考慮字符串首尾的字符begin和end,得到begin,A,B,end。這里采用二元語言模型,則有:(begin,A)、(A,B)、(B,end)。

距離公式:


4+3-2*3=1

2、判斷句子有效性

假設(shè)有一個(gè)字符串s="ABC",對應(yīng)的BI-Gram的結(jié)果如下:(begin,A)、(A,B)、(B,C)、(C,end)。出現(xiàn)字符串s的概率為:

P(ABC)=P(A|begin)P(B|A)P(C|B)*P(end|C)。

3、N-Gram在特征工程中的應(yīng)用

在處理文本特征時(shí),通常一個(gè)關(guān)鍵詞作為一個(gè)特征。在一些場景可能不夠,需要進(jìn)一步提取更多的特征,可以考慮N-Gram,思路如下:

以Bi-Gram為例,在原始文本中,以每個(gè)關(guān)鍵詞作為一個(gè)特征,通過將關(guān)鍵詞兩兩組合,得到一個(gè)Bi-Gram組合,再根據(jù)N-Gram語言模型,計(jì)算各個(gè)Bi-Gram組合的概率,作為新的特征。

二、Cocurrence matrix定義

共現(xiàn)矩陣Cocurrence matrix:一定程度上解決沒有考慮單詞之間相對位置的關(guān)系的問題

實(shí)現(xiàn)方法:某個(gè)詞的意思跟它臨近的單詞是緊密相關(guān)的。可以設(shè)定一個(gè)窗口(大小一般是5~10),利用這種共現(xiàn)關(guān)系生成詞向量(得到一個(gè)對稱矩陣——共現(xiàn)矩陣,該矩陣統(tǒng)計(jì)當(dāng)前詞與其他詞在同一窗口中的次數(shù),如果詞數(shù)是n,那么矩陣是nXn)。

例子:
I like deep learning.
I like NLP.
I enjoy flying.
共現(xiàn)矩陣:

缺點(diǎn):仍然面對維度災(zāi)難。這SVD或者PCA等一些常用的降維方法也會帶來其他的一些問題,例如,我們的詞匯表中有新詞加入,很難為他分配一個(gè)新的向量。

三、Dristributed representation

Dristributed representation:低維實(shí)數(shù)向量,它的思路是通過訓(xùn)練,將每個(gè)詞都映射到一個(gè)較短的詞向量上來,可以解決One hot representation的問題,。在word2vec出現(xiàn)之前,已經(jīng)有用神經(jīng)網(wǎng)絡(luò)DNN來用訓(xùn)練詞向量進(jìn)而處理詞與詞之間的關(guān)系了。采用的方法一般是一個(gè)三層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(當(dāng)然也可以多層),分為輸入層,隱藏層和輸出層(softmax層)

相關(guān)或者相似的詞,在距離上更接近
自動實(shí)現(xiàn):1)單詞語義相似性的度量;2)詞匯的語義的類比

四、Word2Vec訓(xùn)練詞向量

Word2Vec:CBOW、Skip-Gram

流程:建立模型、通過模型獲取嵌入詞向量

相關(guān)講解:
word2vec原理(一) CBOW與Skip-Gram模型基礎(chǔ)
建模角度理解word embedding及tensorflow實(shí)現(xiàn)
一文詳解 Word2vec 之 Skip-Gram 模型(結(jié)構(gòu)篇)
一文詳解 Word2vec 之 Skip-Gram 模型(訓(xùn)練篇)
一文詳解 Word2vec 之 Skip-Gram 模型(實(shí)現(xiàn)篇)

1、Skip-Gram

定義:給定input word來預(yù)測上下文


訓(xùn)練數(shù)據(jù)獲取:假如有一個(gè)句子“The quick brown fox jumps over lazy dog”。

  • 選句子中間的一個(gè)詞作為我們的輸入詞,例如我們選取“quick”作為input word;
  • 定義skip_window的參數(shù),代表從當(dāng)前input word的一側(cè)(左邊或右邊)選取詞的數(shù)量。如果我們設(shè)置skip_window=2,那么我們最終獲得窗口中的詞(包括input word在內(nèi))就是['The', 'quick','brown', 'fox']。skip_window=2代表著選取左input word左側(cè)2個(gè)詞和右側(cè)2個(gè)詞進(jìn)入我們的窗口,所以整個(gè)窗口大小span=2x2=4。
  • 參數(shù)num_skips,代表從整個(gè)窗口中選取多少個(gè)不同的詞作為output word,當(dāng)skip_window=2,num_skips=2時(shí),會得到兩組 (input word, output word) 形式的訓(xùn)練數(shù)據(jù),即 ('quick', 'brown'),('quick', 'the')。
  • 訓(xùn)練時(shí),剔除高頻的停用詞來減少模型的噪音,并加速訓(xùn)練,如'the'、'a'等,它們對其他詞的貢獻(xiàn)不大。
  • input word和output word都是one-hot編碼的向量。最終模型的輸出是一個(gè)概率分布。

對于輸入為'the'時(shí),訓(xùn)練時(shí)的一個(gè)batch會有兩個(gè)輸入(the, quick)和(the, brown)

模型輸入:

輸入的每一個(gè)詞都是一個(gè)One-Hot表示形式,("the", "quick", "brown", "fox", "jumps","over","lazy","dog"),我們對這個(gè)詞匯表的單詞進(jìn)行編號0-7。那么”dog“就可以被表示為一個(gè)8維向量[0, 0, 0, 0, 0, 0, 0, 1]。

通常詞匯表比較大,如果詞匯表有10000個(gè)詞,模型的輸入就是一個(gè)10000維的向量,那么輸出也是一個(gè)10000維度(詞匯表的大小)的向量,它包含了10000個(gè)概率,每一個(gè)概率代表著當(dāng)前詞是輸入樣本中output word的概率大小。

隱含層:

  • 網(wǎng)絡(luò)的隱層沒有使用任何激活函數(shù),但是輸出層使用了sotfmax

  • 隱含層節(jié)點(diǎn)的個(gè)數(shù)就是詞向量的維數(shù),由One-Hot映射為Dristributed representation

  • 上圖網(wǎng)絡(luò)中隱層的權(quán)重矩陣應(yīng)該為10000行,300列(隱層有300個(gè)結(jié)點(diǎn))。最終每個(gè)單詞可以被編碼為300維的詞向量

  • Google在最新發(fā)布的基于Google news數(shù)據(jù)集訓(xùn)練的模型中使用的是300個(gè)特征的詞向量,在Python的gensim包中封裝的Word2Vec接口默認(rèn)的詞向量大小為100, window_size為5

下圖中,左右兩張圖分別從不同角度代表了輸入層-隱層的權(quán)重矩陣。左圖中每一列代表一個(gè)10000維的詞向量和隱層單個(gè)神經(jīng)元連接的權(quán)重向量。右圖中,每一行實(shí)際上代表了每個(gè)單詞的詞向量。

最終的目標(biāo)就是學(xué)習(xí)這個(gè)隱層的權(quán)重矩陣

我們現(xiàn)在回來接著通過模型的定義來訓(xùn)練我們的這個(gè)模型。

input word和output word都會被我們進(jìn)行one-hot編碼。輸入被one-hot編碼后大多數(shù)維度上都是0(實(shí)際上僅有一個(gè)位置為1),所以向量稀疏,如果我們將一個(gè)1 x 10000的向量和10000 x 300的矩陣相乘,它會消耗相當(dāng)大的計(jì)算資源,為了高效計(jì)算,隱層權(quán)重矩陣看成了一個(gè)”查找表“(lookup table),進(jìn)行矩陣計(jì)算時(shí),直接去查輸入向量中取值為1的維度下對應(yīng)的那些權(quán)重值。隱層的輸出就是每個(gè)輸入單詞的“嵌入詞向量”。

輸出層

經(jīng)過神經(jīng)網(wǎng)絡(luò)隱層的計(jì)算,詞從一個(gè)1 x 10000的向量變成1 x 300的向量,再被輸入到輸出層。輸出層是一個(gè)softmax回歸分類器,它的每個(gè)結(jié)點(diǎn)將會輸出一個(gè)0-1之間的值(概率),這些所有輸出層神經(jīng)元結(jié)點(diǎn)的概率之和為1。

下面是一個(gè)例子,訓(xùn)練樣本為 (input word: “ants”, output word: “car”) 的計(jì)算示意圖。

2、CBOW

定義:給定上下文,來預(yù)測input word(與Skip-Gram相反)


輸入數(shù)據(jù):輸入有多個(gè)單詞,每個(gè)單詞與隱含層矩陣相乘后得到多個(gè)詞向量,此時(shí)對多個(gè)詞向量平均,再輸出到輸出層。

3、模型加速

DNN模型最大的問題在于從隱藏層到輸出的softmax層的計(jì)算量很大,因?yàn)橐?jì)算所有詞的softmax概率,再去找概率最大的值==>Hierarchical Softmax
Hierarchical Softmax(霍夫曼樹)提高模型訓(xùn)練的效率(時(shí)間復(fù)雜度O(n)==>O(logn))。但是如果訓(xùn)練樣本里的中心詞w是一個(gè)很生僻的詞,那么霍夫曼樹向下走很久==>Negative Sampling
Negative Sampling:neg個(gè)負(fù)例,每次網(wǎng)絡(luò)更新不對所有負(fù)樣本更新

(1)Hierarchical Softmax

定義:Hierarchical Softmax是一種對輸出層進(jìn)行優(yōu)化的策略,輸出層從原始模型的利用softmax計(jì)算概率值改為了利用Huffman樹計(jì)算概率值。

哈夫曼樹怎么來的? 將語料庫中詞以及詞出現(xiàn)的頻率構(gòu)造一顆哈夫曼樹,默認(rèn)左邊(編碼為0)是負(fù)類,右邊(編碼為1)是正類,哈夫曼樹的葉子節(jié)點(diǎn)就是語料庫中的所有的詞 ,詞頻越高的詞,距離根節(jié)點(diǎn)就越近。

從根節(jié)點(diǎn)出發(fā),到達(dá)指定葉子節(jié)點(diǎn)的路徑是唯一的。softmax概率計(jì)算只需要沿著樹形結(jié)構(gòu)進(jìn)行就可以。如下圖所示,可以沿著霍夫曼樹從根節(jié)點(diǎn)一直走到葉子節(jié)點(diǎn)的詞w2

和之前的神經(jīng)網(wǎng)絡(luò)語言模型相比,霍夫曼樹的所有內(nèi)部節(jié)點(diǎn)就類似之前神經(jīng)網(wǎng)絡(luò)隱藏層的神經(jīng)元,其中,根節(jié)點(diǎn)的詞向量對應(yīng)我們的投影后的詞向量(即隱含層詞向量),而所有葉子節(jié)點(diǎn)就類似于之前神經(jīng)網(wǎng)絡(luò)softmax輸出層的神經(jīng)元,葉子節(jié)點(diǎn)的個(gè)數(shù)就是詞匯表的大小。在霍夫曼樹中,隱藏層到輸出層的softmax映射是沿著霍夫曼樹一步步完成的,因此這種softmax取名為"Hierarchical Softmax"。

實(shí)現(xiàn):在word2vec中,采用二元邏輯回歸的方法,即規(guī)定沿著左子樹走是負(fù)類(霍夫曼樹編碼1),沿著右子樹走是正類(霍夫曼樹編碼0)。判別正類和負(fù)類的方法是使用sigmoid函數(shù)

優(yōu)勢:第一,二叉樹,將計(jì)算量為V降為log2V。第二,由于使用霍夫曼樹是高頻的詞靠近樹根,高頻詞需要更少的時(shí)間會被找到,這符合貪心優(yōu)化思想。

被劃分為左子樹而成為負(fù)類的概率為P(?)=1?P(+)。在某一個(gè)內(nèi)部節(jié)點(diǎn),要判斷是沿左子樹還是右子樹走的標(biāo)準(zhǔn)就是看P(?)、P(+)誰的概率值大。而控制P(?)、P(+)誰的概率值大的因素一個(gè)是當(dāng)前節(jié)點(diǎn)的詞向量,另一個(gè)是當(dāng)前節(jié)點(diǎn)的模型參數(shù)θ(需要訓(xùn)練)。

對于上圖中的w2,如果它是一個(gè)訓(xùn)練樣本的輸出,那么我們期望對于里面的隱藏節(jié)點(diǎn)n(w2,1)的P(?)概率大,n(w2,2)的P(?)概率大,n(w2,3)的P(+)概率大。

回到基于Hierarchical Softmax的word2vec本身,我們的目標(biāo)就是找到合適的所有節(jié)點(diǎn)的詞向量和所有內(nèi)部節(jié)點(diǎn)θ, 使訓(xùn)練樣本達(dá)到最大似然。


CBoW

(2)Negative Sampling

Word2Vec 的作者在它的第二篇論文中強(qiáng)調(diào)了三個(gè)創(chuàng)新:

  • 將常見的單詞組合(word pairs)或者詞組作為單個(gè)“words”來處理。

  • 對高頻次單詞進(jìn)行抽樣來減少訓(xùn)練樣本的個(gè)數(shù)。

  • 對優(yōu)化目標(biāo)采用“negative sampling”方法,這樣每個(gè)訓(xùn)練樣本的訓(xùn)練只會更新一小部分的模型權(quán)重,從而降低計(jì)算負(fù)擔(dān)。

創(chuàng)新一:Word pairs and "phases"

作者指出,一些單詞組合(或者詞組)的含義和拆開以后具有完全不同的意義。比如“Boston Globe”是一種報(bào)刊的名字,而單獨(dú)的“Boston”和“Globe”這樣單個(gè)的單詞卻表達(dá)不出這樣的含義。因此,在文章中只要出現(xiàn)“Boston Globe”,我們就應(yīng)該把它作為一個(gè)單獨(dú)的詞來生成其詞向量,而不是將其拆開。同樣的例子還有“New York”,“United Stated”等。

在Google發(fā)布的模型中,它本身的訓(xùn)練樣本中有來自Google News數(shù)據(jù)集中的1000億的單詞,但是除了單個(gè)單詞以外,單詞組合(或詞組)又有3百萬之多。

創(chuàng)新二:高頻詞抽樣

對于“the”這種常用高頻單詞,存在兩個(gè)問題:

  • 當(dāng)我們得到成對的單詞訓(xùn)練樣本時(shí),("fox", "the") 這樣的訓(xùn)練樣本并不會給我們提供關(guān)于“fox”更多的語義信息,因?yàn)椤皌he”在每個(gè)單詞的上下文中幾乎都會出現(xiàn)。

  • 由于在文本中“the”這樣的常用詞出現(xiàn)概率很大,因此我們將會有大量的(”the“,...)這樣的訓(xùn)練樣本,而這些樣本數(shù)量遠(yuǎn)遠(yuǎn)超過了我們學(xué)習(xí)“the”這個(gè)詞向量所需的訓(xùn)練樣本數(shù)。

Word2Vec通過“抽樣”模式來解決這種高頻詞問題。

基本思想:對于訓(xùn)練原始文本中遇到的每一個(gè)單詞,它們都有一定概率被我們從文本中刪掉,而這個(gè)被刪除的概率與單詞的頻率有關(guān)。

抽樣率

ωi 是一個(gè)單詞,Z(ωi) 是 ωi 這個(gè)單詞在所有語料中出現(xiàn)的頻次。如果單詞“peanut”在10億規(guī)模大小的語料中出現(xiàn)了1000次,那么 Z(peanut) = 1000/1000000000 = 1e - 6。

有一個(gè)參數(shù)叫“sample”,這個(gè)參數(shù)代表一個(gè)閾值,默認(rèn)值為0.001(在gensim包中的Word2Vec類說明中,這個(gè)參數(shù)默認(rèn)為0.001,文檔中對這個(gè)參數(shù)的解釋為“ threshold for configuring which higher-frequency words are randomly downsampled”)。這個(gè)值越小意味著這個(gè)單詞被保留下來的概率越小(即有越大的概率被我們刪除)。

P(ωi) 代表著保留某個(gè)單詞的概率:

圖中x軸代表著 Z(ωi) ,即單詞 ωi 在語料中出現(xiàn)頻率,y軸代表某個(gè)單詞被保留的概率。對于一個(gè)龐大的語料來說,單個(gè)單詞的出現(xiàn)頻率不會很大,即使是常用詞,也不可能特別大。

從這個(gè)圖中,我們可以看到,隨著單詞出現(xiàn)頻率的增高,它被采樣保留的概率越來越小,我們還可以看到一些有趣的結(jié)論:

● 當(dāng) Z(ωi) <= 0.0026 時(shí),P(ωi) = 1.0 。當(dāng)單詞在語料中出現(xiàn)的頻率小于 0.0026 時(shí),它是 100% 被保留的,這意味著只有那些在語料中出現(xiàn)頻率超過 0.26% 的單詞才會被采樣。

● 當(dāng)時(shí) Z(ωi) = 0.00746 時(shí),P(ωi) = 0.5,意味著這一部分的單詞有 50% 的概率被保留。

● 當(dāng) Z(ωi) = 1.0 時(shí),P(ωi) = 0.033,意味著這部分單詞以 3.3% 的概率被保留。

創(chuàng)新三:負(fù)采樣(negative sampling)

訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)意味著要輸入訓(xùn)練樣本并且不斷調(diào)整神經(jīng)元的權(quán)重,從而不斷提高對目標(biāo)的準(zhǔn)確預(yù)測。每當(dāng)神經(jīng)網(wǎng)絡(luò)經(jīng)過一個(gè)訓(xùn)練樣本的訓(xùn)練,它的權(quán)重就會進(jìn)行一次調(diào)整。

vocabulary的大小決定了我們的Skip-Gram神經(jīng)網(wǎng)絡(luò)將會擁有大規(guī)模的權(quán)重矩陣,所有的這些權(quán)重需要通過我們數(shù)以億計(jì)的訓(xùn)練樣本來進(jìn)行調(diào)整,這是非常消耗計(jì)算資源的,并且實(shí)際中訓(xùn)練起來會非常慢。

negative sampling解決了這個(gè)問題,它是用來提高訓(xùn)練速度并且改善所得到詞向量的質(zhì)量的一種方法。不同于原本每個(gè)訓(xùn)練樣本更新所有的權(quán)重,負(fù)采樣每次讓一個(gè)訓(xùn)練樣本僅僅更新一小部分的權(quán)重,這樣就會降低梯度下降過程中的計(jì)算量。

當(dāng)我們用訓(xùn)練樣本 ( input word: "fox",output word: "quick") 來訓(xùn)練我們的神經(jīng)網(wǎng)絡(luò)時(shí),“ fox”和“quick”都是經(jīng)過one-hot編碼的。如果我們的vocabulary大小為10000時(shí),在輸出層,我們期望對應(yīng)“quick”單詞的那個(gè)神經(jīng)元結(jié)點(diǎn)輸出1,其余9999個(gè)都應(yīng)該輸出0。在這里,這9999個(gè)我們期望輸出為0的神經(jīng)元結(jié)點(diǎn)所對應(yīng)的單詞我們稱為“negative” word。

當(dāng)使用負(fù)采樣時(shí),我們將隨機(jī)選擇一小部分的negative words(比如選5個(gè)negative words)來更新對應(yīng)的權(quán)重。我們也會對我們的“positive” word進(jìn)行權(quán)重更新(在我們上面的例子中,這個(gè)單詞指的是”quick“)。

在論文中,作者指出指出對于小規(guī)模數(shù)據(jù)集,選擇5-20個(gè)negative words會比較好,對于大規(guī)模數(shù)據(jù)集可以僅選擇2-5個(gè)negative words。

隱層-輸出層擁有300 x 10000的權(quán)重矩陣。如果使用了負(fù)采樣的方法我們僅僅去更新我們的positive word-“quick”的和我們選擇的其他5個(gè)negative words的結(jié)點(diǎn)對應(yīng)的權(quán)重,共計(jì)6個(gè)輸出神經(jīng)元,相當(dāng)于每次只更新 300 x 6 = 1800 個(gè)權(quán)重。對于3百萬的權(quán)重來說,相當(dāng)于只計(jì)算了0.06%的權(quán)重,這樣計(jì)算效率就大幅度提高。

選擇negative words

使用“一元模型分布(unigram distribution)”來選擇“negative words”。

一個(gè)單詞被選作negative sample的概率跟它出現(xiàn)的頻次有關(guān),出現(xiàn)頻次越高的單詞越容易被選作negative words。

代碼中的公式實(shí)現(xiàn)如下:

每個(gè)單詞被賦予一個(gè)權(quán)重,即 f(ωi), 它代表著單詞出現(xiàn)的頻次。

公式中開3/4的根號完全是基于經(jīng)驗(yàn)的,論文中提到這個(gè)公式的效果要比其它公式更加出色。你可以在google的搜索欄中輸入“plot y = x^(3/4) and y = x”,然后看到這兩幅圖(如下圖),仔細(xì)觀察x在[0,1]區(qū)間內(nèi)時(shí)y的取值,x^(3/4) 有一小段弧形,取值在 y = x 函數(shù)之上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. 導(dǎo)入 ??這是語言表示系列的第1篇,主要講述了分布式表示里的Word2vec方法。該系列目前暫定有4篇語言的...
    brucep3閱讀 3,258評論 0 5
  • 前面的文章主要從理論的角度介紹了自然語言人機(jī)對話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識。這篇文章,甚至之后...
    我偏笑_NSNirvana閱讀 14,072評論 2 64
  • Deep Learning 算法已經(jīng)在圖像和音頻領(lǐng)域取得了驚人的成果,但是在 NLP 領(lǐng)域中尚未見到如此激動人心的...
    MobotStone閱讀 3,010評論 1 12
  • 《高效能人士的七個(gè)習(xí)慣》 001習(xí)慣 A:早起就是因?yàn)榭吹胶芏嗳硕荚缙穑氡谱约阂话眩饋碜鍪裁矗?B:早起是因...
    芬芬vstar閱讀 342評論 1 2
  • 譯文地址:Java中常見的坑 概述 Java是門極簡風(fēng)格的語言,比其它語言相比,它故意保持較少的特性,不僅在有些不...
    IT程序獅閱讀 998評論 0 3