[{"data":1,"prerenderedAt":1040},["ShallowReactive",2],{"navigation_docs":3,"-ai-rag-tf-idf-deep-dive":352,"-ai-rag-tf-idf-deep-dive-surround":1035},[4,54,83,116,125,161,179,200],{"title":5,"path":6,"stem":7,"children":8},"Ai","/ai","ai",[9,12,42,46,50],{"title":10,"path":6,"stem":11},"AI 技術探索","ai/index",{"title":13,"path":14,"stem":15,"children":16,"page":41},"Rag","/ai/rag","ai/RAG",[17,21,25,29,33,37],{"title":18,"path":19,"stem":20},"BM25 演算法深入解析：從 TF-IDF 到現代搜尋引擎的核心技術","/ai/rag/bm25-deep-dive-from-tf-idf-to-rag","ai/RAG/bm25-deep-dive-from-tf-idf-to-rag",{"title":22,"path":23,"stem":24},"Dense Retrieval（向量檢索）深入解析","/ai/rag/dense-retrieval-deep-dive","ai/RAG/dense-retrieval-deep-dive",{"title":26,"path":27,"stem":28},"RAG（Retrieval-Augmented Generation）原理與實作入門","/ai/rag/rag-intro-principles-and-implementation","ai/RAG/rag-intro-principles-and-implementation",{"title":30,"path":31,"stem":32},"RAG Retrieval Strategy 深入解析","/ai/rag/rag-retrieval-strategy-deep-dive","ai/RAG/rag-retrieval-strategy-deep-dive",{"title":34,"path":35,"stem":36},"Reciprocal Rank Fusion（RRF）教學：打造更穩定的檢索融合策略","/ai/rag/rrf-reciprocal-rank-fusion-guide","ai/RAG/rrf-reciprocal-rank-fusion-guide",{"title":38,"path":39,"stem":40},"TF-IDF（Term Frequency–Inverse Document Frequency）深入解析","/ai/rag/tf-idf-deep-dive","ai/RAG/tf-idf-deep-dive",false,{"title":43,"path":44,"stem":45},"Docus AI 功能完整實作指南","/ai/docus-ai-implementation","ai/docus-ai-implementation",{"title":47,"path":48,"stem":49},"llms.txt 是什麼？在 Nuxt 中控制 AI 與搜尋引擎爬蟲的新方式","/ai/llms-txt","ai/llms-txt",{"title":51,"path":52,"stem":53},"MCP（Model Context Protocol）是什麼？用「AI 的 USB-C」理解模型如何安全連接工具與資料","/ai/mcp_concept","ai/mcp_concept",{"title":55,"path":56,"stem":57,"children":58,"page":41},"Data Analysis","/data-analysis","data-analysis",[59,63,67,71,75,79],{"title":60,"path":61,"stem":62},"Exploratory Data Analysis（EDA）資料探索分析入門","/data-analysis/exploratory-data-analysis-eda","data-analysis/exploratory-data-analysis-eda",{"title":64,"path":65,"stem":66},"PR-AUC 深入解析：不平衡分類問題的重要評估指標","/data-analysis/pr-auc-for-imbalanced-classification","data-analysis/pr-auc-for-imbalanced-classification",{"title":68,"path":69,"stem":70},"ROC-AUC 深入解析：理解分類模型的判斷能力","/data-analysis/roc-auc-complete-guide","data-analysis/roc-auc-complete-guide",{"title":72,"path":73,"stem":74},"SHAP（SHapley Additive exPlanations）模型解釋方法深入解析","/data-analysis/shap-model-interpretation-complete-guide","data-analysis/shap-model-interpretation-complete-guide",{"title":76,"path":77,"stem":78},"Social Network Analysis（SNA）深入解析","/data-analysis/social-network-analysis-sna","data-analysis/social-network-analysis-sna",{"title":80,"path":81,"stem":82},"Time-based Split：為什麼時間序列資料不能使用 Random Split？","/data-analysis/time-based-split-vs-random-split","data-analysis/time-based-split-vs-random-split",{"title":84,"path":85,"stem":86,"children":87,"page":41},"MachineLearning","/machine_learning","machine_learning",[88,92,96,100,104,108,112],{"title":89,"path":90,"stem":91},"Confusion Matrix（混淆矩陣）完整解析","/machine_learning/confusion-matrix","machine_learning/confusion-matrix",{"title":93,"path":94,"stem":95},"Decision Tree 模型完整教學：從原理到 Python 實作","/machine_learning/decision-tree-complete-guide","machine_learning/decision-tree-complete-guide",{"title":97,"path":98,"stem":99},"為什麼 Decision Tree 在 Tabular Data 上常常勝過 Deep Learning？","/machine_learning/decision-tree-vs-deep-learning-on-tabular-data","machine_learning/decision-tree-vs-deep-learning-on-tabular-data",{"title":101,"path":102,"stem":103},"LightGBM 模型入門：理解高效能的 Gradient Boosting 演算法","/machine_learning/lightgbm-intro-for-tabular-data","machine_learning/lightgbm-intro-for-tabular-data",{"title":105,"path":106,"stem":107},"Logistic Regression（Logit 回歸）完整教學","/machine_learning/logistic-regression-complete-guide","machine_learning/logistic-regression-complete-guide",{"title":109,"path":110,"stem":111},"為什麼模型訓練需要 Train / Validation / Test Dataset？","/machine_learning/train-validation-test-dataset","machine_learning/train-validation-test-dataset",{"title":113,"path":114,"stem":115},"XGBoost 原理與實務教學","/machine_learning/xgboost-complete-guide","machine_learning/xgboost-complete-guide",{"title":117,"path":118,"stem":119,"children":120,"page":41},"Network","/network","network",[121],{"title":122,"path":123,"stem":124},"DNS 設定入門：CNAME vs A Record 完整解析","/network/dns-cname-vs-a-record-guide","network/dns-cname-vs-a-record-guide",{"title":126,"path":127,"stem":128,"children":129},"Nuxt","/nuxt","nuxt",[130,133,137,141,145,149,153,157],{"title":131,"path":127,"stem":132},"Nuxt 實戰指南","nuxt/index",{"title":134,"path":135,"stem":136},"Abstraction Layer 與 Adapter 的差別，一次搞懂設計角色","/nuxt/adapter_abstraction_layer","nuxt/adapter_abstraction_layer",{"title":138,"path":139,"stem":140},"Nuxt 4 全面理解 — 專案檔案結構解析","/nuxt/directory_structure","nuxt/directory_structure",{"title":142,"path":143,"stem":144},"Nuxt 前端 build 流程完整解析","/nuxt/frontend_build","nuxt/frontend_build",{"title":146,"path":147,"stem":148},"Nitro 是什麼？從 Nuxt 專案到 Server 與 Edge 的關鍵引擎","/nuxt/nitro","nuxt/nitro",{"title":150,"path":151,"stem":152},"深入理解 Nuxt 的 .nuxt 與 .output：為什麼部署時一定要分清楚？","/nuxt/nuxt_and_output","nuxt/nuxt_and_output",{"title":154,"path":155,"stem":156},"Nuxt 中 dev、build、preview 的差異一次搞懂","/nuxt/nuxt_dev_build_preview","nuxt/nuxt_dev_build_preview",{"title":158,"path":159,"stem":160},"Nuxt Image vs \u003Cimg>：為什麼 Nuxt 3 專案幾乎都該用 \u003CNuxtImg>？","/nuxt/nuxt_image","nuxt/nuxt_image",{"title":162,"path":163,"stem":164,"children":165},"Python 程式開發","/python","python/index",[166,167,171,175],{"title":162,"path":163,"stem":164},{"title":168,"path":169,"stem":170},"如何在 FastAPI 中調用記憶體 Buffer 回傳圖片 (附實例)","/python/memory_buffer","python/memory_buffer",{"title":172,"path":173,"stem":174},"Python 單元測試教學：如何為你的程式撰寫 Test","/python/python-unit-testing-unittest-pytest","python/python-unit-testing-unittest-pytest",{"title":176,"path":177,"stem":178},"如何使用 uv 取代 pip：改善 Python 專案的開發流程","/python/uv","python/uv",{"title":180,"path":181,"stem":182,"children":183,"page":41},"Statistic","/statistic","statistic",[184,188,192,196],{"title":185,"path":186,"stem":187},"卡方檢定（Chi-Square Test）入門教學","/statistic/chi-square-test-intro","statistic/chi-square-test-intro",{"title":189,"path":190,"stem":191},"常見抽樣方法（Sampling Methods）教學：Stratified、Quota、Convenience、Systematic、Simple Random","/statistic/common-sampling-methods-guide","statistic/common-sampling-methods-guide",{"title":193,"path":194,"stem":195},"Cramér’s V 指標介紹：如何衡量兩個類別變數之間的關聯","/statistic/cramers-v-for-categorical-association","statistic/cramers-v-for-categorical-association",{"title":197,"path":198,"stem":199},"Mann–Whitney U 與 Kolmogorov–Smirnov（KS）檢定：非參數統計檢定的入門指南","/statistic/mann-whitney-u-and-ks-test-intro","statistic/mann-whitney-u-and-ks-test-intro",{"title":201,"path":202,"stem":203,"children":204},"WebDev","/web_dev","web_dev",[205,208,234,248,282,312,334],{"title":206,"path":202,"stem":207},"Web 前端開發","web_dev/index",{"title":209,"path":210,"stem":211,"children":212},"瀏覽器與渲染","/web_dev/browser","web_dev/browser/index",[213,214,218,222,226,230],{"title":209,"path":210,"stem":211},{"title":215,"path":216,"stem":217},"瀏覽器儲存空間完整解析：Cookie、localStorage、IndexedDB 到 Cache Storage","/web_dev/browser/browser-storage-comprehensive-guide","web_dev/browser/browser-storage-comprehensive-guide",{"title":219,"path":220,"stem":221},"DOM (Document Object Model) 深入解析","/web_dev/browser/dom","web_dev/browser/dom",{"title":223,"path":224,"stem":225},"Service Worker Request Flow 深入解析","/web_dev/browser/service-worker-request-flow","web_dev/browser/service-worker-request-flow",{"title":227,"path":228,"stem":229},"CSR、SSR 與 SSG 是什麼？前端渲染策略完整比較","/web_dev/browser/ssr_csr_ssg","web_dev/browser/ssr_csr_ssg",{"title":231,"path":232,"stem":233},"Virtual DOM 深入解析：為什麼它能優化前端效能？","/web_dev/browser/virtual_dom","web_dev/browser/virtual_dom",{"title":235,"path":236,"stem":237,"children":238},"圖形技術","/web_dev/graphics","web_dev/graphics/index",[239,240,244],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"為什麼 Three.js 專案幾乎都選擇 CSR？從 SSR 問題談起","/web_dev/graphics/threejs_csr","web_dev/graphics/threejs_csr",{"title":245,"path":246,"stem":247},"WebGL 是什麼？為什麼前端 3D 幾乎都靠它？","/web_dev/graphics/webgl","web_dev/graphics/webGL",{"title":249,"path":250,"stem":251,"children":252},"架構與配置","/web_dev/infrastructure","web_dev/infrastructure/index",[253,254,258,262,266,270,274,278],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257},"Zeabur + K3s + Nuxt 部署架構完整解析","/web_dev/infrastructure/k3s-zeabur","web_dev/infrastructure/K3s-zeabur",{"title":259,"path":260,"stem":261},"ECS vs Docker vs Kubernetes：從部署堆疊理解三層架構","/web_dev/infrastructure/ecs-docker-kubernetes-stack","web_dev/infrastructure/ecs-docker-kubernetes-stack",{"title":263,"path":264,"stem":265},"ECS vs VPS 是什麼？從部署網站的角度一次搞懂差別","/web_dev/infrastructure/ecs-vs-vps","web_dev/infrastructure/ecs-vs-vps",{"title":267,"path":268,"stem":269},"Zeabur 內網服務連線完整入門指南","/web_dev/infrastructure/k3s-internal-networking","web_dev/infrastructure/k3s-internal-networking",{"title":271,"path":272,"stem":273},"使用 Microservices 架構設計系統的優勢解析","/web_dev/infrastructure/microservices-architecture-advantages","web_dev/infrastructure/microservices-architecture-advantages",{"title":275,"path":276,"stem":277},"Nginx 入門教學：從反向代理到與 Kubernetes 的架構比較","/web_dev/infrastructure/nginx-intro","web_dev/infrastructure/nginx-intro",{"title":279,"path":280,"stem":281},"YAML 配置是什麼？為什麼現代開發都在用它","/web_dev/infrastructure/yaml-configuration","web_dev/infrastructure/yaml-configuration",{"title":283,"path":284,"stem":285,"children":286},"網絡與通訊","/web_dev/network","web_dev/network/index",[287,288,292,296,300,304,308],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"HTTP Request 結構完整解析：從 Request Line 到 Header 一次看懂","/web_dev/network/http-request-structure","web_dev/network/http-request-structure",{"title":293,"path":294,"stem":295},"OSI 模型（Open Systems Interconnection Model）完整解析","/web_dev/network/osi-model","web_dev/network/osi-model",{"title":297,"path":298,"stem":299},"RESTful API 設計原則與實務解析","/web_dev/network/restful-api","web_dev/network/restful-api",{"title":301,"path":302,"stem":303},"RESTful API 五大設計原則深入解析","/web_dev/network/restful-api-principles","web_dev/network/restful-api-principles",{"title":305,"path":306,"stem":307},"Server-Sent Events (SSE) 深入解析與實作教學","/web_dev/network/sse-introduction","web_dev/network/sse-introduction",{"title":309,"path":310,"stem":311},"WebSocket 入門教學：從概念到 Node.js 實作","/web_dev/network/websocket-introduction","web_dev/network/websocket-introduction",{"title":313,"path":314,"stem":315,"children":316},"認證與安全","/web_dev/security","web_dev/security/index",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"使用 Cookie 與 Session 建立使用者驗證（完整新手教學）","/web_dev/security/cookie-session-authentication","web_dev/security/cookie-session-authentication",{"title":323,"path":324,"stem":325},"JWT 驗證機制完整解析：從登入流程到實務應用","/web_dev/security/jwt-authentication","web_dev/security/jwt-authentication",{"title":327,"path":328,"stem":329},"Secret Key 簽名是什麼？從零理解資料簽名的本質","/web_dev/security/secret-key-signing","web_dev/security/secret-key-signing",{"title":331,"path":332,"stem":333},"SSH（Secure Shell）是什麼？從遠端登入到安全通道的核心概念","/web_dev/security/ssh","web_dev/security/ssh",{"title":335,"path":336,"stem":337,"children":338},"SEO 與規範","/web_dev/seo","web_dev/seo/index",[339,340,344,348],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Canonical URL 是什麼？用生活化方式搞懂前端 SEO 的基本保命符","/web_dev/seo/canonical_link","web_dev/seo/canonical_link",{"title":345,"path":346,"stem":347},"robots.txt 是什麼？SEO 的第一道守門員","/web_dev/seo/robot_txt","web_dev/seo/robot_txt",{"title":349,"path":350,"stem":351},"Nuxt SEO 中的 Meta 與 SEO 工具是如何運作的？","/web_dev/seo/seo","web_dev/seo/seo",{"id":353,"title":38,"body":354,"description":1021,"extension":1022,"links":1023,"meta":1024,"navigation":769,"path":39,"seo":1033,"stem":40,"__hash__":1034},"docs/ai/RAG/tf-idf-deep-dive.md",{"type":355,"value":356,"toc":997},"minimark",[357,362,370,373,386,393,396,404,407,410,414,417,425,428,430,434,437,440,451,454,457,463,471,474,480,486,489,491,495,498,501,507,509,512,524,532,535,541,544,552,555,557,561,564,570,573,581,584,586,590,593,599,602,607,615,618,622,630,633,636,644,646,650,653,657,660,668,671,675,678,684,687,693,696,707,711,714,722,725,727,731,738,863,866,877,879,883,886,890,893,901,905,908,916,919,923,926,928,932,935,971,974,982,984,987,990,993],[358,359,361],"h2",{"id":360},"為什麼需要-tf-idf","為什麼需要 TF-IDF？",[363,364,365,366],"p",{},"在處理文字資料時，我們常會遇到一個問題：",[367,368,369],"strong",{},"如何判斷一段文字中哪些詞比較重要？",[363,371,372],{},"舉例來說，假設你有一堆文章：",[374,375,376,380,383],"ul",{},[377,378,379],"li",{},"「我今天去吃拉麵」",[377,381,382],{},"「拉麵真的很好吃」",[377,384,385],{},"「我今天學習自然語言處理」",[363,387,388,389,392],{},"如果我們只是單純計算詞出現的次數（Term Frequency），那「我」、「今天」、「去」這類常見詞會一直出現，但它們其實",[367,390,391],{},"沒有太多語意價值","。",[363,394,395],{},"這時候就需要一個機制，幫助我們：",[374,397,398,401],{},[377,399,400],{},"提高「有代表性」詞的權重",[377,402,403],{},"降低「常見但沒意義」詞的影響",[363,405,406],{},"這正是 TF-IDF 的核心目的。",[408,409],"hr",{},[358,411,413],{"id":412},"tf-idf-的核心概念","TF-IDF 的核心概念",[363,415,416],{},"TF-IDF 是由兩個部分組成：",[374,418,419,422],{},[377,420,421],{},"TF（Term Frequency）：詞在文件中出現的頻率",[377,423,424],{},"IDF（Inverse Document Frequency）：詞在整個語料庫中的稀有程度",[363,426,427],{},"這兩者的結合，能夠同時考慮「局部重要性」與「全局稀有性」。",[408,429],{},[358,431,433],{"id":432},"一tfterm-frequency是什麼","一、TF（Term Frequency）是什麼？",[363,435,436],{},"TF（詞頻）代表某個詞在「單一文件」中出現的頻率。",[363,438,439],{},"最簡單的計算方式是：",[441,442,448],"pre",{"className":443,"code":445,"language":446,"meta":447},[444],"language-text","TF(t) = 詞 t 在文件中出現次數 / 文件總詞數\n","text","",[449,450,445],"code",{"__ignoreMap":447},[363,452,453],{},"舉例：",[363,455,456],{},"文件內容：",[441,458,461],{"className":459,"code":460,"language":446,"meta":447},[444],"拉麵 好吃 拉麵\n",[449,462,460],{"__ignoreMap":447},[374,464,465,468],{},[377,466,467],{},"拉麵出現 2 次",[377,469,470],{},"總詞數為 3",[363,472,473],{},"所以：",[441,475,478],{"className":476,"code":477,"language":446,"meta":447},[444],"TF(拉麵) = 2 / 3\n",[449,479,477],{"__ignoreMap":447},[363,481,482,483,392],{},"TF 的直覺很簡單：",[367,484,485],{},"出現越多次，代表越重要",[363,487,488],{},"但這裡有個問題：像「的」、「是」、「我」這種詞，也會有很高的 TF，但其實沒什麼意義。這就是為什麼我們需要 IDF。",[408,490],{},[358,492,494],{"id":493},"二idfinverse-document-frequency是什麼","二、IDF（Inverse Document Frequency）是什麼？",[363,496,497],{},"IDF 用來衡量一個詞在「整個語料庫」中的稀有程度。",[363,499,500],{},"計算公式：",[441,502,505],{"className":503,"code":504,"language":446,"meta":447},[444],"IDF(t) = log(總文件數 / 包含詞 t 的文件數)\n",[449,506,504],{"__ignoreMap":447},[363,508,453],{},[363,510,511],{},"假設有 3 篇文件：",[513,514,515,518,521],"ol",{},[377,516,517],{},"拉麵 好吃",[377,519,520],{},"拉麵 很棒",[377,522,523],{},"今天 天氣 好",[374,525,526,529],{},[377,527,528],{},"「拉麵」出現在 2 篇文件",[377,530,531],{},"「天氣」只出現在 1 篇文件",[363,533,534],{},"計算：",[441,536,539],{"className":537,"code":538,"language":446,"meta":447},[444],"IDF(拉麵) = log(3 / 2)\nIDF(天氣) = log(3 / 1)\n",[449,540,538],{"__ignoreMap":447},[363,542,543],{},"可以發現：",[374,545,546,549],{},[377,547,548],{},"出現在越少文件的詞，IDF 越高",[377,550,551],{},"越常見的詞，IDF 越低",[363,553,554],{},"這樣就能有效降低「常見詞」的影響。",[408,556],{},[358,558,560],{"id":559},"三tf-idf-如何結合","三、TF-IDF 如何結合？",[363,562,563],{},"TF-IDF 的計算方式非常直觀：",[441,565,568],{"className":566,"code":567,"language":446,"meta":447},[444],"TF-IDF(t) = TF(t) × IDF(t)\n",[449,569,567],{"__ignoreMap":447},[363,571,572],{},"也就是：",[374,574,575,578],{},[377,576,577],{},"在某篇文章中很常出現（高 TF）",[377,579,580],{},"但在其他文章中很少見（高 IDF）",[363,582,583],{},"這個詞就會有很高的權重。",[408,585],{},[358,587,589],{"id":588},"用一個例子理解-tf-idf","用一個例子理解 TF-IDF",[363,591,592],{},"假設有三篇文件：",[441,594,597],{"className":595,"code":596,"language":446,"meta":447},[444],"Doc1: 我 喜歡 吃 拉麵\nDoc2: 拉麵 很 好吃\nDoc3: 我 今天 學習 AI\n",[449,598,596],{"__ignoreMap":447},[363,600,601],{},"我們來看兩個詞：",[603,604,606],"h3",{"id":605},"詞一拉麵","詞一：「拉麵」",[374,608,609,612],{},[377,610,611],{},"在 Doc1、Doc2 都出現 → IDF 偏低",[377,613,614],{},"在 Doc1 中出現一次 → TF 普通",[363,616,617],{},"→ TF-IDF：中等",[603,619,621],{"id":620},"詞二ai","詞二：「AI」",[374,623,624,627],{},[377,625,626],{},"只出現在 Doc3 → IDF 很高",[377,628,629],{},"在 Doc3 中出現一次 → TF 普通",[363,631,632],{},"→ TF-IDF：高",[363,634,635],{},"這代表：",[374,637,638,641],{},[377,639,640],{},"「AI」對 Doc3 更具有代表性",[377,642,643],{},"「拉麵」雖然常出現，但區別性較低",[408,645],{},[358,647,649],{"id":648},"tf-idf-在實務上的應用","TF-IDF 在實務上的應用",[363,651,652],{},"TF-IDF 是資訊檢索與 NLP 的經典方法，廣泛應用在：",[603,654,656],{"id":655},"_1-搜尋引擎排序","1. 搜尋引擎排序",[363,658,659],{},"當你輸入關鍵字時，系統會：",[374,661,662,665],{},[377,663,664],{},"計算查詢詞在文件中的 TF-IDF",[377,666,667],{},"排序最相關的文件",[363,669,670],{},"這也是早期搜尋引擎的重要基礎技術之一。",[603,672,674],{"id":673},"_2-文件相似度計算","2. 文件相似度計算",[363,676,677],{},"每篇文章可以轉成一個向量（TF-IDF vector）：",[441,679,682],{"className":680,"code":681,"language":446,"meta":447},[444],"Doc → [0.2, 0.8, 0.0, 0.5, ...]\n",[449,683,681],{"__ignoreMap":447},[363,685,686],{},"再透過 cosine similarity 計算相似度：",[441,688,691],{"className":689,"code":690,"language":446,"meta":447},[444],"similarity = cos(θ)\n",[449,692,690],{"__ignoreMap":447},[363,694,695],{},"這在以下場景非常常見：",[374,697,698,701,704],{},[377,699,700],{},"推薦系統",[377,702,703],{},"文件分類",[377,705,706],{},"搜尋結果排序",[603,708,710],{"id":709},"_3-關鍵字抽取","3. 關鍵字抽取",[363,712,713],{},"TF-IDF 可以幫助你找出一篇文章的關鍵詞：",[374,715,716,719],{},[377,717,718],{},"分數高 → 代表性強",[377,720,721],{},"分數低 → 常見詞或無意義詞",[363,723,724],{},"這在 SEO、自動摘要、文件標籤生成中都很實用。",[408,726],{},[358,728,730],{"id":729},"使用-python-實作-tf-idf","使用 Python 實作 TF-IDF",[363,732,733,734,737],{},"在實務中，我們通常不會手刻公式，而是使用套件，例如 ",[449,735,736],{},"scikit-learn","：",[441,739,743],{"className":740,"code":741,"language":742,"meta":447,"style":447},"language-python shiki shiki-themes github-dark","from sklearn.feature_extraction.text import TfidfVectorizer\n\ndocuments = [\n    \"我 喜歡 吃 拉麵\",\n    \"拉麵 很 好吃\",\n    \"我 今天 學習 AI\"\n]\n\nvectorizer = TfidfVectorizer()\nX = vectorizer.fit_transform(documents)\n\nprint(vectorizer.get_feature_names_out())\nprint(X.toarray())\n","python",[449,744,745,764,771,783,793,801,807,813,818,829,840,845,855],{"__ignoreMap":447},[746,747,750,754,758,761],"span",{"class":748,"line":749},"line",1,[746,751,753],{"class":752},"snl16","from",[746,755,757],{"class":756},"s95oV"," sklearn.feature_extraction.text ",[746,759,760],{"class":752},"import",[746,762,763],{"class":756}," TfidfVectorizer\n",[746,765,767],{"class":748,"line":766},2,[746,768,770],{"emptyLinePlaceholder":769},true,"\n",[746,772,774,777,780],{"class":748,"line":773},3,[746,775,776],{"class":756},"documents ",[746,778,779],{"class":752},"=",[746,781,782],{"class":756}," [\n",[746,784,786,790],{"class":748,"line":785},4,[746,787,789],{"class":788},"sU2Wk","    \"我 喜歡 吃 拉麵\"",[746,791,792],{"class":756},",\n",[746,794,796,799],{"class":748,"line":795},5,[746,797,798],{"class":788},"    \"拉麵 很 好吃\"",[746,800,792],{"class":756},[746,802,804],{"class":748,"line":803},6,[746,805,806],{"class":788},"    \"我 今天 學習 AI\"\n",[746,808,810],{"class":748,"line":809},7,[746,811,812],{"class":756},"]\n",[746,814,816],{"class":748,"line":815},8,[746,817,770],{"emptyLinePlaceholder":769},[746,819,821,824,826],{"class":748,"line":820},9,[746,822,823],{"class":756},"vectorizer ",[746,825,779],{"class":752},[746,827,828],{"class":756}," TfidfVectorizer()\n",[746,830,832,835,837],{"class":748,"line":831},10,[746,833,834],{"class":756},"X ",[746,836,779],{"class":752},[746,838,839],{"class":756}," vectorizer.fit_transform(documents)\n",[746,841,843],{"class":748,"line":842},11,[746,844,770],{"emptyLinePlaceholder":769},[746,846,848,852],{"class":748,"line":847},12,[746,849,851],{"class":850},"sDLfK","print",[746,853,854],{"class":756},"(vectorizer.get_feature_names_out())\n",[746,856,858,860],{"class":748,"line":857},13,[746,859,851],{"class":850},[746,861,862],{"class":756},"(X.toarray())\n",[363,864,865],{},"這段程式碼會：",[513,867,868,871,874],{},[377,869,870],{},"自動做分詞（英文效果較佳，中文需額外處理）",[377,872,873],{},"計算 TF-IDF",[377,875,876],{},"輸出每篇文件的向量表示",[408,878],{},[358,880,882],{"id":881},"tf-idf-的限制","TF-IDF 的限制",[363,884,885],{},"雖然 TF-IDF 很實用，但它也有一些限制：",[603,887,889],{"id":888},"_1-無法理解語意","1. 無法理解語意",[363,891,892],{},"TF-IDF 只看「詞出現次數」，不理解語意。",[374,894,895,898],{},[377,896,897],{},"「好吃」與「美味」被視為不同詞",[377,899,900],{},"無法處理同義詞",[603,902,904],{"id":903},"_2-忽略詞序","2. 忽略詞序",[363,906,907],{},"句子：",[374,909,910,913],{},[377,911,912],{},"「我喜歡你」",[377,914,915],{},"「你喜歡我」",[363,917,918],{},"TF-IDF 可能視為幾乎一樣。",[603,920,922],{"id":921},"_3-對長文本敏感","3. 對長文本敏感",[363,924,925],{},"長文章可能因為詞數多而影響 TF 計算。",[408,927],{},[358,929,931],{"id":930},"tf-idf-vs-現代-embedding","TF-IDF vs 現代 Embedding",[363,933,934],{},"在現代 NLP 中，TF-IDF 常與 embedding 方法比較：",[936,937,938,951],"table",{},[939,940,941],"thead",{},[942,943,944,948],"tr",{},[945,946,947],"th",{},"方法",[945,949,950],{},"特點",[952,953,954,963],"tbody",{},[942,955,956,960],{},[957,958,959],"td",{},"TF-IDF",[957,961,962],{},"快速、可解釋、無需訓練",[942,964,965,968],{},[957,966,967],{},"Word2Vec / BERT",[957,969,970],{},"能理解語意與上下文",[363,972,973],{},"但在很多場景中：",[374,975,976,979],{},[377,977,978],{},"TF-IDF 仍然是 baseline 的首選",[377,980,981],{},"特別是在資源有限或需要高可解釋性的情況",[408,983],{},[358,985,986],{"id":986},"結論",[363,988,989],{},"TF-IDF 是一種簡單但非常強大的文字表示方法，透過結合「詞頻」與「稀有性」，成功解決了文字重要性評估的問題。即使在深度學習盛行的今天，它仍然在搜尋引擎、文件分析與資料科學領域中扮演重要角色。",[363,991,992],{},"如果你正在建立 RAG 系統、搜尋功能或文件分析工具，理解 TF-IDF 會是非常關鍵的一步，因為它幫助你從「文字」走向「可計算的向量」，也為更進階的語意模型打下基礎。",[994,995,996],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":447,"searchDepth":766,"depth":766,"links":998},[999,1000,1001,1002,1003,1004,1008,1013,1014,1019,1020],{"id":360,"depth":766,"text":361},{"id":412,"depth":766,"text":413},{"id":432,"depth":766,"text":433},{"id":493,"depth":766,"text":494},{"id":559,"depth":766,"text":560},{"id":588,"depth":766,"text":589,"children":1005},[1006,1007],{"id":605,"depth":773,"text":606},{"id":620,"depth":773,"text":621},{"id":648,"depth":766,"text":649,"children":1009},[1010,1011,1012],{"id":655,"depth":773,"text":656},{"id":673,"depth":773,"text":674},{"id":709,"depth":773,"text":710},{"id":729,"depth":766,"text":730},{"id":881,"depth":766,"text":882,"children":1015},[1016,1017,1018],{"id":888,"depth":773,"text":889},{"id":903,"depth":773,"text":904},{"id":921,"depth":773,"text":922},{"id":930,"depth":766,"text":931},{"id":986,"depth":766,"text":986},"從直覺理解到實務應用，完整掌握 TF-IDF 在資訊檢索與自然語言處理中的核心概念與使用方式。","md",null,{"tags":1025,"category":1031,"date":1032},[1026,1027,1028,1029,1030],"tf-idf","nlp","information-retrieval","machine-learning","text-mining","RAG","2026-03-17",{"title":38,"description":1021},"zV_I7hcH9P9tnRuqs1THbPTjTIfUDiUlRRqL6DSR0Mc",[1036,1038],{"title":34,"path":35,"stem":36,"description":1037,"children":-1},"深入理解 RRF（Reciprocal Rank Fusion）如何結合多種檢索結果，提升搜尋與 RAG 系統的準確度與穩定性。",{"title":43,"path":44,"stem":45,"description":1039,"children":-1},"深入了解 Docus 中的 AI 功能：llms.txt 整合、MCP Server、AI Assistant 的原理與實作方式",1776690844960]