LSA 潛在語意分析法 簡介
潛在語意分析法英文為 LSA (Latent Semantic Analysis), 將文本透過「量化計算」的方式,去探索、尋找詞語之間語意關聯的一種分析方法。並不只侷限在表面的字詞重疊的關係上,而是能夠獲得字詞的關聯性,例如:
「蘋果、橘子、柳丁」三個不同的詞語,若透過大量關於水果的文獻資料,即便文本中沒有直接討論橘子和柳丁的文獻,但也會因為兩者都有類似的前後文,所以很有可能得出:在詞語相關性上,「橘子和柳丁」的相關性可能大於「橘子和蘋果」的相關性。
簡單來說,進行潛在語意分析法 (LSA) 大致上會有以下步驟:
- 文本資料準備:取得大量文本資料,如資料庫數據、訪談者資料
- 進行斷詞:將文本資料切分成「詞語」,若原文為「這篇部落格文章要介紹潛在語意分析法」,可能就會被切分成「這」、「篇」、「部落格」「文章」、「要」、「介紹」、「潛在語意分析法」
- 去除冗詞、執行詞形還原:像是上述舉例可能只保留「部落格」、「文章」、「介紹」、「潛在語意分析」
- 詞頻計算、建立詞語矩陣:計算詞語在文本中出現頻率,將「詞語」進行量化處理
- 矩陣降維處理:建立詞語矩陣後,因為資料相對龐大,不易進行分析,因此需要進行降維處理,提供研究者分析資料的切角
- 進行分析及詮釋語意空間:觀察不同分析及降維處理,進行詞語語意詮釋
*註:以下內容為我身為小小研究生的粗淺理解,請大家自行斟酌參考。另外,若有大師發現我說明內容有任何錯誤的地方,也請一定要跟我提出,我會儘快進行修改!
LSA 潛在語意分析法執行步驟
一、文本資料準備
在進行潛在語意分析時,基本上基於後續計算的關係,不可以是只有一大坨文本,而要是一篇一篇的文本。也就是說,分析單位不能是一個整體,如:
- 一本書
- 一篇新聞稿
- 一位訪談者的內容
能夠分析的是多篇的文本資料,如:
- 一本書的各章節內容 (以「章節」作為文本的區隔)
- 很多篇新聞稿 (以「篇」作為文本的區隔)
- 很多位訪談者的訪談逐字稿 (以「訪談者」作為文本區隔)
也就是說,在資料準備時,要注意的是要有不同文本的區隔。
就我個人的研究執行來說,就是要分析「多位訪談者」的訪談逐字稿。因此在文本資料表中,第一個欄位是訪談者的編號;而第二個欄位就是每位訪談者的所有訪談內容。
除了資料的整理之外,因之後的分析是透過字詞來讀取,所以必須確保文本無錯別字,否則將會直接的影響到分析過程,這對於分析訪談的內容比較需要注意;而一般政府、新聞及機構的資料,則較無錯別字的問題。
再來以下執行內容,需要透過「分析工具」或「寫程式」才能繼續往下進行,我這邊將提供兩種進行潛在語意分析的方法供各位參考:
- 透過 Orange Data Mining 工具來完成:軟體免費,但可能較適合處理英文文本
- 透過寫程式的方式完成:透過 ChatGPT + Google Colab 協作進行
以下,我將先介紹如何使用 Orange Data Mining 工具,協助我們來完成潛在語意分析法。
透過 Orange 進行潛在語意分析法之步驟
第0步:Orange Data Mining 工具介紹
Orange is a comprehensive, component-based software suite for machine learning and data mining, developed at Bioinformatics Laboratory, Faculty of Computer and Information Science, University of Ljubljana, Slovenia, together with open source community.
中文翻譯為:Orange 是一款全面的、基於組件的機器學習和資料探勘軟體套件,由斯洛維尼亞盧布爾雅那大學電腦與資訊科學學院生物資訊實驗室與開源社群共同開發。
首先,讓我們感謝「斯洛維尼亞盧布爾雅那大學電腦與資訊科學學院生物資訊實驗室」與開源社群,提供一個這樣的工具給全世界使用。
Orange 是一套開源的資料探勘與機器學習軟體,並以視覺化、模組化的方式,提供 No-code 的資料分析選擇,適合無程式基礎及有視覺化呈現需求的人使用。
第1步:下載 Orange Data Mining 軟體
請至 Orange Data Mining 官網下載:https://orangedatamining.com/
第2步:下載"TEXT"分析補充包
要進行潛在語意分析法,只有 Orange 的主程式是不夠的,還需要打開 Orange 程式額外下載"TEXT"分析的補充包。
執行路徑:打開 Orange 程式 > 在上方欄位找到 "Options" > 點擊 "Add-ons..." > 勾選 "Text" 欄位 > 按下 "OK" > 重新啟動 Orange

