偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼! 原創(chuàng) 精華

發(fā)布于 2025-6-4 09:02
瀏覽
0收藏

在人工智能的世界里,語言模型的智能程度越來越高,但如何讓它們真正理解并解釋自己的決策過程,依然是一個難題。今天,我們來聊聊一個非常有趣的話題:如何通過一種名為 GRPO(Guided Reward Policy Optimization,引導(dǎo)式獎勵策略優(yōu)化)的技術(shù),將一個普通的 7B 參數(shù)語言模型(Qwen2.5-Coder-7B-Instruct)變成一個能夠進(jìn)行結(jié)構(gòu)化推理的 Text-to-SQL 模型。

為什么 GRPO 是 Text-to-SQL 的完美選擇?

如果你對 AI 領(lǐng)域有所關(guān)注,可能已經(jīng)聽說過 GRPO。這是 DeepSeek 提出的一種強(qiáng)化學(xué)習(xí)技術(shù),主要用于訓(xùn)練推理模型。而 Text-to-SQL 任務(wù),簡直就是為 GRPO 量身定制的!

推理的重要性:SQL 不僅僅是語法

SQL 是一種結(jié)構(gòu)化的邏輯語言,而不是簡單的語法組合。通過 GRPO,模型被鼓勵解釋為什么選擇某些表、連接或過濾條件,從而讓模型像人類分析師一樣“思考”,更貼近用戶的真實(shí)意圖。比如,當(dāng)你問“上個月活躍用戶是誰”時,模型不能簡單地返回 ??SELECT * FROM users??,而是要解釋清楚為什么這么寫。

捕捉“沉默的錯誤”

沒有推理的模型可能會犯一些很微妙的錯誤。比如,問題明明是“上個月活躍用戶”,結(jié)果模型返回了一個看似正確的 SQL,但其實(shí)并沒有考慮到時間范圍。GRPO 的雙重獎勵系統(tǒng)(推理 + SQL)可以早期發(fā)現(xiàn)這些不匹配的問題。

小模型也需要“扶手”

對于像 7B 這樣的小模型來說,復(fù)雜的邏輯是一個巨大的挑戰(zhàn)。GRPO 就像是給模型裝上了“扶手”,通過獎勵連貫的逐步推理,懲罰不合理的輸出,即使 SQL 看起來沒問題,也能確保模型的邏輯是合理的。

透明性建立信任

如果模型能寫出“我使用了‘購買’表,因?yàn)閱栴}問的是銷售情況”,那么調(diào)試和驗(yàn)證就會變得容易得多。GRPO 把這種清晰性直接融入了訓(xùn)練過程。

如何設(shè)計(jì)獎勵函數(shù)?

Text-to-SQL 推理的挑戰(zhàn)在于如何創(chuàng)建有效的獎勵函數(shù),既能評估解釋的質(zhì)量,又能確保生成的 SQL 是準(zhǔn)確的。為此,我們設(shè)計(jì)了多部分獎勵函數(shù),每部分都捕捉模型行為的一個關(guān)鍵方面。這些獎勵函數(shù)被用于通過 Unsloth 框架對 7B 模型進(jìn)行微調(diào)。

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼!-AI.x社區(qū)

獎勵函數(shù)詳解

  • 格式獎勵(soft_format_reward_func):權(quán)重 1.0。這個簡單的函數(shù)檢查輸出是否符合??<reasoning>...</reasoning><sql>...</sql>?? 的格式。如果匹配,返回完整的格式獎勵權(quán)重(默認(rèn) 1.0),否則為 0。

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼!-AI.x社區(qū)

  • 復(fù)雜度獎勵(complexity_reward):權(quán)重 0.6。這個獎勵確保生成的 SQL 的復(fù)雜度與標(biāo)準(zhǔn)答案(gold SQL)一致,避免過于簡單或過于復(fù)雜。如果沒有標(biāo)準(zhǔn)答案,復(fù)雜度在 [1.5, 8.0] 范圍內(nèi)得 0.4 倍權(quán)重,否則得 0.1 倍權(quán)重。如果有標(biāo)準(zhǔn)答案,則使用高斯相似性計(jì)算,基于復(fù)雜度比值的對數(shù)。

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼!-AI.x社區(qū)

  • 推理質(zhì)量獎勵(reasoning_quality_reward):權(quán)重 0.7。這個獎勵函數(shù)評估模型生成的推理部分的質(zhì)量,使用一系列啟發(fā)式規(guī)則來反映人類的分析性思維。獎勵由多個組件分?jǐn)?shù)組成,包括推理長度、SQL 術(shù)語使用、結(jié)構(gòu)清晰度、步驟指示和模式提及等。

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼!-AI.x社區(qū)

  • 執(zhí)行查詢獎勵(execute_query_reward_func):權(quán)重 1.2。這是最重要的獎勵,測試生成的 SQL 是否能夠?qū)嶋H運(yùn)行并產(chǎn)生正確的結(jié)果。對于 SELECT 語句,如果執(zhí)行成功得 0.3 倍權(quán)重,結(jié)果完全匹配得滿分。對于部分匹配,使用 Jaccard 相似性計(jì)算。對于 DML 語句(INSERT、UPDATE、DELETE),成功執(zhí)行得 0.5 倍權(quán)重,需要大小寫修正得 0.4 倍權(quán)重。

