大家好,我是東方財富的一名算法工程師,這裏分享一些利用大模型賦能知識圖譜建設的一些實踐。
爲什麼知識圖譜需要大模型
在金融場景中,天然會有大量結構化的數據需要投入大量的人力去生產和維護,而這樣的數據又會大量被應用在下游的標籤、推薦、風控等場景。比如基金關聯的基金經理,基金淨值,基金重倉股等信息,需要從各個基金公司的公告信息中進行提取。
做個類比,在 1.0 時代,我們會利用大量的規則和人力去提取和校驗相應的數據,但這種方法往往需要針對特定的文本內容去維護各自的規則,成本較高。在 2.0 時代我們可以構建相應的深度學習模型,去輔助完成 NER、實體鏈接等工作。在這個過程中,數據的清洗,標註和訓練,往往需要非常專業的標註人員和算法開發參與,而且其準確率需要大量的工作來提高。在大模型時代,我們發現 ChatGPT 能以一個相對非常高的準確率去完成各式各樣的任務,這也讓我們有一個想法,是否可以利用大模型去輔助我們建設知識圖譜(畢竟不是啥業務都上得起大模型,一個圖譜能解決下游很多任務)。
通過一些實踐發現,ChatGPT 的確可以根據海量文本數據自動生成實體、屬性和關係三元組等知識元素,從而快速構建大規模的知識圖譜。
利用 ChatGPT 構建知識圖譜
社區裏已經有不少利用 ChatGPT 甚至 GPT4 構建知識圖譜的案例:
假設我們已經在圖數據庫中建了一些節點,囊括了所以上市公司,我們的目標是想構建一個關於上市公司的知識圖譜,包括董事長,上市時間等信息。
這裏推薦修改下面的代碼,構建相應的知識圖譜:https://github.com/cocacola-lab/ChatIE,我們只需將預設的實體類型和關係類型修改成我們需要的種類,就能實現零樣本的大規模知識圖譜構建,當然能用 GPT4 的話效果更佳。
本地部署的 ChatGLM 方案
考慮到本地部署的數據隱私問題,也可以將 ChatIE 中的 ChatGPT 接口換成 ChatGLM-6B,理論上可以接近 ChatGPT 的效果。
但在實際應用中,我們發現 ChatGLM 雖然具備了一定的內容抽取和鏈接能力,但是生成內容的可控性較差。
比如我們希望令模型按(實體1,實體2,...)或者 實體1 關係1 實體2 \n這樣的格式輸出結果,可以在大模型的輸入中添加:不要編造答案,並嚴格按照(實體1,實體2,...)的格式回答,不要有額外內容“ 類似的話。
但往往結果中還是有大量不可控的內容,需要做大量的正則匹配去清洗數據。
在後來的嘗試中,我們在 ChatGLM 中前置了兩輪對話達到了較好的效果。具體的代碼 demo 可以參考
利用 ChatGLM 進行金融知識抽取,具體的效果演示參考下圖:
當然這只是一個初級的 demo,後續還有更多利用 ES 和 NebulaGraph 進行校驗和應用的代碼,歡迎大家進行討論。
同主題線上分享
如果你對 LLM、知識圖譜感興趣,可以看看同主題的線上分享:和 LLM、圖數據庫從業者一起夜談這波 AI 風