打開 Orange > "Options" > "Add-ons..." > 勾選 "Text" > "OK" > 重啟 Orange
下載 "Text" 補充包之後,你就可以在你左邊的工作欄位看到 "Text Mining" 的工具欄位,就是下載成功了。
*註:我自己有遇到一個 Bug 就是明明已經勾選 "Text" 補充包,但我就是找不到我的 "Text Mining" 工具,後來我的解決辦法就是去找他們官方公開在 GitHub 上面的資源,重新下載 Orange,才能夠正確新增 "Text Mining" 工具,不過我同學就沒有遇到我的問題,但還是提供大家這個解決辦法。
第3步:打開 Orange,在空白處新增 "Corpus"
在 Orange 空白的工作介面中,可以透過點擊左側工具欄、雙擊左鍵、或是單擊右鍵新增工具。首先要在 Orange 匯入資料,若你的資料量很大,可直接導入 Corpus (資料庫),但如果你整理成一個單獨文件檔的話,可以先新增 file,然後匯入文件資料後,再將它接到 Corpus (資料庫)。
雙擊新增出來的元素可以進一步進行每一個步驟的細項設定,像是建立 "file" 之後,可透過雙擊 "file" 來選擇要匯入什麼資料。

雙擊 "file" 之後跳出的選擇視窗,有趣的是,Orange 也可以讀取雲端資料的數據 (選擇 URL);而 file 就是上傳硬碟內檔案,以及資料若需要重新讀取時,就可按旁邊的 "Reload"
Orange 內元素建立:(File) > Corpus
*註:要進行文本的語料分析,基本上一定要建立 Corpus,實際上 Corpus 起到什麼作用我不太清楚,就我所知,這個元素或許是起到作為一種「讀取資料」的功能。

若要新增新的元素,也可直接拉元素旁邊的虛線;或建立好元素後,再把兩個連結起來
第4步:進行文本的「預處理」,新增步驟 "Preprocess Text"
再來就是透過 Orange 的 "Preprocess Text" 功能,將長文本拆分成單獨的詞語。具體要設定的幾個欄位,以下一一和大家分享其細節:
- Preprocessors 文本前處理工具:這是最左上上方的欄位,就是可讓自己選擇要添加哪種文本處理的工具,本來內建就會提供你相關內容,若沒有的工具,點擊後就會出現在右邊的欄位,每一個工具它下層的內容大致有:
- Transformation 轉換:最常用的就是 Lowercase (將字詞全部轉換成小寫),避免大小寫被讀取成不同的詞語;還有關於超連結的處理方式 (細節自己去查)。
- Tokenization 斷詞:這一欄就是在說明切詞的方式,但我個人覺得 Orange 切分中文文本的能力太差了,不推薦用來切中文。
- Normalization 標準化:簡單來說,這個部分可以將英文詞性還原,例如 running 會還原成 run,而不同標準化的方式就是基於不同的規則去變化。
- Filtering 過濾:去除空格、特殊符號、停用詞等功能,這裡比較需要介紹的有兩個功能,第一是 Lexicon,可以匯入特別需要保留的詞彙;第二是 Document frequency 文本頻率,它下面還有兩種模式可以選擇:Relative 是規定它出現在各文本的頻率,若值為 0.2,總共有 10 個文本,也就是說這個詞至少需要出現在 2 個文本中才會被計算;Absolute 則是絕對次數,設定幾次就是出現幾次就會被計算。
- N-grams Range N 個詞的組合:可設定詞組讀取,如果設定範圍設定 1,那麼只會選擇單字,如 "Stable";如果範圍設定 2,那麼就會保留 "Stable Diffusion"
- POS Tagger 詞性標註:用於英文等外文才有效,可區分名詞、動詞、介係詞等詞性

