0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何表示一個(gè)詞語的意思?神經(jīng)網(wǎng)絡(luò)詞嵌入的基本思路

電子工程師 ? 來源:lp ? 2019-04-10 17:16 ? 次閱讀

主要內(nèi)容

上一節(jié)討論了自然語言處理,討論了深度學(xué)習(xí),非常宏觀,也非常有趣。這一節(jié)和下一節(jié)的探討則會(huì)直接跳到最基礎(chǔ)的內(nèi)容:詞向量。同時(shí),也會(huì)涉及到一些基本的數(shù)學(xué)推導(dǎo)。

如何表示一個(gè)詞語的意思?計(jì)算機(jī)如何處理詞語的意思離散化表示的問題從符號(hào)化表示到分布式表示基于相似度的分布式表示通過向量定義詞語的含義word2vec神經(jīng)網(wǎng)絡(luò)詞嵌入的基本思路word2vec主要思路Skip-gram預(yù)測word2vec細(xì)節(jié)一張圖濃縮Skipgram訓(xùn)練模型:計(jì)算向量梯度梯度推導(dǎo)梯度下降隨機(jī)梯度下降法關(guān)于公式排版Md2All 簡介

如何表示一個(gè)詞語的意思?

什么是“意思”?這是個(gè)簡單的問題,想要解釋清楚卻并不容易。怎么辦,向詞典求助。韋氏詞典說,“意思”是詞語、短語所表達(dá)的思想;人們使用詞語、符號(hào)所要表達(dá)的思想;作品、藝術(shù)所要表達(dá)的思想。這基本上與語言學(xué)家的思路是一致的。

在語言學(xué)家眼中,詞語是一種語言符號(hào)。任何語言符號(hào)是由“能指”和“所指”構(gòu)成的,“能指”指語言的聲音形象,“所指”指語言所反映的事物的概念。比如英語的“tree”這個(gè)單詞,它的發(fā)音就是它的“能指”,而“樹”的概念就是“所指”。

中文中“意思”的意思更加有意思:

他說:“她這個(gè)人真有意思(funny)?!彼f:“他這個(gè)人怪有意思的(funny)?!庇谑侨藗円詾樗麄冇辛艘馑迹╳ish),并讓他向她意思意思(express)。他火了:“我根本沒有那個(gè)意思(thought)!”她也生氣了:“你們這么說是什么意思(intention)?”事后有人說:“真有意思(funny)?!币灿腥苏f:“真沒意思(nonsense)”。(原文見《生活報(bào)》1994.11.13.第六版)[吳尉天,1999] ——《統(tǒng)計(jì)自然語言處理》

然而這些高大上的東西對(duì)于計(jì)算機(jī)實(shí)際處理詞語的意思幾乎沒有任何幫助。

計(jì)算機(jī)如何處理詞語的意思

過去幾十年里主要使用的是分類詞典。比如使用WordNet詞庫可以查詢上義詞和同義詞。

panda 的上義詞

fromnltk.corpusimportwordnetaswnpanda=wn.synset('panda.n.01')hyper=lambdas:s.hypernyms()list(panda.closure(hyper))[Synset('procyonid.n.01'),Synset('carnivore.n.01'),Synset('placental.n.01'),Synset('mammal.n.01'),Synset('vertebrate.n.01'),Synset('chordate.n.01'),Synset('animal.n.01'),Synset('organism.n.01'),Synset('living_thing.n.01'),Synset('whole.n.02'),Synset('object.n.01'),Synset('physical_entity.n.01'),Synset('entity.n.01')]

good 的同義詞

S:(adj)full,goodS:(adj)estimable,good,honorable,respectableS:(adj)beneficial,goodS:(adj)good,just,uprightS:(adj)adept,expert,good,practiced,proficient,skillfulS:(adj)dear,good,nearS:(adj)good,right,ripe…S:(adv)well,goodS:(adv)thoroughly,soundly,goodS:(n)good,goodnessS:(n)commodity,tradegood,good

離散化表示的問題

有很大的參考價(jià)值,但無法體現(xiàn)細(xì)微差異,比如adept, expert, good, practiced, proficient, skillful雖然意思相近,但有很多細(xì)微差異

缺少新詞,無法與時(shí)俱進(jìn)

比較主觀

需要手工創(chuàng)建和改編,甚至需要專家參與

難以精確計(jì)算詞與詞之間的相似度

無論是基于規(guī)則的語言處理,還是基于統(tǒng)計(jì)的語言處理,大都把詞語當(dāng)作單個(gè)符號(hào)進(jìn)行處理。這種離散化、分類式的表示都普遍存在上述問題。

把這樣的單個(gè)詞語直接轉(zhuǎn)換成向量后,就會(huì)出現(xiàn)一個(gè)1和大量的0:

這就是所謂的one-hot 向量,也是一種localist的表示方式(只顧自己,不顧他人)這種編碼方式會(huì)導(dǎo)致向量維度隨著詞表的增加而增加。2萬 (speech) – 5萬 (PTB) – 50萬 (big vocab) – 1300萬 (Google 1T),最后,這些詞向量會(huì)變得非常非常長,使得計(jì)算機(jī)難以處理。

從符號(hào)化表示到分布式表示

符號(hào)化表示體現(xiàn)不出詞語之間的內(nèi)在聯(lián)系,無法表示意思的相似度。任何兩個(gè)獨(dú)熱向量都是正交的,無法通過任何運(yùn)算得到相似度。

因此需要找到一種可以直接把相似度編碼進(jìn)向量的方法,也就是說可以直接從向量中讀出詞語之間的內(nèi)在聯(lián)系。

基于相似度的分布式表示

語言學(xué)家J. R. Firth提出,通過一個(gè)詞語的上下文可以得到它的意思。“You shall know a word by the company it keeps.”一個(gè)詞的意思是通過它的上下文表示的。

這個(gè)思想非常簡單,卻非常強(qiáng)大,是現(xiàn)代自然語言處理最成功的思想之一。

例如,如何知道banking的意思呢?方法就是找到成千上萬含有banking的例句,看它周圍都出現(xiàn)了哪些詞語,然后通過處理這些詞語來獲得banking的含義:

government debt problems turning into ?banking? crises as has happenedsaying that Europe needs unified ?banking? regulation to replace the hodgepodge

banking的含義是由周圍的這些詞表示的。

通過向量定義詞語的含義

我們先把一個(gè)詞語定義成一個(gè)稠密向量,通過調(diào)整一個(gè)單詞及其上下文單詞的向量,使得根據(jù)兩個(gè)向量可以推測兩個(gè)詞語的相似度;或通過一個(gè)詞可以預(yù)測詞語的上下文;或根據(jù)上下文可以預(yù)測這個(gè)詞。這種手法也是遞歸的。

這個(gè)稠密的向量,就是詞義的分布式表示。

word2vec

神經(jīng)網(wǎng)絡(luò)詞嵌入的基本思路

借助詞向量來定義一個(gè)預(yù)測中心詞和語境詞的概率模型(給定中心詞,預(yù)測語境詞的概率):

然后再定義損失函數(shù):

這里的表示的語境詞(負(fù)號(hào)表示除了某某之外)。損失函數(shù)的目的是判斷預(yù)測的準(zhǔn)確與否。如果根據(jù)中心詞可以完美預(yù)測語境詞,則損失函數(shù)為零。而一般情況下是做不到的這一點(diǎn)的。

有了損失函數(shù)后,接下來就會(huì)在一個(gè)大型語料庫的不同位置得到訓(xùn)練實(shí)例,調(diào)整詞向量,最小化損失函數(shù)。

最后,令人驚嘆的奇跡就會(huì)發(fā)生!產(chǎn)生的詞向量非常強(qiáng)大,能充分地表示詞語的含義。(后面會(huì)提到)

word2vec主要思路

在中心詞和語境詞之間相互預(yù)測!

兩種算法

Skip-grams(SG)給定目標(biāo)詞,預(yù)測語境詞

連續(xù)詞袋(CBOW)給定語境詞袋,預(yù)測目標(biāo)詞

兩個(gè)相對(duì)高效的訓(xùn)練方法:

層級(jí) Softmax

負(fù)采樣

Skip-gram預(yù)測

Skip-gram預(yù)測

Skip-gram的核心思想是定義一個(gè)給定中心詞、預(yù)測語境詞的概率分布模型。然后通過調(diào)整向量,使概率分布最大化。

注意:這里雖然有四條線,但模型中只有一個(gè)條件分布。學(xué)習(xí)就是要最大化這些概率。

word2vec細(xì)節(jié)

對(duì)于每一個(gè)中心詞,計(jì)算半徑為的窗口中的所有外圍詞的預(yù)測概率。。然后通過調(diào)整向量,使得預(yù)測概率最大。

所以目標(biāo)函數(shù)就是下面這個(gè)樣子,我們要通過調(diào)整參數(shù),使其最大化:

對(duì)其取負(fù)對(duì)數(shù),得到負(fù)對(duì)數(shù)似然函數(shù),這樣就把連我乘轉(zhuǎn)換為求和。我們要對(duì)其最小化。

其中 表示所有需要優(yōu)化的變量。

loss function = cost function = objective function 損失函數(shù)、代價(jià)函數(shù)、目標(biāo)函數(shù)都是一樣的。對(duì)于概率分布,一般使用交叉熵來計(jì)算損失。

那么概率是如何計(jì)算的?

對(duì)兩個(gè)詞向量 做點(diǎn)乘:

兩個(gè)向量越相似,其點(diǎn)積越大!

