2022年3月26日 星期六

機器學習筆記 : 深度學習的 16 堂課 (二)

本篇繼續整理 "深度學習的16堂課" 這本書筆記, 本系列前一篇文章參考 : 


以下是讀完第二章 "用機器處理自然語言" 的摘要筆記 :
  1. 英國哲學家維根斯坦 (Ludwig Wittegenstein, 出身於奧匈帝國豪門) 在其著作 "哲學研究" 一書中談到 : "我們不應該去猜測一個字的功能為何, 而是要去研究它是如何被使用的, 並從中習得其意思". 以深度學習為基礎的自然語言處理其原理與上述想法一致, 必須弄清楚一個字在語言中的脈絡, 才能確定它的意思是甚麼. 亦即, 字的真正意思決定於其語境或上下文 (context, 或脈絡字), 而不是其表面上的意義.
  2. 傳統機器學習的缺點是需要在建模前先進行耗時費力的特徵工程, 將原始資料轉換成機器學習演算法能接受的輸入特徵, 這意味著如果要用它來處理自然語言, 你必須先受過語言學訓練, 才有能力將語言資料轉換成可用之特徵. 深度學習則免除了特徵工程這道程序, 只要把原始資料直接餵給深度學習模型, 模型會在訓練階段自動從資料中取得特徵. 需要大量手工的特徵工程除了費時費工外, 其取得之特徵適用的範圍也有不夠廣泛的問題. 
  3. 深度學習模型中靠近輸入層的神經元學習到的是資料中的簡單特徵, 而靠近輸出層的後段神經元學習到的是較抽象與複雜的特徵, 這在用深度學習來做 NLP 時仍然適用. 
  4. NLP 的常見應用 :
    (1). 文件分類 : 例如判別正面/負面
    (2). 機器翻譯 : 兩種語言對翻
    (3). 搜尋引擎 : 自動補字, 預測搜尋資訊
    (4). 語音辨識 : 例如 Siri
    (5). 聊天機器人 : AI 客服機器人
  5. 雖然說深度學習不需要特徵工程, 但原始的文字資料也不是真的就直接送進深度學習模型, 而是需要做預處理, 將文字量化為數字形式後, 才能餵給深度學習網路. 常見的語言量化做法有兩種 :
    (1). One-hot encoding (獨熱編碼, 或單一有效編碼)
    (2). Word vector (詞向量)  
  6. One-hot 編碼是一種只記錄位置訊息的編碼, 文本中的每個字以單字表長度做維度, 以 1 標示它在單字表 (語料庫) 中的位置, 其餘用 0 表示. 例如 'This is a book' 共有四個單字, 其字典為 ['this', 'is', 'a', 'book'], 所以 'This' 的 one-hot 編碼是 1000, 其中的 1 標示 'This' 的位置; 同理 'is' 的編碼是 0100; 'a' 的編碼是 0010; 'book' 的編碼是 0001, 整個句子就可用一個矩陣表示 [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]. 顯然地, one-hot 編碼不可避免會形成稀疏矩陣, 且只記錄位置訊息量太低.
  7. 詞向量 (word vector) 又稱為詞嵌入 (word embeddings) 或向量空間嵌入 (vector-space embeddings), 它會同時紀錄單字的位置與意義, 是開發者較偏愛的編碼方式. 詞向量空間的概念是將語料庫中的每個字詞都與一個多維度向量空間中的位置對應起來, 這是模型訓練前須先完成的前置工作. 初始時各字詞所對應的向量空間位置是隨機決定的, 在訓練中深度學習模型會分析哪些字較常與特定字詞一起使用, 就會逐漸移動到適合的新位置上 (物以類聚), 這樣語意相近的字詞就會靠得比較近.  
  8. 從語料庫建立詞向量方式 : 走訪語料庫, 先從第一個單字出發, 一次往右移一個字, 目前指標所指的字稱為目標字 (target word), 其前後幾個字 (數量由開發者指定) 稱為脈絡字 (context words), 然後使用例如 Word2Vec 或 GloVe 等具有深度學習概念的轉換工具 (演算法) 將語料庫中的字逐一嵌入詞向量空間, 這些工具通常用以給定的脈絡字預測目標字的方式來決定目標字該放到詞向量空間哪一個位置. 
  9. 詞向量空間屬於 n 維向量高維度空間 (維度取決於語料庫的資訊量), 其拓樸結構過於抽象, 超出人腦的認知. 但透過對詞向量進行運算, 計算詞向量座標之間的方向與距離, 可以了解詞與詞之間的關係與意義. 
  10. 用 Word2viz 體驗二維詞向量空間 :
    # http://lamyiowce.github.io/word2viz
    這是使用 60 億個字的語料庫訓練出來的詞向量空間, 每一個單字已根據其意義被放在是當位置. 此網站可用互動方式將新詞嵌入此詞向量空間. 右上方下拉式選單請固定在 "Gender analogies" 選項, 然後於 "Modify words" 項下的兩個 "Type a new word" 欄中輸入一組新的單字, 例如 princess 與 prince, 然後按 'Add pair' 鈕即可 :




    可見 prince 與 princess 跟 king 與 queen 距離很近, 且 prince 靠近 king, 而 princess 靠近 queen, 反映了性別上的異同. 

沒有留言:

張貼留言