建模角度理解word embedding及tensorflow實(shí)現(xiàn)

1瓶籽、 前言

本篇主要介紹關(guān)鍵詞的向量表示匠童,也就是大家熟悉的word embedding。自Google 2013 年開源word2vec算法程序以后棘劣,它的簡單俏让、高效、實(shí)用茬暇,很快引起業(yè)界眾人的關(guān)注和應(yīng)用,為搜索引擎寡喝、[廣告系統(tǒng)-谷歌的wide & deep learning][2]糙俗、[推薦系統(tǒng)][1]等互聯(lián)網(wǎng)服務(wù)提供新的基礎(chǔ)技術(shù)和思路。

何為Embedding预鬓?

開篇之前首先需要明白一個概念何為Embedding巧骚?Embedding可以看作是數(shù)學(xué)上的一個空間映射(Mapping):map( lambda y: f(x) ),該映射的特點(diǎn)是:單射(在數(shù)學(xué)里格二,單射函數(shù)為一函數(shù)劈彪,其將不同的引數(shù)連接至不同的值上。更精確地說顶猜,函數(shù)f被稱為是單射時沧奴,對每一值域內(nèi)的y,存在至多一個定義域內(nèi)的x使得f(x) = y长窄。)滔吠、映射前后結(jié)構(gòu)不變,對應(yīng)到word embedding概念中可以理解為尋找一個函數(shù)或映射挠日,生成新的空間上的表達(dá)疮绷,把單詞one-hot所表達(dá)的X空間信息映射到Y(jié)的多維空間向量。
接下來嚣潜,將以模型的角度分解embedding映射函數(shù)及新空間內(nèi)表達(dá)的建模過程:

非監(jiān)督的“監(jiān)督學(xué)習(xí)”

從應(yīng)用角度冬骚,新空間內(nèi)映射函數(shù)的學(xué)習(xí)方法不需要大量的人工標(biāo)記樣本就可以得到質(zhì)量還不錯的embedding向量,沒有具體的應(yīng)用任務(wù)導(dǎo)向,從這個角度可以看作非監(jiān)督的學(xué)習(xí)過程只冻,而從建模角度夜涕,向量提取的建模過程是 個分類模型,又可以看做是監(jiān)督學(xué)習(xí)属愤,只是這個監(jiān)督?jīng)]有實(shí)際的監(jiān)督意義女器,當(dāng)然后來有的應(yīng)該將word2vec的前段表達(dá)方式喂給標(biāo)注的過文本,形成真正意義上的監(jiān)督學(xué)習(xí)住诸,如Facebook的FastText驾胆。

2、一層隱層神經(jīng)網(wǎng)絡(luò)

帶有一個隱層的神經(jīng)網(wǎng)絡(luò)有以下普遍特性:理論上給定足夠該隱層節(jié)點(diǎn)數(shù)贱呐,這個隱層可以近似擬合任意函數(shù)丧诺,本質(zhì)上,隱層是上一層的嵌入(Embedding)函數(shù)的近似表示奄薇,而且可以被用做lookup表(后面會介紹)驳阎,word2vec也是基于該層去找到輸入word的嵌入向量表示,然后再建立下一層和當(dāng)前層的連接(connections),來控制目標(biāo)函數(shù)的誤差堵第〗嵴停【進(jìn)一步抽象,如果從統(tǒng)計(jì)的角度饵隙,其實(shí)不同層之間的統(tǒng)計(jì)關(guān)系是一種遞歸的廣義線性關(guān)系(遞歸廣義線性模型),每一層通過線性組合對前一層進(jìn)行變換沮脖,然后以一些非線性連接函數(shù)(不同函數(shù)對應(yīng)output label不同的統(tǒng)計(jì)分布金矛,比如softmax對應(yīng)多項(xiàng)目分布,sigmoid對應(yīng)二項(xiàng)分布等)得到非線性結(jié)果喂給下一層勺届,參見圖rglm】


model_net.png
rglm.png

3驶俊、Embedding函數(shù)

從前面的定義,我們期望在隱層中找到一個/組嵌入函數(shù)W(這里采用lookup table的方式)免姿,使得![][3]具體的饼酿,假設(shè)指定固定的向量維度,W("籃球")=(0.2, -0.4, 0.7, ...),W("蘋果")=(0.0, 0.6, -0.1, ...)养泡,W初始化時可以賦值給每個維度一個隨機(jī)數(shù)嗜湃,并通過與output層連接建立學(xué)習(xí)模型/任務(wù)后得到有意義的向量。

