今年我參加了 2024 玉山 AI Cup,總算在年尾前寫出這篇文章。之前雖然就有聽過 AI Cup,但沒有機會親自參加。今年的題目剛好是文件檢索 / RAG,決定給平常就有在接觸 NLP 的自己一次機會挑戰看看。雖然很可惜在初賽止步,還是想把我們團隊這次開發的「Hybrid 模型」解法和參賽經驗與大家分享,也當作留下奮鬥的紀錄,讓這次的經驗成為未來的養分!(有關我在做的 NLP 可以讀這篇:2023暑期實習心得@卓騰語言科技)
先放結果 (排名 67/222,最終正確率約 87%)
所謂「混合式模型」,可以理解為結合符號式 AI和機器學習特質的模型。在我們的解法中,我們用語言學知識制定特徵選擇的規則,再用 cosine similarity 讓模型做出最終判斷,算出最可能包含正解的文件。
前處理主要是使用 REGEX 和原生字串處理,做移除標點符號、斷句等工作。比較特殊的是在財務資料我們使用 OCRmyPDF 套件將檔案轉成文字,而沒能轉換成功的幾篇篇幅不長,我們便用手工編寫成 .txt。
由於每個題目皆為一個問題 + 一個文件列表 (可能為正解的文件編號的 list,例: [123,321,555] )。我們使用卓騰語言科技的 Articut 斷詞系統,用語言學方法對每個 query 和文件的句子斷詞並打上詞性標籤 (動詞、名詞、自定義...等等),再根據檢索文件的類別,初步制定選擇詞類/詞彙作為特徵的策略,例如抓 客服 Q&A 題目裡的動詞,若沒有動詞則找名詞。原因是動詞能代表一個句子中的事件,因此當問題和答案的動詞很像時,那它們便很可能是在講同一件事情。
選擇好特徵之後,我們計算問題和可能解之間的 cosine similarity 分數(和) 並傳回分數最高的文件編號。若所有分數為皆為 0,可以選擇顯示「答案疑似不在提供文件中」。
簡單來說,我們的模型可以分成「規則」(Rule) 和 「模型」(Model) 兩部分。有別於純 ML/DL 方法將文字轉成數值,透過 feature selection 或是訓練本身,試圖從訓練資料中學習能夠預測目標的特徵及對應的權重;我們是先從語言的本質著手制定規則,選擇從語言層面上可能帶有關鍵資訊的特定詞類/詞彙作為特徵,再交給 model 的部分計算結果。
重點在我們試圖從語言本身的底層邏輯做推論,而非從資料的表層現象做收斂。掌握共通的底層邏輯,便能從少量資料推廣到大量現象,這就是現代語言學「以少馭多」的特點;反過來,當我們捨棄語言的結構和規則,用詞嵌入等方式試圖捕捉「語意」時,本質上終究是在逼近訓練資料中文字的機率分佈,而非真正的語意資訊。語言的表現是無限的,用大量資料和運算依然不見得能捕捉到真正重要的資訊。在實務上,以我們的模型來說,我們僅透過觀察 raw data 就能建立初步的模型,跑完後再逐步 trace 錯誤並修正,僅用主辦方提供的資料集和練習題目,最後也產出了具有相當預測能力的模型。
除此之外,我們的小模型同時具備高度可解釋性。我們能夠解釋「選用的特徵是什麼」、「為什麼選用這些特徵」;當模型回答錯誤時,也能夠藉由觀察來推論「模型可能抓到了哪些資訊」,再進一步改善前處理或是特徵選擇,甚至提出「因為問題和文件都完全不像,所以我們懷疑目標不在搜尋範圍內」這樣的結論。
第一次參加這樣的比賽,首先得感謝玉山提供這樣的機會,我在過程中學到很多,也發現許多有待加強之處,獲益良多、感謝指教!
感謝我的隊友 Jenny 在碩班繁重的事務之餘與我一同挑戰,除了分擔工作量,也好幾次在討論中給予提點、提出質疑,幫了原本要單打獨鬥的我很大的忙,感謝你!
同時,也感謝過程中給予我們幫助的師長和伙伴們,感謝你們!
這篇文章在 Medium 同步上傳。喜歡的話,歡迎幫我按個讚或是追蹤我~