日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TransE模型学习笔记

發(fā)布時間:2023/12/2 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TransE模型学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

一、知識表示學習的引入

二、論文摘要

三、方法介紹

(一)建模多關(guān)系數(shù)據(jù)

(二)關(guān)系嵌入到向量空間中的翻譯

四、TransE模型

(一)學習實體和關(guān)系的低維嵌入向量

(二)基于“能量”的計算方法

五、算法流程

(一)算法流程圖?

(二)算法偽代碼

六、實驗

(一)數(shù)據(jù)集

1. Freebase數(shù)據(jù)集格式

2. TranE訓練數(shù)據(jù)集格式

?(二)算法實現(xiàn)細節(jié)

1. 輸入輸出

2. L2范式歸一化

3. 使用deepcopy函數(shù)更新向量

4. 模型參數(shù)更新

5. 訓練并更新向量的細節(jié)

6. 測試環(huán)節(jié),將測試集分為Raw及Filter兩種情況

7.?loss函數(shù)的理解

(四)實驗設置

1.?評估指標

2.?測試方式

3.?參數(shù)設置

4. 構(gòu)建負樣本

(五)鏈接預測

(六)詳細結(jié)果

(七)學習預測新關(guān)系

七、結(jié)論

參考文檔


今天分享的是NIPS 2013的一篇經(jīng)典論文《Translating?Embeddings for Modeling Multi-relational Data》

原文連接:https://proceedings.neurips.cc/paper/2013/file/1cecc7a77928ca8133fa24680a88d2f9-Paper.pdf

前言:知識圖譜又稱為科學知識圖譜,在圖書情報界稱為知識域可視化,或知識領(lǐng)域映射地圖,用來顯示知識發(fā)展進程與結(jié)構(gòu)關(guān)系的一系列各種不同的圖形,用可視化技術(shù)描述知識資源及載體,挖掘、分析、構(gòu)建、繪制和顯示知識及他們互相之間的關(guān)系。

知識圖譜的基礎(chǔ)結(jié)構(gòu)是(頭實體h,關(guān)系r,尾實體t)構(gòu)成。例如(中國,首都,北京),其中 中國 和 北京 是實體,首都 對應關(guān)系。

一、知識表示學習的引入

通常,我們使用三元組(head, relation, tail)來表示知識。在這里,頭和尾是實體。例如,(sky tree, location, Tokyo)。我們可以用獨熱向量來表示這個知識。但實體和關(guān)系太多,維度太大。當兩個實體或關(guān)系很近時,獨熱向量無法捕捉相似度。受Wrod2Vec模型的啟發(fā),我們想用分布表示來表示實體和關(guān)系。?

知識表示學習是針對知識圖譜的表示學習。表示學習的任務是得到表示主題的低維向量化表示,從而為一些下游任務的計算提供便利,在減少復雜度的同時又能盡可能滿足對不同含義的主體進行表征的需求。

知識表示學習學習是將知識圖譜中的三元組的元素表示為低維向量。它的下游任務有鏈接預測節(jié)點分類

知識圖譜數(shù)據(jù)較網(wǎng)絡表示學習面對的數(shù)據(jù)更為復雜多樣,實體和關(guān)系類型更為豐富。所以基于數(shù)據(jù)本身的特性,產(chǎn)生了一些特殊的問題,一些算法只能處理關(guān)系簡單的數(shù)據(jù),而無法處理復雜數(shù)據(jù),如具有對稱關(guān)系、可逆關(guān)系的數(shù)據(jù)。?

二、論文摘要

處理多關(guān)系數(shù)據(jù)大多采用學習潛在特征的方法,模型結(jié)構(gòu)較為復雜且易過擬合。為解決這一問題,作者提出了一種將實體和關(guān)系嵌入到低維向量空間中進行計算的建模方法——TransE,該方法較為簡單、參數(shù)較少,是基于平移距離建模的開山之作。在兩個知識庫上的實驗證明,TransE在鏈接預測任務中取得了較理想的效果,優(yōu)于當時的最新方法。

三、方法介紹