4澜掩、建模

接下來來看看如何建立和訓(xùn)練模型购披。

  • 數(shù)據(jù)準(zhǔn)備
    為給模型準(zhǔn)備數(shù)據(jù),我們首先需要定義或獲取n個樣本:![][4]
    假如我們有一個句子“姚明 的 籃球 打得 很不錯”肩榕。常規(guī)方式是首先由統(tǒng)計(jì)語言模型刚陡,由中間詞預(yù)測周圍詞(SKIP-GRAM)惩妇,或由周圍詞預(yù)測中間詞(CBOW)等方式,然后以指定的窗口向前推進(jìn)筐乳,以SKIP-GRAM方式為例歌殃,假設(shè)推進(jìn)窗口為2,我們可以得到樣本對:("籃球","的"),("籃球","姚明"),("籃球","打得"),("籃球","很不錯")蝙云,X skip至"打得"時氓皱,得到樣本對 :("打得","籃球"),("打得","的"),("打得","很不錯"),以此類推...我們可以得到用于模型的訓(xùn)練樣本勃刨。

  • 樣本表示
    樣本拆解出來了波材,接下來如何用數(shù)值來表達(dá)這些樣本對呢?常用的辦法是將所有的訓(xùn)練數(shù)據(jù)身隐,即“word”對抽取出唯一不重復(fù)的單詞來構(gòu)建詞典表(vocabulary)廷区,然后將樣本數(shù)據(jù)中的“word”表達(dá)成one-hot編碼,編碼時只對有值的位置上為1其他位置均為0贾铝,以上面例子為例隙轻,“姚明 的 籃球 打得 很不錯”。基于這個句子可以構(gòu)建維度為5的詞典表:{"姚明":0,"":1,"的":2,"籃球":3,"打得":4,"很不錯":5}垢揩,那么訓(xùn)練樣本("籃球","姚明")即可表達(dá)為([0,0,1,0,0],0)玖绿,看起來比較像常規(guī)的多分類數(shù)據(jù)了,這里為了好理解Y表示成了位置編號水孩,后續(xù)在模型中仍以one-hot向量表達(dá)镰矿。

  • 各層條件分布
    神經(jīng)網(wǎng)絡(luò)基于這些訓(xùn)練樣本將會輸出一個概率分布,這個概率代表著我們的詞典中的每個詞是output word的可能性俘种。更一般的,假設(shè)隱層有K個節(jié)點(diǎn)(即生成word對應(yīng)vector向量的維度)绝淡,對每個樣本宙刘,我們需要做兩件事情:

    • 給定隱層后預(yù)測output word的概率,即需要建個模型來估計(jì)![][5]
    • 將觀測到的input word喂給隱層嵌入函數(shù)牢酵,得到隱層的概率分布悬包,![][6]用連接函數(shù)表達(dá)即上面提到的(常見的一般會是K個關(guān)于x線性組合的方程組,后面會講到為何不用該方式)![][3]

    接下來我們需要構(gòu)建整體的似然函數(shù)進(jìn)行優(yōu)化:

  • 目標(biāo)函數(shù)
    分別建立input層-隱層及隱層-output層的連接函數(shù)(RGLM)馍乙,input層和隱層的函數(shù)上面已給出布近,如果假設(shè)p(y|w)為正態(tài)分布,則 log-likelihood loss便是(negative) L2 loss:![][7]丝格,如果假設(shè)p(y|w)為多項(xiàng)分布撑瞧,則likelihood loss便是softmax loss:![][8]從訓(xùn)練樣本可以看出,output層為多分類显蝌,即隱層-output可采用softmax loss.
    為了準(zhǔn)確預(yù)測output word预伺,該網(wǎng)絡(luò)需要根據(jù)上述損失函數(shù)學(xué)習(xí)參數(shù)矩陣W和R(output層),實(shí)際上,對于我們來說酬诀,整個學(xué)習(xí)任務(wù)是為了學(xué)習(xí)隱層的W函數(shù)脏嚷,即隱層節(jié)點(diǎn)參數(shù)。當(dāng)然對于其他任務(wù)瞒御,比如神經(jīng)網(wǎng)絡(luò)推薦或Fasttext父叙,網(wǎng)絡(luò)構(gòu)造過程類似,只是學(xué)習(xí)的任務(wù)是學(xué)習(xí)輸出層的參數(shù)和結(jié)構(gòu)肴裙。

  • 模型訓(xùn)練
    常規(guī)優(yōu)化方法會采用梯度下降和反向傳播趾唱,由上面的樣本定義,我們的訓(xùn)練樣本中input和output均以one-hot表示践宴,向量極其稀疏(通常完整字典表會是幾十萬維鲸匿,假設(shè)200000),僅有一個位置的數(shù)值為1阻肩,其余均為0带欢,如果input到隱層的嵌入函數(shù)采用常見方式的話,假設(shè)節(jié)點(diǎn)數(shù)即嵌入向量維度為200烤惊,則隱層參數(shù)矩陣每個樣本的迭代將會是1x200000的向量和200000x200矩陣的相乘乔煞,顯然會帶來巨大計(jì)算資源的消耗,其實(shí)每個樣本的隱層參數(shù)僅需要根據(jù)one-hot向量中數(shù)值為1的索引對應(yīng)的隱層參數(shù)參數(shù)矩陣的該索引行對應(yīng)的向量取出即可:


    embedding.png

    經(jīng)過抽象后我們可以得到上面定義的Embedding函數(shù)/參數(shù)矩陣:


    embedding-abstract.png

    這種方式其實(shí)聯(lián)系上面提到的lookup table就容易理解了柒室,即模型中的隱層權(quán)重矩陣便成了一個”查找表“(lookup table)渡贾,進(jìn)行矩陣計(jì)算時,只需要直接去查輸入的one-hot向量中提取非零位置的索引雄右,在隱層的對應(yīng)行輸出就是每個輸入單詞的“嵌入詞向量”空骚,該過程即完成了嵌入的動作。
    對于輸出層:
    經(jīng)過隱層的嵌入計(jì)算擂仍,input word會被映射為1x200的dense向量囤屹,再喂給輸出層經(jīng)過softmax的分類器的計(jì)算,對隨機(jī)給定任意output word的嵌入向量計(jì)算其預(yù)測概率:![][8]逢渔,這樣基于同一input word肋坚,替換不同的beta(output word的嵌入向量)得到不同output word的預(yù)測概率。

    至此肃廓,數(shù)據(jù)的表示及目標(biāo)損失函數(shù)的定義以及模型訓(xùn)練過程已拆解完畢智厌。接下來,再看看訓(xùn)練性能提升和優(yōu)化的方法盲赊。

