數據記者的機器學習(Machine Learning)初體驗:3千萬逐字稿分析你家立委最常討論議題

文/《報導者》Data小組記者簡毅慧

2024年立法委員選舉落幕,也代表第10屆立委即將卸任交棒,或展開下一個任期。在這之前,我們希望製作一篇報導,回顧他們自2020年上任以來,在立院質詢時的重點議題有哪些、審議法案時的關注面向是什麼。讓立法院裡發生的事、立委說過的話不再只是碎片性地出現在即時新聞畫面,或者像卷宗一樣束之高閣,而是可以呈現完整、白話、近用性高的洞察,為廣大的選民提供公共服務,促進民主對話、討論與實質監督。

這邊簡單展示儀表板操作過程,若想看完整分析,請點選我們的報導

要做出上述成果,最大的挑戰在於資料量過於龐雜,Data小組2位數據記者不可能人工辨識2萬多份逐字稿(畢竟看完可能就2028年立委選舉前了)。因此我們希望能找到足夠完整、標準一致的資料科學統計方法,透過演算法將上百位立委的發言分門別類,並計算出每位立委在特定主題的發言次數。

而能夠做到這件事的技術,就是人工智慧領域中的「機器學習(Machine Learning)」,這也是近年社會科學研究者常用來分析大量文字資訊的工具之一。過去《報導者》數據記者未曾觸碰到這個領域的知識,以下分享我們如何學習相關領域知識,以及如何在這篇報導實踐這項技術的過程,也歡迎有相關經驗的讀者留言交流或提供建議。

本文將分為4大部分說明:

1. 資料蒐集與預處理(工具Python)
2. 機器學習與資料編碼(工具Python、R Studio)
3. 主題命名與人工校對檢核碼(工具Google Sheet)
4. 資料分析與研究限制(工具Google Sheet)

一、資料蒐集與預處理

1. 立委基本資料

首先,我們先從中選會選舉資料庫中,撈出2020年以來的立委選舉、補選資料,從中整理出第10屆現職與離職的立委名單共120位,資料包含120位立委的選區類型(區域/不分區)與所屬政黨

*這邊需注意,立委所屬政黨可能與中選會資料不同──例如台東縣立委劉櫂豪原為民進黨籍,然在2023年12月遭民進黨除名,變更為無黨籍──可以參照立法院公布的立委資料做確認。

除此之外,立委的發言次數會受其任期長短影響、發言面向會受到其所屬委員會的影響,因此我們也參照立法院官網,補上個別立委的上任、離職日期,並統計其在各委員會參與多少會期。

2. 立委發言紀錄

(1) 資料範圍、格式鎖定

立委一屆任期4年、8個會期,我們在2023年12月上旬進行發言資料的研究與抓取,當時立法院第8會期尚在進行中,因此我們將資料區間鎖定在本屆第1至第7會期。

我們先自立法院開放資料服務平台抓取公報目錄,確認目標範圍;再使用公民科技社群g0v工程師、歐噴公司創辦人王向榮建置的立院資料API,撰寫Python程式碼抓取第1會期至第7會期的院會、委員會(含公聽會)、黨團協商、討論事項的會議紀錄HTML檔,讀取其中所有文字。

之所以不直接從立法院官網下載公報資料,是因為其檔案格式多為PDF或DOC檔,在表格處理上容易出錯,因此採用王向榮已轉好的HTML檔案。

公報轉為HTML檔的樣子,機器可讀取其中所有文字。

(2) 發言資料整併與過濾

我們觀察公報中的發言紀錄規則,抓取個別立委的發言紀錄。例如:以「吳委員思瑤:」蒐集立委吳思瑤的所有發言,將該立委在同一次會議的所有發言內容整併為一筆。

一般來說,委員會會議主席為該會期召集委員,主席發言通常是請與會成員依序發言,與議題無顯著關聯,故略不計。另外,考量書面質詢占比較低,且質詢強度與口頭質詢相比較低,亦未納入分析。