在 GRPO 訓(xùn)練中實(shí)現(xiàn)這些獎勵函數(shù)

以下是使用 Unsloth 設(shè)置這些獎勵函數(shù)的代碼示例:

from trl import GRPOConfig, GRPOTrainer

# 配置訓(xùn)練參數(shù)
training_args = GRPOConfig(
    use_vllm=True,
    learning_rate=5e-6,
    per_device_train_batch_size=1,
    gradient_accumulation_steps=1,
    num_generatinotallow=8,
    max_prompt_length=256,
    max_completion_length=200,
    max_steps=250,
    output_dir="outputs",
    ...
)

trainer = GRPOTrainer(
    model=model,
    processing_class=tokenizer,
    reward_funcs=[
        soft_format_reward_func,
        execute_query_reward_func,
        reasoning_quality_reward,
        complexity_reward,
    ],
    args=training_args,
    train_dataset=dataset,
)

trainer.train()

系統(tǒng)提示應(yīng)該明確指示模型使用推理:

你是一個將自然語言問題轉(zhuǎn)換為 SQL 查詢的 AI 助手。
給定數(shù)據(jù)庫模式和一個問題,生成正確的 SQL 查詢。

請嚴(yán)格按照以下格式回答,包括 <reasoning> 和 <sql> 標(biāo)簽:
<reasoning>
逐步思考以理解數(shù)據(jù)庫模式和問題。
識別必要的表、列、連接和條件。
解釋構(gòu)建 SQL 查詢的邏輯。
</reasoning>
<sql>
-- 你的 SQL 查詢
</sql>

評估獎勵系統(tǒng)的有效性

為了評估這些多維度獎勵函數(shù)的效果,我們使用了 LLM-as-a-Judge 方法,讓 GPT-4o-mini 作為專家評委,對微調(diào)后的模型在 SQL 準(zhǔn)確性和推理質(zhì)量上進(jìn)行評估。

評估數(shù)據(jù)集包含 50 個隨機(jī)選擇的示例,評估維度包括四個關(guān)鍵方面,評分范圍為 1-5:

  • SQL 準(zhǔn)確性:生成的 SQL 是否準(zhǔn)確有效?
  • 推理質(zhì)量:推理是否清晰、邏輯合理且引用了正確的模式?
  • 格式遵循:是否遵循??<reasoning>...</reasoning><sql>...</sql>?? 的格式?
  • 教育價值:是否有助于學(xué)習(xí) SQL 概念?

評估提示如下:

作為一名 SQL 專家,請?jiān)u估以下文本到 SQL 的轉(zhuǎn)換。每個維度的評分范圍為 1-5(1=差,5=優(yōu)秀)。

數(shù)據(jù)庫模式:
{sample['sql_context']}

問題:
{sample['sql_prompt']}

標(biāo)準(zhǔn) SQL(正確):
{sample['sql']}

模型輸出:
{sample['model_output']}

請按照以下格式提供評分:
SQL_SCORE: [1-5] - SQL 是否有效并產(chǎn)生正確結(jié)果?
REASONING_SCORE: [1-5] - 推理是否清晰、邏輯合理且引用了正確的模式?
FORMAT_SCORE: [1-5] - 是否遵循 <reasoning>...</reasoning><sql>...</sql> 格式?
EDUCATIONAL_SCORE: [1-5] - 是否有助于學(xué)習(xí) SQL?
OVERALL_SCORE: [平均分]
EXPLANATION: [簡要說明優(yōu)缺點(diǎn)]
ERROR_TYPE: [none/syntax/logic/format/other]

評估結(jié)果

經(jīng)過微調(diào)的 Qwen2.5-Coder-7B-Instruct 模型在僅使用 300 個示例進(jìn)行訓(xùn)練、250 步訓(xùn)練后,取得了令人滿意的結(jié)果:

  • SQL 準(zhǔn)確性:44/50 的輸出得分在 4 或 5 分,表現(xiàn)出色。
  • 推理質(zhì)量:48/50 的輸出得分在 4 或 5 分,推理清晰且邏輯合理。
  • 格式遵循:49/50 的輸出得分達(dá)到 5 分,格式幾乎完美。
  • 教育價值:模型輸出對學(xué)習(xí) SQL 概念有明顯幫助。

總體來看,88% 的輸出得分在 4.0 或以上,顯示出模型在結(jié)構(gòu)化推理和可解釋性方面的一致性和可靠性。

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼!-AI.x社區(qū)

用 GRPO 給 Text-to-SQL 模型裝上“推理引擎”,讓語言模型不只是生成代碼!-AI.x社區(qū)

結(jié)語

通過推理獎勵函數(shù),模型在微調(diào)過程中表現(xiàn)出了可靠的性能和一致的結(jié)果。你可以探索完整的實(shí)現(xiàn)代碼,并親自嘗試。源代碼已經(jīng)開源,可以在 GitHub 上找到。

參考

??https://github.com/yai333/Text-to-SQL-GRPO-Fine-tuning-Pipeline/tree/main??


本文轉(zhuǎn)載自??Halo咯咯??    作者:基咯咯


?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
已于2025-6-4 09:02:52修改
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