重復(fù)以上,,算出所有詞與的點(diǎn)積,然后通過softmax獲得的概率分布。softmax是一種將實(shí)數(shù)值轉(zhuǎn)換成概率(0-1)的標(biāo)準(zhǔn)方法。

其中:是外部詞(輸出詞、語境詞)索引,是中心詞索引,是索引為的中心詞向量是索引為的外部詞向量

一張圖濃縮Skipgram

Skipgram濃縮圖

從左到右是中心詞獨(dú)熱向量,乘以中心詞向量矩陣W,獲得中心詞語義向量,乘以另一個(gè)語境詞矩陣W'得到每個(gè)詞語的“相似度”,對(duì)相似度取softmax得到概率,與答案對(duì)比計(jì)算損失。

這兩個(gè)矩陣都含有V個(gè)詞向量,也就是說同一個(gè)詞有兩個(gè)詞向量,哪個(gè)作為最終的、提供給其他應(yīng)用使用的embeddings呢?有兩種策略,要么加起來,要么拼接起來。

訓(xùn)練模型:計(jì)算向量梯度

通常把模型參數(shù)集定義為向量 ,訓(xùn)練的過程就是優(yōu)化這些參數(shù),方法是梯度下降法。以之前的模型為例,有V個(gè)詞,每個(gè)詞有兩個(gè)向量,每個(gè)向量為d維,共有2dV個(gè)參數(shù)。

梯度推導(dǎo)

重要組件:

矩陣偏微分

鏈?zhǔn)椒▌t若y=f(u),u=g(x),即y=f(g(x)),則:

目標(biāo)函數(shù):

最大化它等同于最小化

其中T是文本長度,m是窗口大小。

目標(biāo)函數(shù)中的概率通過softmax計(jì)算:

注意:每個(gè)詞語分別有中心詞和語境詞兩個(gè)向量表示。

我們先從一個(gè)中心詞及其語境詞開始。

對(duì)中心詞求梯度:

因此,

以上只是中心詞向量參數(shù)梯度的推導(dǎo),外部詞向量參數(shù)梯度的推導(dǎo)過程類似。

梯度下降

有了梯度,參數(shù)減去梯度就能朝著最小值走了。這就是梯度下降法。

要在整個(gè)數(shù)據(jù)集上優(yōu)化目標(biāo)函數(shù),需要計(jì)算所有窗口的梯度。用矩陣的語言表述:

樸素梯度下降代碼:

whileTrue:theta_grad=evaluate_gradient(J,corpus,theta)theta=theta-alpha*theta_grad

梯度下降示意圖

等高線表示目標(biāo)函數(shù)的數(shù)值。梯度與等高線垂直,指明了前進(jìn)的方向。 是每次前進(jìn)的步長。

梯度下降法是求函數(shù)最小值的最基本的方法。

隨機(jī)梯度下降法

面對(duì)海量語料庫和窗口數(shù),計(jì)算所有參數(shù)的梯度,會(huì)讓每次參數(shù)更新變得異常緩慢!這對(duì)所有神經(jīng)網(wǎng)絡(luò)來說,都不是個(gè)好主意。

相反,我們使用隨機(jī)梯度下降法(SGD)。每次只對(duì)某個(gè)窗口更新參數(shù)。

隨機(jī)梯度下降代碼:

whileTrue:theta_grad=evaluate_gradient(J,window,theta)theta=theta-alpha*theta_grad

雖然隨機(jī)梯度下降充滿噪音,但效果奇好,而且速度要快幾個(gè)數(shù)量級(jí)。神經(jīng)網(wǎng)絡(luò)喜歡嘈雜的算法!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:詞語的向量化表示(CS224N-2)