扣除負責主持會議的院長游錫堃、副院長蔡其昌,總共蒐集到118人的23,599次發言。《報導者》處理錯別字、亂碼問題後,將同一立委在同一會議中單次發言內容整併,共計23,511筆發言資料,欄位包含發言者、會議名稱、發言內容與原始公報連結。

最後,我們合併所有立委的基本資料及發言資料,依此進行分析。

二、機器學習與資料編碼

1. 建立研究方法

在2萬多筆發言中,每筆發言字數都會來到上千字,在有限的人力與時間下,我們需要讓電腦快速理解每筆發言的意涵,並辨識其主題,這就是所謂的自然語言處理(Natural Language Processing,簡稱NLP)。

而要讓電腦能夠理解文字意涵,就需仰賴人工智慧的分支「機器學習(Machine Learning)演算法」,我們希望建立一套演算法與模型,教導電腦從文字數據中學習,並做出決策。

在自然語言處理中,有非常多與機器學習相關的應用,例如:情感分析、主題建模、翻譯、語音辨識等。其中跟我們的目標較為相關的,有2種路徑:

(1) 主題建模(Topic Modeling),它可以讓電腦從大量文件中自動識別、提取主題,這種方法可以幫助我們理解文件的主要內容和結構,而不需要逐個閱讀每份文件。

(2) 詞向量(Word Vectorization),它讓電腦將每個詞彙映射到一個向量空間,透過計算詞向量之間的距離來捕捉詞語之間的語義關係。美國非營利媒體《ProPublica》在7年前就曾用此方法觀察國會議員的關注焦點。

上述兩種方法都屬於機器學習中的非監督式學習(Unsupervised Learning),人類不需要先幫機器做數據標籤或分類,機器就要自行找出數據中的模式、結構或關係。

差別在於詞向量專注於單詞層面的語義表示,而主題模型則著重在文件層面,試圖尋找一組文件中的共同主題。通常詞向量在語義分析、詞語關聯方面較有用;主題模型則在識別、摘要大量文件的主題上更具優勢。

最後考量到我們的目標是去觀察大量文件中的關聯,並觀察出文件中的潛在主題,因此前者會更適合我們,但是在製作這篇報導以前,Data小組沒有做主題建模的經驗,因此我們參考數份公開學術論文,並與政治大學傳播與資訊科學研究團隊「水火計畫」商討具體步驟,很感謝水火計畫的指導老師、政大新聞學系教授鄭宇君協助給予研究方向,還有水火計畫成員、政大傳播所楊聲輝協助操作程式碼。

在與水火計畫團隊討論後,我們最終決定在眾多主題建模技術中選用最著名且被廣泛使用的演算法 — — 隱含狄利克雷分布主題模型(Latent Dirichlet Allocation,簡稱LDA) — — 作為文件分類的取徑。

2. 建立專業用詞與停用詞清單

接著我們就進入程式碼撰寫環節,雖然數據團隊主要的程式語言是Python,但R語言作為社會統計學界常用的分析工具,擁有更成熟的主題模型套件,網路上也有更多現成R語言版本的LDA程式碼可以參考,因此在此環節,我們改採用R進行統計分析。

我們透過中文斷詞套件Jieba對所有發言資料進行斷詞,但Jieba的詞庫僅包含通用詞彙,因此我們以立委姓名、立法院動態資訊網法案追蹤平台彙整的熱門議題為基底,新增專業用語斷詞,檢查斷詞結果。

我們每做一次斷詞,就會觀察斷詞結果,從出現頻率最高的詞彙開始做檢查,將法案名稱與特殊詞彙(如「3+11」、「芒果乾」等)加入專業用詞清單,同時也將無意義詞彙(如「好嗎」、「可能性」)納入停用詞清單,來回調整近百次後,最後彙整出1,130個專業用詞與4,783個停用詞。

3. 電腦計算最佳主題數

接著,我們參考中研院人文社會科學研究中心博士後研究員何俊霆開源的LDA主題模型程式碼,依照團隊需求進行微調與修改,並使用在主題模型研究領域中常見的最佳主題數計算方法「CaoJuan2009」及「Arun2010」統計出最合適的主題數。