5铣鹏、抽樣

基于上面的拆解,我們會發(fā)現(xiàn)其實(shí)訓(xùn)練過程涉及的參數(shù)數(shù)量會非常龐大角钩,以上面的200000個單詞的字典表為例吝沫,隱層嵌入200維的詞向量呻澜,那么每次迭代的輸入-隱層權(quán)重矩陣和隱層-輸出層的權(quán)重矩陣都會有 200000 x 200 = 4000萬個權(quán)重,在如此龐大的神經(jīng)網(wǎng)絡(luò)中進(jìn)行梯度下降是相當(dāng)慢的惨险,而且需要大量的訓(xùn)練數(shù)據(jù)來調(diào)整這些權(quán)重并且避免過擬合羹幸。所以對性能的要求仍然很高,雖然上面已經(jīng)采用lookup table的方式簡化了一些計(jì)算辫愉,針對這個問題栅受,Word2Vec的作者在論文提出了有效的方法,叫“negative sampling”恭朗,每個訓(xùn)練樣本的訓(xùn)練只會更新一小部分的模型權(quán)重屏镊,從而降低計(jì)算負(fù)擔(dān),甚至是詞向量的質(zhì)量痰腮《妫基于對假設(shè)是,我們的數(shù)據(jù)中存在大量冗余和噪音膀值,舉例:對于“的”這種常用高頻單詞棍丐,我們會發(fā)現(xiàn)一些問題:當(dāng)我們得到成對的單詞訓(xùn)練樣本時,**("的", "籃球") *這樣的訓(xùn)練樣本并不會給我們提供關(guān)于“籃球”更多的語義信息沧踏,因?yàn)椤暗摹边@樣的噪音詞在大部分單詞的上下文中幾乎都會出現(xiàn)歌逢。由于在語料中“的”這樣的常用詞出現(xiàn)概率很大,因此我們將會有大量的(”的“翘狱,...)這樣的訓(xùn)練樣本秘案,而這些樣本數(shù)量遠(yuǎn)遠(yuǎn)超過了我們學(xué)習(xí)“的”這個詞向量所需的訓(xùn)練樣本數(shù)。所以在設(shè)計(jì)抽樣方法的時候可以對這樣的樣本直接排除在訓(xùn)練樣本之外潦匈,對于其他樣本對隨機(jī)抽取少量的負(fù)樣本進(jìn)行參數(shù)的更新阱高,而不是對one-hot向量中所有200000個位置對樣本都進(jìn)行計(jì)算,從而大大提高訓(xùn)練效率茬缩。
上面敘述的有點(diǎn)繁雜讨惩,總結(jié)起來就是在對給定input word計(jì)算softmax時,不去更新所有詞表中word的輸出概率寒屯,而是從該樣本的output word之外隨機(jī)抽樣有限個(比如只抽樣5個word)作為負(fù)樣本計(jì)算其概率,進(jìn)一步進(jìn)行梯度和參數(shù)的更新黍少。也就是說通過負(fù)樣本抽樣對于每次訓(xùn)練只更新(5+1)個beta向量對應(yīng)的參數(shù)寡夹,也就是200
6=1200個參數(shù),這樣與4000萬個相比厂置,需要更新的參數(shù)占比僅為0.003%菩掏,效率提升可想而知。

