圖驅(qū)動(dòng)的自然語言接口:混合LLM與意圖分類方法
在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的商業(yè)環(huán)境中,數(shù)據(jù)分析人員和營銷人員經(jīng)常需要與復(fù)雜的數(shù)據(jù)庫交互以獲取洞察。然而,并非所有人都精通SQL等結(jié)構(gòu)化查詢語言,這就催生了對(duì)自然語言接口的需求。本文將深入探討一種創(chuàng)新的意圖驅(qū)動(dòng)自然語言接口,該接口結(jié)合了大型語言模型(LLM)和意圖分類技術(shù),為數(shù)據(jù)潔凈室(Data Clean Rooms, DCRs)等隱私敏感環(huán)境提供了安全、高效的解決方案。
自然語言接口的挑戰(zhàn)與機(jī)遇
當(dāng)數(shù)據(jù)分析師輸入“我們應(yīng)該重新定位哪些隊(duì)列?”這樣的查詢時(shí),他們實(shí)際上是在表達(dá)一種意圖,而非直接發(fā)出SQL命令。這種簡單的句子可能隱含著不同的操作,如細(xì)分排名、相似匹配或隊(duì)列比較。將這些模糊的提示轉(zhuǎn)化為結(jié)構(gòu)化、符合政策的分析,需要的不僅僅是語言建模,更需要基于業(yè)務(wù)上下文和技術(shù)約束的語義理解。
傳統(tǒng)的文本到SQL模型在處理這類問題時(shí)往往力不從心,尤其是在隱私優(yōu)先的環(huán)境中,如數(shù)據(jù)潔凈室,其中只能查詢經(jīng)過批準(zhǔn)的模型和自定義估計(jì)函數(shù),無法訪問客戶可識(shí)別數(shù)據(jù)。在這種情況下,意圖分類成為關(guān)鍵技術(shù),它將模糊的人類語言映射到結(jié)構(gòu)化、可預(yù)測(cè)的類別,使下游系統(tǒng)能夠采取行動(dòng)。
本文介紹的混合自然語言接口旨在將用戶意圖轉(zhuǎn)化為安全的SQL查詢,并將其應(yīng)用于數(shù)據(jù)潔凈室等實(shí)際場(chǎng)景。在這些場(chǎng)景中,分析師和營銷人員跨品牌協(xié)作,他們擁有不同的技能組合,但通常不精通SQL,而是最了解自己的品牌業(yè)務(wù),并且可能跨地區(qū)使用母語表達(dá)品牌意圖。
系統(tǒng)架構(gòu)概述
我們的系統(tǒng)架構(gòu)借鑒了現(xiàn)代搜索引擎的語義搜索原理,將用戶意圖和SQL提示模板嵌入到同一向量空間中,使用FAISS(Facebook AI Similarity Search)等技術(shù)將用戶查詢高效匹配到最合適的SQL模板。這種混合架構(gòu)結(jié)合了以下關(guān)鍵組件:
- 基于嵌入的意圖分類:使用OpenAI的text-embedding-3-small等模型將文本轉(zhuǎn)換為高維向量。
- 基于FAISS的語義檢索:快速查找最近鄰意圖。
- 模板驅(qū)動(dòng)的SQL生成:考慮商店/品牌和隊(duì)列元數(shù)據(jù)。
- 嚴(yán)格的模式引導(dǎo)LLM補(bǔ)全(作為備用):當(dāng)模板無法安全解析查詢時(shí)使用。
這種架構(gòu)確保了系統(tǒng)的準(zhǔn)確性、快速性和合規(guī)性,特別適合數(shù)據(jù)潔凈室中跨企業(yè)邊界的隱私保護(hù)數(shù)據(jù)協(xié)作。生成的查詢自動(dòng)遵守分析師的訪問規(guī)則,例如:
- 無行級(jí)訪問(如無原始客戶ID)
- 僅應(yīng)用所需的預(yù)批準(zhǔn)轉(zhuǎn)換(如HyperLogLog草圖、標(biāo)準(zhǔn)化聚合)
- 只讀SQL(僅SELECT查詢)
- 由策略強(qiáng)制執(zhí)行的模式和函數(shù)約束
意圖分類:系統(tǒng)的核心
意圖分類是該系統(tǒng)的基礎(chǔ),它將非結(jié)構(gòu)化的自然語言映射到結(jié)構(gòu)化類別,從而驅(qū)動(dòng)下游邏輯,如SQL模板選擇。一個(gè)單一的提示,例如“ComfyWearCo和SportStyleShop之間哪些隊(duì)列有重疊?”,可以被提煉為核心意圖:兩個(gè)品牌之間的隊(duì)列重疊。
意圖分類的重要性體現(xiàn)在以下幾個(gè)方面:
- 消歧:幫助區(qū)分比較、查找、排名和探索性任務(wù)。
- 安全:在任意文本到SQL生成之上強(qiáng)制執(zhí)行基于模板的SQL路徑。
- 速度:實(shí)現(xiàn)提示的快速路由,避免調(diào)用大型模型和產(chǎn)生幻覺輸出。
這些意圖使用每類5-10+個(gè)提示示例進(jìn)行訓(xùn)練、嵌入和索引。例如,隊(duì)列推薦、相似請(qǐng)求、隊(duì)列重疊、隊(duì)列比較和自然語言到SQL查詢等不同意圖都有相應(yīng)的示例集。
基于嵌入的意圖分類數(shù)學(xué)原理
基于嵌入的意圖分類的核心是將自然語言提示轉(zhuǎn)換為高維向量空間中的點(diǎn),使得語義相似的提示在空間中距離較近。我們使用OpenAI的text-embedding-3-small模型來生成這些嵌入,該模型能夠?qū)⑽谋巨D(zhuǎn)換為1024維的向量。
在數(shù)學(xué)上,嵌入過程可以看作是一個(gè)函數(shù)f: T→V,其中T是文本提示的集合,V是d維向量空間(d=1024)。該函數(shù)保留了文本的語義相似性,即如果兩個(gè)提示在語義上相似,它們的嵌入向量在V中的歐幾里得距離或余弦相似度就會(huì)很近。
一旦生成了嵌入,我們就使用FAISS來構(gòu)建索引,以便快速查找與新輸入提示最相似的示例。FAISS使用局部敏感哈希(LSH)等技術(shù)來加速高維空間中的最近鄰搜索,使得在大規(guī)模數(shù)據(jù)集上的實(shí)時(shí)檢索成為可能。
意圖分類器:嵌入+引導(dǎo)標(biāo)注
在實(shí)現(xiàn)方面,我們使用OpenAI的text-embedding-3-small來嵌入每個(gè)意圖類別的精選標(biāo)注提示示例,并使用FAISS對(duì)這些嵌入進(jìn)行索引。以下是一個(gè)示例提示集:
- 隊(duì)列推薦:
建議我們可以在ComfyWearCo嘗試的未測(cè)試高價(jià)值隊(duì)列。
SportStyleShop中有哪些尚未使用的有前途的細(xì)分市場(chǎng)?
列出ComfyWearCo中尚未定位的高價(jià)值隊(duì)列。
- 相似請(qǐng)求:
SportStyleShop中哪些隊(duì)列與ComfyWearCo的隊(duì)列4相似?
在SportStyleShop中為ComfyWearCo的隊(duì)列2查找相似細(xì)分市場(chǎng)。
顯示ComfyWearCo隊(duì)列4與其他商店的最佳匹配。
- 隊(duì)列重疊:
跨品牌的哪些隊(duì)列有重疊用戶?
ComfyWearCo的隊(duì)列3和SportStyleShop的隊(duì)列4是否重疊?
- 隊(duì)列比較:
比較ComfyWearCo的隊(duì)列1和SportStyleShop的隊(duì)列2的指標(biāo)。
顯示每個(gè)品牌的隊(duì)列1及其KPI。
- 自然語言到SQL查詢:
列出ComfyWearCo中客戶生命周期超過2.0的隊(duì)列。
按總訂單數(shù)顯示ComfyWearCo的頂級(jí)隊(duì)列。
索引代碼的大致流程如下:
- 準(zhǔn)備意圖示例,包括文本、預(yù)期意圖和語言。
- 使用OpenAI API生成嵌入。
- 將嵌入轉(zhuǎn)換為適合FAISS的格式。
- 創(chuàng)建FAISS索引并添加嵌入。
- 保存索引和元數(shù)據(jù)(意圖標(biāo)簽和原始提示)用于運(yùn)行時(shí)預(yù)測(cè)。
選擇FAISS而非基于SentenceTransformer的分類器,主要是因?yàn)镕AISS具有以下優(yōu)勢(shì):
- 零樣本泛化:通過添加更多標(biāo)注示例即可輕松擴(kuò)展,無需重新訓(xùn)練。
- 可解釋性:意圖由其最近鄰支持,可以進(jìn)行檢查。
- 無需模型訓(xùn)練或托管:部署更快,維護(hù)更簡單。
- 靈活性:支持開放世界分類和備用行為。
模式感知解析和商店映射
在數(shù)據(jù)潔凈室環(huán)境中,我們假設(shè)有多個(gè)品牌,如ComfyWearCo和SportStyleShop?;陉?duì)列的數(shù)據(jù)模型的關(guān)鍵組件包括:
- hll_cohort_sketches_store_x1/hll_cohort_sketches_store_y1:存儲(chǔ)每個(gè)商店的隊(duì)列級(jí)指標(biāo)的表,每個(gè)表由(store_id, cohort_id)鍵控,包含隱私保護(hù)的HLL草圖和標(biāo)準(zhǔn)化指標(biāo)。
- Cohort_Similarity:表示跨商店隊(duì)列之間的相似性分?jǐn)?shù),引用草圖表中的(store_a, cohort_a)和(store_b, cohort_b)。
所有查詢生成,無論是通過模板還是LLM,都遵循這個(gè)實(shí)體關(guān)系模型,只使用可用字段和安全操作進(jìn)行估計(jì),如hll_estimate或hll_merge_agg。
由于自然語言中的品牌名稱(如“ComfyWearCo”)與內(nèi)部表名和商店ID不同,我們使用brand_registry.json來捕獲映射關(guān)系,例如:
{
"ComfyWearCo": {
"store_id": "comfy_wear_store_view",
"table": "hll_cohort_sketches_store_x1"
},
"SportStyleShop": {
"store_id": "sporty_style_store_view",
"table": "hll_cohort_sketches_store_y1"
}
}
實(shí)體提取使用正則表達(dá)式和字符串匹配來檢測(cè)提示中的商店和隊(duì)列提及,這也使得該系統(tǒng)可以擴(kuò)展到支持N個(gè)商店而無需更改實(shí)現(xiàn)。
基于模板的SQL生成
給定預(yù)測(cè)的意圖和提取的實(shí)體,我們使用特定于意圖的SQL模板。以下是隊(duì)列比較的示例:
SELECT 'ComfyWearCo' AS store_name, cohort_id,
hll_estimate(cohort_hll_sketch) AS estimated_users,
avg_standardized_avg_order_value,
avg_standardized_total_orders,
avg_standardized_customer_lifetime,
avg_standardized_days_since_last_purchase
FROM hll_cohort_sketches_store_x1
WHERE cohort_id = 2 AND store_id = 'comfy_wear_store_view'
UNION ALL
SELECT 'SportStyleShop' AS store_name, cohort_id,
hll_estimate(cohort_hll_sketch) AS estimated_users,
avg_standardized_avg_order_value,
avg_standardized_total_orders,
avg_standardized_customer_lifetime,
avg_standardized_days_since_last_purchase
FROM hll_cohort_sketches_store_y1
WHERE cohort_id = 4 AND store_id = 'sporty_style_store_view';
這種方法通過完全基于可用模式來避免生成幻覺SQL。
具有模式感知提示的LLM備用機(jī)制
如果沒有匹配的模板,我們會(huì)回退到LLM(在我們的示例中使用GPT-4),使用以下提示:
你是一名在安全數(shù)據(jù)潔凈室工作的數(shù)據(jù)分析師。僅使用SELECT語句。
僅使用提供的模式和函數(shù)。不要發(fā)明任何列或函數(shù)。
選擇單個(gè)隊(duì)列時(shí)使用hll_estimate(cohort_hll_sketch)。
除非跨行聚合,否則不要使用hll_merge_agg。
模式:
<SCHEMA TEXT>
用戶問題:
ComfyWearCo中哪些隊(duì)列的總訂單數(shù)最高?
這種受模式約束的提示大大減少了生成SQL中的錯(cuò)誤。
示例查詢
意圖:相似請(qǐng)求
問題:SportStyleShop中哪些隊(duì)列與ComfyWearCo的隊(duì)列5最相似?
SELECT cohort_b, similarity_score_proxy
FROM cohort_similarity
WHERE store_a = 'comfy_wear_store_view'
AND cohort_a = 5
AND store_b = 'sporty_style_store_view'
ORDER BY similarity_score_proxy DESC
LIMIT 5;
意圖:隊(duì)列推薦
問題:建議ComfyWearCo中尚未使用的高價(jià)值隊(duì)列。
SELECT cohort_id, avg_standardized_avg_order_value,
avg_standardized_total_orders,
avg_standardized_customer_lifetime,
avg_standardized_days_since_last_purchase
FROM hll_cohort_sketches_store_x1
WHERE store_id = 'comfy_wear_store_view' AND cohort_hll_sketch IS NULL
ORDER BY avg_standardized_avg_order_value DESC
LIMIT 5;
對(duì)高級(jí)數(shù)據(jù)潔凈室功能的可擴(kuò)展性
我們的方法的一個(gè)關(guān)鍵優(yōu)勢(shì)是它支持高級(jí)隱私保護(hù)功能,如HyperLogLog(HLL)草圖,這在數(shù)據(jù)潔凈室中常用于近似用戶計(jì)數(shù)而不暴露原始標(biāo)識(shí)符。
HLL在數(shù)據(jù)潔凈室中的重要性
- 禁止行級(jí)數(shù)據(jù),因此基數(shù)估計(jì)(如用戶計(jì)數(shù))必須通過草圖計(jì)算。
- 允許使用hll_estimate和hll_merge_agg等函數(shù),而不允許直接使用COUNT(DISTINCT user_id)。
- 跨品牌隊(duì)列之間的安全重疊和相似性依賴于HLL草圖的相似性。
我們的系統(tǒng)如何支持HLL
- 模板編碼為在選擇單個(gè)隊(duì)列時(shí)使用hll_estimate。
- 系統(tǒng)防止濫用,例如避免在非聚合查詢中使用hll_merge_agg。
- LLM備用機(jī)制使用有效的HLL函數(shù)用法和約束進(jìn)行模式初始化。
評(píng)估:覆蓋范圍和準(zhǔn)確性
為了驗(yàn)證我們的方法,我們對(duì)30多個(gè)自然語言輸入運(yùn)行了提示測(cè)試套件,每個(gè)輸入映射到我們支持的五個(gè)意圖之一。結(jié)果顯示,在各種意圖類型上都具有很高的準(zhǔn)確性和語義覆蓋范圍。以下是一些代表性示例:
- 提示:SportStyleShop中哪些隊(duì)列與ComfyWearCo的隊(duì)列3最相似? 預(yù)測(cè):lookalike_request | 預(yù)期:lookalike_request
- 提示:比較ComfyWearCo的隊(duì)列4和SportStyleShop的隊(duì)列1。 預(yù)測(cè):cohort_comparison | 預(yù)期:cohort_comparison
- 提示:建議ComfyWearCo中我們尚未使用的新高價(jià)值隊(duì)列。 預(yù)測(cè):cohort_recommendation | 預(yù)期:cohort_recommendation
評(píng)估證實(shí),我們的基于FAISS的分類器與特定于意圖的模板相結(jié)合,為數(shù)據(jù)潔凈室中的各種探索性和診斷性查詢提供了準(zhǔn)確、可解釋和安全的SQL。
擴(kuò)展到其他LLM
盡管此實(shí)現(xiàn)使用OpenAI的GPT-4作為備用SQL生成,但該架構(gòu)設(shè)計(jì)為與LLM無關(guān)??梢暂p松替換為其他模型,如Anthropic的Claude、Google的Gemini或本地LLM如LLaMA 3。
如何替換LLM
重要的是,無論使用哪種LLM,基于FAISS的意圖分類器都保持不變。但是,如果選擇的LLM(如Claude或開源模型)不提供嵌入API,則需要在本地生成嵌入。
用SentenceTransformers替換OpenAI嵌入
可以通過sentence-transformers庫切換到本地嵌入模型,如all-MiniLM-L6-v2:
from sentence_transformers import SentenceTransformer
import numpy as np
model = SentenceTransformer("all-MiniLM-L6-v2")
def get_embedding(text):
return model.encode([text])[0].astype("float32").reshape(1, -1)
這保持了基于FAISS的分類邏輯,同時(shí)與OpenAI的嵌入API解耦,還支持在氣隙或受監(jiān)管環(huán)境中進(jìn)行本地推理。
我們展示了一種混合系統(tǒng),該系統(tǒng)將語義搜索(通過嵌入+FAISS)與為數(shù)據(jù)潔凈室環(huán)境量身定制的安全SQL生成相結(jié)合。通過將SQL生成基于模式和意圖模板,并僅在必要時(shí)回退到LLM,該架構(gòu)在表達(dá)能力和安全性之間取得了實(shí)際平衡。
這種方法為在隱私受限的分析環(huán)境中構(gòu)建智能接口提供了藍(lán)圖。未來的工作可以包括使用置信度分?jǐn)?shù)對(duì)FAISS結(jié)果進(jìn)行排名,進(jìn)一步提高系統(tǒng)的準(zhǔn)確性和可靠性。隨著數(shù)據(jù)隱私要求的不斷發(fā)展,這種意圖驅(qū)動(dòng)的自然語言接口將在促進(jìn)跨品牌數(shù)據(jù)協(xié)作方面發(fā)揮越來越重要的作用。