我們列出一個主題數區間,並以上述兩種指標計算在不同主題數下,模型的好壞程度。

這張圖是計算出來的結果,X軸是主題數,Y軸則是模型的好壞程度,Y值愈低,模型的品質愈佳。一般來說,主題數愈多,模型愈能更細緻的分類資料,因此整體而言,隨著主題數(X值)增加,線段會逐漸趨近於0。

但我們不可能將主題切得無限多,因此我們需要找到肘點(Elbow Point),也就是圖表中一度反彈的點位,這代表模型性能的增幅會減緩或停止,此肘點往往被視為選擇最佳主題數的好地方,因為它代表了效果和簡潔性之間的最佳平衡。

在這張圖中,肘點是200與230,在測試兩種主題數下的切分結果後,我們認為200個主題較230個主題更加簡潔,因此我們認定最佳主題數為200,並將所有資料分為200個主題。

分好後,模型會計算出每個主題的重點關鍵字,並根據每段發言內容,為其打上200個主題的分數(分數在0至1之間,愈高代表在該主題愈有代表性),此分數代表發言與特定主題的相關程度。例如:某發言與主題1的相關程度是0.53分、與主題2的相關程度是0.62分,我們會認為這段發言更多在討論主題2,藉此對大量文件進行快速分類與理解。

三、主題命名與特殊處理

分類完成後,我們需要辨識「主題1」、「主題2」⋯⋯「主題200」的談論主軸並為其命名,我們初步以OpenAI開發的chatGPT模型,根據每個主題最相關的前20大關鍵字、分數最高的前10個發言內容,辨識出主題名稱。例如:主題22的關鍵字是「CPTPP、談判、經貿、關稅協定、FTA」,就會將主題22命名為「國際經貿協議進度」。

初步命名後,我們再抓出與此主題相關度前10高的發言,根據文件內容微調主題名稱,確保可以概括主題下的各種發言,少數主題下的發言可能因有意義的詞彙太少、語句過度剪短,無法觀察出論述主軸,我們就會將這個主題及被歸類到旗下的發言排除。200個主題中,總有21個主題無法觀察出論述主軸。

其實從機器辨識結果到最後定案的主題清單,是一段漫漫長路。我們在讓chatGPT命名主題時,已經下了一些指令:比如應符合《報導者》下標風格、限制字數等,但還是會出現很多疏漏,在後來數輪人工校對時都被抓出來:

  • 主題範圍不一致:如「教育發展」與「兒少教育資源」,範圍會重疊,需做出差異
  • 無法涵蓋所有發言:部分發言可能與主題名稱無關,如有個主題多提及2021年太魯閣事故,chatGPT命名為「工地安全管理」,但其下亦有少數文件提到非相關的公共工程,後改名為「公共工程檢討」
  • 命名規則不一致:「改革」、「改制」等詞彙意義相近,應該統一使用其中一個

此外,有些主題名稱仍需依照特殊領域專業判斷,因此我們也諮詢長期做國會評鑑的公督盟,了解他們的評判標準;也諮詢有政治相關文本探勘經驗的台北大學公共行政暨政策學系教授劉嘉薇、政治專業的東海大學政治學系教授沈有忠;以及有深厚財經領域知識的《報導者》總編輯方德琳,確認我們的研究方法及主題名稱足夠精準、能夠涵蓋旗下所有發言內容。

除此之外,我跟皓翔也經過數輪的討論與判斷,現在回顧這段經歷會認為,若未來還要用相似的研究方法,在初步以ChatGPT命名時,應該要特別說明:

「主題名稱要足夠具體,能夠涵蓋以下所有文件,必要時可以用『A與B』的語句命名,若觀察到某主題下有兩個完全不相干的子議題,則應提出來另行處理。另外也要確認,主題名稱之間應盡量壁壘分明,不可有重疊。最後要確保命名規則一致,若命名提及「檢討」「改革」「改制」「治理」「措施」等相似虛詞,應盡量保持統一。」

