一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

如何搭建NLP經(jīng)典模型(含代碼)

深度學(xué)習(xí)自然語言處理 ? 來源:深度學(xué)習(xí)自然語言處理 ? 作者:云不見 ? 2021-01-18 16:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前整理過齋藤康毅的深度學(xué)習(xí)神作《深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)》,對小白非常友好,它沒有用任何的現(xiàn)成框架(比如pyTorch、tensorFlow等等),而是直接用python自帶的庫手把手教你,從如何實(shí)現(xiàn)梯度下降開始到手磕一個CNN經(jīng)典網(wǎng)絡(luò),讓你不再對深度學(xué)習(xí)框架的內(nèi)部機(jī)制感到神秘。

短短幾年,這位大佬再度出了“續(xù)集”—《深度學(xué)習(xí)進(jìn)階:自然語言處理》[1]?。梢哉f是NLP入門必讀的經(jīng)典著作了?。?/p>

小齋這次的寫作風(fēng)格和前作一樣,都是手把手教你從實(shí)現(xiàn)詞向量開始,像搭積木一樣,再到如何實(shí)現(xiàn)經(jīng)典網(wǎng)絡(luò)NLP屆的界的經(jīng)典網(wǎng)絡(luò)RNN、LSTM、seq2seq和Attention等NLP中重要的深度學(xué)習(xí)技術(shù)。

