Oxford Deep NLP學習筆記2:Overview of the Practicals

前言

本節課是Oxford Deep NLP 2017 course的第二課,由Chris Dyer(Dynet作者之一)講解關於本門課程的實踐任務。

Slides:https://github.com/oxford-cs-deepnlp-2017/lectures

Videos:https://www.bilibili.com/video/av9817911/?from=search&seid=2691326368420649676

Prerequisite: Probability, Linear Algebra, and Continuous Mathematics, basic Machine Learning and Neural Networks.

本人是自然語言處理小白一枚,由於沒有中文翻譯字幕,因此若有不當的翻譯和理解,還望指正。

Practical Topics I

Perceiving and representing text:指如何讓計算機中感知並表示文本語料。

上一節中我們討論的是最基本的如何表示一個詞,但在實際應用中還有很多值得正視的問題,比如:

  • 在應用模型於一筆新數據上時,如果遇到了在訓練時沒有見過的詞,該怎麼處理?
  • 對於沒有分隔符的語言的文本(比如中文),怎麼分詞才能沒有歧義?
  • 需要小寫化嗎?需要嘗試檢查拼寫嗎?
  • 把文本看做字符流還是字節流?

以上的問題涉及到我們如何去做文本的預處理(preprocess)。

對於理解單元(perceptual unit)大小的權衡(trade off):

  • 較細的理解單元(個人理解是指理解到很細膩的語義),需要更加複雜的模型,但是遇到非規範用語(OOV,或者理解爲訓練時沒有看到過的情況)時的處理能力更好;
  • 較粗的理解單元對應的模型會簡單一些,但是測試時遇到OOV會是個大問題。

Heap’s law: 描述在一段文本中,不同詞語的數目。推論是採集的語料庫越大,都會有越多的新詞彙進入語料中。

這裏寫圖片描述

(上面感覺講的有點快和亂)

終於引出了表示學習(Representation learning)的概念,通過讓文本預測其上下文來計算出自身的特徵表示,對應了上節課講的Skip-gram的方法。

Practical Topics II

自然語言的任務有:

  • 文本分類 (Text categorization)
  • 自然語言生成 (Natural language generation)
    • 語言建模 (language modelling):爲語言中的句子賦予一個概率,描述這個句子有多大程度上是合理的。產生一段和訓練文本概率分佈相似的文本,比如打字時候的自動改正和字詞聯想;
    • 條件語言建模(conditional language modeling):在給定上下文、已知信息的條件下對語言建模,並有一個合適的實際反饋,如更準確的自動改正、語音識別(speech recognition),摘要生成(caption generation)等。比如你知道用戶的雙胞胎身份、年齡,那麼在打字自動改正或聯想時應當考慮到這些條件信息。
  • 自然語言理解(Natural language understanding)
    • 加入了自然語言生成(NLG)的條件語言建模:具體應用有機器翻譯(machine translation),文本自動摘要(text summarization),對話代理(conversational agents)
    • 響應人給出的現實指令
    • 問答系統(Question Answering)、對話系統(Dialogue system)
  • 分析型應用(Analytic applications)
    • 主題建模(Topic modeling) ,即抽象出文本中潛在的主題
    • 語言學分析(Linguistic analysis),可能涉及語篇(discourse)、語義(semantics)、語法(syntax)、morphology(形態學)

Practical Details

TED Dataset

在本門課的實踐中,只涉及一個數據集(Dataset),理由是它已經能滿足大部分任務的要求,我們要學會轉換這一份數據集來面對不同的任務,同時在現實中也要學會挖掘手頭數據的價值。

該數據集來自於TED的演講稿,這些演講涉及大量的不同主題(但風格都相似),數據量也能與計算資源相匹配。另外,每次演講都有一些人工整理的有用信息,比如主題標籤、標題、總結等。數據集的具體詳情見下圖。

這裏寫圖片描述

回顧:下面藍字的部分是TED數據集如何對應上面提到過的這些任務。

這裏寫圖片描述
這裏寫圖片描述

Software in Practicals

對於深度學習的定義有多種多樣,講師提出了Deep Learning的一個特點:過去的機器學習(or shallow learning)中人們總是花大量時間在特徵工程(feature engineering on existing model)上,而不是對模型的改進,但當下的深度學習更關注於強化模型,而不是特徵工程。

深度學習的模式:設計模型、實現模型、測試、分析、重複,以達到快速迭代的目標。其中實現模型、優化函數、加速計算是非常關鍵的。

然而由於計算微分(forward pass & backward pass)非常容易出錯, 我們需要採用一些工具(Pytorch, Tensorflow, Theano, Dynet…)來簡化模型的代碼實現,這些多種多樣的工具通常都包含常用的神經網絡組件、自動微分功能等,因此可以大大減少工作量。

計算圖的聲明(computation graph declare)方式:

  • 靜態(static):如Tensorflow和Theano。首先爲訓練/測試實例中要進行的計算預先定義一些符號和過程(對於可變輸入,要讓定義的模型具有接收、處理可變輸入的能力),然後工具會優化流圖,再運行它優化後的代碼。
    • 優點:優化和加速計算。
    • 缺點:Write a program that raises another program.實際上是將寫好的符號程序(symbolic program)編譯成第二種程序,而這第二種程序不一定能提供所有我們想要的靈活操作。
  • 動態(dynamic):如Dynet和Pytorch。命令式地寫下每一步所做的計算,這些工具所做的就是跟蹤定義的操作,並隱式地生成符號表示(通過操作符重載)
    • 優點:可以直接用C++/Python寫代碼,而無需學習一種新的語言,因此更易入門(lower learning curve)
    • 缺點:對計算的優化有限。

靜態圖需要在處理數據前定義好一套完整的模型;

而動態圖模型允許用戶先定義好一套基本的框架再根據數據來實時修正模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章