TransE模型学习笔记
目錄
一、知識表示學習的引入
二、論文摘要
三、方法介紹
(一)建模多關系數據
(二)關系嵌入到向量空間中的翻譯
四、TransE模型
(一)學習實體和關系的低維嵌入向量
(二)基于“能量”的計算方法
五、算法流程
(一)算法流程圖?
(二)算法偽代碼
六、實驗
(一)數據集
1. Freebase數據集格式
2. TranE訓練數據集格式
?(二)算法實現細節
1. 輸入輸出
2. L2范式歸一化
3. 使用deepcopy函數更新向量
4. 模型參數更新
5. 訓練并更新向量的細節
6. 測試環節,將測試集分為Raw及Filter兩種情況
7.?loss函數的理解
(四)實驗設置
1.?評估指標
2.?測試方式
3.?參數設置
4. 構建負樣本
(五)鏈接預測
(六)詳細結果
(七)學習預測新關系
七、結論
參考文檔
今天分享的是NIPS 2013的一篇經典論文《Translating?Embeddings for Modeling Multi-relational Data》
原文連接:https://proceedings.neurips.cc/paper/2013/file/1cecc7a77928ca8133fa24680a88d2f9-Paper.pdf
前言:知識圖譜又稱為科學知識圖譜,在圖書情報界稱為知識域可視化,或知識領域映射地圖,用來顯示知識發展進程與結構關系的一系列各種不同的圖形,用可視化技術描述知識資源及載體,挖掘、分析、構建、繪制和顯示知識及他們互相之間的關系。
知識圖譜的基礎結構是(頭實體h,關系r,尾實體t)構成。例如(中國,首都,北京),其中 中國 和 北京 是實體,首都 對應關系。
一、知識表示學習的引入
通常,我們使用三元組(head, relation, tail)來表示知識。在這里,頭和尾是實體。例如,(sky tree, location, Tokyo)。我們可以用獨熱向量來表示這個知識。但實體和關系太多,維度太大。當兩個實體或關系很近時,獨熱向量無法捕捉相似度。受Wrod2Vec模型的啟發,我們想用分布表示來表示實體和關系。?
知識表示學習是針對知識圖譜的表示學習。表示學習的任務是得到表示主題的低維向量化表示,從而為一些下游任務的計算提供便利,在減少復雜度的同時又能盡可能滿足對不同含義的主體進行表征的需求。
知識表示學習學習是將知識圖譜中的三元組的元素表示為低維向量。它的下游任務有鏈接預測和節點分類。
知識圖譜數據較網絡表示學習面對的數據更為復雜多樣,實體和關系類型更為豐富。所以基于數據本身的特性,產生了一些特殊的問題,一些算法只能處理關系簡單的數據,而無法處理復雜數據,如具有對稱關系、可逆關系的數據。?
二、論文摘要
處理多關系數據大多采用學習潛在特征的方法,模型結構較為復雜且易過擬合。為解決這一問題,作者提出了一種將實體和關系嵌入到低維向量空間中進行計算的建模方法——TransE,該方法較為簡單、參數較少,是基于平移距離建模的開山之作。在兩個知識庫上的實驗證明,TransE在鏈接預測任務中取得了較理想的效果,優于當時的最新方法。
三、方法介紹
本文介紹了一種對多關系數據進行建模的方法。多關系數據是指有向圖,節點對應于形式為三元組(頭實體,關系,尾實體)(表示為 (h, l, t)),每個三元組都表明實體的頭和尾的名稱之間存在關系。大型知識庫(例如Freebase,Google Knowledge Graph或GeneOntology等)中的知識大多是通過三元組的形式進行表達的。知識庫(KB)中的每個實體代表世界的抽象概念或具體的實體,而關系是表示其中兩個事實實體的謂詞。
本文的工作重點是為知識庫(Wordnet和Freebase中的知識庫)建立多關系數據建模,目的是提供一種有效的工具,通過自動添加新事實來完成這些數據,而無需額外的知識。下面介紹本文解決的問題和解決方法。
(一)建模多關系數據
本文解決的主要問題在于如何建模多關系型數據。建模關系型數據的困難之處在于無論是實體還是關系都有許多不同的類別并會同時出現,所以對多關系數據建模要用更通用的方法,需要適當的方法來提取出模式。
目前處理多關系數據大多數方法采用的是學習潛在特征的方法。然而大多數模型均較為復雜,會使得正則化項難以設置導致過擬合,過多的局部極小值點帶來的非凸優化問題會導致欠擬合。然而有研究表明簡單的模型也可以獲得很好的結果。
(二)關系嵌入到向量空間中的翻譯
針對以上提出的問題,本文介紹了TransE,一種基于“能量”的模型,用于學習實體和關系的低維嵌入向量。
在TransE中,關系表示為嵌入空間中的平移:對于一組三元組?(h, l, t)?,則頭實體 h?的嵌入向量應與尾實體 t?的嵌入向量相加接近于依賴的關系 l?的嵌入向量。本文的模型方法依賴較少的參數,因為它對于每個實體和每個關系僅學習一個低維嵌入向量。?
四、TransE模型
本文提出的TransE模型主要實現學習知識庫中實體和關系的低維嵌入向量,然后利用基于”能量”的計算方法,通過對損失函數的梯度進行參數的更新,達到優化的目的。?
(一)學習實體和關系的低維嵌入向量
給定包含多個三元組?(h,l,t)?的訓練集?S?,該訓練集 S?的每個三元組由兩個實體 h , (實體的集合)和關系 ??(關系的集合)組成,TransE模型學習實體和關系的向量嵌入,目的是使正確的三元組的嵌入的向量符合 ??,否則 ?? 則應遠離?t?。
(二)基于“能量”的計算方法
對于基于“能量”的框架,每一個三元組的能量等于 ?,并且可以將其取為??或??范數。
TransE的損失函數 (Hinge Loss Function) 為:
??
其中 ?? 表示 ?? 為正時取 ?、?為負或等于0時取0;?γ?是余量超參數,作用相當于是一個正確三元組與錯誤三元組之前的間隔修正, ?γ? 越大,則兩個三元組之間被修正的間隔就越大,則對于詞向量的修正就越嚴格;并且?
其中 ??? 稱為打破的三元組(corrupted triplet),是隨機替換三元組中的頭實體或尾實體得到的,并且頭實體和尾實體分別替換,不會同時替換,從而得到打破的三元組。?
可以看出,TransE模型是針對給定三元組進行計算“能量”達到優化目的,其中負例是通過替換頭實體或者尾實體自行構造的,優化目標就是使得正負例樣本距離最大化,通過最小化正樣本的“能量”,最大化負樣本的“能量”,達到優化嵌入表示的目的。????????
五、算法流程
(一)算法流程圖?
TransE的算法流程圖下圖所示:
(二)算法偽代碼
輸入:輸入的訓練集為已經確定三元組集 、實體集、關系集、邊緣余量超參數 ?γ?,嵌入向量的緯度 ?? 。
使用uniform 初始化關系 ?? 的嵌入向量
對關系 ?? 的嵌入向量進行標準化操作
初始化實體 ??的嵌入向量
開始循環
每一次循環迭代后要對 ?? 的嵌入向量進行標準化操作
在 ??中隨機抽取 ?? 個三元組作為一個循環迭代的 ??
初始化一個空的三元組集 ??
每個??中的三元組進行循環?
對于每個三元組的頭實體或尾實體進行打破生成負樣本
把正確的三元組和打破的三元組都加入到三元組集??中?
結束循環
通過損失函數的隨機梯度下降進行嵌入向量參數的更新
結束循環
六、實驗
(一)數據集
-
Wordnet:WN18
-
Freebase:FB1M、FB15k
1. Freebase數據集格式
?以Freebase數據集為例,Freebase 是一個由元數據組成的大型合作知識庫,內容主要來自其社區成員的貢獻。它整合了許多網上的資源,包括部分私人wiki站點中的內容。Freebase 致力于打造一個允許全球所有人(和機器)快捷訪問的資源庫,由美國軟件公司Metaweb開發并于2007年3月公開運營。2010年7月16日被Google收購, 2014年12月16日,Google宣布將在六個月后關閉 Freebase ,并將全部數據遷移至Wikidata。Freebase的整體設計很有意思,在知識圖譜設計上很具代表性。
Freebase主要來源于開放社區的貢獻,包括維基百科Wikipedia、世界名人數據庫NNDB、開放音樂數據庫MusicBrainz等,目前已經涵蓋超過4000中類別、超過7000種屬性,截止到2014年年底,包含了6800萬個實體,10億條關系信息,超過24億條事實三元組信息。
在數據模型的設計上,Freebase不對頂層本體做非常嚴格的控制,用戶可以創建和編輯類和關系的定義。
Freebase是個典型的三層結構,FreeBase包含3層結構:Domain-->Type-->Instance(Topic):People-->Person-->somebody。
例如:
Topic:主題,表示實例或實體,相當于是類的實例化,對應圖中的結點,例如物理實體、抽象概念以及思想流派等,比如:姚明。
Type:類型或概念,表示每個Topic所屬的類型,可以屬于多個Type,對實體進行歸類;Domain:域,對類型進行分組,相當于小類對應的大類,便于schema進行管理,比如:人、運動員等。
Domain:域,對類型的分組,便于schema管理,比如:人物。?
Property:屬性,表示每個類型或概念所具有的屬性類型,每個Type類型都帶有一組與該類型相關的不同屬性,屬性值的類型可以是整型、文本等基本類型,也可以是CVT復合類型,用于表示每個條目由多個字段組成的數據,比如:出生日期、所在球隊等。
MID:主題的唯一機器標識符,使用MID對實體進行編號,由 /m 和一個基數為 32 的唯一標識符組成,當主題被合并或拆分時,MID 可以發揮關鍵作用,允許外部應用跟蹤邏輯主題;
屬性約束:對屬性的取值范圍進行約束,比如:類型約束(整型、文本、浮點型、datetime、CVT等)、條件約束(是否單值、是否去重、主屬性、逆屬性等)。
KEY:可以通過key來唯一確定一個實體,一個實體可以有多個key,每個key都屬于一個namespace,比如:?"/en/yao_ming"的namespace為"/en"、"/wikipedia/zh-cn_title/姚明"?的namespace為"/wikipedia/zh-cn_title"。對于平臺基礎模型的實體(Domain、Type、Property),Freebase會從Key中選一個值,作為該實體的ID。?
首先,在Freebase中,每一條信息叫做Topic,也就是一個條目,這就好比字典里的每一個可以查到的詞。
然后,每一個Topic包含一個或多個Type(類型),比如"check"這個詞,既可以當動詞,又可以當名詞,于是它就同時屬于"動詞"和"名詞"這兩個Type。
接著,每一個Type又包含一個或多個Property(屬性),比如字典里的每一個單詞的每一種詞性,都同時包括讀音和釋義兩部分,因此"讀音"和"釋義"就是兩個property。
最后,每一個屬性都有一個值,這個值又是另一個Topic,因此兩個Topic就被連接了起來。比如,check當動詞時,釋義是examine(檢查),它本身就是一個Topic,因此這兩個詞之間就被建立了某種聯系。
黃色的方框表示Topic,綠色的方框表示Type。原點"Arnold Schwarzenegger"同時屬于四個Type:Person(人物)、Body Builder(健美運動員)、Actor(演員)和Politician(政治家)。Type:Person有一個屬性Country of Birth(出生國),它的值是Austria(奧地利)。Type:Politician有一個屬性Party(黨派),它的值是Republic(共和黨)。Type:Actor有一個屬性Films(演出的電影),它的值是Terminator(終結者)。?
因此,這里一共有四個Topic:Arnold Schwarzenegger、Austria、Republic、Terminator。它們就這樣被連了起來。
通過類型及其配置的屬性,可結構化一個Topic,如果Topic屬于多個Type,則其結構為這些Type屬性的集合。如果屬性是基本類型則存儲在該topic本身;若是CVT則作為另一個topic存儲,通過邊進行關聯。如下圖:橙色部分為模型,藍色部分為Topic。
Freebase本身就是進行模型schema管理和數據管理的,于是為了足夠的靈活性,Freebase平臺本身所需的基礎模型(Type、Domain、Property、Object)也通過freebase進行自舉配置,放在"/type"這個域下,在freebase中只要是"/type"這個域下的都是用于定義平臺自身模型的數據,見下圖表示的是平臺所有類型的分類。
Freebase本身發展了一套數據查詢語言MQL,比如我想查出Arnold Schwarzenegger一共演出過多少部電影,查詢語句必須這樣寫:
{q0:{query:[{"name":"Arnold Schwarzenegger","type":"/film/actor","film":[{"film":[{"name":null}]}]}]} }2. TranE訓練數據集格式
(1)entity2id.txt
/m/06rf7 0 /m/0c94fn 1 /m/016ywr 2 /m/01yjl 3 /m/02hrh1q 4 /m/03ftmg 5 /m/04p_hy 6 /m/06151l 7 /m/07vqnc 8 /m/0jn38 9(2)relation2id.txt?
/people/appointed_role/appointment./people/appointment/appointed_by 0 /location/statistical_region/rent50_2./measurement_unit/dated_money_value/currency 1 /tv/tv_series_episode/guest_stars./tv/tv_guest_role/actor 2 /music/performance_role/track_performances./music/track_contribution/contributor 3 /medicine/disease/prevention_factors 4 /organization/organization_member/member_of./organization/organization_membership/organization 5 /american_football/football_player/receiving./american_football/player_receiving_statistics/season 6 /user/narphorium/people/wealthy_person/net_worth./measurement_unit/dated_money_value/currency 7 /sports/sports_team/roster./soccer/football_roster_position/player 8 /business/company_type/companies_of_this_type 9(3)train.txt?
/m/027rn /location/country/form_of_government /m/06cx9 /m/017dcd /tv/tv_program/regular_cast./tv/regular_tv_appearance/actor /m/06v8s0 /m/07s9rl0 /media_common/netflix_genre/titles /m/0170z3 /m/01sl1q /award/award_winner/awards_won./award/award_honor/award_winner /m/044mz_ /m/0cnk2q /soccer/football_team/current_roster./sports/sports_team_roster/position /m/02nzb8 /m/02_j1w /sports/sports_position/players./soccer/football_roster_position/team /m/01cwm1 /m/059ts /government/political_district/representatives./government/government_position_held/legislative_sessions /m/03h_f4 /m/011yn5 /film/film/starring./film/performance/actor /m/01pjr7 /m/04nrcg /soccer/football_team/current_roster./soccer/football_roster_position/position /m/02sdk9v /m/07nznf /film/actor/film./film/performance/film /m/014lc_?(二)算法實現細節
1. 輸入輸出
在我剛接觸KGE的時候,完全不懂這些數據的格式到底是什么東西,在這里進行簡單的介紹:
以FB15K為例:五個文件依次代表實體集合,關系集合,測試集,訓練集,驗證集。
這里面就只需要把FB15K的實體就當作實體就行了,雖然它是以特殊編碼的形式,類似下面這種,第一個是實體名稱,后面的是這個實體對應的編號。
其實這里不用關注實體的表現形式是什么樣子的,不論是這個文件的這種編碼的樣子,或者我們平時見到的直接可以看到是什么實體的樣子,都是一樣的,只要能代表那個實體就行,最后都是轉化成對應數字的形式。
模型的輸出是實體和關系的向量表示。??
2. L2范式歸一化
entity需要在每次更新向量前進行L2范數歸一化(除以自己的l2范數),這是通過人為增加embedding的norm來防止Loss在訓練過程中極小化。代碼中沒有完全按照這個規則設置,代碼中首先都對實體和關系都進行了初始化和L2范數歸一化,然后每訓練一個epoch,都對實體和關系進行一次L1范數歸一化
范數簡單可以理解為用來表征向量空間中的距離,而距離的定義很抽象,只要滿足非負、自反、三角不等式就可以稱之為距離。采用范式作為正則項,可以防止模型訓練過擬合,相關解釋可以參考我之前的博文:分類——正則化Python實現_迪迦瓦特曼的博客-CSDN博客_正則化python實現
以及另一篇博文:如何防止我的模型過擬合?這篇文章給出了6大必備方法?
LP范數不是一個范數,而是一組范數,其定義如下:
的范圍是[1,∞)。在(0,1)范圍內定義的并不是范數,因為違反了三角不等式。
根據的變化,范數也有著不同的變化,借用一個經典的有關P范數的變化圖如下:
上圖表示了??從0到正無窮變化時,單位球(unit ball)的變化情況。在P范數下定義的單位球都是凸集,但是當??時,在該定義下的unit ball并不是凸集(這個我們之前提到,當時并不是范數)。?
向量的L2范數定義為:
要使得x歸一化到單位L2范數,即建立從x到x’的映射,使得x’的L2范數為1。
則:
L2范數歸一化后的結果如下圖所示,其中綠色點是原始數據點,紅色點是L2歸一化之后的點,L2歸一化之后的數據點全部落在了以原點為中心,半徑為1 的圓周上,并且原始數據點和L2歸一化之后的點以及原點共線。如果將每個特征維度進行歸一化,由于每個維度2范數歸一化之后的值肯定會小于1,所以不管原來的特征向量值有多大,2范數歸一化的特征向量都在一個半徑為1的超球之內,并且可以保持原始特征向量之間的位置關系。
?代碼實現如下:
def data_initialise(self):entityVectorList = {}relationVectorList = {}for entity in self.entities:entity_vector = np.random.uniform(-6.0 / np.sqrt(self.dimension), 6.0 / np.sqrt(self.dimension),self.dimension)entityVectorList[entity] = entity_vectorfor relation in self.relations:relation_vector = np.random.uniform(-6.0 / np.sqrt(self.dimension), 6.0 / np.sqrt(self.dimension),self.dimension)relation_vector = self.normalization(relation_vector)relationVectorList[relation] = relation_vectorself.entities = entityVectorListself.relations = relationVectorListdef normalization(self, vector):return vector / np.linalg.norm(vector)3. 使用deepcopy函數更新向量
copy()與deepcopy()之間的主要區別是python對數據的存儲方式。相關解釋可參考:Python中copy()、deepcopy()與賦值的區別(淺復制、深復制)_天山卷卷卷的博客-CSDN博客
首先直接上結論:
—–深復制,即將被復制對象完全再復制一遍作為獨立的新個體單獨存在。所以改變原有被復制對象不會對已經復制出來的新對象產生影響。?
—–而等于賦值,并不會產生一個獨立的對象單獨存在,他只是將原有的數據塊打上一個新標簽,所以當其中一個標簽被改變的時候,數據塊就會發生變化,另一個標簽也會隨之改變。
—–而淺復制要分兩種情況進行討論:
1)當淺復制的值是不可變對象(數值,字符串,元組)時和“等于賦值”的情況一樣,對象的id值與淺復制原來的值相同。
2)當淺復制的值是可變對象(列表和元組)時會產生一個“不是那么獨立的對象”存在。有兩種情況:
第一種情況:復制的?對象中無 復雜 子對象,原來值的改變并不會影響淺復制的值,同時淺復制的值改變也并不會影響原來的值。原來值的id值與淺復制原來的值不同。
第二種情況:復制的對象中有 復雜 子對象?(例如列表中的一個子元素是一個列表),如果不改變其中復雜子對象,淺復制的值改變并不會影響原來的值。?但是改變原來的值 中的復雜子對象的值? 會影響淺復制的值。
對于簡單的 object,例如不可變對象(數值,字符串,元組),用 shallow copy 和 deep copy 沒區別
復雜的 object, 如 list 中套著 list 的情況,shallow copy 中的 子list,并未從原 object 真的「獨立」出來。也就是說,如果你改變原 object 的子 list 中的一個元素,你的 copy 就會跟著一起變。
又有解釋說:
deepcopy的原因我覺得可能是這樣,按照代碼的結構,正樣本和負樣本應該是同時更新的,做了deepcopy可以保證兩者的更新不會互相打擾,但是兩者更新順序其實可以不用同步。
4. 模型參數更新
原文第3章提到了Loss更新的參數,是所有entities和relations的Embedding數據,每一次SGD更新的參數就是一個Batch中所有embedding的值。
選擇L1范數或者L2范數來進行三元組距離的計算是TransE的一個超參數
若選擇L2范數,求導方法如下:參考了劉知遠組實現中的實現,是先對L2范數求導,逐元素判斷正負,為正賦值為1,負則為-1
若選擇L1范數,L1 范數在x = 0處不可導,L1范數這東西不能求導,因為它不可微,所以需要使用次微分概念,次梯度與次微分_omadesala的博客-CSDN博客_次微分
求導方法參考了劉知遠組實現中的實現,是先對L2范數求導,逐元素判斷正負,為正賦值為1,負則為-1?
5. 訓練并更新向量的細節
update_embeddings函數中,要對correct triplet和corrupted triplet都進行更新。雖然論文中寫做(h,l,t)和(h',l,t'),但兩個三元組只有一個entity不同(不同時替換頭尾實體),所以在每步更新時重疊實體需要更新兩次(和更新relation一樣)。例如正確的三元組是(1,2,3),錯誤的是(1,2,4),那么1和2都需要更新兩次,針對正確的三元組更新一次,針對錯誤的三元組更新一次
6. 測試環節,將測試集分為Raw及Filter兩種情況
Filter是指過濾corrupted triplets中在training, validation,test三個數據集中出現的正確的三元組。這是因為只是圖譜中存在1對N的情況,當在測試一個三元組的時,用其他實體去替換頭實體或者尾實體,這個新生成的反例corrupted triple確可能是一個正確triple,因此當遇見這種情況時,將這個triple從測試中過濾掉,從而得到Filter測試結果。
7.?loss函數的理解
如圖所示,loss是越訓練越小的,d正三元組-d負三元組,會得到一個負數,margin是一個正數,加到一起整體式子就是一個正數。
那么隨著loss的減小,d正三元組變小,d負三元組變大,d正三元組-d負三元組這個負數會越來越小,當這個負數的絕對值超過margin的時候,整個式子會變成負數,但是這個式子只取正數,當得到負數的時候就將整個式子置為0,所以正負三元組最大的距離就是margin
margin代表就是他們之間的最大的距離,有了margin就不會讓負樣本的d是無限大?
(四)實驗設置
1.?評估指標
-
meanrank:預測排名中的正確預測所在的排名的平均值(正確結果排名之和/總查詢次數,越小越好)
-
hits@10:預測排名中正確預測排在前10位所占的比例(命中前10的次數/總查詢次數,越大越好)
2.?測試方式
-
Raw:原始數據直接進行測試
-
Filter:將在訓練集中出現的打破的三元組進行過濾后進行測試(其動機是我們在測試時通過替換得到的三元組并不一定就是負例,可能恰巧換對了,那么它排名高也是正確的,把當前三元組擠下去也正常。 所以測試時在替換后要檢查一下新三元組是否出現在訓練集中,是的話就刪掉,這就是filter訓練方法)
注:Filter測試方式得到的實驗結果更為可靠、理想,但是會導致訓練速度明顯變慢
3.?參數設置
-
Wordnet:?,,,?
-
FB15k:?,,,
-
FB1M:?,,,
-
epoch:1000
4. 構建負樣本
創造負樣本的時候,這里使計算了平均尾節點數 hpt 和平均頭結點數tph
tph 表示每一個頭結對應的平均尾節點數
hpt 表示每一個尾節點對應的平均頭結點數
當tph > hpt 時 更傾向于替換頭實體h,反之則跟傾向于替換尾實體t
舉例說明 :
在一個知識圖譜中,一共有10個實體 和n個關系,如果其中一個關系使2個頭實體對應5個尾實體,那么這些頭實體的平均 tph為2.5,而這些尾實體的平均 hpt只有0.4,
則此時我們更傾向于替換頭實體,因為替換頭實體才會有更高概率獲得正假三元組,如果替換頭實體,獲得正假三元組的概率為 8/9 而替換尾實體獲得正假三元組的概率只有 5/9?
代碼實現:
if pr > p:# change the head entitycorrupted_sample[0] = random.sample(self.entities, 1)[0]while corrupted_sample[0] == sample[0]:corrupted_sample[0] = random.sample(self.entities, 1)[0] else:# change the tail entitycorrupted_sample[2] = random.sample(self.entities, 1)[0]while corrupted_sample[2] == sample[2]:corrupted_sample[2] = random.sample(self.entities, 1)[0](五)鏈接預測
鏈接預測實驗結果:
?結果顯示了所有數據集的所有方法比較。在原始數據集(raw)和去除錯誤的三元組之后的數據集(filter)上,TransE均具有較低的 meanrank 和較高的 hits@10 ,在鏈接預測方面對各種方法有一個清晰的性能評估。
作者認為TransE獲得的成就在于其能被高效訓練,而其他模型因為復雜所以很難訓練,同時嵌入向量很重要。
(六)詳細結果
根據關系的幾種類別以及預測幾種方法的參數對FB15k的結果進行分類(hits@10):
預測頭實體和尾實體時作者將關系分為四類:1-TO-1、1- TO-M ANY,M ANY-TO -1,M ANY-TO-M ANY。如果一個頭實體最多可以出現一個尾實體,則給定的關系為1- TO -1;如果一個頭實體可以出現很多尾實體,則給定的關系為1- TO -M ANY;如果許多頭實體可以出現同一尾實體,則為M ANY-TO -1;如果可以出現多個頭實體且帶有多個尾實體,則為 M ANY-TO -M ANY 。
可以看出,1-TO-1類型評估較好,而 M -TO - 1 等類型效果不夠理想。后續TransH算法改進了這個問題(投影到超平面再進行向量計算)。
部分預測結果展示:
(七)學習預測新關系
作者使用FB15k來測試TransE方法對新事實的泛化能力。
為此,作者隨機選擇了40個關系并將數據分成兩組:一組(FB15k-40rel)包含具有這40個關系的所有三元組,另一組(FB15k-rest)包含剩余的三元組。
-
左圖:當訓練集越大,TransE的平均排名下降的最快
-
右圖:當訓練集越大,TransE的 hits@10上升的最快
-
結果:TransE算法對數據集關系預測的效果最好
七、結論
本文提出了一種學習知識庫嵌入的新方法,其著力于模型的最小參數化以得到知識圖譜的實體和關系的向量表示。作者將其應用于了很大一部分的Freebase知識庫,與在兩個不同知識庫上的競爭方法相比,它非常有效。TransE模型的參數較少,計算的復雜度顯著降低,并且在大規模稀疏知識庫上也同樣具有較好的性能與可擴展性。?
參考文檔
1.?討論班分享-以TransE為基礎進行擴展的兩個角度?
2.?python實現TransE模型?
3.?【經典回顧】NIPS 2013 | TransE?
4.?論文閱讀(一)TransE?
5.?從OGB評測看大規模知識圖譜表示:從TripleRE、InterHT再到Trans模型賞析?
6.?徹底搞懂機器學習中的正則化?
7.?知識圖譜嵌入的Translate模型匯總(TransE,TransH,TransR,TransD) - 菜鳥學院?
8.?知識圖譜嵌入:TransE代碼及解析(初學者也能看懂) - 知乎?
9.?分類——正則化Python實現_迪迦瓦特曼的博客-CSDN博客_正則化python實現
10.?最大最小值歸一化和L2范數歸一化總結___Destiny__的博客-CSDN博客_l2歸一化?
11.?技術總結:DBpedia、Freebase百科圖譜項目構建技術解析 - 知乎
12.?Freebase再研究 - 阮一峰的網絡日志
13.?Freebase 的基本概念 - 知乎?
14.?知識圖譜調研-Freebase-阿里云開發者社區
總結
以上是生活随笔為你收集整理的TransE模型学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TransE算法的整理
- 下一篇: TransE代码实践(很详细)