【Hello NLP】CS224n筆記[4]:自然語言中的依存分析(Dependency Parsing)

2021-02-20 AINLP
CS224n筆記[4]:自然語言中的依存分析(Dependency Parsing)作者:郭必揚什麼是依存分析

自然語言處理任務中,有很重要的一塊,就是分析語言的結構。語言的結構,一般可以有兩種視角:

前者,主要關心的是句子是怎麼構成的,詞怎麼組成短語。所以研究Constituency,主要是研究忽略語義的「語法」結構(context-free grammars)。

後者,依賴關係,則主要關心的是句子中的每一個詞,都依賴於哪個其他的詞。

比如下面這個句子:

「瞧這個可愛的小傻瓜!」「傻瓜」,是「瞧」這個動作的對象,因此「傻瓜」是依賴於「瞧」的;「可愛的」、「小」都是修飾「傻瓜」的,因此,這兩個形容詞都是依賴於「傻瓜」的;「這個」,同樣是指示「傻瓜」的,因此它也依賴於「傻瓜」。

這樣,我們就清楚了這個句子中的所有依賴關係,畫成依賴關係圖則是這樣:

依賴關係

注意,在圖中我們增加了一個根節點「Root」,這是為了讓「瞧」這個字也有依賴的對象。

當然,關係依存分析,還有很多的規則,裡面比較複雜,我不太感興趣,所以這裡不多寫了。

下面我們來介紹如何讓機器自動地幫我們來分析句子的結構。

傳統的基於轉移的依存分析(Transition-based Parsing)

這裡主要介紹Nivre在2003年提出的「Greedy Deterministic Transition-Based Parsing」方法,一度成為依存分析的標準方法。這裡我簡單地介紹一下它的工作原理。

我們構造一個三元組,分別是Stack、Buffer和一個Dependency Set。

Set中則保存我們分析出來的依賴關係,最開始是空的。

我們要做的事情,就是不斷地把Buffer中的詞往Stack中推,跟Stack中的詞判斷是否有依賴關係,有的話則輸出到Set中,直到Buffer中的詞全部推出,Stack中也僅剩一個Root,就分析完畢了。

下面,我通過一個十分簡單的例子,來演示這個過程。這次,我們分析的句子是:

分析的過程如下:

上面的過程怎麼理解呢?比方從第二行,這個時候Stack中只有[Root,I],不構成依賴關係,所以我們需要從Buffer中「進貨」了,因此採取的Action是Shift(把Buffer中的首個詞,移動到Stack中),於是就到了第三行。

第三行,我們的Stack變成了[Root,I,love],其中I和Love構成了依賴關係,且是Love指向I,即「向左指」的依賴關係,因此我們將採取「Left Arc」的action,把被依賴的詞(此時就是關係中的左邊的詞)給移除Stack,把這個關係給放入到Dependency Set中。

按照這樣的方法,我們一直進行,不斷地根據Stack和Buffer的情況,來從Shift、Left-arc、Right-arc三種動作中選擇我們下一步應該怎麼做,知道Stack中只剩一個Root,Buffer也空了,這個時候,分析就結束,我們就得到了最終的Dependency Set。

以上的過程,應該不難理解,但是相信大家此時一定會有疑問:

我怎麼讓機器去決定當前的Action呢?即機器怎麼知道,Stack中是否構成了依賴關係?

在Nivre的年代,這裡使用是機器學習的方法,需要做繁重的特徵工程。這裡的特徵,往往有個二值特徵,即無數個指示條件作為特徵,來訓練模型,可以想像這麼高緯度的特徵是十分稀疏的。因此,這種模型的95%左右的解析時間,都花費在計算特徵上。這也是傳統方法的最要問題。

神經依存分析(Neural Dependency Parsing)

神經依存分析方法,是斯坦福團隊2014年的研究成果,主要就是利用了神經網絡的方法代替了傳統機器學習方法、用低維分布式表示來代替傳統方法的複雜的高維稀疏特徵表示。而整個解析的過程,依然是根據之前的Transition-based方法。

首先明確,我們的預測任務,是「根據當前的狀態,即Stack、Buffer、Set的當前狀態,來構建特徵,然後預測出下一步的動作」

在神經依存分析中,我們的特徵是怎麼構建的呢?我們可以利用的信息包括詞(word)、詞性(pos tag)和依賴關係的標籤(label)。我們對這三者,都進行低維分布式表示,即通過Embedding的方法,把離散的word、label、tag都轉化成低維向量表示。

對於一個狀態,我們可以選取stack、Buffer、set中的某些詞和關係,構成一個集合,然後把他們所有的embedding向量都拼接起來,這樣就構成了該狀態的特徵表示。

至於選擇哪些詞、關係,這個就是一個「經驗性」的東西了,在斯坦福的論文中可以詳細了解。整個模型的網絡結構也十分簡潔:

A Fast and AccurateDependency Parser using Neural Networks