文章出處:【微信號(hào):gh_b11486d178ef,微信公眾號(hào):語言和智能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【PYNQ-Z2試用體驗(yàn)】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    神經(jīng)網(wǎng)絡(luò)的計(jì)算。對(duì)于多層多節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò),我們可以使用矩陣乘法來表示。在上面的神經(jīng)網(wǎng)絡(luò)中,我們將權(quán)重作為
    發(fā)表于 03-03 22:10

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    今天學(xué)習(xí)了兩個(gè)神經(jīng)網(wǎng)絡(luò),分別是自適應(yīng)諧振(ART)神經(jīng)網(wǎng)絡(luò)與自組織映射(SOM)神經(jīng)網(wǎng)絡(luò)。整體感覺不是很難,只不過些最基礎(chǔ)的概念容易理解不
    發(fā)表于 07-21 04:30

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測的計(jì)算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反
    發(fā)表于 07-12 08:02

    可分離卷積神經(jīng)網(wǎng)絡(luò)在 Cortex-M 處理器上實(shí)現(xiàn)關(guān)鍵識(shí)別

    更勝籌。關(guān)鍵識(shí)別神經(jīng)網(wǎng)絡(luò)管道由于要保持“永遠(yuǎn)在線”,KWS 應(yīng)用的功耗預(yù)算受到很大限制。雖然 KWS 應(yīng)用也可在專用 DSP 或高性能 CPU 上運(yùn)行,但更適合在 Arm Cortex-M 微控制器
    發(fā)表于 07-26 09:46

    嵌入式中的人工神經(jīng)網(wǎng)絡(luò)的相關(guān)資料分享

    人工神經(jīng)網(wǎng)絡(luò)在AI中具有舉足輕重的地位,除了找到最好的神經(jīng)網(wǎng)絡(luò)模型和訓(xùn)練數(shù)據(jù)集之外,人工神經(jīng)網(wǎng)絡(luò)的另一個(gè)挑戰(zhàn)是如何在嵌入式設(shè)備上實(shí)現(xiàn)它,同時(shí)
    發(fā)表于 11-09 08:06

    輕量化神經(jīng)網(wǎng)絡(luò)的相關(guān)資料下載

    視覺任務(wù)中,并取得了巨大成功。然而,由于存儲(chǔ)空間和功耗的限制,神經(jīng)網(wǎng)絡(luò)模型在嵌入式設(shè)備上的存儲(chǔ)與計(jì)算仍然是個(gè)巨大的挑戰(zhàn)。前面幾篇介紹了如何在嵌入
    發(fā)表于 12-14 07:35

    卷積神經(jīng)網(wǎng)絡(luò)維卷積的處理過程

    inference在設(shè)備端上做。嵌入式設(shè)備的特點(diǎn)是算力不強(qiáng)、memory小??梢酝ㄟ^對(duì)神經(jīng)網(wǎng)絡(luò)做量化來降load和省memory,但有時(shí)可能memory還吃緊,就需要對(duì)神經(jīng)網(wǎng)絡(luò)在memory使用上做進(jìn)
    發(fā)表于 12-23 06:16

    基于神經(jīng)網(wǎng)絡(luò)的漢語孤立詞語音識(shí)別_朱淑琴

    基于神經(jīng)網(wǎng)絡(luò)的漢語孤立詞語音識(shí)別_朱淑琴
    發(fā)表于 03-16 09:40 ?0次下載

    搭建個(gè)神經(jīng)網(wǎng)絡(luò)基本思路和步驟

    在定義好網(wǎng)絡(luò)結(jié)構(gòu)并初始化參數(shù)完成之后,就要開始執(zhí)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程了。而訓(xùn)練的第步則是執(zhí)行前向傳播計(jì)算。假設(shè)隱層的激活函數(shù)為 tanh 函數(shù), 輸出層的激活函數(shù)為 sigmoid 函數(shù)。則前向傳播計(jì)算
    的頭像 發(fā)表于 07-26 17:22 ?1.2w次閱讀
    搭建<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的<b class='flag-5'>基本思路</b>和步驟

    神經(jīng)網(wǎng)絡(luò)中詞向量是怎么表示的?

    篇我們講到了在神經(jīng)網(wǎng)絡(luò)出現(xiàn)以前的向量表示方法:基于同義詞典的方法和基于計(jì)數(shù)統(tǒng)計(jì)的方法。想要回顧的可以看這里小白跟學(xué)系列之手把手搭建N
    的頭像 發(fā)表于 02-05 09:22 ?3815次閱讀
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>中詞向量是怎么<b class='flag-5'>表示</b>的?

    用Python從頭實(shí)現(xiàn)個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理1

    個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡單。 這篇文
    的頭像 發(fā)表于 02-27 15:05 ?586次閱讀
    用Python從頭實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理1

    用Python從頭實(shí)現(xiàn)個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理2

    個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡單。 這篇文
    的頭像 發(fā)表于 02-27 15:06 ?525次閱讀
    用Python從頭實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理2

    用Python從頭實(shí)現(xiàn)個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理3

    個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡單。 這篇文
    的頭像 發(fā)表于 02-27 15:06 ?617次閱讀
    用Python從頭實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理3

    用Python從頭實(shí)現(xiàn)個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理4

    個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡單。 這篇文
    的頭像 發(fā)表于 02-27 15:06 ?589次閱讀
    用Python從頭實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理4

    基于神經(jīng)網(wǎng)絡(luò)的語言模型有哪些

    文本或預(yù)測文本中的下一個(gè)詞。隨著深度學(xué)習(xí)技術(shù)的飛速發(fā)展,涌現(xiàn)出了多種不同類型的神經(jīng)網(wǎng)絡(luò)語言模型。以下將詳細(xì)介紹幾種主流的基于神經(jīng)網(wǎng)絡(luò)的語言模型,并附上簡單的代碼示例。
    的頭像 發(fā)表于 07-10 11:15 ?247次閱讀