6昵济、基于tensorflow的實(shí)現(xiàn)

  • 數(shù)據(jù)加載
import os
def load_w2c_textcn_dataset(path='./data/'):
    """
    Returns
    --------
    word_list_all : a list
        a list of string (word).\n
     要求:中文語料需要先分詞  
    """

    print("Load or Download chinese text corpus Dataset> {}".format(path))

    filename = 'wiki_cn.cut'
    word_list_all=[]
    with open(os.path.join(path, filename)) as f:
        for line in f:
            word_list=line.strip().split()
            for idx, word in enumerate(word_list):
                word_list[idx] = word_list[idx].decode('utf-8') 
                #print word_list[idx]
                word_list_all.append(word_list[idx])
    return word_list_all
words=load_w2c_textcn_dataset(path='./data/')
print len(words)
  • 字典構(gòu)建
import collections
vocabulary_size = 200000
count = [['UNK', -1]]
count.extend(collections.Counter(words).most_common(vocabulary_size - 1))
dictionary = dict()

for word, _ in count:
    dictionary[word] = len(dictionary)
data = list()
unk_count = 0
for word in words:
    if word in dictionary:
        index = dictionary[word]
    else:
        index = 0  # dictionary['UNK']
        unk_count = unk_count + 1
    data.append(index)

count[0][1] = unk_count
reverse_dictionary = dict(zip(dictionary.values(), dictionary.keys())) 
del words
  • batch數(shù)據(jù)生成器
data_index = 0

def generate_batch(batch_size, num_skips, skip_window):
    global data_index
    batch = np.ndarray(shape=(batch_size), dtype=np.int32)
    labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)
    span = 2 * skip_window + 1  # [ skip_window target skip_window ]
    buf = collections.deque(maxlen=span)
    for _ in xrange(span):
        buf.append(data[data_index])
        data_index = (data_index + 1) % len(data)
    for i in xrange(batch_size // num_skips):
        target = skip_window  # target label at the center of the buffer
        targets_to_avoid = [ skip_window ]
        for j in xrange(num_skips):
            while target in targets_to_avoid:
                target = random.randint(0, span - 1)
            targets_to_avoid.append(target)
            batch[i * num_skips + j] = buf[skip_window]
            labels[i * num_skips + j, 0] = buf[target]
        buf.append(data[data_index])
        data_index = (data_index + 1) % len(data)
    return batch, labels
  • 模型構(gòu)建
import tensorflow as tf
import collections
import numpy as np
batch_size = 128
embedding_size = 128  # 生成向量維度.
skip_window = 2       # 左右窗口.
num_skips = 2        # 同一個keyword產(chǎn)生label的次數(shù).
num_sampled = 64      # 負(fù)樣本抽樣數(shù).

graph = tf.Graph()

with graph.as_default(), tf.device('/cpu:0'):
    train_dataset = tf.placeholder(tf.int32, shape=[batch_size])
    train_labels  = tf.placeholder(tf.int32, shape=[batch_size, 1])
  
    embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
    softmax_weights = tf.Variable(
        tf.truncated_normal([vocabulary_size, embedding_size], stddev=1.0/np.sqrt(embedding_size)))
    softmax_biases = tf.Variable(tf.zeros([vocabulary_size]))
  
    embed = tf.nn.embedding_lookup(embeddings, train_dataset)
    loss = tf.reduce_mean(
        tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=embed,
                                   labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))

    optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss)

    norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))
    normalized_embeddings = embeddings / norm
  • 模型訓(xùn)練
