知識庫視覺化 —— 總表

四份產物、四條關係。上半決定開哪一份、哪條邊能信; 下半是它們背後的依據 —— 為什麼這座知識庫需要圖,而不是只靠全文搜尋。

建立 | 語料 篇 · 個來源目錄(當場數的,見 /)| 重畫:python3 tools/knowledge-base/refresh.py --skip-crawl

四份產物,各自答什麼

四份不重疊 —— 翻語料開第一份,看整體關係開第二份, 看課程落差與法條鏈只有第三份有, 追一個東西「連到什麼、依據是什麼」開第四份。

語料瀏覽器

資料分布.html

三欄式:左邊挑條件、中間看清單、右邊讀內文。要「翻語料」就開這一份。

  • 某個主題我們有幾篇?來源/型態/年份/分類四個面向交叉篩
  • 這篇到底寫什麼?右欄內嵌前段內文+原文連結
  • 等級 A/B/C 掛在資料型態上(同一個網站會同時產 A 和 C)
開啟 語料瀏覽器 →

關係總覽

關係圖-總覽.html

一張網看完四種實體怎麼互相連。要問「這個主題牽到誰」就開這一份。

  • 主題 × 主題共現:哪兩個主題總是一起出現
  • 來源 → 主題講師 → 主題:誰在產什麼、誰教什麼
  • 問題類別 → 主題:七類問題各自靠哪些主題答
開啟 關係總覽 →

關係圖(五節)

關係圖.html

五節細節。第三、五節總覽沒有 —— 要看課程落差或法條鏈只能開這一份。

  • 第三節 課程落差:同一套主題詞彙同時量自家與同業,差集就是缺口
  • 第五節 裁罰 → 法條 → 主題 → 課:每部法實際被引的是哪幾條
  • 另有概念總覽、來源→主題←法規、講師→主題
開啟 關係圖(五節) →

屬性圖

屬性圖.html

追一個東西:它連到什麼、依據是什麼、那個依據信不信得過。 節點與邊都帶著自己的屬性與出處。

  • 十個標籤十二種關係,每條標等級 A 抄欄位/B 從文字抽/C 推導或未經查證(C 級一律虛線)
  • 起手是「集合」不是實例:一疊圖形=一整類節點;選一個實例才展開鄰域,畫布最多三欄,其餘收成籤
  • 不硬截斷:一律寫「1–12/1,448」並可再顯示下一批 —— 被截掉的叫得出來
開啟 屬性圖 →

四條關係,哪幾條能信

同一張圖上的邊,可信度差很多。下面每一格的覆蓋數字都是這次當場數的; 兩條標「清理後再用」的,問題寫在它自己下面。 判準:一條邊如果想不出「哪個問題會走過它」,那它就是裝飾 —— 圖的價值來自路徑,不是節點數。

主題主題

① 主題 × 主題

每篇的 category 兩兩共現。這批資料是 multi-label, 共現本身就是邊,不需要任何推論。

可用 —— 不需前置清理
問題內容

② 問題 × 內容

驗收題庫.md 的七類 × 來源對照表 —— 那是人工標註, 不必重標,直接讀進來畫。

可用 —— 標註已現成
講師課程分類

③ 講師 × 分類

x_instructor × x_product_categories。 「分類」是 TFF 官網的商品架構,一門課可以掛好幾個

可用 —— 2026-08-18 修好
已修掉的陷阱:這個欄位曾經只反映設定檔的排列順序舊版叫 x_primary_category,爬蟲去重時「先看到的先留」,所以一門掛在多個分類底下的課 只會記到yaml 裡排最前面的那一個。2026-08-18 實測:宣告 20 個分類、語料只出現 6 個, 畫出來會得到「沒有人教信託、沒有人教資安」——那是假的,而且不會有任何地方報錯
講師主題

④ 講師 × 主題

講師取自 講師名單.csv(每位指得回課號), 主題取自該課的 category

只認名單,不重抽
陷阱二:原始欄位裡數量最大的那一筆不是人x_instructor 篇、 個不同字串,出現最多的是「 篇 —— 那是機構代稱。直接當節點,圖上最粗的線會是一個 不存在的人,還會連到最多主題。所以一律以 講師名單.csv 位)為準。

為什麼需要圖 —— 全文搜尋失手的三種問題

三種都是同一個病:答案所在的那一篇,不含問題裡的字。 關係圖只做這一件搜尋做不到的事 —— 把字面不重疊、但語意相連的兩端接起來。 所以建圖是從問題倒推,不是從資料正推:先挑一個真的被問過的問題, 寫出答案要走的那條路徑,路徑上每一段才是一種邊。

「這則新裁罰該開什麼課?」

裁處書寫的是法律語言(侵占要保人繳納之保險費),課名寫的是 市場語言(業務員挪用保費)—— 全文搜尋交集是零。

裁罰 →(引用)→ 法條 →(標記)→ 主題 →(標記)→ 課

「同業有開、我們沒開的是什麼?」

這不是「找一篇」,是兩個集合相減 —— 全文搜尋沒有這個運算。

主題 ←(標記)← 同業課 / 主題 ←(標記)← 自家課,取差集

「這個主題找誰講?」

講師的名字不會出現在他該講的那篇語料裡 —— 他在課程頁,主題在裁罰書。

主題 ←(標記)← 課 →(授課)→ 講師

1取近期裁罰fsc_penalty近 90 天的篇2走到主題沿「標記」邊→ 一組 category3反向找自家課沿「標記」邊→ 我們有課的主題4相減第 2 步 − 第 3 步→ 缺口主題5找講師沿「授課」邊→ 找誰來上跨語彙:裁處書的字 → 課名的字集合運算 + 跨型態跳躍每一步都留著走過的 doc_id,輸出時附上 —— 路徑本身就是出處

以第一種問題為例,查詢就是「走五步」。第 2–3 步做的是跨語彙, 第 4 步做的是集合運算,第 5 步做的是跨型態跳躍(文件 → 人)—— 這三件事全文搜尋一件都做不到。

資料體檢

畫圖之前先看資料撐不撐得住。這一節的每個數字都現算,重跑就更新。

受控主題 —— 個,全語料都有

單位是標籤次數不是篇數( 篇掛了 2 個以上分類,相加會大於 )。「一般」 篇是個警訊 —— 那一格說明詞彙可能分得太粗。

裁罰 → 法條 → 主題 → 課

第三份產物第五節那條鏈的骨架。

兩條原本設計裡的邊實測建不起來,照實說: ① 法條 →(教到)→ 課 —— 課程內文一篇都沒有引用條號 (自家 、同業 皆為 0),改走主題當中介。 ② 新法規 →(定義)→ 法條 —— fsc_newlaw 篇裡只有 篇、 fsc_noticelaw 篇裡 0 篇寫得出條號。 另剔掉 條樣板法條()—— 那是裁罰書結尾的救濟教示,不是這件裁罰在講的事。

承辦人真的問過的問題 —— 七類

來源 。 語料答得了 題、部分 題、 答不了 題 —— 答得了的是少數,這一格就是它的證據。

講師 —— 三層,不要混用

推薦給客戶的名字只能出自最上面那一層。

逐筆提及 筆 —— 這一列不畫條: 單位是「提及次數」不是人數,跟上面三列不同尺度,畫在一起會被讀成「人最多的一層」。

已確認講師名單.csv,每位指得回課號,可以拿去邀約。 線索/待確認=從 podcast 與 YouTube 抽出來的,未經查證, 只能當探索起點。逐筆提及是一列一個「提及」不是一列一個人 —— 出處不能被彙總掉。