新聞中心

        EEPW首頁 > 智能計算 > 設(shè)計應(yīng)用 > 拿企業(yè)知識圖(KG)來訓(xùn)練模型

        拿企業(yè)知識圖(KG)來訓(xùn)練模型

        作者:高煥堂 時間:2024-05-13 來源:EEPW 收藏


        本文引用地址:http://www.104case.com/article/202405/458682.htm

        1 前言

        在上一期里,親自動手訓(xùn)練了注意力(Attention) 機制。由于Attention機制是當(dāng)今大語言模型(LLM)的核心。于是,可以拿各種知識或數(shù)據(jù)來訓(xùn)練Attention機制。例如,在人人享用LLM的生成( 創(chuàng)作) 能力之余,如何化解其過多幻覺(Hallucination)的問題也很受關(guān)注。于是,本期就拿(Knowledge Graph,KG)的知識來讓Attention 機制學(xué)習(xí)。也作為LLM 與KG 完美結(jié)合的基礎(chǔ)。

        2 LLM與KG的結(jié)合

        在LLM帶動的大模型風(fēng)潮下,各企業(yè)的致勝策略有那些呢? 大模型可比喻為野獸( 如野貓),于是致勝之道即是:蓄牧。也就是:馴服野獸。企業(yè)人士可以發(fā)咒語(Prompt)來力求能馴服、駕馭野獸。可是,僅僅透過語言(文句)溝通,經(jīng)常力道有限、效率不佳。例如,在AI繪圖大模型(如Stable Diffusion ),盡管您用了LoRA、ControlNet等,且努力發(fā)咒語,其生成作品,其不滿意的也常十之八九。于是有些人士,就建立企業(yè)自用的繪圖Decoder 模型( 如GAN 模型) 來幫忙。簡而言之,世界級大模型擅長于“畫龍”,但貧于“點睛”,因而常畫出龍身鳳眼或龍身蛇眼等創(chuàng)作。于是,企業(yè)人士就可以訓(xùn)練企業(yè)自己的Decoder 模型去做好關(guān)鍵性的“點睛”任務(wù)。

        為什么需要自用的Decoder模型去點睛,而不是由人去點睛呢?理由是:人與大模型之前主要依賴語句( 咒語) 溝通,效果不佳。而Decoder與大模型可直接傳遞作品, 高效互動、協(xié)作。于是, 在繪圖、影音領(lǐng)域,GAN很適合做為Decoder, 來幫Diffusion大模型做<點睛>的協(xié)作任務(wù)。而在語言文辭( 如QA)領(lǐng)域,基于知識圖(Knowledge Graph,簡稱KG) 的模型很適合當(dāng)做Decoder,來幫忙LLM 大模型做<點睛> 的協(xié)作任務(wù),如圖1 所示。

        1715592841365952.png

        圖1

        引自:https://arxiv.org/pdf/2306.08302

        LLM與KG的結(jié)合,有助于降低LLM的幻覺風(fēng)險。LLM的幻覺現(xiàn)象源于:缺乏準(zhǔn)確性(accuracy)、缺乏可解釋性(explainability)和缺乏可控性(governance)。

        此時,是實體(Entity)相互關(guān)聯(lián)的集合,其將企業(yè)專家的經(jīng)驗直覺、相關(guān)數(shù)據(jù)與其涵意(Semantics)和上下文(Context)連結(jié)起來,就更易于理解和共享,非常有助于彌補上述的LLM三項缺點。LLM與KG由很多種結(jié)合方式,如圖2所示。

        image.png

        image.png

        image.png

        圖2

        引自:https://medium.com/@sradhakrishnan_37036/navigating-aisreality-the-role-of-kgs-and-llms-in-fact-checking-c93f1abfb214

        LLM天生非常善解文句和人意,它使用語意搜尋從KG中檢索相關(guān)信息,讓人人能直接提問(Prompt) 來獲得符合企業(yè)實況的回復(fù)。因而讓LLM 產(chǎn)生更精確、準(zhǔn)確且與上下文相符合的輸出,也防止了偏見和幻覺。

        3 復(fù)習(xí)知識圖(KG)

        一個圖(Graph)是一組節(jié)點(Nodes),它們表示系統(tǒng)中的實體(Entities)的集合。然后,透過邊(Edge)的連接來表示這些節(jié)點之間的關(guān)系( 即實體之間的關(guān)系。節(jié)點可以代表任何形式的個體,例如人、企業(yè)、城市、機場等等,如圖3所示。

        image.png

        圖3

        引自:https://www.nvidia.com/en-us/glossary/networkx/

        這是有關(guān)于飛機場的KG,其中的兩個節(jié)點分別表示洛杉磯機場(LAX),以及圣荷西機場(SJC)。而其邊代表航班( 如Flight 123)。

        4 “KG + Attention”訓(xùn)練范例

        茲以KG 來建立海峽兩岸的機場及航班數(shù)據(jù),其中有兩種節(jié)點:機場和城市,如圖4所示。

        1715593201397193.png

        圖4

        于是,就可以拿這KG 里真實知識,來訓(xùn)練一個Attention機制( 模型),來掌握這項關(guān)系。就能與LLM協(xié)作,來掌握之真實的知識,例如:虹橋機場位于上海。也能獲知上海有兩個主要機場:虹橋機場和浦東機場。

        茲撰寫下述程序碼:

        # att_airport.py

        import torch

        import torch.nn as nn

        nodes=[‘松山機場’,’虹橋機場’,’浦東機場’,’

        小港機場’,’臺北’,’上海’,’高雄’]

        nx={w : i for i, w in enumerate(nodes)}

        xn={nx[w]: w for w in nx}

        #定義模型

        class SelfAttention(nn.Module):

        def __init__(self, d):

        super().__init__()

        self.W_q = nn.Linear(d, 16)

        self.W_k = nn.Linear(d, 16)

        self.W_v = nn.Linear(d, d)

        def forward(self, q, k, v):

        Q, K, V = self.W_q(q), self.W_k(k), self.W_

        v(v)

        scores = torch.matmul(Q, K.transpose(-2, -1))

        A = torch.softmax(scores, dim=-1)

        return torch.matmul(A, V)

        # 初始化模型、損失函數(shù)和優(yōu)化器

        model = SelfAttention(len(nodes))

        opt = torch.optim.Adam(model.parameters(),

        lr=0.001)

        loss_fn = nn.MSELoss()

        dx = torch.tensor([nx[‘ 臺北’], nx[‘ 上海’],

        nx[‘高雄’], nx[‘上海’]])

        dt = torch.tensor([nx[‘松山機場’], nx[‘虹橋機場’],

        nx[‘小港機場’], nx[‘浦東機場’]])

        X = nn.functional.one_hot(dx, len(nodes)).float()

        T = nn.functional.one_hot(dt, len(nodes)).float()

        # 訓(xùn)練模型

        print(‘n 開始訓(xùn)練...’)

        for ep in range(3001):

        opt.zero_grad()

        loss = loss_fn(model(X,X,X), T)

        loss.backward()

        opt.step()

        if(ep%1000==0): print(f’ep={ep}, Loss: {loss.

        item():.4f}’)

        # 預(yù)測

        tx = torch.tensor([nx[‘臺北’], nx[‘上海’]])

        h = nn.functional.one_hot(tx, len(nodes)).float()

        probs = model(h, h, h)

        print(‘n----- 預(yù)測 -----’)

        for i in range(2):

        for j in range(7):

        if(probs[i][j] > 0.25):

        print(xn[tx.detach().numpy()[i]]+ ‘ 有:’,

        nodes[j])

        #END

        這建立一個SelfAttention 模型,讓它學(xué)習(xí)“城市”與“機場”實體之間的對應(yīng)關(guān)系。現(xiàn)在就來執(zhí)行這個程序,展開訓(xùn)練3000 回合。訓(xùn)練完畢,就可以輸入“城市”名稱,由這模型回答其所有的< 機場> 名稱,如下:

        1715593316773725.png

        以上基于簡單KG 來舉例說明 KG 與Attention 機制的結(jié)合。可以從機場找城市,也可以從城市找機場。

        5 結(jié)束語

        LLM因基于歸納法及統(tǒng)計自回歸算法,其天生具有創(chuàng)意和幻覺特質(zhì)。而KG 含有專家的智慧,也表達企業(yè)的真實(Facts ),很適合拿來訓(xùn)練Attention或Transformer模型,以便過濾LLM所生成的作品,降低幻覺。于是,LLM畫龍、企業(yè)KG來點睛,兩者天作之合。

        (本文來源于《EEPW》2024.5)



        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 凉山| 静宁县| 景宁| 柞水县| 光山县| 晋城| 鹿邑县| 廊坊市| 达州市| 商南县| 阿图什市| 临安市| 临清市| 军事| 临江市| 柘荣县| 土默特右旗| 商洛市| 昌宁县| 永德县| 郴州市| 安福县| 东光县| 华池县| 昌邑市| 呼图壁县| 诸暨市| 汶川县| 崇义县| 永昌县| 新野县| 莫力| 夏邑县| 会宁县| 玉山县| 江北区| 尚义县| 南城县| 恩平市| 平武县| 东乡族自治县|