num_steps = 500001
import random
with tf.Session(graph=graph) as session:
    tf.global_variables_initializer().run()
    average_loss = 0
    for step in range(num_steps):
        batch_data, batch_labels = generate_batch(batch_size, num_skips, skip_window)
        feed_dict = {train_dataset : batch_data, train_labels : batch_labels}
        _, l = session.run([optimizer, loss], feed_dict=feed_dict)
        average_loss += l
        if step % 100000 == 0 and step > 0:
            print('Average loss at step %d: %f' % (step, average_loss / 100000))
            average_loss = 0
    word2vec = normalized_embeddings.eval()
  • 最近鄰
distances = -word2vec[dictionary[u'數(shù)據(jù)']].reshape((1, -1)).dot(word2vec.T)
inds = np.argsort(distances.ravel())[1:6]
print(' '.join([reverse_dictionary[i] for i in inds]))
----------------------------------------------
資料 統(tǒng)計(jì) 顯示 信息 證據(jù)

[1] Peter McCullagh, John A Nelder, Generalized linear models., , 1989
[2] The seminal paper, A Neural Probabilistic Language Model (Bengio, et al. 2003) has a great deal of insight about why word embeddings are powerful.
[3]:https://erikbern.com/2014/06/28/recurrent-neural-networks-for-collaborative-filtering.html
[4]:https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html?utm_source=tuicool&utm_medium=referral

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末智绸,一起剝皮案震驚了整個濱河市野揪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞧栗,老刑警劉巖斯稳,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迹恐,居然都是意外死亡挣惰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門殴边,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憎茂,“玉大人,你說我怎么就攤上這事锤岸∈#” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵是偷,是天一觀的道長拳氢。 經(jīng)常有香客問我,道長晓猛,這世上最難降的妖魔是什么饿幅? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮戒职,結(jié)果婚禮上栗恩,老公的妹妹穿的比我還像新娘。我一直安慰自己洪燥,他們只是感情好磕秤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捧韵,像睡著了一般市咆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上再来,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天蒙兰,我揣著相機(jī)與錄音,去河邊找鬼芒篷。 笑死搜变,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的针炉。 我是一名探鬼主播挠他,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼篡帕!你這毒婦竟也來了殖侵?” 一聲冷哼從身側(cè)響起贸呢,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拢军,沒想到半個月后楞陷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朴沿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年猜谚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赌渣。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡魏铅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坚芜,到底是詐尸還是另有隱情览芳,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布鸿竖,位于F島的核電站沧竟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缚忧。R本人自食惡果不足惜悟泵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闪水。 院中可真熱鬧糕非,春花似錦、人聲如沸球榆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽持钉。三九已至衡招,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間每强,已是汗流浹背始腾。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留空执,地道東北人窘茁。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像脆烟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子房待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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

  • 自Google 2013 年開源word2vec算法程序以后邢羔,它的簡單驼抹、高效、實(shí)用拜鹤,很快引起業(yè)界眾人的關(guān)注和應(yīng)用框冀,...
    MiracleJQ閱讀 11,962評論 0 6
  • 前面的文章主要從理論的角度介紹了自然語言人機(jī)對話系統(tǒng)所可能涉及到的多個領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識。這篇文章敏簿,甚至之后...
    我偏笑_NSNirvana閱讀 13,909評論 2 64
  • 1.NLP當(dāng)前熱點(diǎn)方向 詞法/句法分析 詞嵌入(word embedding) 命名實(shí)體識別(Name Entit...
    __Aragorn閱讀 6,023評論 1 9
  • Deep Learning 算法已經(jīng)在圖像和音頻領(lǐng)域取得了驚人的成果明也,但是在 NLP 領(lǐng)域中尚未見到如此激動人心的...
    MobotStone閱讀 2,967評論 1 12
  • 隨著智能時代慢慢的到來,有一些基本概念都不知道真的是要落伍了惯裕,作為正在積極學(xué)習(xí)向上的青年温数,我想總結(jié)一份筆記,此份筆...
    yuquanle閱讀 1,422評論 0 0