## 古人別名探勘 ## 專用模型之開發 專案成果報告: 【先生不知何許人也】組 指導老師:蔡宗翰 教授 --- ### 成員 外文二 - 先悅 生傳四 - 心穎 歷史所 - 郁蓁 歷史所 - 星如 語言所 - 翊涵 資工所 - 銘杉 --- ## 開發模型動機 身為歷史研究生,最痛苦的就是......蒐集史料! --- ### 開發模型動機 * 舉例說明: * 目標:想蒐集東晉高僧支遁的所有史料 * 困境: 1. 支遁的史料散見不同書的不同篇章 2. 支遁在史料中可能會以「支道林、支法師、支公」等各種別名出現 --- 因此為了提升蒐集資料的效率,希望建立 ### 跨文本查找 ### 指定中國史人物所有史料的模型 --- ![Search Screen](https://hackmd.io/_uploads/BJ1MZzkSkx.png) --- ![Source Details](https://hackmd.io/_uploads/rJTzZfyrye.png) --- 然而時間與資源有限...... ### 先從查找古人別名開始! --- ### 模型簡介 --- ### 模型簡介 * 功能:輸入歷史人物的本名,可以迅速找出該人物的其他別名 * 舉例說明: * 輸入(input):請問唐朝的宋之問有哪些別名? * 輸出(output):延清、少連 --- ### 第一次微調資料準備 --- ### 準備第一次訓練資料 * 模型已有理解文言文能力 * 透過微調資料讓模型學會古人別名的任務 --- ### 第一次訓練資料來源 * 來源:CBDB(哈佛大學中國歷代人物傳記資料庫) --- ### 第一次訓練資料清理 * 把沒用的資料去掉,讓模型更準確地理解和學習。 --- ### 第一次試驗 --- ### 評估模型表現 **test set(考卷)** * gold test set:100筆正史中的唐代與明代人物 * silver test set:1000筆唐代與明代人物 **評估方式** * Precision(精確率):模型寫的答案中有正確答案的比例 * Recall(召回率):標準答案中,有模型寫出的答案的比例 * F1 Score(以上兩者的調和平均數):以上兩者的綜合分數 --- ### **第一次模型訓練結果** | | Precision| Recall | F1 Score | | -------- | -------- | -------- | -------- | | gold test set| 0.19 | 0.14 | 0.16 | | silver test set | 0.03 | 0.01 | 0.01 | --- ### 分析訓練結果 --- ### 為什麼會答對? 元稹、王勃、++杜甫++ (出現**次數**較多) ==**古文預訓練資料**== ➔ ==**我們的預訓練資料**== 元稹+微之➔ 25次 王勃+子安➔ 25次 杜甫+子美➔ 22次 杜甫+少陵➔ 12次 杜甫+老杜➔ 5次</br> **猜測:本名與某別名的組合,可能要出現20次以上** --- ### 為什麼會答錯? * 人物本名與別名的出現次數不夠多 * test set的人物不在預訓練資料中 * 模型讀太少傳記(有字、號或某某先生、諡號等字句) --- ### 修正方向 提升本名與別名組合出現的次數(20次以上)</br> </br> * **調整100筆唐代與明代人物的gold test set** * 人物及其傳記,有在古文資料中出現 * 唐代:《舊唐書》、《新唐書》 * 明代:《明史.列傳》 * **我們的預訓練資料(宋代人物)加上傳記內容** * 複製20次 --- ### 產製「專業預訓練資料」 --- #### Q : 專業預訓練資料共有 2 萬 7 千筆人名, #### 如何找出全部的對應傳記? --- ### A : 自己生成傳記 --- ### 舊方法:人工創造模板 * 僅調換語序、代名詞 * 缺點:過於呆板 ⮕ 模型訓練容易「欠缺擬合」 --- ### 新方法:使用 LLM * 優點:快速生成大量資料 * 任務:下指令給模型,生成人物傳記 --- ### 問題 1. LLM 可能會產生幻覺 (生成假的別名) 2. 指令太複雜,生成內容會出現英文 --- ### 套用固定格式:別名規則 + 生成傳記 1. 別名規則:本名 + 別名的模板 2. 模板別名順序:字、號、小名、室名... ``` 本名:翁承贊;別名:狎鷗翁、文堯、翁十九 ⮕ {"name": "翁承贊", "text": "翁承贊,字狎鷗翁,號文堯,小名翁十九"} ``` --- ### 2. Gemini 生成傳記 * 為防幻覺,不可提及別名 * 指令: "請以宋代古文的用字以及筆法,撰寫一篇關於 {name} 的評論式人物傳記。請發揮想像撰寫內容多樣化的傳記。(`全文僅可提及 {name} 這一名稱`,不得包含任何形式的別名或字號。)" --- ### 生成結果 ![Screenshot 2024-12-17 at 3.49.49 PM](https://hackmd.io/_uploads/ryqQTjAV1x.png) --- ### 2 萬 7 千筆資料, ### 總共花了多少時間生成? --- ### 6 個人,4 天 --- ### 第二次模型訓練結果 --- 問題:CP 次數選擇 模型學習要花多少次 5次、 10次、15次、20次? --- --- 20 次表現最好 --- 測試資料 CP 資料20次 | | Precision | Recall | F1 | | -------- | -------- | -------- | -------- | | Silver | 0.07 | 0.04 | 0.05 | | Gold 未經過後處理 | 0.22 | 0.29 | 0.25 | --- 測試資料 CP 資料50次 | | Precision | Recall | F1 | | -------- | -------- | -------- | -------- | | Silver | 0.07 | 0.04 | 0.05 | | Gold 未經過後處理 | 0.17 | 0.26 | 0.20 | --- ### 後處理 使用者:請問宋代的沈世顯有哪些稱呼? 模型回應:沈世顯、光祖、元思、濟仲 答案應該是:沈世顯、光祖 模型可能回應出錯誤的內容 (元思、濟仲) --- ### 後處理方式 * 使用CP資料尋找別名與本名是否有共存 * 去掉沒有與原名共存的別名 模型回應:沈世顯、光祖、元思、濟仲 答案應該是:沈世顯、光祖 --- ### 經過後處理可以使 precision 提高 第二次模型_gold_CP20次_測試集 : | | Precision| Recall | F1 | | -------- | -------- | -------- | -------- | | 原始結果 | 0.22 | 0.29 | 0.25 | | 經過後處理 | 0.61 | 0.29 | 0.39 | --- ### 未來展望 --- ### 未來展望 1. 訓練資料改以真實的史料為主,合成的資料為輔,並且增加樣式的多元性。 3. 持續訓練與測試,逐步改善模型、提升準確度。 5. 結合史料查找功能,利用輸出的別名查找人物的所有史料。 ---
{"title":"數位人文專題應用與實作 簡報","description":"–","contributors":"[{\"id\":\"184e2acb-59eb-470e-8210-d1bd98ba69f9\",\"add\":1299,\"del\":434},{\"id\":\"9a258137-69fe-4c31-babb-5e79d9329ded\",\"add\":1031,\"del\":391},{\"id\":\"9d088c45-c1ea-47e2-a251-1cce1764d2e9\",\"add\":554,\"del\":190},{\"id\":\"c6dfd45c-0459-4352-9729-504decf2681d\",\"add\":1403,\"del\":1302},{\"id\":\"379842b8-8125-4913-8511-2b0c98f3f5f2\",\"add\":1252,\"del\":656},{\"id\":\"46b6b284-1b2e-4dce-8254-3af823f34fb8\",\"add\":1197,\"del\":305}]"}
    190 views