Text2Cypher:大語言模型驅動的圖查詢生成
話接上文 《圖技術在 LLM 下的應用:知識圖譜驅動的大語言模型 Llama Index》 同大家簡單介紹過 LLM 和圖、知識圖譜相關的結合,現在我來和大家分享下zui新的成果。畢竟,從 GPT-3 開始展現出超出預期的 “理解能力 “開始,我一直在做 Graph + LLM 技術組合、互補的研究、探索和分享,截止到現在 NebulaGraph 已經在 LlamaIndex 與 Langchain 專案做出了不少領先的貢獻。
是時候,來給你展示展示我的勞動成果了。本文的主題是我們認為這個 LLM+ 領域zui唾手可得、zui容易摘取的果實,Text2Cypher:自然語言生成圖查詢。
Text2Cypher
顧名思義,Text2Cypher 做的就是把自然語言的文字轉換成 Cypher 查詢語句的這件事兒。和另一個大家可能已經比較熟悉的場景 Text2SQL:文字轉換 SQL 在形式上沒有什麼區別。而本質上,大多數知識圖譜、圖資料庫的應用都是在圖上按照人類意願進行查詢,我們在圖資料庫上構造方便的視覺化工具、封裝方便的 API 的工作都是為這個目標服務的。
一直以來,阻礙圖資料庫、知識圖譜被更廣泛應用的主要因素可能就是圖資料庫的查詢門檻了。那麼,在沒有大語言模型的時候,我們是怎麼做的呢?
傳統的 Text2Cypher
文字到查詢這個領域,在大語言模型之前就一直存在這樣的需求,一直是知識圖譜zui常見的應用之一,比如 KBQA(基於知識庫的問答系統)的系統內部本質上就是 Text2Cypher。
這裡以我之前寫的專案 (發音:/ˈsɪwi/,一個基於籃球運動員資料集的問答應用)為例。
先來了解一下它的後端架構:
┌─────────────┬───────────────────────────────────┐ │ Speech │ Frontend │ │ ┌──────────▼──────────┐ Siwi, /ˈsɪwi/ │ │ │ Web_Speech_API │ A PoC of Dialog System │ │ │ Vue.JS │ With Graph Database │ │ │ │ Backed Knowledge Graph │ │ └──────────┬──────────┘ │ │ │ Sentence Backend │ │┌────────────┼────────────────────────────┐ │ ││ ┌──────────▼──────────┐ │ │ ││ │ Web API, Flask │ ./app/ │ │ ││ └──────────┬──────────┘ │ │ ││ │ Sentence ./bot/ │ │ ││ ┌──────────▼──────────┐ │ │ ││ │ Intent Matching, │ ./bot/classifier│ │ ││ │ Symentic Processing │ │ │ ││ └──────────┬──────────┘ │ │ ││ │ Intent, Enties │ │ ││ ┌──────────▼──────────┐ │ │ ││ │ Intent Actor │ ./bot/actions │ │ │└─┴──────────┬──────────┴─────────────────┘ │ │ │ Graph Query │ │ ┌──────────▼──────────┐ │ │ │ Graph Database │ NebulaGraph │ │ └─────────────────────┘ │ └─────────────────────────────────────────────────┘
當一個問題語句傳送過來之後,它首先要做意圖識別(Intent)、實體識別(Entity),然後再利用 NLP 模型或者程式碼把相應的意圖和實體構造成知識圖譜的查詢語句,zui終查詢圖資料庫,並根據返回結果構造答案。
可以想象,讓程式能夠:
- 從自然語言中理解意圖:對應到哪一類支援回答的問題
- 找出實體:問題中涉及到的主要個體
- 從意圖和實體構造查詢語句
這不可能是一個容易的開發工作,一個真正能夠落地的實現,其訓練的模型或者實現的規則程式碼,所需考慮的邊界條件可能非常多。
三行程式碼搞定 Text2Cypher
而在 “後大語言模型” 時代,這種從前需要專門訓練或者寫規則的 “智慧” 應用場景成了通用模型 + 提示工程(Prompt Engineering)就能完成的任務。
注:提示工程(prompt)是指透過自然語言描述,讓生成模型、語言模型完成 “智慧” 任務的方法。
事實上,在 GPT-3 剛釋出之後,我就開始利用它幫助我寫很多非常複雜的 Cypher 查詢語句了,我發現它可以寫很多非常複雜的模式匹配、多步條件那種之前我需要一點點除錯,半天才能寫出來的語句。通常在它的答案之上,我只需要稍微修改就可以了,而且往往我還能從它的答案裡知道我之前沒了解到的 Cypher 語法盲區。
後來,在今年二月份的時候,我就試著實現了一個基於 GPT-3 (因為那時候還沒有 GPT-3.5)的專案: ( )。
圖 1:Demo 圖
它的工作原理非常簡單,和 Text2SQL 沒有區別。大語言模型已經透過公共領域學習了 Cypher 的語法表達,我們在提出任務的時候,只需要讓 LLM 知道我們要查詢的圖的 Schema 作為上下文就可以了。
所以,基本上 prompt 就是:
你是一位 NebulaGraph Cypher 專家,請根據給定的圖 Schema 和問題,寫出查詢語句。schema 如下:---{schema}---問題如下:---{question}---下面寫出查詢語句:
然而,真實世界的 prompt 往往還需要增加額外的要求:
- 只返回語句,不用給出解釋,不用道歉
- 強調不要寫超出 schema 之外的點、邊型別
感興趣的同學,可以參考我在 LlamaIndex 的 。
在真實場景中,我們想快速學習、構建大語言模型應用的時候,常常會用到 LangChain 或者 LlamaIndex 這樣的編排(Orchestrator)工具,它們可以幫我們做很多合理的抽象,從而避免從頭去實現很多通用的腳手架程式碼:
- 和不同語言模型互動
- 和不同向量資料庫互動
- 資料分割
而且,這些編排工具還內建了很多工程方法的zui佳實踐。這樣,我們常常呼叫一個方法就可以用到zui新、zui好用的大語言模型研究論文的方法了,比如 、 。
為此,我在 LlamaIndex 和 LangChain 中都貢獻了可以方便進行 NebulaGraph 上 Text2Cypher 的工具,真正做到 3 行程式碼,Text2Cypher。
NebulaGraph 上的 Text2Cypher
在 LlamaIndex 的
KnowledgeQueryEngine
和 LangChain 的
NebulaGraphQAChain
中:NebulaGraph 圖資料庫的 Schema 獲取、Cypher 語句生成的 prompt、各種 LLM 的呼叫、結果的處理、銜接,我們可以全都不用關心,開箱即用!
使用 LlamaIndex
用 LlamaIndex,我們只需要:
- 建立一個
NebulaGraphStore
例項 - 建立一個
KnowledgeQueryEngine
就可以直接進行問答了,是不是超級簡單?具體的過程,可以參考文件:
from llama_index.query_engine import KnowledgeGraphQueryEnginefrom llama_index.storage.storage_context import StorageContextfrom llama_index.graph_stores import NebulaGraphStoregraph_store = NebulaGraphStore( space_name=space_name, edge_types=edge_types, rel_prop_names=rel_prop_names, tags=tags)storage_context = StorageContext.from_defaults(graph_store=graph_store)nl2kg_query_engine = KnowledgeGraphQueryEngine( storage_context=storage_context, service_context=service_context, llm=llm, verbose=True,)# 問答response = nl2kg_query_engine.query( "Tell me about Peter Quill?",)# 只生成語句graph_query = nl2kg_query_engine.generate_query( "Tell me about Peter Quill?",)
使用 LangChain
類似的,在 Langchain 裡,我們只需要:
- 建立一個
NebulaGraph
例項 - 建立一個
NebulaGraphQAChain
例項
就可以直接提問了。還是一樣,具體過程參考文件:
from langchain.chat_models import ChatOpenAIfrom langchain.chains import NebulaGraphQAChainfrom langchain.graphs import NebulaGraphgraph = NebulaGraph( space=space_name, username="root", password="nebula", address="127.0.0.1", port=9669, session_pool_size=30,)chain = NebulaGraphQAChain.from_llm( llm, graph=graph, verbose=True)chain.run( "Tell me about Peter Quill?",)
Demo
如果你對 Text2Cypher 感興趣,可以去 Demo 地址: 體驗下。
這個 Demo 展示瞭如何利用 LLM 從不同型別的資訊源(以維基百科為例)中抽取知識三元組,並儲存到圖資料庫 NebulaGraph 中。
本 Demo 中,我們先抽取了維基百科中關於《銀河護衛隊 3》的資訊,再利用 LLM 生成的知識三元組,構建了一個圖譜。跟著,利用 Cypher 查詢圖譜,zui後利用 LlamaIndex 和 LangChain 中的 Text2Cypher,實現了自然語言查詢圖譜的功能。
當然,你可以點選其他標籤親自試玩圖譜的視覺化、Cypher 查詢、自然語言查詢(Text2Cypher)等功能。
這裡可以 完整的 Jupyter Notebook。
結論
有了 LLM,知識圖譜、NebulaGraph 圖資料庫中的的資料中進行 Text2Cypher 從來沒有這麼簡單過。
一個具有更強人機、機器接入的知識圖譜可以代表了全新的時代,我們可能不需要從前那樣高額成本去實現相簿之上的後端服務,也不再需要培訓才能讓領域專家從圖中獲取重要的洞察了。
利用 LlamaIndex 或者 LangChain 中的生態整合,我們可以幾乎沒有開發成本地幾行程式碼把自己的應用、圖資料智慧化。
然而,Text2Cypher 只是一個開始,請大家關注我們後續的文章,展現更多知識圖譜、圖資料庫為大語言模型生態帶來的變革。
相關閱讀
謝謝你讀完本文 (///▽///)
如果你想嚐鮮圖資料庫 NebulaGraph,記得去 GitHub 下載、使用、(^з^)-☆ star 它 -> ;和其他的 NebulaGraph 使用者一起交流圖資料庫技術和應用技能,留下 「你的名片」一起玩耍呀~
2023 年 NebulaGraph 技術社群年度徵文活動正在進行中,來這裡領取華為 Meta 60 Pro、Switch 遊戲機、小米掃地機器人等等禮品喲~活動連結: https://discuss.nebula-graph.com.cn/t/topic/13970
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952037/viewspace-2984558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大語言模型模型
- 語言大模型大模型
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- 2024 CCF BDCI 小樣本條件下的自然語言至圖查詢語言翻譯大模型微調|Google T5預訓練語言模型訓練與PyTorch框架的使用大模型GoPyTorch框架
- SQL語言(結構化查詢語言)SQL
- prometheus之查詢語言Prometheus
- Kibana查詢語言(KQL)
- CosyVoice: 多語言大規模語音生成模型的全棧解決方案模型全棧
- 大語言模型中的MoE模型
- MySQL — 資料查詢語言MySql
- 靈活的API查詢語言——GraphQLAPI
- 你應該瞭解的流行圖資料庫查詢語言資料庫
- MySql中的資料查詢語言(DQL)三:連線查詢MySql
- 微調大語言模型模型
- 資料庫查詢語言(DQL)資料庫
- C# LINQ (語言整合查詢)C#
- SQL語言基礎(子查詢)SQL
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- 2024年大語言模型的微調模型
- 探究大語言模型的思維方式模型
- 改進大語言模型的最全方法!模型
- 如何評估大語言模型模型
- oql4j物件查詢語言物件
- SQL語言基礎(高階查詢)SQL
- 圖查詢語言 nGQL 簡明教程 vol.01 快速入門
- 什麼是大語言模型(LLM)?模型
- 01-大語言模型發展模型
- 自動生成大語言模型的系統指令System或使用者提示User模型
- AVL樹(查詢、插入、刪除)——C語言C語言
- PHP--動態生成sql查詢表格PHPSQL
- GPT大語言模型Alpaca-lora本地化部署實踐【大語言模型實踐一】GPT模型
- .NetCore下ES查詢驅動 PlainElastic .Net 升級官方驅動 Elasticsearch .NetNetCoreAIElasticsearch
- MySQL連線查詢驅動表被驅動表以及效能優化MySql優化
- 大語言模型的應用探索—AI Agent初探!模型AI
- 新型大語言模型的預訓練與後訓練正規化,谷歌的Gemma 2語言模型模型谷歌Gemma
- 新型大語言模型的預訓練與後訓練正規化,Meta的Llama 3.1語言模型模型
- nlp中的傳統語言模型與神經語言模型模型
- mysql查詢模型MySql模型