文字預處理元素連接方式,及文字預處理工具設定頁面
Orange 內元素建立:(File) > Corpus > Preprocess Text
第5步:透過「Bag of Words 詞袋模型」,進行詞頻計算,新增步驟 "Bag of Words"
再來就是 Orange 中「Bag of Words 詞袋模型」,進行詞語出現頻率的計算。這個部分可以透過軟體自行完成,省去自己思考要如何計算詞語頻率。
我先跟大家說明如果想要進行「潛在語意分析法」該如何設定,說明完後再講其他選項的差異,基於「潛在語意分析法」常見分析詞語頻率是基於 TD-IDF 的計算方式,所以通常根據下面說明的選擇方式:
- Term Frequency 選擇 Sublinear
- Document Frequency 選擇 IDF 或 Smooth IDF
- Regularization 選擇 L2 (Euclidean)


下面這邊大家不一定要知道,但有興趣可以了解一下,以下是其他選項差異的簡單說明。
Term Frequency 的選項差異:文件內的頻率差異
- Count 計次:透過「計次」方式進行頻率計算,出現幾次就算幾次
- Binary 二元:透過「有 / 無」方式進行頻率計算,文本有出現一次或以上就是 1;若沒有出現就是 0
- Sublinear 次線性:透過取 Log 值的方式,令高頻詞彙「降權重」,因認為這樣分析比較公道
Document Frequency 的選項差異:文件間的頻率差異
- None:不做調整
- IDF 或 Smooth IDF:同時考量同一詞語在不同文本出現的頻率,若一詞語普遍出現在不同文件,透過此計算方式會降低其權重,都被提到,則相對不那麼重要的概念;而IDF 及 Smooth IDF 的差異,就是計算公式的小差異,Smooth 就是在取 Log 後 +1,避免發生取 log 後變成 0 或接近 0 的情況影響計算。
Regularization 的選項差異:標準化與否
- None 不正規化:保留原始權重 可能導致較長篇的詞語有較高權重。
- L1 (Manhattan):使所有權重和 = 1,保留資料稀疏的特性。(此部分細節我不太懂)
- L2 (Euclidean):使平方和 = 1,用於 TF-IDF、LDA 等模型之計算方式。
第6步:基於分析需求,新增步驟 "Topic Modeling" 或其他分析方法
以上步驟完成,基本上就完成了潛在語意分析法的大部分步驟,最後就是依據自己的資料分析需求,可進行不同的分析方式。
常見會聽到的就是透過「降維進行分析」,而這個「降維」是什麼意思呢?經過上述的處理後,「大量的文本」被切分成「詞語」,每一個詞語又被「數字化」,但他們現在的關係是複雜的,每個文字之間都有不同比例的關係。這個時候我們想要來分析他們,就必須讓他們的關係簡單化,這個「關係簡單化」在數學上的說法,就是「降維」。
更直白的說,比如說,如果能夠讓所有的詞彙能夠直接被丟進 XY 的座標平面中,似乎就能夠很容易的讓研究者看出點 (詞語) 的散布情況,也就能夠進行視覺化分析。而 XY 座標平面就是透過「二維」的方式進行觀察。基本上對於這些詞語來說,就是把他們以比較低維度的方式進行觀察,也就是「降維」的意思。
如果上面的內容沒有幫助到你,那只能繼續往下看,以 "Topic Modeling" 進行分析來舉例,如何進行潛在語意分析。
以 "Topic Modeling" 進行潛在語意的「主題分析」
*註:在 "Topic Modeling" 的設定中,要選擇 "Latent Semantic Indexing" 的分析方式,並選擇預期分群的主題數量
Topic Modeling 就是將文本中所有詞語,分群至 N 個主題之中,這個主題並最初是沒有語意上的意義,只是基於數學矩陣計算分配,是透過數學分配之後,結果就是一組一組的詞語,這時候研究者再去解讀、詮釋,這些詞語被分配在一組的「語意空間」是什麼。
例如,我是進行生成式 AI 使用相關研究,有一組詞語權重 (weight) 前 10 高的內容為:
方式、事情、時間、未來、設計、應用、客戶、工作、跨部門、改變
那麼對於該主題的潛在語意詮釋可能為:
這是在描述「AI 技術的應用,在未來會造成設計工作流程與 客戶/ 跨部門 合作方式的改變」,說明了生成式 AI 可能造成設計工作方式的改變
當然,上述透過 "主題" 的分析只討論詞語的語意關聯;若文件的區分是有意義的 (例如,不同新聞機構的新聞內容),也可以去分析不同文本的標記內容分布,及對於特定主題可解釋性權重的差異。不過具體這些要透過哪一種分析方式,就要依照自己的需求進行更細緻的選擇。
以上就是透過「Orange Data Mining」進行潛在語意分析的舉例。提醒事項:
- 基於資料庫的因素, Orange Data Mining 較適合進行英文等歐洲語系的分析,才會有最佳的詞語區分能力,中文的斷詞表現真的挺差的
- 能夠透過模組化、視覺化、No-code 的方式進行資料的整理、分析,是 Orange 工具的特色及強項,但對於使用中文的我們來說,或許更適合用它來處理純數字的分析及視覺化工作
透過 ChatGPT + Colab 進行潛在語意分析法之步驟

