# 章節包:自然語言處理(NLP)W2(9/17)第 07 章「課堂提問與 BM25」
影片 2:16:39–2:29:52,YouTube ID MnA5KUETSg4。Notion 章節頁 https://app.notion.com/p/3e6fc631b030819ca51ee21869f5c86d(頁 ID 3e6fc631-b030-819c-a51e-e21869f5c86d),頁面標題「07 課堂提問與 BM25(2:16–2:29)」。
## 1. 第一行(直接照抄,不要改)
[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W2(9/17)](https://app.notion.com/p/3e6fc631b03081a18b13fad72a8874fd) › 07|影片 [2:16:39–2:29:52](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8199s)|投影片 W1_NLP_brief_v2 p.48–53(口頭提到 p.94)|上一章 [06 向量空間模型與 TF-IDF(1:48–2:07)](https://app.notion.com/p/3e6fc631b0308121891cc1705fe5be4a)|下一章 [08 從詞袋到詞向量(2:29–2:59)](https://app.notion.com/p/3e6fc631b03081b1aab8f5c4fc716850)
## 1b. 最後一行(直接照抄,放在 Self-check 後面,當全頁最後一行)
讀完了嗎?下一章:[08 從詞袋到詞向量(2:29–2:59)](https://app.notion.com/p/3e6fc631b03081b1aab8f5c4fc716850)|回到週頁:[W2(9/17)](https://app.notion.com/p/3e6fc631b03081a18b13fad72a8874fd)
## 2. 各段標題(照順序;每段一個 ## 標題,直接照抄連結)
- `## [2:16:39](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8199s) 回頭看向量空間的例子` 老師講什麼:詞表只有三個字時,每篇文件就是三維空間裡由 0 和 1 組成的向量。詞表可以從文件裡自己累積,也可以直接用現成的三萬字常用字典。2:18:33 左右畫面可能沒抓到。
- `## [2:20:24](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8424s) 提問:inverted index 和 index 差在哪` 老師講什麼:技術上就是資料庫的索引。概念上是反過來:不是記「這篇文章有哪些字」,而是記「這個字出現在哪些文章」。
- `## [2:21:28](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8488s) 提問:字幕與 TF-IDF 要懂到哪` 老師講什麼:YouTube 自動字幕可能會怪怪的。p.52 看不懂沒關係,但要知道 TF 是算字在一篇文章出現幾次,IDF 是算字出現在多少篇文件。
- `## [2:22:47](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8567s) 權重變形是經驗法則` 老師講什麼:各種變形是為了配合文章長短、字詞分佈。老師用期末調分來比喻壓縮分數範圍:排序不變,但分數擠在一起、比較難區分。公式不用記,會活用就好。
- `## [2:24:45](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8685s) BM25` 老師講什麼:BM25(Best Matching 25)是非常強的 baseline,向量資料庫公司的老闆也這麼說。它算文件和查詢有多像,參數設 k=2、b=0.75,在多數應用都好用。
- `## [2:27:05](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8825s) BM25 和 TF-IDF 差在哪` 老師講什麼:TF-IDF 描述單一文件向量的權重;BM25 則用變形的 TF-IDF 算兩者之間的相似度。它屬於稀疏向量,和 BERT 這類模型產生的稠密向量(通常不超過 1000 維)不同。公式不用背。
## 3. 老師強調/會考/不考的地方(原句已驗證;寫進筆記時 ASR 錯字要改正)
- (2:22:04) [強調] 「但是你要知道你要知道TF是這個算出現次數算它在一篇文章中出現的次數」 → TF 和 IDF 的概念要懂
- (2:24:31) [不考] 「那的確這個公式不用去記不太需要去記你大概就是活用」 → TF-IDF 變形公式不用背(老師說的是不用記,沒有明說不考)
- (2:24:46) [強調] 「搞不好這一頁還比較重要就是BM25BM25其實是一個非常強的一個Base Line」 → BM25 是很強的 baseline
- (2:28:40) [不考] 「這是BM25其實你也不用記公式」 → BM25 公式不用背(老師說的是不用記,沒有明說不考)
## 4. 這章摘要與重要度
先回答課堂提問(向量空間、反向索引、TF-IDF 要懂到哪),再介紹 BM25:一個用進階版 TF-IDF 算相似度的演算法,到現在仍是很強的 baseline。(核心)
## 5. 整堂課的提醒(ASR 錯字、老師口誤、投影片缺公式等;只用跟這章有關的)
- 老師 0:04:39 才開始講課,前面約 4 分半逐字稿沒有內容。
- 兩次下課:0:58:52–1:08:43、2:07:15–2:16:39。
- 2:18:33–2:19:11 逐字稿有約 40 秒空白,老師說「沒有抓到畫面」,2:20:21 又問「現在投影是對的吧」。這段錄影可能暫時沒拍到投影片(沒看影片,不確定)。
- 本週投影片是 W1_NLP_brief_v2.pdf(檔名的 W1 不等於上課週),實際講的範圍是 p.3–64;p.2 目錄老師說跳過。
- 投影片起點和已知事實不同:已知事實寫從 p.5 開始,但老師 0:07:25 說跳過 p.2 目錄,接著簡短講了 p.3(以前和現在做法差別的圖),0:09:31 講 p.4「What is NLP」。所以實際範圍是 p.3–64。
- 舊筆記(Notion 封存頁)記的時間和本逐字稿差約 1 分鐘。舊筆記寫下課 0:57:28、2:06:15,續課 1:09:37;本逐字稿是 0:58:52 下課、1:08:43 續課、2:07:15 下課、2:16:39 續課。這份計畫以本逐字稿為準。舊筆記寫的投影片檔是 W1_NLP_brief.pdf,不是 v2。
- 音檔長度 2:59:56,YouTube 是 3:00:07,差 11 秒。逐字稿時間和 YouTube 播放時間有沒有對齊,我沒有逐一驗證(不確定)。
- 2:18:33–2:19:11 逐字稿有約 40 秒空白,老師說「沒有抓到畫面」,這段錄影可能沒拍到投影片(不確定)。
- 2:24:56 老師說 BM25 的引言在「這一份投影片的最後一頁」,實際是 p.94(p.95 是 Summary),而且不在本週講的範圍。
- p.19 是 AI 仿作的《詩師食獅史》(同音字例子)。Strawberry 那段(0:39:43)沒有對應的投影片。
- 有 4 則 emphasis 標成「不考」,但老師原話是「公式不用記」(2:24:31、2:28:40)或「不會提到 GloVe」(2:58:06),不是明說「不考」。寫章節時建議用「老師說不用背/不講」,不要寫成【老師說不考】。
- 第 4 章(約 12 分鐘)和第 7 章(約 13 分鐘)比 15 分鐘短一點。因為兩章都緊貼下課分界,主題也各自獨立,所以沒有併章。
- 逐字稿常見的語音辨識錯字(引用時要改成正確寫法,也可以補進 fix_transcript 的錯字表):小平→小冰、Crystal→Chris(Manning)、STARBOARD→stop words、Wall Embedding/World Embedded→word embedding、World Reputation→word representation、構制學→構詞學、磁→詞、One-Half/One Heart→one-hot、Palsymy→Polysemy、RuCode→recall、O2Bect→word2vec、Bangio→Bengio、imprtindex/Import index→inverted index、Portal→Porter、REG→RAG、Patch rank→PageRank、Uptractive→Abstractive、Passing Tree→parsing tree、WSA→WSD、Tornazion→Tokenization、三國字→三國志、宇步→呂布、Facial Splash→feature space。1:37:48 的「Lesson」可能是 lexical processing(不確定);0:34:4x 的「VirusDM」推測是某種機率模型,可能是 HMM(不確定),所以 NER 那段我只寫 CRF。
## 6. 投影片文字(這章範圍)
**這幾頁的公式或內容只在圖裡(文字檔抓不到),寫 Exam-ready 與公式前先用 Read 看這幾張圖:**
- W1_NLP_brief p.48 → C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\brief_W1_NLP_brief_p048.png
- W1_NLP_brief p.49 → C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\brief_W1_NLP_brief_p049.png
- W1_NLP_brief p.50 → C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\brief_W1_NLP_brief_p050.png
- W1_NLP_brief p.51 → C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\brief_W1_NLP_brief_p051.png
--- W1_NLP_brief p.48 ---
Document Representation: Vector-space Model
48
Text documents are mapped to a high-dimensional vector
space
Each document d
◦represented as a sequence of terms (t)
◦d = ((1), (2), (3), …, (|d|))
1, 2 and 3 are terms in document, x and xare
document vectors
Vector-space representations are sparse, |V| >> |d| (the
number of distinct terms in any single document)
--- W1_NLP_brief p.49 ---
Term frequency (TF)
A term that appears many times within a document is likely
to be more important than a term that appears only once
nij - Number of occurrences of a term j in a document di
Term frequency
i
ij
d
n
TFij =
49
--- W1_NLP_brief p.50 ---
Inverse document frequency (IDF)
A term that occurs in a few documents is likely to be a better
discriminator than a term that appears in most or all
documents
nj - Number of documents which contain the term j
n - total number of documents in the set
Inverse document frequency
j
j
n
n
IDF
log
=
50
absolute measure of
term importance
A theoretical justification of IDF, Papineni 2001
--- W1_NLP_brief p.51 ---
Document Similarity
51
Ranks documents by measuring the similarity between each document and the query
Similarity between two documents d and dis a function s(d, d)R
In a vector-space representation the cosine coefficient of two document vectors is a measure of
similarity
'
'
')
,
cos(
x
x
x
x
x
x
T
=
O (|d| + |d’|)
Cosine similarity vs. dot product
--- W1_NLP_brief p.52 ---
tf-idf weighting has many variants
52
Columns headed ‘n’ are acronyms for weight schemes.
Many search engines allow for different weightings
for queries v.s. documents
ltn.lnc ?
--- W1_NLP_brief p.53 ---
BM25 (Best Matching 25)
Okapi BM25 (1980s)
◦A ranking function used by search engines to rank matching documents according to their
relevance to a given query.
BM11, BM15
k, b are free parameters
generally k=2, b=0.75
Alternative (improved) TF-IDF
--- W1_NLP_brief p.94 ---
37 Things I Learned About Information Retrieval
in Two Years at a Vector Database Company
BM25 is a strong baseline for search
MTEB (Massive Text Embedding Benchmark, https://huggingface.co/spaces/mteb/leaderboard)
contextual embeddings (e.g., BERT), vs. static embeddings (e.g., Word2Vec, GloVe).
768 dimensions vs. 1536 dimensions
Similar does not necessarily mean relevant.
“How to fix a faucet” and “Where to buy a kitchen faucet”
keyword-based search vs. vector-based search
Vector search is not robust to typos
Out-of-domain is not the same as out-of-vocabulary
Information retrieval is so hot right now!
94
https://www.leoniemonigatti.com/blog/what_i_learned.html
https://weaviate.io/
## 7. 逐字稿(2:16:39 前後各多 1 分鐘,原始行)
[02:16:39] 我們繼續喔
[02:16:40] 剛才slide上有同學問一些問題
[02:16:43] 那
[02:16:44] 因為
[02:16:45] 這個space model
[02:16:49] 基本上
[02:16:50] 蠻
[02:16:51] 古老的蠻基本不過我可能要講的比較快一點這樣子
[02:16:55] 那我們再
[02:16:56] 從這邊看這個圖啦這個圖你可以想像就是說
[02:17:01] 我現在的vocabulary就是3
[02:17:03] 就是三個字
[02:17:04] W1 W2 W3
[02:17:06] 我的字典就是三個字
[02:17:07] 所以我每一篇的文章
[02:17:10] 它就是一個
[02:17:12] 在這三維空間的一個向量
[02:17:14] 所謂三維空間就是
[02:17:15] 這個字有出現
[02:17:17] W1有出現就是1
[02:17:19] 沒有就是0
[02:17:20] 這樣子
[02:17:20] 所以
[02:17:22] 如果在一個我們可視的這種
[02:17:24] 三維空間裡面去表示的話
[02:17:27] 它就是一個Vocabulary size為3
[02:17:29] 的一個向量
[02:17:31] 然後
[02:17:32] 它上面就是010啊100這樣子有出現這個字就是1沒有就是0這樣子
[02:17:37] 這個向量
[02:17:38] 那為什麼叫做space呢
[02:17:40] 因為
[02:17:40] 我們這個字典通常很大
[02:17:42] 通常很大就是
[02:17:47] 這個字典我們做出來之後其實你會發現我們
[02:17:53] 文章一直進來我們一直
[02:17:54] Parse出來的字就會一直累積在這個
[02:17:57] 這個Table裡面
[02:17:58] 雖然它只是
[02:18:00] 一個
[02:18:00] Index的頭
[02:18:02] 但是基本上我們可以對應出
[02:18:04] 所有的Vocabulary的東西雖然這個它可能有STEMI或是
[02:18:08] 其他Limitation處理過的東西不過基本上它的Size就跟Vocabulary差不多
[02:18:14] 這個字這個Table處理完我們可以把它
[02:18:17] 固定在一個範圍
[02:18:19] 裡面當然就是說
[02:18:20] 不見得是這麼固定或是說你可以拿現成人家已經做好的
[02:18:25] 這種標準常用字三萬個字的字典
[02:18:29] 然後建法在那裡
[02:18:33] 我來一本
[02:18:43] 沒有抓到畫面
[02:19:11] ,對吧
[02:19:15] 現在
[02:19:16] 現在就是可以
[02:19:17] 可以動就不要再去動它
[02:19:21] 反正
[02:19:23] 這個字典
[02:19:24] 其實
[02:19:26] 當然如果你是一個空的
[02:19:28] 你就會從一堆的Document進來之後Parse完就建立出你的Vocabulary
[02:19:34] 所以你自己應用可以建立出你自己的Vocabulary沒錯
[02:19:37] 但是我們通常會拿一個已經人家做了常用字
[02:19:41] 的一個字典
[02:19:42] 三萬個字的字典
[02:19:44] 來做這件事情
[02:19:45] 沒什麼差別一個是自己建一個是
[02:19:48] 一個是標準用的用法這樣子
[02:19:50] 因為這個字典三萬個字你可以想像
[02:19:53] 你當初在做這個
[02:19:57] 當初在做這個Vector的時候你一篇文章可能就20個
[02:20:01] 相異字
[02:20:03] 所以三萬個字
[02:20:04] 這個是三萬
[02:20:06] 這個只有20個字當然是個係數
[02:20:09] 就是一個項量有三萬個長度的項量裡面只有20個是1其他都是0
[02:20:15] 就是一個Parse的概念這樣子
[02:20:18] OK
[02:20:19] 這樣應該
[02:20:21] 現在投影是對的吧
[02:20:24] 那至於有同學問說imprtindex跟index差別是什麼
[02:20:28] 其實
[02:20:29] imprtindex比較是一個
[02:20:36] 他的概念
[02:20:37] 就是我現在是
[02:20:38] 反著去索引我不是索引
[02:20:41] 這個文章中的
[02:20:43] 字
[02:20:44] 形式方向而已啊
[02:20:46] 就是我不是索引這個文章
[02:20:48] 有哪些字這樣子
[02:20:50] 而是這些字出現在哪些文章
[02:20:53] 這當初為什麼叫imprtindex的概念
[02:20:56] 但是你會覺得說
[02:20:57] Database index不就是這樣嗎
[02:21:00] 沒錯如果你真的以
[02:21:02] 技術來講你的索引其實就是建這個東西
[02:21:06] 但是如果以概念上來講我會想說那我建索引
[02:21:10] 這篇文章有哪些字你可以告訴我
[02:21:12] 就這篇文章的字有哪些
[02:21:15] 但是我現在是反向
[02:21:16] 所以我的pointer是指回來的
[02:21:18] 所以當初為什麼叫imprtindex的概念其實是這樣
[02:21:24] 好謝謝同學的提問
[02:21:28] 有同學問有沒有字幕啦那好像YouTube自動可以打上字幕
[02:21:33] 不過我通常回看以前我的影片好像
[02:21:37] 老師的發音不太標準那個字幕有時候怪怪的
[02:21:40] 不過你大概就
[02:21:42] 自己
[02:21:42] 自己理解一下
[02:21:44] 我念的東西這樣
[02:21:46] 好那有同學說
[02:21:51] 要不要教材不然都看不懂
[02:21:54] 然後有同學回說這一頁看不懂沒有關係
[02:21:59] 的確是沒有什麼太大關係
[02:22:02] 那
[02:22:04] 但是你要知道你要知道TF
[02:22:06] 是這個
[02:22:08] 算出現次數算它在一篇文章中出現的次數
[02:22:13] IDF是在算
[02:22:15] 它在整個dataset裡面
[02:22:17] 所出現的document次數的一個reversed
[02:22:21] inverse的一個term
[02:22:23] 你要知道這個概念
[02:22:25] 只是說這個概念的演算法
[02:22:27] 有很多種變形
[02:22:30] 為什麼要這麼多種變形
[02:22:32] 就是適應在你的應用上去做的變形
[02:22:36] 有可能是因為你的
[02:22:38] 文章大小不一樣啊或是你的字詞的分佈
[02:22:42] 不太一樣啊
[02:22:44] 所以才需要做一點這樣的調整
[02:22:47] 至於哪一種調整哪一種適應你的
[02:22:51] 通常就是
[02:22:52] 暴力法都是
[02:22:54] 組合一下或是你自己看一下你的自己的分佈大家就知道
[02:22:57] 要怎麼做這樣子
[02:23:00] 這些
[02:23:01] 說實在沒有什麼道理
[02:23:03] 沒有什麼
[02:23:04] 可以推導出來的證明
[02:23:06] 只是一般我們在設計權重的時候的一種經驗法則
[02:23:11] 但這些經驗法則其實是有些是
[02:23:14] 有一些
[02:23:16] 道理可循
[02:23:17] 又有道理就像我剛才講的這個
[02:23:20] 就是
[02:23:21] 就是他把
[02:23:22] 我的這個TF本來是一個從0到1的變化量
[02:23:26] 壓縮到0.5到1的變化量
[02:23:31] 為什麼我這麼熟呢
[02:23:33] 每次期末在調班上成績的時候就要做這件事情
[02:23:37] 就是有些人考的低分那個只有
[02:23:40] 只有10分
[02:23:42] 他
[02:23:42] 100分的一堆
[02:23:44] 怎麼辦
[02:23:45] Normalize一下從10開始
[02:23:48] 就是這樣做的
[02:23:49] 最簡單的做法就是這樣做
[02:23:52] 就是把
[02:23:53] 數值的分佈做Compression
[02:23:56] 但是
[02:23:57] 他的排序還是一樣的
[02:23:59] 只是數字的大小不一樣
[02:24:03] OK
[02:24:04] 但是呢這樣的壞處是什麼
[02:24:07] 本來你的數字的分佈是0到1
[02:24:10] 他的敏感度其實是比較
[02:24:12] 比較大
[02:24:12] 但是你等於是
[02:24:14] 前面都沒有啊0.5前面都沒有都壓到0.5到1
[02:24:18] 所以後面就會比較
[02:24:20] 大家比較擠一點
[02:24:21] 那個鑒比
[02:24:22] 解析就比較差一點
[02:24:24] 但是如果
[02:24:25] 這個是你要的那其實就就沒有關係
[02:24:29] 好
[02:24:31] 那的確這個公式不用去記
[02:24:33] 不太需要去記
[02:24:34] 你大概就是活用
[02:24:37] 不用記怎麼活用
[02:24:41] 我好像不能碎念
[02:24:45] 那我們來看一下
[02:24:46] 搞不好這一頁還比較重要
[02:24:48] 就是BM25
[02:24:50] BM25其實是一個非常
[02:24:53] 強的
[02:24:54] 一個Base Line
[02:24:56] 如果你不相信你可以翻到這一份投影片的最後一頁
[02:25:00] 有一個
[02:25:01] 應該是去年前年的一個
[02:25:04] 做向量資料庫的一家公司的老闆講的話BM25
[02:25:08] 還是非常好用的
[02:25:11] 他是一個非常古老的東西啊你看這個年份
[02:25:14] 這個
[02:25:16] 非常古老那BM
[02:25:18] 是什麼呢
[02:25:19] Base Matching
[02:25:21] 那25呢
[02:25:22] 25就是裡面的參數
[02:25:24] 的東西
[02:25:25] 那我們現在不管
[02:25:28] 他是什麼啦反正
[02:25:29] 你看一下他在算什麼東西
[02:25:32] 他在算我的Document
[02:25:35] 跟Query
[02:25:36] 的Score
[02:25:37] 其實就是
[02:25:39] 兩個句子
[02:25:40] 或是兩篇文章的
[02:25:41] 分數
[02:25:42] 有多像
[02:25:43] 一樣在算相似度
[02:25:46] 那我們剛才前面算的相似度是什麼
[02:25:49] 反正
[02:25:49] Document跟Query都可以把它變成TFIDF的向量
[02:25:54] 那我就可以算TFIDF向量cosine
[02:25:57] 那你可以仔細看一下這個公式
[02:25:59] 看起來很複雜很多說但基本上他就是在算兩個TFIDF的
[02:26:06] cosine的東西只是他有些東西
[02:26:09] 把它
[02:26:10] Normalize的
[02:26:10] 不見的有些東西把它化解了或是把它變複雜
[02:26:15] 所以他其實你可以想像BM25就是一個
[02:26:19] 複雜版的
[02:26:20] TFIDF的表示的
[02:26:22] 這種相似度
[02:26:24] 的計算過程
[02:26:25] 那為什麼叫TFIDF呢
[02:26:27] 因為它裡面有一些參數
[02:26:29] K跟B的參數
[02:26:33] 那K跟B的參數呢在以前
[02:26:35] 這些Paper的實驗裡面
[02:26:39] 發現K設2
[02:26:40] B設0.75
[02:26:42] 是最好的這樣子
[02:26:44] 他設一設發現
[02:26:45] 這個在
[02:26:47] 大多數的應用呢
[02:26:49] 用這樣的演算法其實效果都不錯
[02:26:52] 所以他就變成
[02:26:53] 這個B
[02:26:54] BM系列的老大這樣子
[02:26:56] 所以大家提到
[02:26:57] 就是BM25
[02:26:58] 其實基本上就是
[02:26:59] 就是TFIDF的
[02:27:02] 的進階版
[02:27:05] 我這樣講可能有一點誤導
[02:27:07] 因為TFIDF只是用來描述
[02:27:11] Document Vector的一個權重的描述方式
[02:27:14] 他是描述
[02:27:15] 單一向量的描述方式
[02:27:17] 那BM25是在算相似度的演算法
[02:27:21] 所以他是算兩個向量之間的相似度的演算法
[02:27:24] 但是他其實是變形的TFIDF
[02:27:27] 然後他的內積的公式也不太一樣
[02:27:32] 有興趣你可以回去看一下他們當初怎麼推這些的
[02:27:38] 不過我覺得你可以內化就是覺得他就是一個很
[02:27:43] 複雜版的TFIDF
[02:27:44] 然後在向量空間裡面算相似度
[02:27:47] 所以你現在看到RAG裡面的Paper
[02:27:50] 可能有提到BM25
[02:27:52] 他其實就是在這個世界上
[02:27:54] 在SPARTSMETRICS裡面
[02:27:55] 去用
[02:27:56] 這樣計算方式得到的相似度的
[02:28:00] 那
[02:28:02] 又回到這個SPARTS VECTOR
[02:28:03] 這SPARTS VECTOR其實我們等下之後會講
[02:28:06] 就是
[02:28:07] 為什麼跟現在常提到的所謂Dense Vector
[02:28:10] 不一樣
[02:28:11] 因為SPARTS VECTOR就是
[02:28:13] 我有多少字我就有多少個Dimension
[02:28:16] 所以
[02:28:17] 三萬個字我就有三萬個Dimension
[02:28:19] 這是一個非常大的向量但是現在你
[02:28:22] 你用BERT或用什麼其他
[02:28:24] Embedded Model做出來的向量
[02:28:26] 大概都不會超過1K
[02:28:28] 都不會超過1000
[02:28:30] 都不會用這麼大的向量來做這件事情
[02:28:33] 所以這個就是差別
[02:28:34] 但是
[02:28:35] 有好有壞
[02:28:36] 當然
[02:28:37] 這個以後再提到
[02:28:39] 好
[02:28:40] 這是BM25
[02:28:42] 其實你也不用記公式
[02:28:45] 說實在的
[02:28:46] 我也沒有
[02:28:47] 不知道公式會長這麼複雜
[02:28:50] 不是我知道怎麼長這麼複雜但是我寫不出來啦
[02:28:54] 就是你不用去記這些啦
[02:28:56] 基本上
[02:28:58] 你叫LiveCoding幫你
[02:28:59] 算一下就好了這樣子
[02:29:02] BM25他知道怎麼算
[02:29:05] OK
[02:29:06] 甚至你還可以叫他做這種11的15的
[02:29:09] 其實就是這個參數不一樣這樣子
[02:29:12] OK
[02:29:14] 那
[02:29:15] 基本上這個我都講了非常的
[02:29:17] 大概如果你對這個BM25為什麼這麼簡單就可以搞這麼厲害
[02:29:22] 你有興趣可以再回去看
[02:29:24] 其實有些地方都
[02:29:26] 蠻有趣可以做一點改變的
[02:29:30] 好
[02:29:31] BM25
[02:29:32] 這個就是一路的我們用Vector Space Model
[02:29:37] 這種1TB的結構
[02:29:38] 然後在TFIDF出來之後
[02:29:41] 有更
[02:29:42] 不一樣的
[02:29:43] 權重的表示方式跟
[02:29:45] 相似度計算的方式的
[02:29:47] 衍生出來的一個東西
[02:29:50] 好
[02:29:52] 好吧
[02:29:54] 現在為止你可能就可以想像說
[02:29:56] 好吧那我文章
[02:29:58] 我可以算頻率可以算它的鑑別度我就可以
[02:30:01] 用一個向量來表示雖然是一個很Sparse的向量但是
[02:30:05] 好歹也是一個電腦
[02:30:07] 可以處理的向量
[02:30:08] 就3萬維度這樣子
[02:30:10] 但是3萬維度
[02:30:11] 其實它會有一些問題
[02:30:13] 就是第一個
[02:30:15] 那我如果說貓跟狗
[02:30:17] 像不像
[02:30:18] 貓跟卡車像不像基本上都不像
[02:30:20] 因為它是不同維度
[02:30:22] 這個維度有1
[02:30:24] 沒有就是理
[02:30:25] 所以貓跟狗相似度是理
[02:30:27] 貓跟卡車也是理
[02:30:29] 但是你會覺得說
[02:30:31] 貓跟狗應該比較像啊
[02:30:33] 對至少
[02:30:34] 這是活的啊
[02:30:35] 卡車是死的
[02:30:36] 你就覺得應該相似度不要這麼的Discrete
[02:30:40] 我希望能夠
[02:30:42] 連續一點
[02:30:43] 所以我們就希望能夠做一個比較聰明的
[02:30:47] 所謂的
[02:30:48] 這種字的表示
[02:30:49] 就是World Reputation的概念
[02:30:52] 然後
## 8. 寫作規則
(這是 `_筆記SOP.md` 第 3.1、4、5、6 節的濃縮版。兩者衝突時以 SOP 為準。)
讀者:碩士生,兩門課期末是英文考試。要只看筆記就能學會,講得比老師好懂。畫面要簡潔。
**概念優先(2026-09-26 主理人)**:主理人只想懂概念,不想補數學、不想看程式碼和座標圖。兩門課的考試也都是問答題、不考算式(AI W1 1:16:52;NLP W3 1:47:41、2:48:36)。所以:
- 每段預設看得到的只有:白話摘要(2–4 句)+**一句生活比喻**(例:模擬退火像投資理財,年輕時敢冒險、越老越保守)+「考試可能怎麼問」一句。
- 數學推導、公式、手算、程式碼、座標圖,全部收進標題寫「(進階,可跳過)」的摺疊,例如「它到底怎麼運作?(進階,可跳過)」。每段最多一個進階摺疊,不要寫長篇計算。
- 演算法要能「用文字說出步驟」(考試可能要你描述),這一點放在預設看得到的地方,不用數字。
- **重心比例**:白話理論與概念模式(它在解決什麼問題、核心想法、跟別的方法差在哪、優缺點、生活比喻)占主要篇幅;數學與程式細節只用一兩句帶過,細節收進進階摺疊。
**圖文並茂(2026-09-26 主理人:不要只有文字)**:
- 每章至少 2–3 個圖,放在**預設看得到**的地方,每個圖前後各用一兩句白話說明「這張圖在看什麼」。
- 流程、步驟、因果、比較 → 用 mermaid 流程圖(```mermaid,flowchart LR 或 TD;節點文字用中文、加雙引號;一張圖不超過 10 個節點)。
- 投影片上的示意圖、架構圖 → 用 [[IMG: …]] 放投影片圖。
- 仍守「每個 ## 段落最多一種視覺元素」。
### 輸出兩個檔
1. `chNN.md`(Notion 寫法,不含頁面標題),結構固定:
- 第一行:章節包第 1 節那行,原樣照抄。
- `## 重點`:三點中文,每點一到兩句。
- `## Exam-ready`:3–10 行英文,**從章節包的投影片文字逐字抄**,每行 `- **Term**: "原句"(Ch3 p.14)`。老師有明確證據才在行尾加 `【老師強調】(h:mm:ss)`。
**每一行下面一定要有一行縮排的中文解釋**(主理人英文不好,看不懂的英文等於沒用):
```
- **Hill climbing**: "It keeps track of one current state and on each iteration moves to the neighboring state with highest value."(Ch4 p.5)
- 中文:爬山法只記住「現在這一個狀態」,每一輪都移到分數最高的鄰居。白話:一直往比較高的地方走一步。
```
中文要先把句子意思講清楚,再補一句白話;難的英文單字括號附中文(例:neighboring state(鄰近狀態))。
- 章節包第 2 節的每一段:`## [h:mm:ss](連結) 標題`(照抄),下面 2–4 句白話摘要,其餘全部收進摺疊:
```
問句(例:用生活例子講,BFS 在做什麼?)
內容
```
摺疊種類(需要才放):用生活例子講?/它到底怎麼運作?/要先懂什麼?(老師假設你會的數學或概念,短版教學)/老師原話是什麼?(「原話」(h:mm:ss),只放重要的,最多 5 句)。
- 「它到底怎麼運作?」要用一組小數字把這段的演算法**真的跑 1–3 步**(例:算出梯度、更新一次、比較兩個 α),不是只示範定義的加減乘除。全章盡量沿用同一組數字,讓前一段的答案能在下一段被驗證。
- 每段正文要回答讀者最可能卡住的一個「為什麼」。投影片公式方向跟題目相反、或投影片說「解不出來」時,用一兩句講出原因,自己補的標(我補充)。
- 投影片句子停在公式前(公式在圖裡)時:Exam-ready 在粗體詞條上補公式、引號內保持原句;正文寫出同一條式子。公式圖看章節包第 6 節列出的 PNG。
- `## Self-check`:2–4 題英文考題,答案收摺疊。**至少一題考老師強調的內容**;不出「老師和投影片哪裡不同」這類不會考的題目。每題格式:
```
Q1. English question?(中文:中文題目)
**Answer**: English answer.
中文:把答案完整講一遍(不是只翻一句),讓看不懂英文的人也知道要怎麼答。
```
- **最後一行**:章節包第 1b 節那行(下一章連結),原樣照抄。讓讀完的人直接點下一章。
- 不要把章節包或這份規則裡的指示句寫進筆記(例如「寫筆記時照投影片寫」「已改正 ASR 錯字」)。
- 長度 8,000–14,000 字元。
2. `chNN.concepts.json`:JSON 陣列,4–12 個考試可能問的術語,每個物件:
`name`(英文)、`zh`、`type`(概念/演算法/公式/人物事件/前置知識/行政)、`signal`("老師說會考"/"老師強調"/"核心(我判斷)"/"")、`evidence`(有 signal 前兩種時必填:原句+時間)、`definition_en`(投影片原句;沒有就註明 (textbook)/(lecture)/(my wording))、`plain`(一句中文)、`a4`(≤150 字元英文,可夾極短中文;期末拼貼用的小方塊)、`time`、`slides`、`prereq`(英文名陣列)。
### 風格鐵律
- 不用 emoji 或裝飾符號(✓✗★⚠ 都不要;→ 可以)。不用 callout。不用 `$`。時間不要用 code 樣式。
- 每個 `##` 段落最多一種視覺元素:一張圖、或一個表格、或一個 mermaid。
- 摺疊標題是問句,前面不加符號。
- 圖片最多 3 張,只放文字取代不了的圖。放法:單獨一行 `[[IMG: | 中文圖說]]`,PNG 用 `slides_to_png.py <圖片資料夾> <頁> --dpi=110` 產生。
- 考試訊號只在老師明確說時標。老師只說「不用背」「不講」就寫「注意:……」。
- 老師口誤或跟投影片不同:照投影片寫,加「注意:老師口頭說的是……」。
- 引用老師的話時,ASR 錯字改成正確的字。
### 沒有投影片時
不要憑記憶逐字重現課本段落或數值表。英文定義用自己的話寫、句尾標 (my wording);Exam-ready 每行標「(自擬,投影片待補)」。例子只用老師講的。
### 寫完之後(只做一次)
跑檢查:
`C:\Users\user\.cache\meeting-record\venv\Scripts\python.exe C:\Users\user\.claude\scripts\check_note.py --transcript <逐字稿> --slides <投影片 txt …> --start <起> --end <訖> --vid <影片 ID>`
- STYLE/VISUAL/TIME/FORMAT:全部改掉。
- QUOTE:確認是不是你改正了 ASR 錯字(是就保留),不是就改成原文或拿掉引號。
- ENGLISH:確認是不是投影片斷行造成的(是就保留),不是就改成投影片原句。
**省額度守則**:章節包裡已經有你需要的全部資料。不要再去讀整份逐字稿、整份投影片、segments.json 或手冊。一次寫好整個檔(Write 一次),檢查後集中修改。