目錄
我們將來還需要學習查詢語言嗎
大型語言模型具有將自然語言轉化為查詢語言的巨大潛力。例如,有些人使用 GPT 模型將文本轉化為 SQL,其他人則使用 GPT 模型構建 SPARQL 查詢。我更喜歡探索如何將自然語言轉化為 Cypher 查詢語言。
在我的實驗中,我注意到有兩種方法可以開發構建查詢語句的 LLM 流程。一種選擇是提供示例查詢,或者是使用示例來微調 LLM 模型。然而,此方法的限制在於必須事先產生 Cypher 示例查詢。因此,必須為每個圖表結構生成示例 Cypher 查詢。
另一種方法是直接向 LLM 提供結構信息,然後根據圖表結構信息構建 Cypher 查詢語句。通過這種方法,我們可以開發一個通用的 Cypher 查詢模型來處理任意輸入的圖表結構,因為我們消除了生成示例 Cypher 查詢的附加工作。
這篇文章將展示如何只通過提供圖表結構信息來實現 Cypher 查詢生成模型。我們將在三個不同圖表結構的圖表上評估模型的 Cypher 查詢能力。目前,我建議僅使用 GPT-4 來生成基於圖表結構的 Cypher 查詢。其他模型如 GPT-3.5-turbo 或 text-davinci-003 都不是很出色,我也還沒有找到一個能夠很好地遵循指令開放源碼的 LLM 模型。
實驗設置
我實現了一個 Python 類,它在初始化時連接到 Neo4j 實例並獲取結構信息。該圖表結構信息然後用作 GPT-4 模型的輸入。
python
class Neo4jGPTQuery:
def __init__(self, url, user, password, openai_api_key):
self.driver = GraphDatabase.driver(url, auth=(user, password))
openai.api_key = openai_api_key
self.schema = self.generate_schema()
圖表結構存儲在一個字符串格式中,結構如下:
python
f"This is the schema representation of the Neo4j database.
Node properties are the following:
{node_props}
Relationship properties are the following:
{rel_props}
Relationship point from source to target nodes
{rels}
Make sure to respect relationship types and directions"
您可以檢查代碼以了解如何檢索結構信息的具體 Cypher 語句。
接下來,我們需要做一些 提示工程,並為 GPT-4 模型創建一個 系統 提示,用於將自然語言轉化為 Cypher 語句。
機場路線圖
我們將從一個簡單的機場路線圖開始,這個圖表在 Neo4j 沙盒中的 GDS 項目中可用。
醫療沙盒
您可能會說機場沙盒可能是 GPT-4 訓練數據的一部分。因此,我們來測試 GPT-4 在最新的 Neo4j 沙盒項目中的 Cypher 查詢構建能力,該項目涉及醫療數據。
自定義天文數據集
我決定構建一個自定義的天文數據集,該數據集在 GPT-4 的訓練期間肯定沒有見過,因為直到我開始編寫這篇文章才存在。
總結
GPT-4 具有只基於提供的圖表結構生成 Cypher 語句的巨大潛力。我認為它在訓練期間看到了許多數據集和圖模型,因此它在猜測哪些屬性應該使用以及有時甚至它們的值方面非常出色。然而,在某些情況下,您可以為模型提供指導,將具體屬性和特定值用於您的具體圖模型。如果模型在處理您的具體圖模型時表現不佳,可以提供指令來改進其性能。