最終我們確立178個有效主題、共22,786個發言,並將所有特殊資料處理詳細記錄在報導文末,以供讀者參考。

四、資料分析與研究限制

1. 資料分析:

完成主題命名、所有發言歸類後,我們依政黨、立委在各主題的發言數進行分析。立委議題儀表板部分陳列個別立委最常討論的議題,是以個別立委在178個議題中的發言數降冪排列,取前五高者。若有數個主題並列第五名,則以文件與主題的相關分數高者為優先。

例如:某立委的前六大議題發言數依序為10次、9次、8次、7次、6次、6次,議題A與議題B發言次數皆為6次,則觀察兩者的最高分文件分數(Gamma值),若議題A的最高分發言為0.6,議題B的最高分發言為0.7,則取議題B為第五大議題。

2. 研究限制:

上述分享的LDA主題模型,將每份文件視為多個主題的混合體,因此每份文件不僅只跟一個主題相關,也可能包含多個主題的元素,但我們為了分析出各主題的討論頻率,因此會觀察一份文件中與哪個主題「最相關(最高分)」,進而將此文件歸納入該主題。

然而少數文件可能因有意義的關鍵字不足,在每個主題的分數都很低,即便採最高分主題,仍可能出現主題與發言內容不相符之情形。我們透過人工查核的方式,確保立委表現儀表板中出現的摘要內容皆與主題相符,盡可能排除偏誤資料。

另外,報導中以各主題發言次數作為指標,觀察立委對各大議題的討論度,然這不盡然代表議題在立法院的重要程度,或是特定政黨、個人對議題的關注程度。部分議題如18歲公民權、通姦除罪化可能因各黨皆有高度共識,因此討論度不如爭議議題。

結語

機器學習對《報導者》來說,是一個嶄新的領域。在節奏緊湊的選舉專案中,我很感謝執行長榮幸大哥、皓翔的信任與支持,讓我可以花上月餘的時間專心鑽研、學習新的人工智慧技術上。

LDA主題模型其實被廣泛地運用在巨量、大型的文件分析中,比如新聞文章、社交媒體貼文等,能夠有效地自這些文件中提取主題結構,而且有非常多參數都能用於調校模型,使其生成的結果更趨近於我們的期待。

總體來說,這是一個強大且靈活的工具,適用於各種自然語言處理任務,既然我們投入時間與人力學習,未來數據團隊也會期許自己將此技術應用在更多公共議題上,為讀者從海量的文字資訊中提取重要的洞察。

再次感謝政治大學新聞系教授鄭宇君、政大傳播與資訊科學研究團隊「水火計畫」、政大傳播所楊聲輝、台北大學公共行政暨政策學系教授劉嘉薇協助給予研究方向;以及歐噴公司創辦人、g0v零時政府參與者王向榮提供立法院資料API。

也感謝東海大學政治系教授沈有忠、公民監督國會聯盟執行長張宏林,在受訪過程中對本研究方法的建議與說明。

最後感謝看到這裡的你,若你也喜歡這則報導的技術筆記,歡迎給我們鼓掌鼓勵👏🏼,或留言與我們交流。

若對資料有任何建議或疑問,或想交流任何資料新聞(Data Journalism)想法,可寄信至報導者Data小組信箱:data@twreporter.org

我們也將這次的報導的資料整理在《報導者》Data小組Github,提供各界參考。

📣有你,才有《報導者》

《報導者》秉持深度、開放、非營利的精神,透過讀者的贊助支持來營運,不仰賴商業廣告置入。
如果您認同我們的理念,歡迎與我們一起前進,共同推動這場媒體小革命。

☛贊助我們:https://bit.ly/3ylK401

官方網站:https://bit.ly/3rTeR1V
粉絲專頁:https://bit.ly/37jjGYD
Instagram:https://bit.ly/3rWFQJV

--

--

報導者 The Reporter
報導者開放實驗室

台灣第一個由公益基金會成立的網路媒體,秉持深度、開放、非營利的精神,致力於公共領域調查報導,與社會共同打造多元進步的媒體環境。