本文介紹了一種對多關(guān)系數(shù)據(jù)進行建模的方法。多關(guān)系數(shù)據(jù)是指有向圖,節(jié)點對應于形式為三元組(頭實體,關(guān)系,尾實體)(表示為 (h, l, t)),每個三元組都表明實體的頭和尾的名稱之間存在關(guān)系。大型知識庫(例如Freebase,Google Knowledge Graph或GeneOntology等)中的知識大多是通過三元組的形式進行表達的。知識庫(KB)中的每個實體代表世界的抽象概念或具體的實體,而關(guān)系是表示其中兩個事實實體的謂詞

本文的工作重點是為知識庫(Wordnet和Freebase中的知識庫)建立多關(guān)系數(shù)據(jù)建模,目的是提供一種有效的工具,通過自動添加新事實來完成這些數(shù)據(jù),而無需額外的知識。下面介紹本文解決的問題和解決方法。

(一)建模多關(guān)系數(shù)據(jù)

本文解決的主要問題在于如何建模多關(guān)系型數(shù)據(jù)。建模關(guān)系型數(shù)據(jù)的困難之處在于無論是實體還是關(guān)系都有許多不同的類別并會同時出現(xiàn),所以對多關(guān)系數(shù)據(jù)建模要用更通用的方法,需要適當?shù)姆椒▉硖崛〕瞿J健?/p>

目前處理多關(guān)系數(shù)據(jù)大多數(shù)方法采用的是學習潛在特征的方法。然而大多數(shù)模型均較為復雜,會使得正則化項難以設置導致過擬合,過多的局部極小值點帶來的非凸優(yōu)化問題會導致欠擬合。然而有研究表明簡單的模型也可以獲得很好的結(jié)果。

(二)關(guān)系嵌入到向量空間中的翻譯

針對以上提出的問題,本文介紹了TransE,一種基于“能量”的模型,用于學習實體和關(guān)系的低維嵌入向量。

在TransE中,關(guān)系表示為嵌入空間中的平移:對于一組三元組?(h, l, t)?,則頭實體 h?的嵌入向量應與尾實體 t?的嵌入向量相加接近于依賴的關(guān)系 l?的嵌入向量。本文的模型方法依賴較少的參數(shù),因為它對于每個實體和每個關(guān)系僅學習一個低維嵌入向量。?

四、TransE模型

本文提出的TransE模型主要實現(xiàn)學習知識庫中實體和關(guān)系的低維嵌入向量,然后利用基于”能量”的計算方法,通過對損失函數(shù)的梯度進行參數(shù)的更新,達到優(yōu)化的目的。?

(一)學習實體和關(guān)系的低維嵌入向量

給定包含多個三元組?(h,l,t)?的訓練集?S?,該訓練集 S?的每個三元組由兩個實體 h , (實體的集合)和關(guān)系 ??(關(guān)系的集合)組成,TransE模型學習實體和關(guān)系的向量嵌入,目的是使正確的三元組的嵌入的向量符合 ??,否則 ?? 則應遠離?t?。

(二)基于“能量”的計算方法

對于基于“能量”的框架,每一個三元組的能量等于 ?,并且可以將其取為??或??范數(shù)。

TransE的損失函數(shù) (Hinge Loss Function) 為:

??

其中 ?? 表示 ?? 為正時取 ?、?為負或等于0時取0;?γ?是余量超參數(shù),作用相當于是一個正確三元組與錯誤三元組之前的間隔修正, ?γ? 越大,則兩個三元組之間被修正的間隔就越大,則對于詞向量的修正就越嚴格;并且?

其中 ??? 稱為打破的三元組(corrupted triplet),是隨機替換三元組中的頭實體或尾實體得到的,并且頭實體和尾實體分別替換,不會同時替換,從而得到打破的三元組。?

可以看出,TransE模型是針對給定三元組進行計算“能量”達到優(yōu)化目的,其中負例是通過替換頭實體或者尾實體自行構(gòu)造的,優(yōu)化目標就是使得正負例樣本距離最大化,通過最小化正樣本的“能量”,最大化負樣本的“能量”,達到優(yōu)化嵌入表示的目的。????????

五、算法流程

(一)算法流程圖?

TransE的算法流程圖下圖所示:

(二)算法偽代碼

