ERNIE 介紹 與 情感分析應用
以往的language model如Bert,透過大量的文本訓練,來學習每個token的語意資訊,但如果可以在學習的過程中把人類的Knowledge一起考慮進去呢?
ERNIE的目的是在原本的BERT模型中,再加上Knowledge Graph(KG)的知識,以增強language model的效能
在閱讀前,可以先去了解BERT或是Attention Is All You Need ~
Knowledge Grap
在開始之前,先來看一下Knowledge Graph(KG)是啥米東東~
什麼是Knowledge Graph(KGs)
Knowledge Graph 是一個有向圖,目的是可以將人類的知識有結構的儲存起來,圖中的點為Entity,邊則代表兩個Entity間的關係
KG中最簡單的表達知識的單位是一個triplet(head entity h, relation r, tail entity t),用 relation r 來表示兩個 entity h, t間的關係,譬如 ( 田馥甄, 職業, 歌手 )
許多個triplet便可以組成Knowledge Graph :
什麼是Knowledge Graph Embedding
通常一個KG中會有很大量的entity與relation,因此如果我們用one-hot的方式,會發現每一個embedding的dimension都非常的大,因此Knowledge Graph Embedding的目的就是去學習一個low-dimension的vector,去表示KG中的每個entity與relation,而學習好的KG embedding因為含有很KG中的資訊,因此可以用在許多不同的task中,向本篇就是用在增強language model的效能上。
而我們要如何取得low-dimension的vector呢?其中一個個單而經典的方法是TransE,這也是ERNIR所使用的方法,TransE會將每個triplet中的relation視為一個轉換的方式,head經過relation的轉換後成為了tail,用公式來表達的話即是eh+er=et ,而TransE的loss便是最小化|eh+er -et|的值。
ERNIE
舉例來說,一個句子 Bob Dylan wrote Blowin’ in the Wind in 1962 ,會需要先偵測出句子裡有哪一些entity(如 Bob Dylan 與 Blowin’ in the Wind),並將這些entity的KG embedding的資訊加進language model中,作者在paper裡面沒有詳細的敘述用什麼方法找到句子的entity,但在github裡面有說,是使用tagme這個套件去找到每個句子裡面對應的entity,且作者是使用wiki的資料作為訓練的,在github裡面有提供英文訓練的資料集。
作者提出本篇論文的兩個 Challenge :
(1) Structured Knowledge Encoding : 如何將一段文字中對應的entity找出來
(2) Heterogeneous Information Fusion : Bert 的 embedding space 與 TransE 的 embedding space 是不同的,要如何設計一個模型去統合兩個不同的資訊
Model Architecture
先來看模型的整體架構圖,基本上分成了兩個部分T-Encoder與K-Encoder,其中T-Encoder與是原本的Transformer負責學習語意的訊息,而K-Encoder的部分則加入了KG的資訊,並整合Bert與TransE兩種information。
不能打公式之我很傷心
之後的說明會牽扯到數學公式,但我發現matters好像不支援QAQ,因此請想繼續看的大家先去這裡看後面的內容
此外,作者有提供開源的程式碼,以及預訓練好的模型給大家下載,也有提供demo code,我將其中一個Sentiment Analysis 的 demo code修改一下,主要加了註解以及套件還有資料集的下載安裝,可以直接在colab蹭飯,有興趣的可以點這裡執行看看~