RM新时代网站-首页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

主要內(nèi)容

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

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

如何表示一個詞語的意思?

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

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

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

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

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

計算機如何處理詞語的意思

過去幾十年里主要使用的是分類詞典。比如使用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

離散化表示的問題

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

缺少新詞,無法與時俱進

比較主觀

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

難以精確計算詞與詞之間的相似度

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

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

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

從符號化表示到分布式表示

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

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

基于相似度的分布式表示

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

這個思想非常簡單,卻非常強大,是現(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的含義是由周圍的這些詞表示的。

通過向量定義詞語的含義

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

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

word2vec

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

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

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

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

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

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

word2vec主要思路

在中心詞和語境詞之間相互預測!

兩種算法

Skip-grams(SG)給定目標詞,預測語境詞

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

兩個相對高效的訓練方法:

層級 Softmax

負采樣

Skip-gram預測

Skip-gram預測

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

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

word2vec細節(jié)

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

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

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

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

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

那么概率是如何計算的?

對兩個詞向量 做點乘:

兩個向量越相似,其點積越大!

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

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

一張圖濃縮Skipgram

Skipgram濃縮圖

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

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

訓練模型:計算向量梯度

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

梯度推導

重要組件:

矩陣偏微分

鏈式法則若y=f(u),u=g(x),即y=f(g(x)),則:

目標函數(shù):

最大化它等同于最小化

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

目標函數(shù)中的概率通過softmax計算:

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

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

對中心詞求梯度:

因此,

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

梯度下降

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

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

樸素梯度下降代碼:

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

梯度下降示意圖

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

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

隨機梯度下降法

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

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

隨機梯度下降代碼:

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

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

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

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

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

收藏 人收藏

    評論

    相關推薦

    【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡基礎知識

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

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

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

    如何構建神經(jīng)網(wǎng)絡

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    用Python從頭實現(xiàn)神經(jīng)網(wǎng)絡來理解神經(jīng)網(wǎng)絡的原理1

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

    用Python從頭實現(xiàn)神經(jīng)網(wǎng)絡來理解神經(jīng)網(wǎng)絡的原理2

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

    用Python從頭實現(xiàn)神經(jīng)網(wǎng)絡來理解神經(jīng)網(wǎng)絡的原理3

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

    用Python從頭實現(xiàn)神經(jīng)網(wǎng)絡來理解神經(jīng)網(wǎng)絡的原理4

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

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

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