透過 ChatGPT + Colab 進行潛在語意分析法
關於這個部分,因為大家資料及分析目的、方式都有所差異,我就以自身例子去說明整個流程,並著重在如何能夠更順暢的進行 ChatGPT + Colab 協作心得。
首先,在進入 ChatGPT 產 Code 之前,強烈建議大家先弄懂自己的資料屬性及分析具體的框架、流程、素材分別需要什麼,再依照具體的需求及步驟,分別請 ChatGPT 產出 Code,以及關於 Prompts 的建議,主要有以下幾點:
- 不要直接要求 ChatGPT 產出進行「潛在語意分析」的 Code:這樣絕對會完蛋,它可能不確定自己在幹嘛,你也會不知道它在幹麼
- 自己釐清好步驟後,再請它區分成一個步驟、一個步驟的 Code
- 要求它每一行 Code 後面都加中文備註說明它做了什麼,且你一定要檢查每一行 Code (的備註):避免它自己幻想一些你的需求,可能是多餘的、可能是不必要的內容。
- 要求清楚讀取的檔名、欄位、輸出的檔名、檔名存取的位置:真的非常重要
第0步:整理好你的文件 + 釐清研究方法
整理好文件是什麼意思呢?若你是要將文本彙整在同一個 Excel 中的,那麼請確定要讀取的「欄位名稱」。
以及,該標註的內容要記得先做好標註,例如,你可能不但訪談多位訪談者,還有不同的訪談區塊,如果你之後要進行這部分的分析,那麼你就要先將他們區分到不同欄位。
若是多個文檔的資料,可能就要注意資料夾區分的層級,以及每個檔案的檔名都要設定好,以利後續分析時可容易抓取、讀取。
再來就是一定一定一定 (因為很重要講三次),先釐清自己進行分析方法的步驟,再去要求 ChatGPT 產出 code,否則你將進入重新改程式碼的無限循環中。因為每一次因為一點更動,或少做了一些規範,就要重新改一部份的程式碼,然後全部再重新跑一次,其實非常耗費時間。
因此建議,不論是透過看論文、爬文、還是問教授,建議找到自己預期進行分析的方式,有個框架後再著手處理執行研究的部分。
要如何用程式執行潛在語意分析,中文的部分,我認為這部 YT 影片對我來說算是挺有收穫的:https://youtu.be/jKiipNZqBVQ?si=_8A7mKCJ7pIcuWEo
或參考上述介紹透過 Orange,實際跑一次流程,提升對於潛在語意分析方法確切該如何執行的概念。 以下將進入一步步請求 ChatGPT 產出程式碼的基本流程,我不會提供、也不會太細節講每個細節,這是沒有必要的,因為每個人的資料都長得不一樣,要分析的內容也不太一樣,但我可以提供一個比較不會出錯的大方向,讓大家可以一步步完成。
第1步:將文本進行「斷詞」,透過開源 jieba 中文斷詞工具
在大家完成第0步之後,就要來進行文本的切分,也就是「斷詞」。可直接透過 jieba 這個斷詞工具 (有支援中文斷詞) 進行斷詞。
並且,除了基本的斷詞外,你還會需要進行一些額外的描述,像是我的文本內容會有「晶晶體」(中英文混雜) 的情況,所以除了中文的斷詞外,我可能也需要進行英文的斷詞。
所以你提供的 Prompts 可能大概會長這樣,定義好需求、檔名及欄位,可大幅減少錯誤率,重要的是,再透過每行的中文備註,檢查程式的邏輯有無缺漏:
我需要進行潛在語意分析,我要請你幫我在 Colab 上可執行的程式碼,請在每行程式碼後標註中文說明。並且一步步釐清我的需求,再提供程式碼給我。
我的文件為檔名是AAA,以及文件標籤的欄位為BB、內文標籤為CC,請將欄位CC的部分透過 jieba 進行斷詞,並幫我去除主詞、介係詞、常見停用詞、...,以及同時幫我進行中英文的斷詞,以及請將所有英文轉為小寫...
最後請輸出 CSV 檔給我,並透過空格將文本進行區隔,並保留BB欄位,並將斷詞後的文本詞語填入欄位FF;再輸出所有的詞語成為一個表,輸出檔名為GG。
第2步:將詞語進行「二次篩選」,去除無意義詞語 + 合併同義詞彙
如果你研究比較嚴謹的話,通常還會需要再進行「詞語」的二次篩選,這也是上述最後一步要請它輸出一個詞語表的原因。
透過詞語表人工再標記要保留以及不要保留的詞彙,標註後再上傳透過程式碼進行二次篩選;同時,也可將第一時間忽略,但實際上是同一個意思的詞語一併補充、修正,例如:
將DDDDDD及DDDD都轉換為DD、將EEEEEE及EEEE都轉換為EE、將臉書、fb都轉換為facebook...
但要不要做這個步驟,我個人認為但看資料大小及研究者的量能,要追求研究的嚴謹性,一定透過人工標記、補充最為準確,但這部分可能會耗費相當大的精力。
這個步驟,你的 Prompts 可能是:
根據我提供的表單HH (基於上述的 GG 表單進行二次標註的詞語),再進行一次詞語的刪減;並根據我提供的表單 FF,將詞彙進行整併...
第3步:進行 TF-IDF 詞頻計算,輸出 "文件" x "所有詞語" 的表格
接著到我認為到一個看似黑箱但其實可以避免黑箱的環節。
首先,你要先釐清詞頻到底是如何計算,以及相關的參數有什麼,細節可以去找 TF-IDF 的內容閱讀,具體的要求它要產出的內容,並提供相關計算方式及參數,如上面在介紹 使用 Orange 工具,提到要選擇 IDF 還是 Smooth IDF、Relative 的值的區間等參數。
一切都看清楚之後,再提供參數及計算方式去請它寫程式碼比較不會出錯,這樣也才算交代清楚這個分析到底是怎麼樣去執行的,才是一個可以複製的實驗。
給 ChatGPT 的 prompts 大概是:
請你先細緻的釐清我要進行 TF-IDF 分析的各種參數為何,釐清完後,再提供我完整的程式碼,我目前想到的計算設定包含:
1. TF 詞頻的計算方式以 SUBLINEAR
2. IDF 計算方式以 smooth IDF 方式進行
3. 分析時,我想省去避免頻率太低詞語的計算,也不想被廣泛出現的詞語影響太多,因此,我想要規範 Relative 的值:0.1 - 0.9
4. 還有其他需要考量的參數內容,請和我確認後再產出程式碼
第4步:選擇 N 個潛在主題(透過 SVD 矩陣降維)
(這個數學意義的部分我還是有些看不懂,如果真的有興趣它為什麼要這樣做,可以參考別人的文章喔)
再來,就要準備進入到分析的部分,在上一個步驟你已經獲得所有文件與詞語頻率的大表,接著就是根據你的需求,選定 N 個主題,進行主題分析。若你最後決定 10 個主題來進行分析,就是將資料內容降低成 10 維來進行分析。
選定 N 個主題是基於研究的需求,而 SVD 是實現這個需求的計算方式。
給 ChatGPT 的 prompts 大概是:
接下來我要進行 SVD 降維處理,預計降成 N 維,可將 N 設為我可調整的參數,以便我之後可以直接透過修改程式碼,進行我需要的分析維度。
至於到底要降成幾維,這個部分可能就要參考你的資料量的大小,以及你的分析需求去自行客製化調配,建議可以去找類似的研究去進行比較。也會讓自己更清楚這個部分是為了什麼。
第5步:基於分析的 N 維潛在主題,進行分析
做完這個步驟後,你就會獲得你設定的 N 個主題 (還沒有被賦予意義的),接著你就可以依據自己的需求去進行三種分析:
- 文本與文本的分析:看到哪些文件因為語意相似而聚在一起
- 詞語與詞語的分析:找到語意相近的詞
- 主題解釋(LSA 潛在語意分析):對每個主題維度,找出權重 (weight)最高的詞語
而潛在語意分析就是基於被計算 N 個主題,列出權重最高的 M 個詞彙,進行語意的詮釋,我自己研究時是取每一個主題的前 10 個權重最高的詞語,但這個部分可能要依據資料量大小去評估。
給 ChatGPT 的 prompts 大概是:
最後,基於上述整理的資料,我需要進行 "XXX" (例如:Topic Modeling) 分析,每一個主題請列出 10 個權重最高的詞語,並透過程式碼進行顯示,以利進行分析
上述是主題分析的示範,如果你要出別種分析或比較也 OK,但原則上就是要進行什麼分析要說清楚,然後如果需要視覺化呈現,也要記得定義好數值構成的軸的內容及顯示方式,而不能只空泛的叫它分析,它可能會給一些看起來好像有用,但實際上不一定有用的東西。
結論
這不算是一篇太嚴謹的文章,請把這篇文章當作我的學習筆記,建議不要完全相信我說的,就當作參考內容進行閱讀。
自己在摸索要如何進行「潛在語意分析」時,花了挺多時間在網路上找資料,當然有問 ChatGPT、有看 Medium 的文章、也有看 YouTube ,還看了一些論文,因為第一次用 Orange ,所以也看了 Orange 的教學影片 (也有提到潛在語意分析法的部分喔)。
但大部分的資訊覺得還是偏雜亂,且中文內容覺得也比較缺乏,所以自己就嘗試把我所知的記錄下來,希望對於有相同需求的人有所幫助。
最後,如果有專業人士發現我說明的內容有任何錯誤,或認為可以補充的地方,歡迎在留言區回覆,或直接寄我的 email 告知,如果可以的話,請一定要糾正我。




















