Stanford CS224N
by Richard Socher
自修心得
EE degree back in 1982
Z80 was the most popular CPU
Pascal/Fortran/COBOL were popular languages
Apple ][ + BASIC and CP/M
intel 80386SX PC mother board designer
......
Interested in Linux since 2016
Z80 CPU
intel 80386SX CPU
photo source: wikipedia.org
Apple ][
marconi.jiang@gmail.com
詞向量介紹 : 在語言學的定義中,詞(word)是表達意義的最小單位;字(character)是書寫的最小單位。在這篇文章的用詞上, 原文(英文)只有提到 word, 完全沒提到 character, 因此, 在翻譯時, 將 word 翻譯成 ‘詞’ 或 ‘字詞’ 來保存文句通順, 指的都是 word 的意思。至於中文詞與字, 相對於英文而言, 對 DL 是否也可以適用, 還需是進一步探討. 個人認為, 中文的注音/拼音比較像是英文的字 (character), 但是內隱的, 中文的字比較接近 word, 而詞比較接近 phrase. (到底, 我不是專家, 要看專家怎麼說)
是
計算機科學 + 人工智慧 + 語言學
的交集
要了解人類語言並表達其中的意義是極困難的挑戰,
也是人工智慧的極致表現
1/9/2018
語言
文字
拼音/音韻分析
文字辨識/資料記號化
(Tokenization)
詞法分析 Morphological
語法分析 Syntactic
語義解釋 Semantic
交談內容處理 Discourse
簡單到複雜的應用
人類語言系統是深思熟慮後的溝通方式, 讓小孩可以很快學習(是嗎?)
人類的語言大都是分散式、象徵性、明確的信號系統 (signaling system)。
想必是較好信號的可靠性
符號 (symbol) 不僅是數位邏輯/傳統人工智慧的發明
語言中明確的符號, 可以用以下的編碼方式作為溝通的信號
聲音
手勢
寫作
圖片
不同的編碼 (encoding), 但符號 (symbol) 是不變的
人類的語言是象徵性、明確的信號系統
然而, 大腦的編碼系統看起來是連續性的活化模式 (pattern of activation), 符號 (symbol) 藉由連續的聲音/影像信號傳送
大量的詞彙, 字詞符號的編碼造成機器學習的困擾 - 資料的稀疏性
接下來會探索心思的連續性編碼模式 continuous encoding pattern
Machine learning
大多數 machine learning 方法運作的效果不錯的原因, 是因為人類設計的表現方式以及輸入的特徵值
例如:找出位置或組織名稱等註明的項目
Machine learning 只是在權重值的優化來達到最佳的預測
實務上, machine learning 分成 2 個階段
將資料描述成電腦可以理解的特徵值, 這需要該領域博士級的專家
學習的 algorithm, 優化特徵值的權重
Deep learning
特徵學習 representation learning 嘗試去學習好的特徵 features 或表達方式 presentations
DL 的演算法嘗試從原始未經分析的資料輸入學習到(多層的)特徵及一個輸出
人工設計的特徵通常都是過高規格, 不完整, 且從設計到認證曠日費時
DL 學習的特徵 features 很容易調適, 快速學習
DL 提供非常有彈性、(幾乎)是萬能、可學習的框架, 來表達這世界的影像、語音資訊
DL 有監督式及非監督式學習
從 2010 年起, DL 的技術開始超越 ML, 原因在於:
有大量的訓練用資料, 對 DL 有益
高速電腦及多核心的 CPU/GPU
新的模型、演算法、想法
更好、更有彈性的中間碼 intermediate representation
有效的端到端的整合性系統學習
有效的運用上下文 context 及工作間傳送 transferring between tasks 的學習方法
更好的正規化及優化的方法
總之, 得到更好的績效, 從語音、影像到自然語言
DL 在大數據的第一個突破是在語音辨識
Context-Dependent Pre-trained Deep Neural Networks for Large Vocabulary Speech Recognition Dahl et al. (2010)
| Acoustic model and WER | RT03S FSH | Hub5 SWB |
|---|---|---|
| Traditional features | 27.4 | 23.6 |
| Deep Learning |
18.5 (−33%) |
16.1 (−32%) |
DL 第一個主要焦點群組在電腦影像
DL 突破性論文:ImageNet Classification with Deep Convolutional Neural Networks by Krizhevsky, Sutskever, & Hinton, 2012, U. Toronto. 37% error red.
了解並具備運用 DL 當前有效方法的能力
先具備基礎, 再學習運用於 NLP 的主要方法: Recurrent networks, attention, 等等.
大致了解人類語言同時認知了解以及產生這些語言的困難度
了解並且有能力去建立 (TensorFlow) 系統, 以面對一些 NLP 的主要問題:
Word similarities 相似字
parsing 解析
machine translation 機器翻譯
entity recognition 個人辨識
question answering 問題回答
sentence comprehension 句子理解
Libraries like TensorFlow are becoming standard tools
Also:PyTorch,Theano,Chainer,CNTK,Paddle,MXNet,Keras,Caffe,...
表達上、學習上、使用上的複雜度 - 語言/情境/上下文/世界/視覺/知識程度 linguistic/situational/contextual/world/visual knowledge
依賴這些來解釋
人類語言是含糊不清的 (不像程式及其它正規語言)
例如: “I made her duck.” 我幫她準備鴨當晚餐
以下是新聞或 tweet 標題
The Pope’s baby steps on gays
Boy paralyzed after tumor fights back to gain black belt
Enraged cow injures farmer with axe
Juvenile Court to Try Shooting Defendant
expect
0.286
0.792
−0.177
−0.107
0.109
−0.542
0.349
0.271
0.487
need
help
come
qo
give
keep
take
meet
see
make
get
continue
think
say
expect
want
remain
become
was
were
is
be
are
been
being
has
had
prefix stem suffix
un interest ed
Parsing for sentence structure
傳統上:許許多多專注於特徵擷取的工程師需要擷取全面性或其它的知識, 例如, 正規表達式, Berant et al. (2014)
同樣的, DL 的架構可以適用
這些‘事實’ facts 都儲存在向量裡
一個簡單的成功例子是 Google 郵箱的自動回覆, 是一個強大、類神經語言模式的一般性技巧的應用, 是基於 RNN (Recurrent Neural Networks) 的例子。
過去, 嘗試過許多層次的翻譯
傳統的機器翻譯是一套大且複雜的系統
你想, 什麼是運用 DL 方法的語際翻譯?
原始語言句子映射成向量, 然後產生目標語言句子 [Sutskever et al. 2014, Bahdanau et al. 2014, Luong and Manning 2016]
現在, Google Translate 已經有許多語言上線, 而且大幅降低錯誤率
下一個主題是學習詞向量表達式, 以及它們表達的意思
下週, 類神經網路如何運作, 如何運用向量於所有 NLP 的階層及不同的應用
Richard Socher
Lecture 2 : Word Vectors
1/11/2018
meaning 含義在語言學裡最常用的是
signifier (symbol) 意符* 意指 signified (idea or thing)
= denotation 意味
* wiki 符號學
一般的解決方案: 使用資源, 例如 WordNet, 包含同義字及上位詞的表單 (“is a” relationships). [看不懂?]
例如 : 包含 "good" 的同義字集合
例如 : "panda" 的上位詞
from nltk.corpus import wordnet as wn
for synset in wn.synsets("good"):
print ('(%s)' % synset.pos(),', '.join([l.name() for l in synset.lemmas()]))
from nltk.corpus import wordnet as wn
panda = wn.synset("panda.n.01")
hyper = lambda s: s.hypernyms()
list(panda.closure(hyper))(n) good
(n) good, goodness
(n) good, goodness
(n) commodity, trade_good, good
(a) good
(s) full, good
(a) good
(s) estimable, good, honorable, respectable
(s) beneficial, good
(s) good
(s) good, just, upright
(s) adept, expert, good, practiced, proficient, skillful, skilful
(s) good
(s) dear, good, near
(s) dependable, good, safe, secure
(s) good, right, ripe
(s) good, well
(s) effective, good, in_effect, in_force
(s) good
(s) good, serious
(s) good, sound
(s) good, salutary
(s) good, honest
(s) good, undecomposed, unspoiled, unspoilt
(s) good
(r) well, good
(r) thoroughly, soundly, good
no outputRemark :
1. 需安裝 nltk, 執行 python -m nltk.downloader all, (儲存在 /home/macbookpro/nltk_data 目錄下. 詳見 Installing NLTK data
2. 因為 python2 print 那行出現invalid syntax, 用 python3 改寫了 print 相關指令. 參考 Why is invalid syntax error print '%s does not exist in %s for %s'. 跟課程內的輸出也有差異 (a vs adj)
3. 上列的程式沒有產生任何輸出, 需要加 print 指令才行, Google search lambda s: s.hypernyms()
傳統的 NLP, 我們把字詞視為獨立的標記 : 如 hotel, conference, motel
文字用 ont-hot (只有一個 1, 其它為 0) 向量來表達
motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
向量的維度 = 詞彙中詞的總數量 (例如 500,000)
需要解決的問題, 例如:
在網路搜索時, 使用者要尋找 Seattle motel 時, 我們應該也得搜索 Seattle hotel
但是, 這兩個向量是正交的 orthogonal, 意思是, 用 one-hot 的表達式, 兩者完全沒有相似度
motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
解決方式
能否用 wordnet 的同義詞列表來表達相似度
或者, 試著將相似度編碼進向量
核心概念 : 字詞的含義由經常出現在前後的字詞來表達
由常陪伴該字詞出現的字詞可以判斷出該字詞的意思 (J. R. Firth 1957: 11)
現代統計學的 NLP 中最成功的一個概念