NeurIPS 2025 Workshop · 論文導讀

SLiCE.

從多語言企業資料管線中自動抽取 schema lineage,並用一個可拆解的複合指標同時衡量「結構正確」與「語意忠實」。1,700 筆人工標註、12 個語言模型、50,000+ 次抽取實驗。

Schema Lineage Composite Evaluation Semantic Drift SLM Benchmark Multi-AST Similarity CoT Prompting

Jiaqi Yin · Yi-Wei Chen · Meng-Lung Lee · Xiya Liu — Microsoft Redmond / Antra Inc. · arXiv:2508.07179 · github.com/microsoft/SLiCE

SECTION 01

問題定義 — Semantic Drift

企業資料倉儲最初都有完整的 metadata:schema 定義、欄位語意、business context。但資料一旦流經多階段、跨語言的處理管線,這份 metadata 就迅速失效。

論文把這個現象命名為 semantic drift(語意漂移,引用 Müller & Stein 2016)。實務上的樣貌是:一個 dashboard 上的 MAUchurn raterevenue 指標,沒有人能準確說出它究竟從哪些原始欄位、經過哪些轉換與聚合而來。知識只存在於少數寫過那段 pipeline 的工程師腦中,或散落在過期的手工文件裡。

為什麼這件事在 LLM 時代更要緊:semantic drift 直接傷害兩個下游應用 —— RAG(知識庫裡的 schema 描述是錯的,檢索出來的 context 就是錯的)與 text-to-SQL(模型不知道欄位真正的語意,就會生出語法對、語意錯的 SQL)。這是本篇把 lineage 抽取當成「AI 基礎建設問題」而非「資料治理問題」來寫的原因。

為什麼既有方法不夠

論文在 Related Work 把前人方法分兩類,並各自指出斷點:

本篇的定位是 no-fine-tuning paradigm:一次 query 同時生出 table-level 與 operation-level lineage,且資料集是為「資料理解」而非「異常偵測」策展的。

四項貢獻

01 形式化定義

針對多語言企業管線的 schema lineage 形式定義,涵蓋 source-to-output 語意、轉換邏輯與聚合。

02 Benchmark

50 支真實生產腳本、1,700 筆人工標註 lineage。

03 SLiCE 指標

可拆解的複合評估框架,兼顧結構正確與語意忠實。

04 大規模實驗

12 個語言模型 × 7 種 prompting 策略 × 6 個隨機種子。

SECTION 02

Schema Lineage 的四元組定義

論文把 schema lineage 定義成一個恰含四個 key 的結構化字典。這個「剛好四個 key」的設計不只是表示法,它同時是 evaluation 介面與 downstream parsing 介面。

L = {
  source_schema  : C  // 來源欄位集合
  source_table   : T  // 來源資料表集合
  transformation : F  // 轉換邏輯(程式碼片段)
  aggregation    : A  // 聚合運算
}