(太感人了,這次終于要搞懂詞向量究竟是個什么鬼了?。ㄌ?/p>

凡我不能創(chuàng)造的,我就不能理解。

— 理查德·費(fèi)曼(致敬費(fèi)曼)

話不多說,這次我不再整理的和上個系列一樣那么詳細(xì)(繁冗)了(個人覺得沒必要,那樣整理還不如直接看書來的直接痛快。所以這一次我會摘取基礎(chǔ)又重要的部分,如果你想再詳細(xì)深究下去,乖,去參考原書噢!

本書用到的庫:

Numpy

Matplotlib

(真的是只用了這兩個基本庫!(強(qiáng)

如果要用GPU加速運(yùn)算的話,再加一個CuPy庫。

作者強(qiáng)調(diào),自己動手的經(jīng)驗(yàn)、花時間思考的經(jīng)驗(yàn),都是無法復(fù)制的。(所以,聽話,要自己嘗試敲1敲代碼噢!

本書第一章為上一本書神經(jīng)網(wǎng)絡(luò)的復(fù)習(xí),咱直接跳到第二章 從詞向量開始

正文開始

目錄

什么是自然語言處理?

同義詞詞典

基于計數(shù)的方法

基于計數(shù)的方法改進(jìn)

0a476a96-58b3-11eb-8b86-12bb97331649.jpg

必做練習(xí)

  • 語料庫的預(yù)處理。實(shí)現(xiàn)分詞(將文本分割成單詞,以單詞為最小單元輸入給模型)

  • 單詞ID化(將單詞用ID來表示,相當(dāng)于給每一個單詞編個代號,和我們學(xué)生編個學(xué)號一個意思,方便定位和管理唄)

  • 利用共現(xiàn)矩陣表示文本的詞向量。

(這些練習(xí)會在后續(xù)搭建模型的時候用得到噢!相當(dāng)于我們先造積木,之后搭網(wǎng)絡(luò)就有素材啦!本章的詞向量表示也就是對文本進(jìn)行預(yù)處理的準(zhǔn)備工作?。?/span>

注意全文的講解都是以

(存在一個問題 —> 找到解決辦法 —> 新的解決辦法又有什么問題 —> 又找到解決辦法 )的思路一步一步引出各種概念和解決方案的。

我們的學(xué)習(xí)過程也是如此,市面上突然出現(xiàn)的各種模型也是如此,了解它解決了什么問題也就知道亂七八糟的各種模型為什么會出現(xiàn)了。


什么是自然語言處理?
  • 自然語言:就是我們平常使用的語言,如漢語、英語;

  • 自然語言處理:就是讓機(jī)器理解人類的語言,理解了人類語言才能對我們的語言進(jìn)行進(jìn)一步解讀和分析?。ū热鐚θ祟惖那楦羞M(jìn)行分析、對文本進(jìn)行分類、能夠?qū)崿F(xiàn)人機(jī)對話等等)

在沒有深度學(xué)習(xí)的時候,專家們是這樣進(jìn)行詞向量的表示的:


同義詞詞典

最著名的同義詞詞典當(dāng)屬WordNet [2]啦。WordNet等同義詞詞典中對大量單詞人工的定義了同義詞和層級結(jié)構(gòu)關(guān)系等。

同義詞詞典存在的問題

  • 難以順應(yīng)時代的變化。語言是活的,新詞會不斷出現(xiàn)。

  • 人力成本高,WordNet收錄了超過20W個單詞。

  • 無法表示單詞的微妙差異。即使是含義相近的單詞,也有細(xì)微的差別。比如,vintage 和retro(類似復(fù)古的意思)雖然表示相同的含義,但是用法不同,而這種細(xì)微的差別在同義詞詞典中是無法表示出來的(讓人來解釋是相當(dāng)困難的)。

Marty:“This is heavy (棘手).”

Dr. Brown:“In the future, things are so heavy (重)?”

— 電影《回到未來》

在電影《回到未來》中,有這樣一個場景:從1985 年穿越回來的馬蒂和生活在1955年的的博士的對話中,對“heavy”的含義有不同的理解。如果要處理這樣的單詞變化,就需要人工不停地更新同義詞詞典。


基于計數(shù)的方法(基于統(tǒng)計)

目標(biāo):從海量文本數(shù)據(jù)中自動提取單詞含義,減少人為干擾。

  • 語料庫(corpus):就是我們輸入模型的大量文本,比如句子、文章等等。

這里將用一句話作為語料庫來闡述接下來的所有概念。

>>> text = 'you say goodbye and I say hello.'

語料庫的預(yù)處理

1、進(jìn)行句子的分詞,并標(biāo)記每個單詞的ID。(就像給每個學(xué)生編上學(xué)號ID一樣,方便后續(xù)指定某一個學(xué)生呀?。?/span>

>>>text=text.lower()//將所有單詞轉(zhuǎn)化為小寫>>>text=text.replace('.','.')//使句號其和前一個單詞分開>>>text'yousaygoodbyeandisayhello.'>>>words=text.split('')//切分句子>>>words['you', 'say', 'goodbye', 'and', 'i', 'say', 'hello', '.'] //由八個詞組成的數(shù)組

首先,使用lower()方法將所有單詞轉(zhuǎn)化為小寫,這樣可以將句子開頭的單詞也作為常規(guī)單詞處理。然后,將空格作為分隔符,通過split(' ')切分句子??紤]到句子結(jié)尾處的句號(.),我們先在句號前插人一個空格(即用 ' .'替換'.'),再進(jìn)行分詞。

2、我們進(jìn)一步給單詞標(biāo)上 ID,以便使用單詞 ID 列表,方便為后續(xù)對每個單詞進(jìn)行操作。

將單詞列表轉(zhuǎn)化為單詞 ID 列表,然后再將其轉(zhuǎn)化為 NumPy 數(shù)組。

word_to_id={}//將單詞轉(zhuǎn)化為單詞IDid_to_word={}//將單詞ID轉(zhuǎn)化為單詞(鍵是單詞ID,值是單詞)forwordinwords:  ifwordnotinword_to_id:  //如果單詞不在word_to_id中,則分別向word_to_id和id_to_word添加新ID和單詞    new_id=len(word_to_id)    word_to_id[word]=new_id    id_to_word[new_id] = word
corpus = np.array([word_to_id[w] for w in words])

如果單詞不在 word_to_id 中,則分別向 word_to_id 和id_to_word 添加新 ID 和單詞

如下為創(chuàng)建好了單詞 ID 和單詞的對應(yīng)表

>>>id_to_word{0:'you',1:'say',2:'goodbye',3:'and',4:'i',5:'hello',6:'.'}>>>word_to_id{'you': 0, 'say': 1, 'goodbye': 2, 'and': 3, 'i': 4, 'hello': 5, '.': 6}

最后,我們將單詞列表轉(zhuǎn)化為單詞 ID 列表,然后再將其轉(zhuǎn)化為 NumPy 數(shù)組。

>>>corpusarray([0, 1, 2, 3, 4, 1, 5, 6])

將第一步和第二步封裝為一個preprocess() 函數(shù),使用這個函數(shù),可以按如下方式對語料庫進(jìn)行預(yù)處理。( 代碼在common/util.py)

輸入要處理的語料庫text,輸出corpus, word_to_id, id_to_word

>>> text = 'You say goodbye and I say hello.'>>>corpus,word_to_id,id_to_word=preprocess(text)

corpus 是單詞ID 列表,word_to_id 是單詞到單詞 ID 的字典,id_to_word 是單詞 ID 到單詞的字典。

語料庫的預(yù)處理已完成。這里準(zhǔn)備的 corpus、word_to_id 和 id_to_word 這 3 個變量名在本書接下來的很多地方都會用到。

接下來的目標(biāo)就是使用語料庫提取單詞含義,這里先使用基于計數(shù)的方法,也就是基于統(tǒng)計的方法,能夠得到詞向量?。ㄒ簿褪菍卧~表示為向量)

分布式假說(distributional hypothesis)

  • 分布式假說(distributional hypothesis):某個單詞的含義由它周圍的單詞形成。(某個人存在的價值由它的社會屬性構(gòu)成。—我瞎說的)

單詞本身沒有含義,單詞含義由它所在的上下文(語境)形成。

比如“I drink beer.” “We drink wine.” , drink 的附近常有飲料出現(xiàn)。

另外,從“I guzzle beer.” “We guzzle wine.”可知,guzzle 和 drink 所在的語境相似。進(jìn)而我們可以推測出guzzle 和 drink 是近義詞(guzzle 是“大口喝”的意思) 。

基于這一假說,我們就可以通過單詞的上下文來表示該單詞。如圖,左側(cè)和右側(cè)的 2 個單詞就是上下文。

0b9659f2-58b3-11eb-8b86-12bb97331649.jpg

這里的窗口大小可以控制你需要關(guān)心多少單詞的上下文。顯而易見,關(guān)心的上下文單詞數(shù)越多,單詞的含義越準(zhǔn)確,但是所需要的存儲量就越大,看你自己的取舍咯!這里簡單起見,窗口大小為1。

如何基于分布式假設(shè)使用向量表示單詞,最直截了當(dāng)?shù)膶?shí)現(xiàn)方法是對周圍單詞的數(shù)量進(jìn)行計數(shù)。

共現(xiàn)矩陣(co-occurrence matrix)

  • 共現(xiàn)矩陣(co-occurrence matrix):用上下文共同出現(xiàn)的單詞次數(shù)作為該單詞的向量。即若兩個單詞挨著出現(xiàn)一次,次數(shù)加一。

上面已經(jīng)處理好語料庫了,接下來構(gòu)建共現(xiàn)矩陣,也就是計算每個單詞的上下文所包含的單詞的頻數(shù)。在這個例子中,我們將窗口大小設(shè)為 1,從單詞 ID 為 0 的 you 開始。

單詞 you 的上下文僅有 say 這個單詞,如下圖所示。

0bfd33a2-58b3-11eb-8b86-12bb97331649.jpg

所以單詞you可表示為:

0c162f7e-58b3-11eb-8b86-12bb97331649.jpg

即可以用向量 [0, 1, 0, 0, 0, 0, 0] 表示單詞 you。其他單詞也是重復(fù)如此操作。

0c48f0f8-58b3-11eb-8b86-12bb97331649.jpg

于是得到了共現(xiàn)矩陣:

0c7b260e-58b3-11eb-8b86-12bb97331649.jpg

接下來,我們來實(shí)際創(chuàng)建一下上面的共現(xiàn)矩陣。

將圖 2-7 的結(jié)果按原樣手動輸入。

C=np.array([  [0,1,0,0,0,0,0],  [1,0,1,0,1,1,0],  [0,1,0,1,0,0,0],  [0,0,1,0,1,0,0],  [0,1,0,1,0,0,0],  [0,1,0,0,0,0,1],  [0, 0, 0, 0, 0, 1, 0], ], dtype=np.int32)

這就是共現(xiàn)矩陣。使用這個共現(xiàn)矩陣,可以獲得各個單詞的向量,如下所示。

print(C[0])#單詞ID為0的向量#[0100000]print(C[4])#單詞ID為4的向量#[0101000]print(C[word_to_id['goodbye']])#goodbye的向量# [0 1 0 1 0 0 0]

我們通過共現(xiàn)矩陣成功地用向量表示了單詞。但手動輸入共現(xiàn)矩陣太麻煩,這一操作顯然可以自動化。下面,我們來實(shí)現(xiàn)一個能直接從語料庫生成共現(xiàn)矩陣的函數(shù)。

通過函數(shù)create_co_matrix()能直接從語料庫生成共現(xiàn)矩陣。(代碼實(shí)現(xiàn)在common/util.py)

其中參數(shù) corpus 是單詞 ID 列表,參數(shù) vocab_ size 是詞匯個數(shù),window_size 是窗口大小。

defcreate_co_matrix(corpus,vocab_size,window_size=1):  corpus_size=len(corpus)  co_matrix = np.zeros((vocab_size, vocab_size), dtype=np.int32)
  foridx,word_idinenumerate(corpus):foriinrange(1,window_size+1):  left_idx=idx-i  right_idx=idx+i  ifleft_idx>=0:  left_word_id=corpus[left_idx]  co_matrix[word_id,left_word_id]+=1
  ifright_idx  right_word_id=corpus[right_idx]  co_matrix[word_id,right_word_id]+=1
  return co_matrix

首先,用元素為 0 的二維數(shù)組對 co_matrix 進(jìn)行初始化。然后,針對語料庫中的每一個單詞,計算它的窗口中包含的單詞。同時,檢查窗口內(nèi)的單詞是否超出了語料庫的左端和右端。

這樣一來,無論語料庫多大,都可以自動生成共現(xiàn)矩陣。之后,我們都將使用這個函數(shù)生成共現(xiàn)矩陣。

到這里我們終于第一次成功的用向量表示單詞啦!將正式邁入文本詞向量表示的道路!

寫到這發(fā)現(xiàn)篇幅太長了,為了能有更好的學(xué)習(xí)體驗(yàn),接下來共現(xiàn)矩陣存在的問題以及改進(jìn)方式就下一篇再見啦!

責(zé)任編輯:xj

原文標(biāo)題:小白跟學(xué)系列之手把手搭建NLP經(jīng)典模型(含代碼)

文章出處:【微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


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

    關(guān)注

    1

    文章

    3520

    瀏覽量

    50421
  • 自然語言處理
    +關(guān)注

    關(guān)注

    1

    文章

    628

    瀏覽量

    14157
  • nlp
    nlp
    +關(guān)注

    關(guān)注

    1

    文章

    490

    瀏覽量

    22621

原文標(biāo)題:小白跟學(xué)系列之手把手搭建NLP經(jīng)典模型(含代碼)

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    搭建萬卡GPU集群,小米AI大模型即將全力啟動

    電子發(fā)燒友網(wǎng)報道(文/黃山明)近日,有媒體報道,小米正在著手搭建自家的GPU萬卡集群,將對AI大模型加大投入。該計劃已進(jìn)行數(shù)月,據(jù)悉小米大模型團(tuán)隊(duì)在成立之初便已擁有6500張GPU資源,小米創(chuàng)始人兼
    的頭像 發(fā)表于 12-29 00:02 ?2922次閱讀
    <b class='flag-5'>搭建</b>萬卡GPU集群,小米AI大<b class='flag-5'>模型</b>即將全力啟動

    迅為RK3576開發(fā)板NPU環(huán)境搭建和使用rknn-toolkit2功能演示模型轉(zhuǎn)換

    迅為RK3576開發(fā)板NPU環(huán)境搭建和使用rknn-toolkit2功能演示模型轉(zhuǎn)換
    的頭像 發(fā)表于 06-19 10:53 ?396次閱讀
    迅為RK3576開發(fā)板NPU環(huán)境<b class='flag-5'>搭建</b>和使用rknn-toolkit2功能演示<b class='flag-5'>模型</b>轉(zhuǎn)換

    FA模型訪問Stage模型DataShareExtensionAbility說明

    DataShareExtensionAbility提供數(shù)據(jù)庫的讀寫服務(wù)。 服務(wù)端由FA模型升級到Stage模型后,會導(dǎo)致FA模型的客戶端在API 9()之后的版本上無法訪問服務(wù)端。
    發(fā)表于 06-04 07:53

    代碼革命的先鋒:aiXcoder-7B模型介紹

    ? ? 國內(nèi)開源代碼模型 4月9日aiXcoder宣布正式開源其7B模型Base版,僅僅過去一個禮拜,aiXcoder-7B在軟件源代碼托管服務(wù)平臺GitHub上的Star數(shù)已超過2
    的頭像 發(fā)表于 05-20 14:41 ?253次閱讀
    <b class='flag-5'>代碼</b>革命的先鋒:aiXcoder-7B<b class='flag-5'>模型</b>介紹

    STM32電機(jī)驅(qū)動控制方案(原理圖和源代碼

    淘到一個STM32電機(jī)驅(qū)動控制方案(原理圖和源代碼),一起分享,歡迎交流
    發(fā)表于 03-17 19:43

    代碼平臺:快速搭建與優(yōu)化MES系統(tǒng),提升生產(chǎn)效率

    和交付應(yīng)用軟件,全方位降低軟件的開發(fā)、配置、部署和培訓(xùn)的成本。 二、低代碼平臺搭建MES系統(tǒng)的優(yōu)勢 1、快速開發(fā): 低代碼平臺提供了豐富的模板和組件,IT人員可以通過拖拽、配置等圖形化操作,快速
    的頭像 發(fā)表于 01-23 09:37 ?352次閱讀
    低<b class='flag-5'>代碼</b>平臺:快速<b class='flag-5'>搭建</b>與優(yōu)化MES系統(tǒng),提升生產(chǎn)效率

    小米加速布局AI大模型搭建GPU萬卡集群

    近日,有消息稱小米正在緊鑼密鼓地搭建自己的GPU萬卡集群,旨在加大對AI大模型的投入力度。據(jù)悉,小米的大模型團(tuán)隊(duì)在成立之初就已經(jīng)擁有了6500張GPU資源,而現(xiàn)在他們正在進(jìn)一步擴(kuò)大這一規(guī)模。 針對
    的頭像 發(fā)表于 12-28 14:25 ?524次閱讀

    超級干貨!本地搭建代碼托管平臺Gitea

    1關(guān)于GiteaGitea是一個輕量級的Git托管服務(wù),也就是基于Git的代碼托管平臺,類似于GitHub、Gitee等。Gitea相對于其他代碼托管平臺,是一個可以本地部署的開源項(xiàng)目,非常輕量化
    的頭像 發(fā)表于 12-19 19:33 ?833次閱讀
    超級干貨!本地<b class='flag-5'>搭建</b><b class='flag-5'>代碼</b>托管平臺Gitea

    經(jīng)典圖神經(jīng)網(wǎng)絡(luò)(GNNs)的基準(zhǔn)分析研究

    本文簡要介紹了經(jīng)典圖神經(jīng)網(wǎng)絡(luò)(GNNs)的基準(zhǔn)分析研究,發(fā)表在 NeurIPS 2024。 文章回顧了經(jīng)典 GNNs 模型在節(jié)點(diǎn)分類任務(wù)上的表現(xiàn),結(jié)果發(fā)現(xiàn)過去 SOTA 圖學(xué)習(xí)模型報告
    的頭像 發(fā)表于 11-27 09:16 ?786次閱讀
    <b class='flag-5'>經(jīng)典</b>圖神經(jīng)網(wǎng)絡(luò)(GNNs)的基準(zhǔn)分析研究

    阿里通義千問代碼模型全系列開源

    近日,阿里云通義大模型團(tuán)隊(duì)宣布了一項(xiàng)重大決策:將通義千問代碼模型全系列正式開源。此次開源的模型系列共包含6款Qwen2.5-Coder模型,
    的頭像 發(fā)表于 11-14 15:26 ?988次閱讀

    阿里云開源Qwen2.5-Coder代碼模型系列

    近日,阿里云通義大模型團(tuán)隊(duì)宣布開源其通義千問代碼模型全系列,共包含6款Qwen2.5-Coder模型。這一舉措展示了阿里云在推動AI技術(shù)開放與共享方面的決心。 此次發(fā)布的旗艦
    的頭像 發(fā)表于 11-14 11:28 ?979次閱讀

    搭建開源大語言模型服務(wù)的方法

    本文我們將總結(jié)5種搭建開源大語言模型服務(wù)的方法,每種都附帶詳細(xì)的操作步驟,以及各自的優(yōu)缺點(diǎn)。
    的頭像 發(fā)表于 10-29 09:17 ?692次閱讀

    AI大模型在自然語言處理中的應(yīng)用

    AI大模型在自然語言處理(NLP)中的應(yīng)用廣泛且深入,其強(qiáng)大的語義理解和生成能力為NLP任務(wù)帶來了顯著的性能提升。以下是對AI大模型NLP
    的頭像 發(fā)表于 10-23 14:38 ?1541次閱讀

    用TINA如何搭建仿真模型?

    使用TINA仿真單極運(yùn)放的環(huán)路,仿真模型知道怎么搭建,現(xiàn)在要仿真由兩級TL082搭建的兩級運(yùn)放的環(huán)路穩(wěn)定性,請教,用TINA如何搭建仿真模型
    發(fā)表于 08-15 08:10

    如何將Llama3.1模型部署在英特爾酷睿Ultra處理器

    本文從搭建環(huán)境開始,一步一步幫助讀者實(shí)現(xiàn)只用五行代碼便可將Llama3.1模型部署在英特爾 酷睿 Ultra 處理器上。
    的頭像 發(fā)表于 07-26 09:51 ?3099次閱讀
    如何將Llama3.1<b class='flag-5'>模型</b>部署在英特爾酷睿Ultra處理器