輸入:輸入的訓練集為已經(jīng)確定三元組集 、實體集、關(guān)系集、邊緣余量超參數(shù) ?γ?,嵌入向量的緯度 ?? 。

  • 使用uniform 初始化關(guān)系 ?? 的嵌入向量

  • 對關(guān)系 ?? 的嵌入向量進行標準化操作

  • 初始化實體 ??的嵌入向量

  • 開始循環(huán)

  • 每一次循環(huán)迭代后要對 ?? 的嵌入向量進行標準化操作

  • 在 ??中隨機抽取 ?? 個三元組作為一個循環(huán)迭代的 ??

  • 初始化一個空的三元組集 ??

  • 每個??中的三元組進行循環(huán)?

  • 對于每個三元組的頭實體或尾實體進行打破生成負樣本

  • 把正確的三元組和打破的三元組都加入到三元組集??中?

  • 結(jié)束循環(huán)

  • 通過損失函數(shù)的隨機梯度下降進行嵌入向量參數(shù)的更新

  • 結(jié)束循環(huán)

  • 六、實驗

    (一)數(shù)據(jù)集

    • Wordnet:WN18

    • Freebase:FB1M、FB15k

    1. Freebase數(shù)據(jù)集格式

    ?以Freebase數(shù)據(jù)集為例,Freebase 是一個由元數(shù)據(jù)組成的大型合作知識庫,內(nèi)容主要來自其社區(qū)成員的貢獻。它整合了許多網(wǎng)上的資源,包括部分私人wiki站點中的內(nèi)容。Freebase 致力于打造一個允許全球所有人(和機器)快捷訪問的資源庫,由美國軟件公司Metaweb開發(fā)并于2007年3月公開運營。2010年7月16日被Google收購, 2014年12月16日,Google宣布將在六個月后關(guān)閉 Freebase ,并將全部數(shù)據(jù)遷移至Wikidata。Freebase的整體設計很有意思,在知識圖譜設計上很具代表性。

    Freebase主要來源于開放社區(qū)的貢獻,包括維基百科Wikipedia、世界名人數(shù)據(jù)庫NNDB、開放音樂數(shù)據(jù)庫MusicBrainz等,目前已經(jīng)涵蓋超過4000中類別、超過7000種屬性,截止到2014年年底,包含了6800萬個實體,10億條關(guān)系信息,超過24億條事實三元組信息。

    在數(shù)據(jù)模型的設計上,Freebase不對頂層本體做非常嚴格的控制,用戶可以創(chuàng)建和編輯類和關(guān)系的定義。

    Freebase是個典型的三層結(jié)構(gòu),FreeBase包含3層結(jié)構(gòu):Domain-->Type-->Instance(Topic):People-->Person-->somebody。

    例如:

    Topic:主題,表示實例或?qū)嶓w,相當于是類的實例化,對應圖中的結(jié)點,例如物理實體、抽象概念以及思想流派等,比如:姚明。

    Type:類型或概念,表示每個Topic所屬的類型,可以屬于多個Type,對實體進行歸類;Domain:域,對類型進行分組,相當于小類對應的大類,便于schema進行管理,比如:人、運動員等。

    Domain:域,對類型的分組,便于schema管理,比如:人物。?

    Property:屬性,表示每個類型或概念所具有的屬性類型,每個Type類型都帶有一組與該類型相關(guān)的不同屬性,屬性值的類型可以是整型、文本等基本類型,也可以是CVT復合類型,用于表示每個條目由多個字段組成的數(shù)據(jù),比如:出生日期、所在球隊等。

    MID:主題的唯一機器標識符,使用MID對實體進行編號,由 /m 和一個基數(shù)為 32 的唯一標識符組成,當主題被合并或拆分時,MID 可以發(fā)揮關(guān)鍵作用,允許外部應用跟蹤邏輯主題;

    屬性約束:對屬性的取值范圍進行約束,比如:類型約束(整型、文本、浮點型、datetime、CVT等)、條件約束(是否單值、是否去重、主屬性、逆屬性等)。

    KEY:可以通過key來唯一確定一個實體,一個實體可以有多個key,每個key都屬于一個namespace,比如:?"/en/yao_ming"的namespace為"/en"、"/wikipedia/zh-cn_title/姚明"?的namespace為"/wikipedia/zh-cn_title"。對于平臺基礎(chǔ)模型的實體(Domain、Type、Property),Freebase會從Key中選一個值,作為該實體的ID。?

    首先,在Freebase中,每一條信息叫做Topic,也就是一個條目,這就好比字典里的每一個可以查到的詞。

    然后,每一個Topic包含一個或多個Type(類型),比如"check"這個詞,既可以當動詞,又可以當名詞,于是它就同時屬于"動詞"和"名詞"這兩個Type。

    接著,每一個Type又包含一個或多個Property(屬性),比如字典里的每一個單詞的每一種詞性,都同時包括讀音和釋義兩部分,因此"讀音"和"釋義"就是兩個property。

    最后,每一個屬性都有一個值,這個值又是另一個Topic,因此兩個Topic就被連接了起來。比如,check當動詞時,釋義是examine(檢查),它本身就是一個Topic,因此這兩個詞之間就被建立了某種聯(lián)系。

    黃色的方框表示Topic,綠色的方框表示Type。原點"Arnold Schwarzenegger"同時屬于四個Type:Person(人物)、Body Builder(健美運動員)、Actor(演員)和Politician(政治家)。Type:Person有一個屬性Country of Birth(出生國),它的值是Austria(奧地利)。Type:Politician有一個屬性Party(黨派),它的值是Republic(共和黨)。Type:Actor有一個屬性Films(演出的電影),它的值是Terminator(終結(jié)者)。?

    因此,這里一共有四個Topic:Arnold Schwarzenegger、Austria、Republic、Terminator。它們就這樣被連了起來。

    通過類型及其配置的屬性,可結(jié)構(gòu)化一個Topic,如果Topic屬于多個Type,則其結(jié)構(gòu)為這些Type屬性的集合。如果屬性是基本類型則存儲在該topic本身;若是CVT則作為另一個topic存儲,通過邊進行關(guān)聯(lián)。如下圖:橙色部分為模型,藍色部分為Topic。

    Freebase本身就是進行模型schema管理和數(shù)據(jù)管理的,于是為了足夠的靈活性,Freebase平臺本身所需的基礎(chǔ)模型(Type、Domain、Property、Object)也通過freebase進行自舉配置,放在"/type"這個域下,在freebase中只要是"/type"這個域下的都是用于定義平臺自身模型的數(shù)據(jù),見下圖表示的是平臺所有類型的分類。

    Freebase本身發(fā)展了一套數(shù)據(jù)查詢語言MQL,比如我想查出Arnold Schwarzenegger一共演出過多少部電影,查詢語句必須這樣寫:

    {q0:{query:[{"name":"Arnold Schwarzenegger","type":"/film/actor","film":[{"film":[{"name":null}]}]}]} }

    2. TranE訓練數(shù)據(jù)集格式

    (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_

    ?(二)算法實現(xiàn)細節(jié)

    1. 輸入輸出

    在我剛接觸KGE的時候,完全不懂這些數(shù)據(jù)的格式到底是什么東西,在這里進行簡單的介紹:

    以FB15K為例:五個文件依次代表實體集合,關(guān)系集合,測試集,訓練集,驗證集。

    這里面就只需要把FB15K的實體就當作實體就行了,雖然它是以特殊編碼的形式,類似下面這種,第一個是實體名稱,后面的是這個實體對應的編號。

    其實這里不用關(guān)注實體的表現(xiàn)形式是什么樣子的,不論是這個文件的這種編碼的樣子,或者我們平時見到的直接可以看到是什么實體的樣子,都是一樣的,只要能代表那個實體就行,最后都是轉(zhuǎn)化成對應數(shù)字的形式。

    模型的輸出是實體和關(guān)系的向量表示。??

    2. L2范式歸一化

    entity需要在每次更新向量前進行L2范數(shù)歸一化(除以自己的l2范數(shù)),這是通過人為增加embedding的norm來防止Loss在訓練過程中極小化。代碼中沒有完全按照這個規(guī)則設置,代碼中首先都對實體和關(guān)系都進行了初始化和L2范數(shù)歸一化,然后每訓練一個epoch,都對實體和關(guān)系進行一次L1范數(shù)歸一化

    范數(shù)簡單可以理解為用來表征向量空間中的距離,而距離的定義很抽象,只要滿足非負、自反、三角不等式就可以稱之為距離。采用范式作為正則項,可以防止模型訓練過擬合,相關(guān)解釋可以參考我之前的博文:分類——正則化Python實現(xiàn)_迪迦瓦特曼的博客-CSDN博客_正則化python實現(xiàn)

    以及另一篇博文:如何防止我的模型過擬合?這篇文章給出了6大必備方法?

    LP范數(shù)不是一個范數(shù),而是一組范數(shù),其定義如下:

    的范圍是[1,∞)。在(0,1)范圍內(nèi)定義的并不是范數(shù),因為違反了三角不等式。

    根據(jù)的變化,范數(shù)也有著不同的變化,借用一個經(jīng)典的有關(guān)P范數(shù)的變化圖如下:

    上圖表示了??從0到正無窮變化時,單位球(unit ball)的變化情況。在P范數(shù)下定義的單位球都是凸集,但是當??時,在該定義下的unit ball并不是凸集(這個我們之前提到,當時并不是范數(shù))。?

    向量的L2范數(shù)定義為:


    要使得x歸一化到單位L2范數(shù),即建立從x到x’的映射,使得x’的L2范數(shù)為1。
    則:

    L2范數(shù)歸一化后的結(jié)果如下圖所示,其中綠色點是原始數(shù)據(jù)點,紅色點是L2歸一化之后的點,L2歸一化之后的數(shù)據(jù)點全部落在了以原點為中心,半徑為1 的圓周上,并且原始數(shù)據(jù)點和L2歸一化之后的點以及原點共線。如果將每個特征維度進行歸一化,由于每個維度2范數(shù)歸一化之后的值肯定會小于1,所以不管原來的特征向量值有多大,2范數(shù)歸一化的特征向量都在一個半徑為1的超球之內(nèi),并且可以保持原始特征向量之間的位置關(guān)系。

    ?代碼實現(xiàn)如下:

    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函數(shù)更新向量

    copy()與deepcopy()之間的主要區(qū)別是python對數(shù)據(jù)的存儲方式。相關(guān)解釋可參考:Python中copy()、deepcopy()與賦值的區(qū)別(淺復制、深復制)_天山卷卷卷的博客-CSDN博客

    首先直接上結(jié)論:

    —–深復制,即將被復制對象完全再復制一遍作為獨立的新個體單獨存在。所以改變原有被復制對象不會對已經(jīng)復制出來的新對象產(chǎn)生影響。?

    —–而等于賦值,并不會產(chǎn)生一個獨立的對象單獨存在,他只是將原有的數(shù)據(jù)塊打上一個新標簽,所以當其中一個標簽被改變的時候,數(shù)據(jù)塊就會發(fā)生變化,另一個標簽也會隨之改變。

    —–而淺復制要分兩種情況進行討論:

    1)當淺復制的值是不可變對象(數(shù)值,字符串,元組)和“等于賦值”的情況一樣,對象的id值與淺復制原來的值相同。

    2)當淺復制的值是可變對象(列表和元組)時會產(chǎn)生一個“不是那么獨立的對象”存在。有兩種情況:

    第一種情況:復制的?對象中無 復雜 子對象,原來值的改變并不會影響淺復制的值,同時淺復制的值改變也并不會影響原來的值。原來值的id值與淺復制原來的值不同。

    第二種情況復制的對象中有 復雜 子對象?(例如列表中的一個子元素是一個列表),如果不改變其中復雜子對象淺復制的值改變并不會影響原來的值。?但是改變原來的值 中的復雜子對象的值? 會影響淺復制的值

    對于簡單的 object,例如不可變對象(數(shù)值,字符串,元組),用 shallow copy 和 deep copy 沒區(qū)別

    復雜的 object, 如 list 中套著 list 的情況,shallow copy 中的 子list,并未從原 object 真的「獨立」出來。也就是說,如果你改變原 object 的子 list 中的一個元素,你的 copy 就會跟著一起變。

    又有解釋說:

    deepcopy的原因我覺得可能是這樣,按照代碼的結(jié)構(gòu),正樣本和負樣本應該是同時更新的,做了deepcopy可以保證兩者的更新不會互相打擾,但是兩者更新順序其實可以不用同步。

    4. 模型參數(shù)更新

    原文第3章提到了Loss更新的參數(shù),是所有entities和relations的Embedding數(shù)據(jù),每一次SGD更新的參數(shù)就是一個Batch中所有embedding的值。

    選擇L1范數(shù)或者L2范數(shù)來進行三元組距離的計算是TransE的一個超參數(shù)

    若選擇L2范數(shù),求導方法如下:參考了劉知遠組實現(xiàn)中的實現(xiàn),是先對L2范數(shù)求導,逐元素判斷正負,為正賦值為1,負則為-1

    若選擇L1范數(shù),L1 范數(shù)在x = 0處不可導,L1范數(shù)這東西不能求導,因為它不可微,所以需要使用次微分概念,次梯度與次微分_omadesala的博客-CSDN博客_次微分

    求導方法參考了劉知遠組實現(xiàn)中的實現(xiàn),是先對L2范數(shù)求導,逐元素判斷正負,為正賦值為1,負則為-1?

    5. 訓練并更新向量的細節(jié)

    update_embeddings函數(shù)中,要對correct triplet和corrupted triplet都進行更新。雖然論文中寫做(h,l,t)和(h',l,t'),但兩個三元組只有一個entity不同(不同時替換頭尾實體),所以在每步更新時重疊實體需要更新兩次(和更新relation一樣)。例如正確的三元組是(1,2,3),錯誤的是(1,2,4),那么1和2都需要更新兩次,針對正確的三元組更新一次,針對錯誤的三元組更新一次

    6. 測試環(huán)節(jié),將測試集分為Raw及Filter兩種情況

    Filter是指過濾corrupted triplets中在training, validation,test三個數(shù)據(jù)集中出現(xiàn)的正確的三元組。這是因為只是圖譜中存在1對N的情況,當在測試一個三元組的時,用其他實體去替換頭實體或者尾實體,這個新生成的反例corrupted triple確可能是一個正確triple,因此當遇見這種情況時,將這個triple從測試中過濾掉,從而得到Filter測試結(jié)果。

    7.?loss函數(shù)的理解

    如圖所示,loss是越訓練越小的,d正三元組-d負三元組,會得到一個負數(shù),margin是一個正數(shù),加到一起整體式子就是一個正數(shù)。

    那么隨著loss的減小,d正三元組變小,d負三元組變大,d正三元組-d負三元組這個負數(shù)會越來越小,當這個負數(shù)的絕對值超過margin的時候,整個式子會變成負數(shù),但是這個式子只取正數(shù),當?shù)玫截摂?shù)的時候就將整個式子置為0,所以正負三元組最大的距離就是margin

    margin代表就是他們之間的最大的距離,有了margin就不會讓負樣本的d是無限大?

    (四)實驗設置

    1.?評估指標

    • meanrank:預測排名中的正確預測所在的排名的平均值(正確結(jié)果排名之和/總查詢次數(shù),越小越好)

    • hits@10:預測排名中正確預測排在前10位所占的比例(命中前10的次數(shù)/總查詢次數(shù),越大越好)

    2.?測試方式

    • Raw:原始數(shù)據(jù)直接進行測試

    • Filter:將在訓練集中出現(xiàn)的打破的三元組進行過濾后進行測試(其動機是我們在測試時通過替換得到的三元組并不一定就是負例,可能恰巧換對了,那么它排名高也是正確的,把當前三元組擠下去也正常。 所以測試時在替換后要檢查一下新三元組是否出現(xiàn)在訓練集中,是的話就刪掉,這就是filter訓練方法)

    注:Filter測試方式得到的實驗結(jié)果更為可靠、理想,但是會導致訓練速度明顯變慢

    3.?參數(shù)設置

    • Wordnet:?,,,?

    • FB15k:?,,,

    • FB1M:?,,,

    • epoch:1000

    4. 構(gòu)建負樣本

    創(chuàng)造負樣本的時候,這里使計算了平均尾節(jié)點數(shù) hpt 和平均頭結(jié)點數(shù)tph

    tph 表示每一個頭結(jié)對應的平均尾節(jié)點數(shù)

    hpt 表示每一個尾節(jié)點對應的平均頭結(jié)點數(shù)

    當tph > hpt 時 更傾向于替換頭實體h,反之則跟傾向于替換尾實體t

    舉例說明 :

    在一個知識圖譜中,一共有10個實體 和n個關(guān)系,如果其中一個關(guān)系使2個頭實體對應5個尾實體,那么這些頭實體的平均 tph為2.5,而這些尾實體的平均 hpt只有0.4,

    則此時我們更傾向于替換頭實體,因為替換頭實體才會有更高概率獲得正假三元組,如果替換頭實體,獲得正假三元組的概率為 8/9 而替換尾實體獲得正假三元組的概率只有 5/9?

    代碼實現(xiàn):

    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]

    (五)鏈接預測

    鏈接預測實驗結(jié)果:

    ?結(jié)果顯示了所有數(shù)據(jù)集的所有方法比較。在原始數(shù)據(jù)集(raw)和去除錯誤的三元組之后的數(shù)據(jù)集(filter)上,TransE均具有較低的 meanrank 和較高的 hits@10 ,在鏈接預測方面對各種方法有一個清晰的性能評估。

    作者認為TransE獲得的成就在于其能被高效訓練,而其他模型因為復雜所以很難訓練,同時嵌入向量很重要。

    (六)詳細結(jié)果

    根據(jù)關(guān)系的幾種類別以及預測幾種方法的參數(shù)對FB15k的結(jié)果進行分類(hits@10):

    預測頭實體和尾實體時作者將關(guān)系分為四類:1-TO-1、1- TO-M ANY,M ANY-TO -1,M ANY-TO-M ANY。如果一個頭實體最多可以出現(xiàn)一個尾實體,則給定的關(guān)系為1- TO -1;如果一個頭實體可以出現(xiàn)很多尾實體,則給定的關(guān)系為1- TO -M ANY;如果許多頭實體可以出現(xiàn)同一尾實體,則為M ANY-TO -1;如果可以出現(xiàn)多個頭實體且?guī)в卸鄠€尾實體,則為 M ANY-TO -M ANY 。

    可以看出,1-TO-1類型評估較好,而 M -TO - 1 等類型效果不夠理想。后續(xù)TransH算法改進了這個問題(投影到超平面再進行向量計算)。

    部分預測結(jié)果展示:

    (七)學習預測新關(guān)系

    作者使用FB15k來測試TransE方法對新事實的泛化能力。

    為此,作者隨機選擇了40個關(guān)系并將數(shù)據(jù)分成兩組:一組(FB15k-40rel)包含具有這40個關(guān)系的所有三元組,另一組(FB15k-rest)包含剩余的三元組。

    • 左圖:當訓練集越大,TransE的平均排名下降的最快

    • 右圖:當訓練集越大,TransE的 hits@10上升的最快

    • 結(jié)果:TransE算法對數(shù)據(jù)集關(guān)系預測的效果最好

    七、結(jié)論

    本文提出了一種學習知識庫嵌入的新方法,其著力于模型的最小參數(shù)化以得到知識圖譜的實體和關(guān)系的向量表示。作者將其應用于了很大一部分的Freebase知識庫,與在兩個不同知識庫上的競爭方法相比,它非常有效。TransE模型的參數(shù)較少,計算的復雜度顯著降低,并且在大規(guī)模稀疏知識庫上也同樣具有較好的性能與可擴展性。?

    參考文檔

    1.?討論班分享-以TransE為基礎(chǔ)進行擴展的兩個角度?

    2.?python實現(xiàn)TransE模型?

    3.?【經(jīng)典回顧】NIPS 2013 | TransE?

    4.?論文閱讀(一)TransE?

    5.?從OGB評測看大規(guī)模知識圖譜表示:從TripleRE、InterHT再到Trans模型賞析?

    6.?徹底搞懂機器學習中的正則化?

    7.?知識圖譜嵌入的Translate模型匯總(TransE,TransH,TransR,TransD) - 菜鳥學院?

    8.?知識圖譜嵌入:TransE代碼及解析(初學者也能看懂) - 知乎?

    9.?分類——正則化Python實現(xiàn)_迪迦瓦特曼的博客-CSDN博客_正則化python實現(xiàn)

    10.?最大最小值歸一化和L2范數(shù)歸一化總結(jié)___Destiny__的博客-CSDN博客_l2歸一化?

    11.?技術(shù)總結(jié):DBpedia、Freebase百科圖譜項目構(gòu)建技術(shù)解析 - 知乎

    12.?Freebase再研究 - 阮一峰的網(wǎng)絡日志

    13.?Freebase 的基本概念 - 知乎?

    14.?知識圖譜調(diào)研-Freebase-阿里云開發(fā)者社區(qū)

    總結(jié)

    以上是生活随笔為你收集整理的TransE模型学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。