任務設定:給定一支資料管線腳本 S(可能是 SQL、Python、PySpark、C# 的混合)與輸出表中的一個目標 schema σ,抽出對應的 lineage L

Source Schemas (C)

lineage 起源的原始欄位。多個來源欄位以逗號分隔。

Source Tables (T)

含有那些來源欄位的原始資料表,是資料的根源頭。

Transformation (F)

把來源欄位轉成目標 schema 的程式碼片段。多段轉換以 <CODEEND> 分隔。

Aggregation (A)

GROUP BY / SUM / COUNT / MAX / MIN 及其 grouping key,同樣用 <CODEEND> 分隔。

Python + SQL 管線腳本 def clean_transactions(df): df.withColumn("amount", ...) .cast(DecimalType(18,2)) >>>>> 語言切換分隔符 SELECT C.customer_id, SUM(T.amount) AS TotalAmountSpent FROM Customers AS C INNER JOIN Transactions ... GROUP BY C.customer_id LM Schema Lineage(目標: TotalAmountSpent) "source_schema": "customer_id, amount" "source_table": "abfss://.../raw_customers, abfss://.../raw_transactions" "transformation": "C.customer_id AS CustomerId <CODEEND> .cast(Decimal(18,2))" "aggregation": "SUM() GROUP BY C.customer_id"
圖 1 · schema lineage 標註示意(依論文 Figure 1 重繪)

設計要點:注意 lineage 追的是「一個欄位」而不是「一張表」。50 支腳本卻有 1,700 筆標註,就是因為每支腳本的輸出表有多個欄位,每個欄位各有一條獨立 lineage(平均 34 條/腳本)。

SECTION 03

資料集 — 50 支真實腳本、1,700 筆標註

這是本篇最難複製、也最有價值的資產:全部來自 Microsoft 內部實際部署的生產管線,涵蓋 SQL、C#、Python(含 PySpark),用途橫跨 business metrics、marketing analytics、product insights、user experience。

難度分級規則(Appendix A.1)

論文用一個 0–3 分的三維度評分把腳本分級,每個維度符合就 +1 分:

Data Sources

存取 ≥ 3 個不同資料來源 → +1

Transformation

存在轉換鏈(一個運算的輸出是另一個的輸入)→ +1

Aggregation

含任何聚合函數(SUM/COUNT/PIVOT)→ +1

總分 0–1 為 Easy、2 為 Medium、3 為 Hard。

Table 1 · 資料集組成(token 數與 schema 數統計)
難度腳本數Token 平均Token 最小Token 最大Schema 總數Schema 平均Schema 最大
All501,988.5213917,4471,70034.00391
Easy19921.261392,15348825.68118
Medium221,806.232746,88261027.73109
Hard94,687.2275117,44760266.89391

值得注意的分佈特性:Hard 只有 9 支腳本(18%),卻貢獻 602 筆 schema(35.4%),單支平均 66.89 個欄位、4,687 個 token,最長 17,447 token。也就是說 benchmark 的難度重心壓在少數幾支超長腳本上 —— 這既是它貼近真實的地方,也是 reviewer 會質疑 variance 的地方(見 §08)。

由於原始腳本含敏感商業邏輯,論文只在 Appendix A.2 放了一支合成的 hard 範例(PySpark clean_customers / clean_accounts / clean_transactions + SQL),保留原始的結構與邏輯特徵但抽換商業內容。多語言切換用 >>>>> 分隔符標記,lineage 追蹤採自底向上(bottom-up)traversal:從指定的目標欄位出發,沿計算圖往上游傳播。

另外,資料專家為每支腳本額外撰寫了人工 reasoning traces以支援 CoT prompting:easy 腳本 1 條、medium 2 條、hard 3 條。

SECTION 04

SLiCE — Schema Lineage Composite Evaluation

論文的方法論核心。SLiCE 把「結構有效性」與「語意正確性」壓成 [0,1] 的單一分數,同時保留五個 component-level 診斷維度(format、source schema、tables、transformation、aggregation)。

總式:兩個 binary gate × 三項加權和

SLiCE(L̂, L*) = MFMT(L̂) · MSRC(L̂,L*) · [ ωTBL·MTBL + ωTRF·MTRF + ωAGG·MAGG ]
ω_TBL + ω_TRF + ω_AGG = 1 · 論文設定 ω_TBL = 0.4, ω_TRF = 0.4, ω_AGG = 0.2

這條式子最關鍵的性質:前兩項是「乘法閘」而非加權項。MFMT 與 MSRC 都是 binary(0 或 1)。只要輸出格式跑掉、或 source schema 集合沒有完全命中,整條 lineage 直接歸零,後面三項算再好都沒用。論文的說法是這反映了「基礎結構錯誤會在真實系統中向下游傳播」。這個設計解釋了 Table 2 裡 DeepSeek-Coder-1.3B base 分數是精確的 0.000

MFMT — 格式正確性(binary)

依 prompting 策略要求兩種格式之一:

# 有 reasoning trace 時
<think> ... reasoning trace ... </think>
<answer> ... schema lineage dictionary ... </answer>

# 無 reasoning trace 時
<answer> ... schema lineage dictionary ... </answer>

<answer> 內必須是嚴格 key-value 字典、恰好四個 key。任何 tag 畸形、key 名錯誤、欄位缺漏 → 直接判 0。

MSRC — 來源欄位(binary,精確集合相等)

MSRC(L̂,L*) = 1  if  Ĉ = C*  otherwise 0
大小寫敏感、順序不敏感的集合比對

MTBL — 來源資料表(exact F1 + fuzzy 混合)

因為表名有 database.schema.table vs table 這類命名慣例差異,純 exact match 太嚴苛:

MTBL = w1TBL · F1(T̂,T*) + w2TBL · Fu(T̂,T*)
論文設定 w₁ = 0.7(exact F1), w₂ = 0.3(fuzzy)

Fu(T̂,T*) = ½ [ (1/|T̂|)·Σ max FuzzyMatch(ti,tj) + (1/|T*|)·Σ max FuzzyMatch(ti,tj) ]
FuzzyMatch = 基於 Levenshtein 距離的正規化相似度;前項為 fuzzy precision,後項為 fuzzy recall

MTRF / MAGG — 轉換與聚合(CodeBLEU 變體 + Multi-AST)

這兩項的難點在於語法不同但邏輯等價的程式碼。論文提出 Multi-AST similarity 來支援多語言比對:

ASTmulti(x̂,x*) = Σl∈L wl · ASTl(x̂,x*)
w_l = x 屬於語言 l 的信心值,由「語言專屬關鍵字的正規化比例」估計,Σ w_l = 1

MTRF = w1·BLEU + w2·BLEUweight + w3·ASTmulti
MAGG = w1·BLEU + w2·BLEUweight + w3·ASTmulti
論文設定(TRF 與 AGG 相同):w₁ = 0.5, w₂ = 0.3, w₃ = 0.2

與 CodeBLEU 的差異(面試必答):SLiCE 保留了 CodeBLEU 的 n-gram BLEU、weighted BLEU、AST similarity 三項基礎,但做了兩個關鍵改動 ——(1)把單語言 AST 擴展成語言感知的加權聚合,處理一段程式碼混雜多語言的情況;(2)刻意移除 data-flow matching 項,理由是 schema lineage 的 transformation 常常是部分且不可執行的程式碼片段,跑不了 data-flow 分析。同理,pass@k 這類 execution-based 指標在此完全不適用。

評估協定:schema-level → script-level → corpus-level

MSCR(si,Θ) = (1/Ki) · Σk=1..Ki SLiCE(L̂ik, L*ik) // 單腳本內 K_i 個 schema 取平均
MMOD(Θ) = (1/I) · Σi=1..I MSCR(si,Θ) // 跨 50 支腳本取平均

注意這是先腳本內平均、再跨腳本平均的 macro-average:每支腳本權重相同,不會因為 hard 腳本欄位多就主導總分。

SECTION 05

Prompting 策略 — 三大類、七種變體

論文設計了三個階層式的 prompting 類別,用來系統性檢驗「context 豐富程度」對抽取品質的影響。

Base Prompting(zero-shot)

只給管線腳本 + 明確的抽取指令(目標輸出格式與各 component 定義)。作為「最小必要 context」的基準線。

Few-Shot Prompting(one/two/three-shot)

在 base 之上加入具體的 input-output 範例對。範例數量依腳本複雜度縮放:easy 給 1 個、medium 最多 2 個、hard 最多 3 個。

Chain-of-Thought(CoT-1 / CoT-2 / CoT-3)

在 few-shot 之上,把範例換成人工撰寫的詳細 reasoning trace,逐步演示如何從管線程式碼推導出 lineage。

三大類展開成 7 種具體策略:baseone-shottwo-shotthree-shotCoT-1CoT-2CoT-3

工程細節(值得在面試提,顯示 system 面的掌握):對開源 SLM 採用 PagedAttention(vLLM 的 KV cache 虛擬化機制)。關鍵觀察是 —— 同一支腳本內、不同目標 schema 的 prompt 前綴是完全相同的(腳本本身 + 抽取指令 + 範例都不變,只有目標欄位名在變)。因此 KV pair 每支 pipeline 只算並快取一次,而不是每個 schema 重算一次。以平均 34 個 schema/腳本、hard 腳本最多 391 個 schema 來算,這省下的重複計算非常可觀。

SECTION 06

實驗結果

最初評估 18 個模型(2 個 LLM + 16 個 SLM),因推論時間過長或表現持續過差,剔除 6 個,最終呈現 12 個。

模型選擇與剔除

保留(12):GPT-4.1、GPT-4o;Qwen2.5-Coder(1.5B / 3B / 7B / 14B / 32B)、Mistral-7B、Codestral-22B、DeepSeek-Coder(1.3B / 6.7B)、Phi-4(14B)。

剔除(6):CodeLlama(7B / 13B / 34B)、Phi-4-mini、Phi-4-reasoning-14B、Qwen2.5-Coder 其一變體。

實驗規模:12 模型 × 50 腳本 × 7 策略 × 6 個隨機種子,合計 50,000+ 次抽取任務

Table 2 · Corpus-level SLiCE 分數(6 seeds 之 mean ± std,依模型大小排序)
ModelSizeBaseOne-ShotCoT-1
GPT-4.10.418 ±.0050.673 ±.0080.767 ±.007
GPT-4o0.284 ±.0030.654 ±.0070.759 ±.008
DeepSeek-Coder1.3B0.000 ±.0000.054 ±.0150.038 ±.017
Qwen2.5-Coder1.5B0.014 ±.0020.309 ±.0060.304 ±.017
Qwen2.5-Coder3B0.100 ±.0040.391 ±.0150.445 ±.010
DeepSeek-Coder6.7B0.003 ±.0030.084 ±.0180.509 ±.007
Mistral7B0.026 ±.0030.331 ±.0050.227 ±.009
Qwen2.5-Coder7B0.167 ±.0050.487 ±.0180.556 ±.009
Phi-414B0.016 ±.0030.511 ±.0050.648 ±.005
Qwen2.5-Coder14B0.286 ±.0040.547 ±.0050.646 ±.007
Codestral22B0.126 ±.0040.511 ±.0050.662 ±.008
Qwen2.5-Coder32B0.355 ±.0040.623 ±.0040.734 ±.007
0.0 0.2 0.4 0.6 0.8 Qwen-32B .355 .623 .734 GPT-4.1 .418 .673 .767 GPT-4o .284 .654 .759 Base One-Shot CoT-1
圖 2 · 32B 開源模型 vs GPT 系列(數值取自 Table 2)

四個關鍵發現

① 加一個範例的邊際效益最大。從 base → one-shot,GPT-4.1 提升 61%、Qwen2.5-Coder-32B 提升 75%。而通用型模型(GPT-4o、Mistral、Phi-4)提升幅度超過 100% —— 因為它們的 base 分數被格式閘鎖死(Phi-4 base 僅 0.016,one-shot 直接跳到 0.511)。這其實是在說:one-shot 的主要作用是教會模型輸出格式,而不是教會它抽 lineage

② CoT 對 < 3B 模型是負向的。DeepSeek-Coder-1.3B(0.054 → 0.038)與 Qwen2.5-Coder-1.5B(0.309 → 0.304)從 one-shot 換到 CoT-1 反而退步。論文給兩個解釋:CoT 推理是大模型才湧現的能力(Wei et al.);以及 CoT 更長的 prompt 會塞爆小模型有限的 context window(呼應 Liu et al. "Lost in the Middle")。Mistral-7B 也有同樣現象(0.331 → 0.227),顯示這不只是參數量問題,也和是否為 code-pretrained 有關。

③ 32B 開源模型 ≈ GPT 系列,這是全篇的 headline。Qwen2.5-Coder-32B 在 CoT-1 拿到 0.734,vs GPT-4o 的 0.759、GPT-4.1 的 0.767。更強的說法是:它的 base 分數(0.355)已經超過 GPT-4o(0.284),而在所有難度層級上,Qwen-32B 的 CoT-1 表現都超過 GPT-4o 的 one-shot。對企業而言這代表可以內部部署、不必把含敏感商業邏輯的管線腳本送出去。

④ 一條高品質 reasoning trace 就夠了,之後遞減。在 hard 腳本上,Qwen-32B 從 one-shot → two-shot 提升 23%(0.531 → 0.653),但 CoT-1 → CoT-2 只提升 6%(0.689 → 0.727)。Phi-4 在 hard 腳本上 CoT-1 得 0.660,遠高於 one-shot 的 0.397。結論:CoT 有效抵銷腳本複雜度帶來的衰退,但邊際報酬遞減得很快。

另外,難度分層分析(Figure 2a)確認了直覺:所有模型的 SLiCE 分數都隨腳本複雜度上升而下降;但從 one-shot 換到 CoT-1,所有模型在各難度都上升,等於 CoT 有效緩解了複雜度懲罰。

SECTION 07

討論、限制與未來工作

作者自陳的限制

成本問題:proprietary LLM 雖強,但每個 prompt 都必須塞進完整管線腳本,可能超過數十萬 token,成本急遽上升。

可擴展性瓶頸:CoT 的效果依賴人類專家為每種腳本類型撰寫 reasoning trace。這個需求限制了方法的規模化 —— 這正是論文明示的最大痛點。

作者明示的未來方向(← 這是延伸研究的授權書)

論文在 §3.2 結尾與 §7 Conclusion 兩處都主動點出同一件事,措辭幾乎是在替後續工作鋪路:

§3.2:「SLiCE 這種結構化的形式,不只適合用於評估,也非常適合在未來的 supervised fine-tuning 或 reinforcement learning 框架中作為 reward signal」(引用 DeepSeek-R1 與 execution-based RL code generation 兩篇)。

§7:「這個指標……提供了一個結構良好的 reward signal,可在未來工作中用於微調語言模型,為改善模型與 schema lineage 抽取任務的對齊提供了直接路徑。」

換句話說:本篇完全沒有做任何 fine-tuning,全部是 prompting-only。把 SLiCE 當 reward 去做 RL 微調,是作者自己留下的、且已在正文中公開宣告的下一步。

下游應用敘事

論文用 TotalAmountSpent 當例子說明 lineage 如何餵給 RAG:知道它來自 customer_idamount、經過 SUM 聚合後,LLM 就能生成精確的商業敘述(「TotalAmountSpent 顯示每位客戶透過加總個別交易金額所花費的總額」)。對 text-to-SQL 而言,準確的 schema lineage 提供精確的欄位定義與商業脈絡,直接改善生成品質。