對於Dependency Parsing的簡單介紹就到此為止。依存分析,並不是我們NLP中最常見的任務之一,我們也很少看到直接將依存分析做應用的,我們更常見的是分類、實體識別、閱讀理解、對話等任務。但是依存分析,作為自然語言處理的一項基礎技術,試圖讓機器去理解語言的內部結構,理解了結構,NLU(Natural Language Understanding)才成為可能。

cs224n的Assignment3就是Neural Dependency Parsing的實現,代碼見github:

https://github.com/beyondguo/CS224n-notes-and-codes/tree/master/assignment3

由於微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:

(1)點擊頁面最上方"AINLP",進入公眾號主頁。

(2)點擊右上角的小點點,在彈出頁面點擊「設為星標」,就可以啦。

感謝支持,比心

進群請添加AINLP小助手微信 AINLPer(id: ainlper),備註NLP技術交流

推薦閱讀

這個NLP工具,玩得根本停不下來

徵稿啟示| 200元稿費+5000DBC(價值20個小時GPU算力)

完結撒花!李宏毅老師深度學習與人類語言處理課程視頻及課件(附下載)

從數據到模型,你可能需要1篇詳實的pytorch踩坑指南

如何讓Bert在finetune小數據集時更「穩」一點

模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法

文本自動摘要任務的「不完全」心得總結番外篇——submodular函數優化

Node2Vec 論文+代碼筆記

模型壓縮實踐收尾篇——模型蒸餾以及其他一些技巧實踐小結

中文命名實體識別工具(NER)哪家強?

學自然語言處理,其實更應該學好英語

史丹福大學NLP組Python深度學習自然語言處理工具Stanza試用

關於AINLP

AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。

閱讀至此了,分享、點讚、在看三選一吧🙏

