建實踐)
如果你最近在寫論文或者正準備開題請跟我一起想一個問題你的研究問題是什么很多人能說出研究方向卻很難在十分鐘之內(nèi)給出一個邊界清楚、有可檢驗空間、又值得做的研究問題。我過去大半年帶著幾個學生做了一套內(nèi)部代號“好寫作AI”的系統(tǒng)核心就是基于深度學習的研究問題自動提煉與論證框架構(gòu)建。它不做潤色也不代寫段落而是把論文中最容易被寫糊的兩個環(huán)節(jié)變成可復(fù)現(xiàn)的流程先把文獻中的研究空白提煉成清晰問題再把問題到結(jié)論之間的論證鏈搭成可檢查的骨架。這篇分享是項目復(fù)盤不是工具測評。我會把技術(shù)選型、標注數(shù)據(jù)、模型訓練、落地踩坑都過一遍適合正在做NLP應(yīng)用的開發(fā)者也適合被“研究問題說不清”折磨的研究生。你不需要復(fù)刻我們的全部細節(jié)但至少可以少走幾條彎路。1. 市面上的AI寫作工具都在“改文字”研究問題提煉幾乎是空檔1.1 一個很扎心的現(xiàn)象去研究寫作助手的開源項目或者產(chǎn)品說明你會看到大量功能集中在語法糾錯、潤色降重、中英文翻譯、摘要縮寫。這些功能解決的問題是“把一句話寫順”而不是“想清楚該寫哪句話”。結(jié)果就是一個邏輯鏈條本來就塌方的初稿被AI潤色之后反而更危險——讀起來通順了但評審追問到動機時作者仍然答不上來。我觀察過一個小樣本讓十幾位研究生各自寫一段引言再讓他們的同學充當審稿人問三個問題作者的創(chuàng)新點是什么為什么現(xiàn)在是做這件事的時機如果這個思路不成立替代方案是什么能完整回答前兩個問題的不到一半能回答第三個的更少。這說明問題不在詞句層面而在“研究問題”本身是模糊的。1.2 為什么這個空檔難填研究問題自動提煉難是因為它不是一個單純的文本生成任務(wù)。一篇論文里的研究空白往往分散在引言、相關(guān)工作、方法和結(jié)論里甚至藏在負結(jié)果段落中。模型得先判斷哪些句子是在描述問題再判斷這個問題和已有工作的關(guān)系最后還要把它改寫成一個可操作的表述?!罢撟C框架構(gòu)建”就更抽象了它不是列大綱而是把論點之間的支持、反駁、補充關(guān)系找出來。很多團隊不是沒看到這個需求而是覺得投入大、標注貴、效果難衡量。我們決定做的時候也猶豫過后來定下一個原則不追求讓AI完全理解一篇論文只追求把“研究問題提煉”和“論證關(guān)系標注”做成兩個邊界清晰的任務(wù)。寧可任務(wù)切小不要一口吃成胖子。1.3 我們的目標定義我們把“好寫作AI”的目標收斂成三條輸入一篇論文的標題、摘要、引言或一個研究方向的若干文獻片段輸出1到3個經(jīng)過改寫的研究問題每個問題必須能在原文中找到依據(jù)不能是模型自己編的。對一段論文正文按句子級別標出角色并畫出“研究問題—主張—證據(jù)—結(jié)論”的論證鏈。輸出形式必須是結(jié)構(gòu)化的用戶能一目了然地看到提煉依據(jù)和框架缺口而不是拿到一段黑盒生成的文字。這個定義直接決定了后面所有技術(shù)路線選擇。2. 研究問題自動提煉我把任務(wù)拆成了識別、判斷、改寫三件事直接讓一個模型讀完整篇論文、然后輸出“你的研究問題是X”不是不行而是不可控。模型很容易生成看起來很高級、實際沒有依據(jù)的偽問題。所以我把研究問題提煉拆成三個子任務(wù)。2.1 任務(wù)一定位“有問題感的句子”第一步在論文正文中找出那些承擔“問題描述”功能的句子。常見形式包括“however, few studies...”“現(xiàn)有方法在低資源場景下仍然面臨……挑戰(zhàn)”“尚不清楚……如何影響……”“這帶來一個關(guān)鍵問題……”我們把它定義為一個span抽取任務(wù)用BIO標簽在句子級和詞級同時做監(jiān)督。句子級定位“哪些句子屬于問題描述”詞級定位“問題關(guān)鍵詞落在哪些短語上”。這個雙層的設(shè)計有個直接好處就算模型抽錯了邊界至少句子級別還能兜底不會把整段引言全都框進來。2.2 任務(wù)二判別“真空白”和“偽空白”這是整個鏈路里最影響體驗的一步。提煉出的問題必須滿足兩個條件確實有文獻支撐——相關(guān)領(lǐng)域已經(jīng)有研究但存在未覆蓋的盲區(qū)有沒有“可進入性”——即這個問題大概率能用現(xiàn)有方法或改良方法去觸碰而不是純粹哲學式追問。我們做了一個二分類任務(wù)輸入是“候選問題句子 相關(guān)句子片段”輸出是“真空白/偽空白/待驗證”。為了提升可解釋性模型還要額外輸出一個“證據(jù)句索引”指向相關(guān)工作里與這個問題形成對比的句子。如果找不到證據(jù)句候選問題就會被標記為“待驗證”寧可少給不要給錯。2.3 任務(wù)三把陳述句改寫成研究問題很多論文里的問題是以陳述句形式存在的比如“傳統(tǒng)特征提取方式難以覆蓋長尾語義”。要變成研究問題得改成“如何設(shè)計一種特征提取方式使其在長尾語義場景下保持穩(wěn)定”這一步我們交給了一個后置的改寫模塊用預(yù)訓練語言模型微調(diào)完成。我們需要它做到三點保留核心關(guān)鍵詞不擅自換詞把模糊表述改成可檢驗的句式例如加入場景、對象、評價指標控制長度盡量兩行以內(nèi)避免一口氣拋出三個問題。三個子任務(wù)串起來之后用戶看到的不再是一句孤零零的問題而是一個結(jié)果卡片候選問題、問題來源句子、證據(jù)句、改寫后的版本。我管這個東西叫“帶檔案的問題”它比直接生成一句話有價值得多因為這能讓你辨別“AI到底是從哪兒得出這個問題的”。3. 論證框架構(gòu)建角色標注加論證關(guān)系把提綱變成可機檢的骨架研究問題提煉之后第二步是幫用戶搭論證框架。我們的初版做法讓模型直接生成大綱結(jié)果非常像“八股文模板”而且很難和原文對應(yīng)起來。后來改成了“先標注、后構(gòu)圖”的路線。3.1 句子角色標注給每個句子發(fā)“工牌”我們把論文正文的句子映射到一組論證角色角色含義示例背景提供既有認知或常識深度學習已經(jīng)在視覺任務(wù)上取得顯著效果研究問題提出要解決的空白但在低資源場景下仍未解決跨域泛化問題主張作者的核心判斷本文提出一種基于對比學習的輕量框架依據(jù)支撐主張的證據(jù)實驗顯示該方法在五個數(shù)據(jù)集上超過基線方法具體操作描述我們使用編碼器提取特征并計算對比損失結(jié)論從證據(jù)歸納出的判斷這證明對比學習可用于緩解跨域漂移局限承認存在邊界但該方法對標注噪聲仍然敏感其他無法歸類的成分例如致謝、引用列表前的過渡句一開始我們只有6類后來發(fā)現(xiàn)“其他”類比例實在太高才拆出“背景”和“方法”。分類模型是一個序列標注加句子分類的多任務(wù)結(jié)構(gòu)共享同一個編碼器。它對角色判斷的F1大概在0.85左右看著還行但真正難的不是角色而是關(guān)系。3.2 論證關(guān)系判斷支持、反駁、前提句子角色只是骨架上的節(jié)點節(jié)點之間必須有邊。我們定義了三種論證關(guān)系支持support后繼句強化或佐證前句反駁attack后繼句指出前句的問題或限制前提condition后繼句的成立依賴于前句給出的設(shè)定。這個任務(wù)本質(zhì)上是一個句子對分類。我們抽取相鄰三句以內(nèi)的全部句子對又利用“位置與共指詞”過濾掉明顯無關(guān)的組合再輸入模型判斷關(guān)系。值得強調(diào)的是我們不能只看相鄰句因為論文里的“支持關(guān)系”經(jīng)常跨越好幾個句子比如第三頁的圖依賴第一頁的問題設(shè)定。所以我們在數(shù)據(jù)標注時允許句子對跨段落這給訓練帶來很大麻煩但使得輸出框架更像真實論證而不是流水賬。3.3 從局部關(guān)系到全局框架拿到所有句子對關(guān)系后我們用一種帶置信度閾值的貪心算法做構(gòu)圖從“研究問題”節(jié)點出發(fā)優(yōu)先連接高置信度的“支持”邊再疊加“反駁”邊最后形成一張有向無環(huán)圖。展示給用戶時我們把它轉(zhuǎn)換成兩級大綱第一層研究問題、核心主張、支撐模塊、結(jié)論第二層每個模塊下掛哪些證據(jù)句證據(jù)句之間誰支持誰。曾經(jīng)也考慮過直接輸出一張可視化圖后來發(fā)現(xiàn)大多數(shù)用戶還是習慣先看大綱。所以最終產(chǎn)品給大綱和關(guān)系圖兩個視圖大綱用于快速閱讀關(guān)系圖用于深度檢查。4. 數(shù)據(jù)集是怎么攢出來的五萬條標注里的踩坑記錄沒有一套像樣的數(shù)據(jù)集前面說的模型結(jié)構(gòu)都只是空中樓閣。這塊我單獨拿出來講因為它的工作量占到整個項目六成以上。4.1 公開語料不直接可用我們最開始想直接用公開論文評測集很快發(fā)現(xiàn)麻煩很大。公開語料大多打的是“摘要”或“關(guān)鍵詞”標簽很少有“句子角色”和“論證關(guān)系”這兩類標簽。已有的幾份小規(guī)模論證語料又偏哲學和新聞評論學術(shù)論文里的論證習慣和它們差別很大直接遷移過來會水土不服。于是我們決定自建標注集。語料來源分三塊開放獲取的期刊論文、學位論文、還有一部分綜述文章。學位論文實用性很強因為它的篇章結(jié)構(gòu)更規(guī)律研究問題常常出現(xiàn)在第一章第二節(jié)我們把它當成“研究問題正樣本”的高密度來源。綜述文章則用來做負樣本因為綜述大量羅列文獻但有明確研究問題的句子反而少這能幫模型學會拒絕。4.2 標注規(guī)范從角色定義到邊界爭議標注規(guī)范寫了四版最核心的是一個決策樹這句話能不能去掉而不影響作者的主要觀點能就標“其他”或“背景”不能去掉那么它在論證鏈里是起點、中轉(zhuǎn)還是終點起點多半是“研究問題”中轉(zhuǎn)是“方法”或“依據(jù)”終點是“結(jié)論”或“主張”如果一句話同時承擔兩種功能取在原文中更接近關(guān)鍵邏輯的那個。多人標注的一致率是另一個麻煩。角色標注的一致率第一次測只有0.71主要分歧集中在“依據(jù)”和“方法”之間。后來我們在規(guī)范里加上一句口訣“方法講怎么做依據(jù)講為什么相信”。一致率才勉強升到0.83。論證關(guān)系標注更慘最差一輪只有0.58后來引入“標注員必須寫出關(guān)系依據(jù)的理由”這種笨辦法一致率才回到0.76。經(jīng)驗就是標注規(guī)范寫細永遠比事后清洗省時間。4.3 人機協(xié)同半自動標注五萬條樣本如果全靠人工標注成本太高。我們的做法是先用規(guī)則和弱監(jiān)督模型產(chǎn)出一份“預(yù)標注”再讓標注員去改。預(yù)標注不是白給的我要求預(yù)標注結(jié)果必須把模型預(yù)測的證據(jù)句也展示出來標注員要先判斷“證據(jù)句選得對不對”再判斷“關(guān)系對不對”。這種流程把標注員的認知負擔從寫標簽變成了審標簽速度大約提升了三倍。當然半自動標注最大的風險是標注員被預(yù)標注帶偏。為對抗這一點每個批次我們會混入10%的“黃金句”里面預(yù)標注故意填錯考核通過率低于85%的標注結(jié)果會被退回重審。提示如果你想復(fù)制這套路請務(wù)必保留每一條樣本的“來源”和“標注修改記錄”。這會在后續(xù)去重和糾錯時給你省下大量力氣。5. 關(guān)鍵選型復(fù)盤為什么是“預(yù)訓練模型微調(diào)結(jié)構(gòu)化解碼”而不是堆模板或直接讓大模型自由發(fā)揮這個章節(jié)寫給NLP工程師看。我們在方案選型上做過三輪對比三個候選各有道理最終選了中間路線。方案優(yōu)點缺點適配情況A規(guī)則模板關(guān)鍵詞匹配可解釋強、開發(fā)快泛化差換個領(lǐng)域就崩語料規(guī)模極小、領(lǐng)域穩(wěn)定的場景B預(yù)訓練模型微調(diào)結(jié)構(gòu)化解碼效果好、可控、可解釋標注成本高、訓練復(fù)雜需要穩(wěn)定產(chǎn)出結(jié)構(gòu)化結(jié)果的系統(tǒng)C通用大模型直接長提示生成零樣本上手快、文字流暢輸出不穩(wěn)定、證據(jù)難溯源快速驗證想法、不苛求格式我們選擇B核心原因有三條。第一C的“自由發(fā)揮”在論證場景里是致命的。我們試過用長提示讓通用大模型給五篇論文各生成研究問題結(jié)果有一半答案看起來都對但你能明顯感覺到它在“猜”給的證據(jù)句在原文里根本找不到。這對學術(shù)寫作工具來說是不可接受的我寧可讓模型承認不會也不要它漂亮的編造。第二A實現(xiàn)不了跨領(lǐng)域的細節(jié)理解。論證關(guān)系不是靠“however”這種詞就能判定的同一個“however”前接句子在實驗類論文里可能是反駁關(guān)系在綜述里可能只是話鋒一轉(zhuǎn)。這些細微差別需要大規(guī)模數(shù)據(jù)訓練過的編碼器來捕捉。第三B的“結(jié)構(gòu)化解碼”讓我們可以把歷史沉淀做成約束。例如我們要求架構(gòu)輸出的每條“研究問題”必須攜帶一個“證據(jù)句ID”否則視為無效每條“反駁關(guān)系”必須同時有正反雙方的句子位置。這相當于給模型上了護欄它很難自由發(fā)揮到離譜。訓練細節(jié)方面我們用了一個十億參數(shù)級別的開源預(yù)訓練模型做全參數(shù)微調(diào)而不是凍結(jié)參數(shù)只接提示。損失函數(shù)用加權(quán)的交叉熵主要照顧少數(shù)類像“反駁”這類出現(xiàn)頻率較低但非常重要的關(guān)系權(quán)重是普通關(guān)系的2.5倍。訓練時最大的教訓是batch size不能太小太小會讓關(guān)系分類這類任務(wù)在驗證集上震蕩很久我們最后把有效batch控制在64訓練了大約6000步才得到一個穩(wěn)定版本。6. 實測效果和翻車現(xiàn)場F1分數(shù)之外的真實體驗6.1 評測結(jié)果分項都不完美但整體可用我們在一批內(nèi)部測試集上得到的結(jié)果大致如下問題句定位F1約0.82一眼看過去不驚艷但足夠作為“人機協(xié)同”的第一輪篩選真空白判別準確率約0.79誤報主要是把“已有問題的改進”誤判成“全新的空白”句子角色標注F1約0.85其中“方法”和“依據(jù)”的分界仍然最弱論證關(guān)系分類F1約0.74反駁關(guān)系最拉胯因為論文里的反駁通常寫得很隱晦。用戶問卷比指標更有說服力。我們找了二十來位論文寫作者試用最受好評的功能不是“自動生成研究問題”而是“帶證據(jù)索引的研究問題檔案”。一位用戶原話是之前導師批評我動機不成立我嘴上認心里并不知道怎么改?,F(xiàn)在AI把問題從哪句話來、支撐它的文獻是哪幾句列出來我一眼就知道哪里需要補實驗或補引用。這個反饋直接驗證了一開始的判斷學術(shù)場景里一秒鐘看到依據(jù)遠比十秒鐘讀完生成結(jié)果更能建立信任。6.2 翻車現(xiàn)場一研究問題幻覺第一次把鏈路串起來演示時模型面對一篇涉及異構(gòu)數(shù)據(jù)融合的論文生成了一句“現(xiàn)有框架無法同時處理時空特征和文本語義需要引入新的知識表示范式?!笨粗衲敲椿厥碌胰ゲ樽C據(jù)句發(fā)現(xiàn)那句“現(xiàn)有框架無法”根本不在原文里是它從“多模態(tài)是趨勢”這種相關(guān)句子里腦補出來的。修復(fù)方式分兩層一是訓練時增加“找不到證據(jù)就必須輸出空白”的下降權(quán)重二是解碼后強制校驗證據(jù)句向量與問題句向量相似度低于閾值就直接拒掉。上線后幻覺比例從16%壓到5%以內(nèi)“我不會”的比例上升了很多但這正是我們要的。6.3 翻車現(xiàn)場二論證關(guān)系亂拉有一次處理一篇醫(yī)學綜述時模型把兩段不同疾病場景里的句子拉了一條“支持”邊因為它們的動詞結(jié)構(gòu)太像了。表面上是技術(shù)Bug深層原因是訓練數(shù)據(jù)里缺少跨段落負樣本。我們補了兩種數(shù)據(jù)一是構(gòu)造大量“同一頁常見論證詞但實際無關(guān)”的句子對二是把隨機跨段落句子對當作負樣本比例控制在10%左右。重新訓練后關(guān)系分類的精確率上升大約7個百分點。這類問題也提醒我關(guān)系模型最需要的不是看“句子像不像”而是看“它在論文流程中是否能對上”。6.4 翻車現(xiàn)場三框架過度結(jié)構(gòu)化最初我們要求所有句子都必須映射到一個角色結(jié)果生成的框架特別呆每段都像八股文讀著就像機器人搭的積木。后來把策略改成“允許其他分類”同時在前端展示時強調(diào)“這個框架是草稿不是標準答案”。更合理的處理是角色標注的置信度低于0.6的句子寧愿讓它落回“其他”也不要強行參與框架連接。我自己實際用下來的體會是這套系統(tǒng)最有價值的使用方式不是“讓它替我想”而是“讓它把我想的半成品攤開給我看”。它經(jīng)常能指出我發(fā)現(xiàn)不了的論證斷裂比如有一個數(shù)據(jù)實驗支撐的是上一章的方法但結(jié)論卻想支撐本章的新主張我過去很難注意到這種錯位系統(tǒng)畫出來之后一眼就明白了。所以如果你也在做類似方向的工具我的建議很樸素把準確率和召回率之外的“可追溯性”永遠放在評估指標里。一句漂亮但找不到出處的研究問題還不如一句平庸但有據(jù)可查的陳述。學術(shù)寫作AI如果連“哪句話是從哪句里來的”都講不清楚那它產(chǎn)出的東西再順滑也逃不過被審稿人一眼識破的結(jié)局。