[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W2(9/17)](https://app.notion.com/p/3e6fc631b03081a18b13fad72a8874fd) › 05|影片 [1:20:25–1:48:46](https://www.youtube.com/watch?v=MnA5KUETSg4&t=4825s)|投影片 W1_NLP_brief_v2 p.38–47|上一章 [04 語法層次與深度學習時代(1:08–1:20)](https://app.notion.com/p/3e6fc631b03081768161d6716089043a)|下一章 [06 向量空間模型與 TF-IDF(1:48–2:07)](https://app.notion.com/p/3e6fc631b0308121891cc1705fe5be4a) ## 重點 - LLM 出現以前,處理文字最大宗的工作是資訊檢索(information retrieval,從一大堆文件裡找出跟查詢最相關的幾篇)。兩大重點是索引(找得快)和排序(排得準),現在做 RAG 一樣會遇到。 - 反向索引(inverted index)把「每個字 → 出現在哪幾篇、哪個位置」存成一張表,查詢時直接翻表。建表時要用 hash 找字,資料一多才跑得動。 - 建索引前先整理文字:斷詞(tokenization)、詞幹還原(stemming)或詞形還原(lemmatization)、拿掉停用詞(stop words)。能省空間,但也可能弄丟語意。 ## Exam-ready - **Information Retrieval**: "Analyzing the textual content of individual Web pages (documents) … given user's query … determine a maximally related subset of documents"(W1_NLP_brief p.39) - 中文:分析文件的文字:給定使用者的查詢(query),找出最相關的一小批文件(maximally related subset(最相關的子集合))。 - **Retrieval**: "index a collection of documents (access efficiency)"; "rank documents by importance (accuracy)"(W1_NLP_brief p.39) - 中文:檢索分兩件事:建索引(index)求存取效率(找得快);依重要性排序(rank)求準確(排得對)。 - **Categorization (classification)**: "assign a document to one or more categories"; "Man-made (Yahoo & Dmoz) vs. automation"(W1_NLP_brief p.39) - 中文:分類是把文件分到一個或多個類別,分人工(Yahoo、DMOZ 目錄)和自動兩種。 - **Inverted index**: "effective for very large collections of documents"; "associates lexical items to their occurrences in the collection"(W1_NLP_brief p.40)【老師強調】(1:25:43) - 中文:對超大量文件很有效;把每個詞(lexical item(詞彙項目))連到它在文件裡的每一次出現。白話:字 → 出現在哪。 - **Terms / Vocabulary V**: "lexical items: words or expressions"; "the set of terms of interest"; "LLM vocabulary size 32k ~ 256k (LLaMA 1&2 (32K), Mistral 7B (32K), GPT-3 (50K), GPT-4 (128K), Qwen (152K))"; "Bigger = Better ?"(W1_NLP_brief p.40) - 中文:term 是詞彙項目,可以是單字或詞組;vocabulary V(詞表)是系統關心的 term 集合。LLM 詞表約 3.2 萬到 25.6 萬個 token;越大越好嗎? - **Bucket (posting list)**: "each key is a term ω ∈ V … associated value b(ω) points to a bucket (posting list) … a bucket is a list of pointers marking all occurrences of ω in the text collection"(W1_NLP_brief p.41); entries: "document identifier (DID)" and "offset (in characters) of term's occurrence within this document" → "present a user with a short context", "enables vicinity queries"(W1_NLP_brief p.42) - 中文:最簡單的形式是字典:key 是 term,值 b(ω) 指向 bucket(posting list,出現位置清單),記著這個字的每一次出現。每筆存文件編號(DID)和字元位置(offset);位置可在結果頁顯示上下文(像 Google),也能做 vicinity queries(鄰近查詢:兩個字要靠很近)。 - **Lexical Processing**: "Performed prior to indexing or converting documents to vector representations"; "Text conflation and vocabulary reduction"; Tokenization = "extraction of terms from a document", stripping out "structural or formatting elements", e.g. "removing HTML tags", "removing punctuation and special characters", "folding character case (e.g. all to lower case)"(W1_NLP_brief p.43–44) - 中文:在建索引或轉成向量前做,目的之一是合併詞形、縮小詞表。第一步 tokenization(斷詞)抽出 term:去掉排版元素,例如 HTML 標籤、標點和特殊符號,並統一大小寫(通常全轉小寫)。 - **Stemming**: "Want to reduce all morphological variants of a word to a single index term"; "Stemming - reduce words to their root form"; "Porter stemming algorithm (1980) … relies on a preconstructed suffix list with associated rules", e.g. "BINARIZATION => BINARIZE"(W1_NLP_brief p.45) - 中文:把一個字的各種詞形變化(morphological variants)歸成同一個索引 term,也就是還原成詞根(root form)。Porter 演算法(1980)靠預先寫好的字尾清單(suffix list)和規則,例如 BINARIZATION → BINARIZE。 - **Stemming vs. Lemmatization**: Stemming = "Rule-based", "Not always real word", "fast", "Search engine, fast preprocessing"; Lemmatization = "Corpus + Syntactic", "Real word", "slow", "Semantics understanding, QA, etc."(W1_NLP_brief p.46)【老師強調】(1:42:49) - 中文:Stemming 照規則砍,不一定得到真的字,快,用在搜尋引擎和快速前處理;lemmatization(詞形還原)靠語料加句法資訊(如詞性),得到真的字,慢,用在語意理解、問答。例:studies → studi/study。 - **Stop words**: "common words, such as articles, prepositions, non-informative adverbs"; "20-30% index size reduction"(W1_NLP_brief p.43); "A static set or dynamic one? … Depend on your application? … Dictionary-based matching … Avoid to broke the semantics"(W1_NLP_brief p.47;原句文法有誤,考卷寫 avoid breaking the semantics) - 中文:很常見、沒資訊量的字(冠詞、介系詞、沒資訊的副詞),拿掉能讓索引小 20–30%。投影片問:固定一張表還是會變?看應用嗎?怎麼刪(查表比對)?什麼時候刪(別弄壞語意)? ## [1:20:25](https://www.youtube.com/watch?v=MnA5KUETSg4&t=4825s) 從資訊檢索看文字 這一段先不用 LLM 這種「厲害的武器」,看以前的人怎麼處理文字。1998–99 年 World Wide Web(全球資訊網)蓬勃起來,網頁、部落格爆量。Google 在這個年代靠資訊檢索(information retrieval,IR)起家,慢慢取代 Yahoo。所以那時候資訊檢索的問題,幾乎就等於 NLP 的問題。 **比喻**:資訊檢索像一間有十億本書的圖書館櫃台。你說「我要講 security 的書」,館員要很快找出來(索引),再把最有用的放最上面(排序)。 **考試可能怎麼問**:用一句話定義 information retrieval(給定 query,找出最相關的文件子集合)。
老師原話是什麼? 「我們現在先不要拿出厲害的武器,不要用 LM」(1:20:35) 「資訊檢索的問題就跟 NLP 的問題幾乎畫上等號了」(1:22:09)
## [1:22:20](https://www.youtube.com/watch?v=MnA5KUETSg4&t=4940s) 資訊檢索兩大重點:索引與排序 投影片把檢索(retrieval)拆成兩件事:index(建索引,求找得快)和 rank(排序,求排得準)。以前電腦算力和記憶體都小,沒有索引根本找不到東西;有了索引,暴力翻找就變成 log n 等級的搜尋。排序的代表是 Google 的 PageRank:看有多少網頁連到這一頁,而不只看關鍵字;老師說這些排序技術現在已是「時代的眼淚」。另一件事是分類(categorization):Yahoo 早期用人工把網頁分成政治、運動、經濟等類別(DMOZ 目錄也是),但網頁長得太快,人工撐不住。這些問題現在做 RAG(檢索增強生成:LLM 回答前先去資料庫找相關段落)一樣會遇到。 **比喻**:PageRank 像論文的引用次數:被越多人引用(連結),這篇就越重要。 **考試可能怎麼問**:Retrieval 的兩個目標是什麼(access efficiency、accuracy),各靠什麼做到? 下面這張圖是一次搜尋的流程:先靠索引找得快,再靠排序排得準。 ```mermaid flowchart LR A["使用者的查詢"] --> B["索引:直接查出含這些字的文件"] B --> C["排序:PageRank 等方法決定先後"] C --> D["最相關的幾篇給使用者"] ``` RAG 的「找」也是中間這兩步,只是現在常用向量資料庫(我補充)。 下面摺疊在比「找一個字要比對幾次」:一個一個翻最慢,先排好再對半找快很多,hash 最快。裡面的 O(n)、O(log n)、O(1) 是電腦科學描述「資料變多時,要做的步驟跟著多多少」的寫法:O(n) 是資料多幾倍就慢幾倍;O(log n) 是資料翻一倍只多一步;O(1) 是不管資料多少都差不多一步。所以老師說「變成 log n 等級的搜尋」,意思是資料再大,找東西也只慢一點點。
「log n 等級的搜尋」差多少?(進階,可跳過) 在 30,000 個字的字表裡找一個字:從頭一個一個比(O(n))最多 30,000 次;先排好序再用二分搜尋(每次砍一半,O(log n))約 15 次;用 hash(雜湊表,直接算出位置,O(1))約 1 次。
老師原話是什麼? 「我可以把一個暴力法搜尋的東西,可以變成一個比較 log n 的搜尋的方式」(1:23:57) 「被多少人放了連結,他的網頁就相當的重要」(1:24:20) 「這些由於是排序都是比較像時代的眼淚」(1:24:31)
## [1:25:40](https://www.youtube.com/watch?v=MnA5KUETSg4&t=5140s) Inverted index、term 與 vocabulary 建索引要做的是 inverted index(反向索引):記下「每個字出現在哪幾篇文章」。【老師強調】(1:25:43) 老師要大家把這個名詞記下來。兩個基本名詞:term 是一個字、片語或關鍵字,概念像現在說的 token;vocabulary V(詞表)是系統要處理的所有 term 的集合。以前詞表是人工建的:預算少就只做 3,000 個常用字,英文要做得好大約要 3 萬字;Google 也釋出過 n-gram 資料(一字詞、二字詞、三字詞……),規模遠超過 3 萬。 token 是 LLM 讀文字的最小單位:把文字切成一段段的小片,每片換成一個編號(本週[第 02 章](https://app.notion.com/p/3e6fc631b030815e805aead9c729a0d1)提過:LLM 看到的是 token,不是一個個字母)。所以 term 和 token 都是「系統眼中的一個單位」,差別是 term 通常是完整的字或詞,token 可能只是字的一段。 **比喻**:反向索引就是書最後面的索引頁。查 security,它直接告訴你在第 12、57 頁。「正向」是一頁一頁讀有哪些字,「反向」是從字找回頁。 **考試可能怎麼問**:What is an inverted index, and why is it called "inverted"?
老師原話是什麼? 「這個名詞可能大家就記一下,因為這個是博物館會出現的名字,叫 Inverted index」(1:25:43) 「你要從大量的文章裡面去知道哪一個字在哪幾篇文章」(1:26:02)
## [1:27:39](https://www.youtube.com/watch?v=MnA5KUETSg4&t=5259s) LLM 詞表大小:越大越好嗎 LLM 也有自己的 vocabulary,是做 tokenization(把文字切成 token)時建出來的,大小約 32K–256K(GPT-4 是 128K)。越大越好嗎?老師說各有利弊:算力夠、想涵蓋更多,大一點確實有利,但不能無限放大。以前的索引詞表是邊建邊長,現在 tokenizer 用 BPE(byte pair encoding,把常一起出現的片段合併成新 token)建詞表也是這樣長出來的。 **比喻**:詞表像餐廳菜單。菜越多,客人越容易點到想要的;但廚房要備的料更多,客人每次點餐也要看完更長的菜單。 **考試可能怎麼問**:Is a bigger vocabulary always better? 說出一個好處和兩個代價。 用文字說這個取捨: 1. 好處:涵蓋多,罕見字、多語言比較能整個當成一個 token;詞表小,很多字要拆成好幾段(我補充)。 2. 代價一:參數量跟「詞表大小 V × 向量維度 d」成正比,老師說是「直接線性的關係」。 3. 代價二:每生成一個字,都要替詞表裡每個 token 算一次機率,V 越大算越多。 這裡的「向量維度 d」:模型裡每個 token 都用一串數字代表(這串數字叫向量),d 就是這串數字有幾個;「參數」是模型訓練時要學出來的數字。所以詞表每多一個 token,就要多學 d 個數字。下面摺疊用 LLaMA 2 的真實數字算一次:詞表從 3.2 萬變 12.8 萬(4 倍),這張表的參數和每一步要算的機率都跟著變 4 倍。
手算一次參數量(進階,可跳過) LLaMA 2 7B:V=32,000,d=4,096。詞向量表(embedding matrix,V 列、d 欄,每個 token 一列)有 32,000 × 4,096 ≈ 1.31 億個參數。V 放大到 128,000、d 不變,變成約 5.24 億,剛好 4 倍。生成時每一步要算出 V 個分數再轉成機率,V 變 4 倍,這一步也變 4 倍。
老師原話是什麼? 「小有小的好處,大有大的好處」(1:28:30) 「所以那個是一個直接線性的關係」(1:29:07) 「所以你這個 Vocabulary 越大,你就一次要算越多字的 Probability」(1:29:38)
## [1:30:20](https://www.youtube.com/watch?v=MnA5KUETSg4&t=5420s) 反向索引怎麼建、怎麼跑得快 反向索引是邊讀文章邊建的:每個字的每次出現都記進它的 bucket。難的是效率:每切出一個字都要先找到它的 bucket,一個一個掃的話,文章越多越跑不動,所以要用 hash 直接找到。這種最簡單的搜尋引擎只能比對一模一樣的字。 **比喻**:hash 像圖書館的索書號,看號碼就直接走到那一格。代價是要多佔空間,老師說 hash 的精神就是「用空間換取時間」。 **考試可能怎麼問**:描述怎麼建反向索引、怎麼用它回答查詢,並說明為什麼要用 hash。 下面是投影片 p.42 的圖,從左到右是字典、bucket、原文件。 ![p.42 反向索引:字典(term)→ bucket(文件編號, 字元位置)→ 原文件](file-upload://3e7fc631-b030-81b6-bf09-00b2e088ffbf) 圖上重點:左欄 Inverted index 是字典,列出 computer、books、security、protected 四個字;中欄 Buckets 是每個字的出現位置清單,每格寫「文件編號, 字元位置」,例如 1, 278 是第 1 篇第 278 個字元;右欄 Documents 是三篇原文件,箭頭指回那個字在原文的位置;右邊 Bucket entries 說每筆記錄存兩樣東西:DID(document identifier,文件編號,這篇是文件集裡的第幾篇)和 offset(這個字在該篇的第幾個字元),位置能拿來顯示一小段上下文(像 Google 搜尋結果)和做 vicinity queries(鄰近查詢)。這張圖在講:查一個字時,從字典走到 bucket,再從 bucket 直接跳回原文,不用把每篇文章從頭讀一遍。 照圖讀:computer 在第 2 篇第 83 個字元、第 3 篇第 79 個字元。用文字說整個流程: 1. 文章進來先斷詞。 2. 每切出一個字,用 hash 找到它的 bucket;沒有就新增一個。 3. 把(文件編號, 位置)接到 bucket 後面。 4. 查詢 security:翻它的 bucket,知道第 1 篇出現兩次、第 3 篇出現一次,回傳這兩篇。查多個字就把幾個 bucket 合起來,命中最多字的排前面。 下面摺疊解釋老師的故事:不用 hash 時,每找一個字都要從頭比,資料越多、每次找越久,所以總時間不是跟著文章數等比例變多,而是平方倍變多(文章 10 倍、時間 100 倍);用 hash 每次一步就找到,就不會越跑越慢。摺疊裡的 linked list(鏈結串列)是一種「一筆接一筆串起來」的清單,新找到的出現位置直接接在尾巴。
為什麼文章多十倍,時間卻多一百倍?(進階,可跳過) 老師的故事:叫 AI 寫索引程式,前 100 篇一秒做完,1,000 篇卻花了約 100 倍時間,一萬篇幾乎跑不動。原因是每個字都要在約 3 萬字的詞表裡找它的 bucket 開頭(找不到就新增,找到就用 linked list(鏈結串列)串下去)。如果每次找的成本也隨資料量變大,總時間約 1 + 2 + … + n ≈ n²/2,n 變 10 倍、時間就變 100 倍(我補充推論)。hash 讓每次查找約 O(1),就不會越跑越慢。所以叫 AI 寫這種程式,要講清楚資料量很大、要用 hash。現在有現成套件,但老師說要自己做過才知道問題在哪。 - 文件編號要省空間:幾十億篇時,32 位元整數(最多約 21 億)存不下,改用更長的整數,bucket 就變大;以前記憶體貴,這種地方都要摳。 - 只能比對一模一樣的字:拼錯或換同義字就找不到,Google 的拼字提示是後來才有的。早期重點在排序,後來才處理「意思一樣、字不一樣」。
老師原話是什麼? 「我從字再反索引到我的文章,這叫 inverted index」(1:30:55) 「發現一千篇好像不是十倍的時間,好像是一百倍的時間」(1:31:57) 「Hash 的精神就是用空間換取時間」(1:37:02) 「很多蠢事情都是要自己做過,你才知道裡面的問題點在那裡」(1:37:34)
## [1:37:43](https://www.youtube.com/watch?v=MnA5KUETSg4&t=5863s) 前處理:斷詞、詞幹、停用詞 投影片 p.43 的標題是 Lexical Processing(詞彙處理:建索引或轉成向量前先做的整理),分三步。Tokenization(斷詞):抽出 term,拿掉 HTML 和標點、全轉小寫,代價是細微差別被抹平;老師說這跟 LLM 的 tokenization 差不多,以前比較像 segmentation(斷字)。Stemming(詞幹還原):照規則砍字尾回到詞根,例如 dogs → dog;最有名的是 Porter 演算法,老師說它是從 compiler(編譯器)的角度寫規則。詞根不一定是真的字,但能把變形歸成同一個 term(文件只有 fish、fisher,查 fishing 也找得到);可是 fishing rod(釣竿)砍掉 -ing 就不是釣竿了。拿掉 stop words(停用詞:冠詞、介系詞這類到處都有的字):以前記憶體貴,可以省 20–30% 索引空間。 **比喻**:前處理像寄貨前打包:拆掉多餘包裝(HTML、標點)、同款商品併成一箱(stemming)、丟掉填充的保麗龍(停用詞)。箱子變小變整齊,但也可能丟掉有用的東西。 **考試可能怎麼問**:列出 lexical processing 的三步,各舉一例,並說 stemming 的一個缺點。 下面是一段網頁文字進索引前經過的步驟,順序照投影片: ```mermaid flowchart LR A["網頁原文"] --> B["Tokenization:去 HTML、標點,轉小寫"] B --> C["Stemming:砍字尾回詞根"] C --> D["拿掉停用詞"] D --> E["放進反向索引"] ``` 例:The fishermen were FISHING in the rivers! 斷詞得到 7 個小寫 term → stemming 後 fishing 變 fish、rivers 變 river(fishermen 是不規則複數,砍不動)→ 刪掉 the、were、in,剩 fishermen, fish, river。 下面摺疊在講 Porter 實際怎麼砍:它只照字尾清單和規則一條條套,不看意思,所以常砍出不是真字的結果(studies → studi),甚至把意思不同的字砍成一樣(organization 和 organ)。
Porter 演算法怎麼砍?(進階,可跳過) Porter 用字尾清單配規則,一輪輪套好幾組。投影片那條(-IZATION 前面至少有「母音接子音」就換成 -IZE)只是其中一條;binarization 實際跑完會變 binar。 NLTK 的 Porter 實際輸出:studies → studi;university、universe 都變 univers;organization 變 organ(跟「器官」撞在一起),這叫砍過頭。投影片的 fish/fisher 是概念示意,實際跑 Porter,fisher 會保留原樣。
老師原話是什麼? 「它的 root 其實不見得是一個存在的英文單字」(1:39:00) 「以前有個步驟很重要,但是現在一點都不重要也不會去做」(1:39:47)(講 stop words) 「以前空間記憶體很貴」(1:40:34)
## [1:42:46](https://www.youtube.com/watch?v=MnA5KUETSg4&t=6166s) Stemming vs Lemmatization Lemmatization(詞形還原)也把字還原成原形,但會參考語料和詞性(這裡是動詞還是名詞),還原成字典裡真的字。【老師強調】(1:42:49) 老師要大家了解它,因為很有用。代價是慢;好處是結果比較乾淨,對應到 LLM 的 token 表示比較不會發散,所以有些論文會先做 lemmatization。不過現在 LLM 越來越強,很多時候就交給 LLM 自己理解。 要先懂兩個詞:語料(corpus)是收集來的大量真實文章,用來查一個字平常怎麼用;詞性(part of speech)是一個字在句子裡當名詞、動詞還是形容詞,詞性不同,原形可能不一樣(例如 saw 當動詞,原形是 see;當名詞是「鋸子」,原形就是 saw)(我補充)。老師說的「不會發散」,意思是同一個字的各種變形先合成一個,模型就不用把 study、studies、studied 當成好幾個不相關的東西來學(我補充)。 **比喻**:Stemming 像拿剪刀把字尾一律剪掉,快,但會剪出 studi 這種怪東西;lemmatization 像會查字典的人,先看詞性再翻出原形,慢,但一定是真的字。 **考試可能怎麼問**:從 method、output、performance、usage 四方面比較兩者,並寫出 studies 的兩種結果。 下表就是投影片 p.46,考試照這四列寫:
StemmingLemmatization
MethodRule-basedCorpus + Syntactic(語料+詞性)
OutputNot always real word(studies → studi)Real word(studies → study)
Performancefastslow
UsageSearch engine, fast preprocessingSemantics understanding, QA, etc.
**注意:老師口頭說 lemmatization 考慮 semantic(語意);投影片 Method 寫 Corpus + Syntactic,考試照投影片。**
多比幾個字(進階,可跳過) 「原字 → stemming / lemmatization」(我補充,NLTK 的 Porter 和 WordNet lemmatizer): - ran(動詞)→ ran / run;mice(名詞)→ mice / mouse;better(形容詞)→ better / good。不規則變化,規則砍不動。 - fishing:當動詞 lemma 是 fish;當名詞(fishing rod)保持 fishing,正好解掉 fishing rod 被砍壞的問題。
老師原話是什麼? 「這個詞其實大家可能要稍微瞭解一下,因為它還蠻有用的」(1:42:49) 「Stemming 常常會產生一堆不是英文字的字」(1:43:20) 「這樣你對應到整個大語言模型的那個 Token 的表示呢,就不會這麼發散」(1:44:52)
## [1:45:10](https://www.youtube.com/watch?v=MnA5KUETSg4&t=6310s) 停用詞的取捨 投影片的文字雲裡,the、to、in、and 佔滿畫面,可見停用詞多常出現。停用詞不是固定一張表:不同語言、不同應用都不一樣,例如新聞檢索幾乎每篇都有「記者報導」,「報導」就可以當停用詞。拿掉有風險:to be or not to be 每個字都是停用詞,全拿掉整句就消失(老師說 not 其實可當表示否定的 term 保留)。所以後來大家寧願多買記憶體、不做這一步。現在 LLM 對 prompt 裡每個字都很敏感,多一個字、少一個字,影響會一路傳下去(propagate),attention 算出來就不一樣,乾脆讓 LLM 自己判斷哪些字不重要。 attention(注意力機制)是 LLM 讀每個字時,決定要多看句子裡哪些其他字(本週[第 02 章](https://app.notion.com/p/3e6fc631b030815e805aead9c729a0d1)提過:讓每個字去看其他字)。因為每個字都會被其他字「看」到,少了一個字,其他字算出來的結果都會跟著變,這就是 propagate(一路傳下去)的意思。 **比喻**:刪停用詞像發按字計費的電報,省掉「的、了、呢」大多還看得懂;但有些話本身就是由這種小字組成,一省就全沒了。 **考試可能怎麼問**:為什麼以前要刪停用詞?為什麼有風險?用 to be or not to be 說明。 用文字說投影片 p.47 的三個問題: 1. What are stop words?固定一張表(static)還是隨資料變(dynamic)?要看應用,例如新聞的「報導」。 2. How to remove?Dictionary-based matching:準備一張停用詞表,比對到就刪。 3. When to remove?時機不對會弄壞語意。例如先做詞幹還原再刪停用詞,fishing rod 的詞可能就不見了。
怎麼找出停用詞?刪了會怎樣?(進階,可跳過) 怎麼找出某個應用的停用詞?把每個字出現在幾篇文件排序,幾乎每篇都有的就是候選;下一章的 IDF 就是把這個想法寫成公式(我補充)。 刪了會怎樣:NLTK 的英文停用詞表有 I、do、not、it,把 I do not like it 的停用詞刪掉只剩 like,意思整個反過來。
老師原話是什麼? 「報導這兩個字呢,在你的應用裡面幾乎每一篇都會出現了」(1:46:34) 「我們寧願多買一點記憶體讓整個東西跑得起來,寧願不要做 stop words 這件事」(1:47:50) 「我們現在就讓 LM 去幫我們計算什麼叫做句子裡面的 stop words」(1:48:38)
## Self-check
Q1. What is an inverted index? What does each bucket (posting list) entry store, and what does the positional information enable?(中文:什麼是反向索引?bucket 每一筆存什麼?位置資訊能拿來做什麼?) **Answer**: An inverted index is a dictionary whose keys are terms ω ∈ V; the value b(ω) points to a bucket (posting list) that marks all occurrences of ω in the collection. Each entry stores the document identifier (DID) and the offset of the term within that document. Offsets let the system show a short context (e.g., Google snippets) and enable vicinity queries. It is effective for very large collections because a query looks up the term directly instead of scanning every document. 中文:反向索引是一本字典:key 是 term,值指向它的 bucket(posting list),列出它在文件集裡的每一次出現。每筆存文件編號(DID)和位置(offset)。位置可以在結果頁顯示一小段上下文(像 Google 摘要),也能做鄰近查詢(兩個字要靠很近)。它適合超大量文件,因為查詢直接翻那個字的 bucket,不用每篇都掃。
Q2. Compare stemming and lemmatization in terms of method, output, performance, and usage. What does each return for "studies"?(中文:從方法、輸出、速度、用途比較 stemming 和 lemmatization;studies 各會變成什麼?) **Answer**: Stemming is rule-based (e.g., the Porter algorithm's suffix list with rules), fast, and its output is not always a real word: studies → studi. It is used in search engines and fast preprocessing. Lemmatization uses corpus and syntactic information (part of speech), is slow, and returns a real word: studies → study. It is used for semantic understanding and QA. 中文:Stemming 照規則砍字尾,快,但結果不一定是真的字,studies 變 studi;適合搜尋引擎和快速前處理。Lemmatization 靠語料和句法資訊(詞性)找原形,慢,但結果是字典裡真的字,studies 變 study;適合語意理解和問答。
Q3. Why did early IR systems remove stop words, and why is it risky? Give an example.(中文:早期資訊檢索為什麼要刪停用詞?為什麼有風險?舉一個例子。) **Answer**: Stop words (articles, prepositions, non-informative adverbs) appear in almost every document, so removing them reduced the index size by 20–30% when memory was expensive. However, removal can break the semantics: "To be or not to be" consists entirely of stop words and would disappear, and removing "not" can reverse the meaning. Stop words also depend on the language and the application (e.g., "reported" in news). Today systems usually keep them. 中文:停用詞(冠詞、介系詞、沒資訊的副詞)幾乎每篇都有,以前記憶體貴,刪掉可以讓索引小 20–30%。風險是會弄壞語意:To be or not to be 整句都是停用詞,一刪就整句消失;刪掉 not 還可能讓意思反過來。停用詞也會隨語言和應用改變,例如新聞裡的「報導」。所以現在的系統通常不刪。
Q4. For an LLM vocabulary, is "bigger = better"? Explain two costs of a larger vocabulary.(中文:LLM 的詞表是越大越好嗎?說出詞表變大的兩個代價。) **Answer**: Not necessarily; there is a trade-off. (1) The embedding matrix has V × d parameters, so the parameter count grows linearly with V (e.g., 32,000 × 4,096 ≈ 131M). (2) At every decoding step the model must compute a probability for every token in the vocabulary, so a larger V means more computation. The benefit is better coverage. Typical LLM vocabulary sizes are 32K–256K. 中文:不一定,各有利弊。第一,詞向量表有 V × d 個參數,參數量跟詞表大小成正比(例如 32,000 × 4,096 約 1.31 億)。第二,每生成一個字,都要替詞表裡每個 token 算一次機率,詞表越大算越多。好處是涵蓋的字比較多。常見 LLM 的詞表大小是 32K 到 256K。
讀完了嗎?下一章:[06 向量空間模型與 TF-IDF(1:48–2:07)](https://app.notion.com/p/3e6fc631b0308121891cc1705fe5be4a)|回到週頁:[W2(9/17)](https://app.notion.com/p/3e6fc631b03081a18b13fad72a8874fd)