相關焦點

  • 斯坦福CS224n《基於深度學習的NLP》課程更新,C.Manning主講
    新智元報導 來源:Stanford編輯:大明【新智元導讀】史丹福大學官方公布cs224n課程《基於深度學習的自然語言處理》詳細安排,主講人為史丹福大學人工智慧實驗室主任,著名計算機科學家Christopher Manning教授,1月份課程閱讀材料已公布。本課程自2017 年起開設,2017年該課程視頻已公開放出。
  • 自然語言處理全家福:縱覽當前NLP中的任務、數據、模型與論文
    作者 Sebastian Ruder 在文中覆蓋了傳統的和核心的 NLP 任務,例如依存句法分析和詞性標註。以及更多近期出現的任務,例如閱讀理解和自然語言推理。本文最主要的目的是為讀者提供基準數據集和感興趣任務的當前最佳研究的快速概覽,作為未來研究的墊腳石。
  • 【超全資源】自然語言處理(NLP)入門學習資源清單(部分資料下載)
    v=nfoudtpBV68&list=PL6397E4B26D00A269 •  斯坦福CS224d:自然語言處理的深度學習[更高級的機器學習算法、深度學習和NLP的神經網絡架構]http://cs224d.stanford.edu/syllabus.html •  Coursera:自然語言處理簡介[由密西根大學提供的NLP
  • 鄒炎炎:語義分析介紹及跨語言信息在語義分析中的應用 | AI 研習社...
    語義分析(semantic parsing)是人工智慧的一個分支,是自然語言處理技術的幾個核心任務,涉及語言學、計算語言學、機器學習,以及認知語言等多個學科。如何學 output embedding4.
  • 斯坦福發布重磅NLP工具包StanfordNLP,支持中文等53種語言
    新智元報導 來源:stanfordnlp.github.io編輯:肖琴【新智元導讀】斯坦福團隊最新發布一個NLP任務的軟體包StanfordNLP,通過Python接口為53種語言提供標記、依存句法分析等NLP任務的重要工具
  • 國內自然語言處理(NLP)研究組
    Lab)ByteDance AI Lablab.toutiao.com中科院計算所自然語言處理研究組歡迎來到中科院計算所自然語言處理組網站nlp.ict.ac.cn中科院自動化研究所語音語言技術研究組中文信息處理組nlpr-web.ia.ac.cn中國科學院軟體研究所中文信息處理實驗室中科院軟體所中文信息處理實驗室www.icip.org.cn
  • [CS224n筆記] L6 Language Models, RNN, GRU and LSTM
    >學校 | 哈工大SCIR直博推免生最近會逐步將博客上的 CS224n-2019 筆記搬到知乎上來,後續也會新增 CS224n-2020 裡的更新部分:CS224n-2020 並未更新 Note 部分,但課程的部分課件進行了教學順序上的調整與修改(Suggested Readings 也相應變動
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    自然語言處理權威指南(monkeylearn.com)https://monkeylearn.com/blog/the-definitive-guide-to-natural-language-processing/自然語言處理入門(algorithmia.com)https://blog.algorithmia.com
  • ...請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    》(小學一年級~上冊)(Yoav Goldberg)http://u.cs.biu.ac.il/~yogo/nnlp.pdf自然語言處理權威指南(monkeylearn.com)https://monkeylearn.com/blog/the-definitive-guide-to-natural-language-processing
  • 乾貨 | 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    》(小學一年級~上冊)(Yoav Goldberg)http://u.cs.biu.ac.il/~yogo/nnlp.pdf 自然語言處理權威指南(monkeylearn.com)https://monkeylearn.com/blog/the-definitive-guide-to-natural-language-processing/
  • NLP 領域的 C 位課程!斯坦福 CS224d 中英字幕版重磅上線
    CS224d:深度自然語言處理課程」中英字幕版重磅上線!CS224d,原名  Deep Learning for Natural Language Processing (深度自然語言處理),是全球 NLP 領域最受歡迎的課程之一,讓你在了解豐富的深度自然語言處理應用案例的同時,學會在實踐中搭建出最先進的自然語言處理模型。
  • NLP入門+實戰必讀:一文教會你最常見的10種自然語言處理技術
    在它的幫助下,我們從文本中提煉出適用於計算機算法的信息。從自動翻譯、文本分類到情緒分析,自然語言處理成為所有數據科學家的必備技能之一。在這篇文章中,你將學習到最常見的10個NLP任務,以及相關資源和代碼。為什麼要寫這篇文章?
  • 資源| MIT自然語言處理數據集和語料庫集合
    原標題:資源 | MIT自然語言處理數據集和語料庫集合 選自Github 作者:Karthik Narasimhan等 >機器之心編譯 參與:李澤南 最近,麻省理工學院(MIT)的在讀博士 Karthik Narasimhan 發起了一個為自然語言處理(NLP)準備的數據集/語料庫列表,以時間順序排列。
  • 中文NLP福利!大規模中文自然語言處理語料
    新智元推薦來源:AINLP作者:徐亮【新智元導讀】本文介紹一個中文自然語言處理語料庫項目:nlp_chinese_corpus ,初步貢獻了幾個已經預處理好的中文語料,包括維基、新聞和百科語料,可直接下載使用。
  • 資源| 史丹福大學NLP組開放神經機器翻譯代碼庫(附論文)
    選自斯坦福機器之心編譯參與:吳攀、杜夏德近日,史丹福大學自然語言處理組(Stanford NLP)發布了一篇文章,總結了該研究組在神經機器翻譯(NMT)上的研究信息。在這篇文章中,他們還放出了在多種翻譯任務上(比如英德翻譯和英語-捷克語翻譯)實現了當前最佳結果的代碼庫(codebase)。
  • 想快速入門NLP?我們測評了15門最火課程,幫你找到最適合的
    此外,作為涉足NLP也有數年的小編,也推薦不妨先挑一門Code-first課,強推Fast.AI,之後再用大學公開課繼續深入,比如伯克利的Info256 以及斯坦福有名的cs224n,之後想再深入理論可以試試CMU的cs11-747.接下來,我們就來看看作者對15節NLP課程的測評~如果你的標準很高,那麼選擇一門符合你需求的網課就會變成了一件很困難的事。
  • NLP 句法結構解析樹
    句法解析是 NLP 中的一種關鍵技術,可以幫助分析句子的成分結構,以及單詞之間的依存關係。句法分析樹主要分兩大類:constituent tree 短語結構樹,dependency tree 依存結構樹。本文主要簡單介紹一下短語結構樹和依存結構樹的概念。
  • 重磅發布 | 牛津大學Deep NLP深度自然語言處理課程17年最新(漢化視頻)
    大數據文摘作品,轉載要求見文末大數據文摘重磅推出牛津大學深度學習與自然語言處理課程(Deep NLP)漢化視頻!如何自動處理自然語言輸入、並產生語言輸出,是人工智慧的重要研究方向。近年來,藉助基於神經網絡的統計科學,自然語言處理領域的學術研究和商業應用都取得了顯著進展。
  • 自然語言處理 NLP 發展簡史
    1964 年,首個自然語言對話程序 ELIZA 誕生,該程序是由麻省理工學院人工智慧實驗室的德裔計算機科學家約瑟夫·維岑鮑姆 (Joseph Weizenbaum)使用一種名為 MAD-SLIP 的類 LISP 語言編寫,運行在 MIT 實驗室中 36 位的分時系統 IBM 7094 (早期的電晶體大型計算機)上。
  • AI自然語言處理(NLP)領域常用的16個術語
    5.分詞(Tokenization)分詞是自然語言處理的基礎任務,將句子、段落分解為字詞單位,方便後續的處理與分析。6.詞性標註(Part Of Speech)詞性標註是自然語言處理過程中一項非常重要的基礎工作。簡單來說就是在給定句子中判定每個詞的語法範疇,確定其詞性並加以標註的過程。詞性標註常用的4種方法分別為:基於規則、基於統計、基於規則+統計、基於深度學習。