斯坦福大學在三月份開設了一門“深度學習與自然語言處理”的課程: CS224d: Deep Learning for Natural Language Processing ,授課老師是青年才俊 Richard Socher ,他本人是德國人,大學期間涉足自然語言處理,在德國讀研時又專攻計算機視覺,之後在斯坦福大學攻讀博士學位,拜師NLP領域的巨牛 Chris Manning 和Deep Learning 領域的巨牛 Andrew Ng ,其博士論文是《 Recursive Deep Learning for Natural Language Processing and Computer Vision 》,也算是多年求學生涯的完美一擊。畢業後以聯合創始人及CTO的身份創辦了 MetaMind ,作為AI領域的新星創業公司,MetaMind創辦之初就拿了800萬美元的風投,值得關注。
回到這們課程CS224d,其實可以翻譯為“面向自然語言處理的深度學習(Deep Learning for Natural Language Processing)”,這門課程是面向斯坦福學生的校內課程,不過課程的 相關材料 都放到了網上,包括課程視頻,課件,相關知識,預備知識,作業等等,相當齊備。課程大綱相當有章法和深度,從基礎講起,再講到深度學習在NLP領域的具體應用,包括命名實體識別,機器翻譯,句法分析器,情感分析等。Richard Socher此前在ACL 2012和NAACL 2013 做過一個Tutorial, Deep Learning for NLP (without Magic) ,感興趣的同學可以先參考一下: Deep Learning for NLP (without Magic) – ACL 2012 Tutorial – 相關視頻及課件 。另外,由於這門課程的視頻放在Youtube上,@愛可可-愛生活 老師維護了一個網盤鏈接: http://pan.baidu.com/s/1pJyrXaF ,同步更新相關資料,可以關注。
第一講:引言-自然語言處理與深度學習簡介(Intro to NLP and Deep Learning)
推薦閲讀材料:
1、線性代數相關知識點回顧:[ Linear Algebra Review ]
2、概率相關知識點回顧:[ Probability Review ]
3、凸優化相關知識點回顧: [ Convex Optimization Review ]
4、優化相關的另一篇介紹(來自於斯坦福CS231課程資料),隨機梯度下降相關[ More Optimization (SGD) Review ]
5、語義向量空間模型的一篇綜述[ From Frequency to Meaning: Vector Space Models of Semantics ]
6、課程第一部分的Notes,涉及第一講和第二講[ Lecture Notes 1 ]
7、Python及numpy簡介[ python tutorial ]
8、第一講Slides[ slides ]
9、第一講視頻[ video ]
以下是第一講的相關筆記,主要參考自課程的slides,視頻和其他相關資料。
什麼是自然語言處理(NLP)
自然語言處理是一門交叉學科,包括計算機科學,人工智能和語言學
目標:讓計算機去處理或“理解”自然語言, 完成一些有用的任務例如問答系統,機器翻譯
完全理解或者表示語言的意義(甚至去定義它)都是一個虛幻的目標
完美的理解語言是一個“ AI-complete ”的問題
自然語言處理的層次
自然語言處理的應用
- 應用範圍從簡單到複雜
- 拼寫檢查, 關鍵詞提取&搜索,同義詞查找&替換
- 從網頁中提取有用的信息例如產品價格,日期,地址,人名或公司名等
- 分類,例如對教科書的文本進行分級,對長文本進行正負情緒判斷
- 機器翻譯
- 口語對話系統
- 複雜的問答系統
工業屆裏的NLP應用
- 搜索引擎
- 在線廣告
- 自動的或輔助的翻譯技術
- 市場營銷或者金融交易領域的情感分析
- 語音識別
NLP為什麼這麼難
- 語言在表達上就很複雜,使用的時候要綜合考慮使用情境
- Jane hit June and then she [fell/ran].
- 歧義問題:“I made her duck”
什麼是深度學習(DL)
- 深度學習是機器學習的一個分支
- 大多數機器學習方法很有效主要依靠人工精心設計的特徵,例如下表是一個命名實體識別任務中設計的特徵模板(Finkel, 2010)
- 最終這些機器學習問題會變成優化問題:優化這些特徵權重以達到最好的預測效果
機器學習 vs 深度學習
什麼是深度學習(DL)續
- 表示學習 or 表達學習(Representation Learning)嘗試自動的學習合適的特徵及其表徵
- 深度學習(Deep Learning) 算法嘗試學習(多層次)的表徵以及輸出
- 從一個“原生”的輸入x(例如“單詞”)
深度學習的歷史
- 這門課主要關注至今為止在解決NLP問題上有效果的深度學習技術
- 關於深度學習模型的相關歷史,推薦參考《 Deep Learning in Neural Networks: An Overview 》
探索深度學習的原因
- 人工設計的特徵常常定義過多,不完整並且需要花費大量的時間去設計和驗證
- 自動學習的特徵容易自適應,並且可以很快的學習
- 深度學習提供了一個彈性的,通用的學習框架用來表徵自然的,視覺的和語言的信息。
- 深度學習可以用來學習非監督的(來自於生文本)和有監督的(帶有特別標記的文本,例如正向和負向標記)
- 在2006年深度學習技術開始在一些任務中表現出眾,為什麼現在才熱起來?
(1)深度學習技術受益於越來越多的數據(2) 更快的機器與更多核CPU/GPU對深度學習的普及起了很大的促進作用(3)新的模型,算法和idea層出不窮
- 通過深度學習技術提升效果首先發生在語音識別和機器視覺領域,然後開始過渡到NLP領域
面向語音識別的深度學習
“深度學習”在大數據集上的第一個突破性進展發生在語音識別領域
Paper: Context-Dependent Pre-trained Deep Neural Networks for Large Vocabulary Speech Recognition Dahl et al. (2010)
面向計算機視覺的深度學習
- 很多深度學習研究小組把大量的精力放在計算機視覺上(直到現在也是)
- 突破性的Paper: ImageNet Classification with Deep Convolutional Neural Networks by Krizhevsky et al. 2012
Deep Learning + NLP = Deep NLP
- 綜合使用一些深度學習的方法來解決NLP的相關問題
- 近幾年在NLP的一些應用領域效果有了較大的提升層次:語音,詞形,句法,語義應用:機器翻譯,情感分析,問答系統
音位學層次的表示
- 傳統的方法:音素
- 深度學習:通過聲音特徵並將這些特徵表示為向量直接來預測音素(或詞語)
形態學層次的表示
- 傳統的方法:語素,例如前綴,詞幹,後綴等
- 深度學習:每個語素都用向量表示神經網絡用於向量的兩兩合併Thang et al. 2013
句法層次的表示
- 傳統的方法:將一個短語或句子劃分到多個句法標記,例如NP,VP等
- 深度學習每個單詞或者短語都是一個向量神經網絡用於向量的兩兩合併Socher et al. 2011
語義層次的表示
- 傳統的方法: Lambda算子 or Lambda演算 (Lambda calculus)非常精細的函數設計需要指定其他函數的輸入沒有相似性的概念或者模糊語言
- 深度學習每個單詞或者短語或者邏輯表達式都是一個向量神經網絡用於向量的兩兩合併Bowman et al. 2014
NLP應用: 情感分析
傳統的方法:精選的情感詞典+詞袋模型(忽略詞序)+人工設計的特徵(很難覆蓋所有的信息)
深度學習:和上述詞素,句法和語義相似的深度學習模型–> RNN
Demo: http://nlp.stanford.edu/sentiment/
NLP應用:問答系統
- 傳統的方法:用了非常多的特徵工程去獲取相關的知識,例如正則表達式,Berant et al. (2014)
- 深度學習:和上述詞素,句法,語義,情感分析相似的深度學習模型
- 知識可以儲備在向量中
NLP應用:機器翻譯
- 過去嘗試過很多層次的機器翻譯方法
- 傳統的機器翻譯系統是一個非常大的複雜系統
- 可以思考一下在深度學習中中間語(interlingua)對於翻譯系統是如何起作用的?
- 深度學習:源句子首先映射為向量,然後在輸出的時候進行句子生成
- Sequence to Sequence Learning with Neural Networks by Sutskever et al. 2014
- 方法很新但是可以替換傳統非常複雜的機器翻譯架構
可以發現所有NLP層次的表示都涉及到向量(Vectors), 下一講將講到如何來學習詞向量以及這些向量表示了什麼?