好文分享 — 80 行程式碼做出 1 個搜尋引擎
覺得我們的內容實用嗎? MyApollo 電子報讀者募集中!歡迎訂閱電子報!
“A search engine in 80 lines of Python” 1 文分享怎麼用 80 行的 Python 程式碼做出搜尋引擎(含簡單的前端介面)。
其實搜尋在 AI 時代還是扮演很重要的角色,有時候我直覺還是使用搜尋引擎找資料,比起單單使用生成式 AI 更讓我放心一些些,主要原因是有時候 AI 生成的內容還是需要判斷真偽,所以需要搭配搜尋引擎尋做個簡單驗證。(所以私認為只要生成式 AI 還是會有 hallucination 的現象的話,是無法完全取代搜尋引擎的) 要做搜尋引擎其實也是一門學問,搜尋引擎的 4 個基本元件包含:
- 爬蟲(Crawler),將資料擷取回來。
- 資料管道(Data Pipeline),對資料進行清理、儲存、再表達(例如斷詞)、摘要等步驟。
- 反向索引(inverted index),將關鍵詞與資料來源做成
關鍵字 -> 資料來源
的對照結構,如此一來,使用者搜尋關鍵字時,就可以藉由關鍵字找出相關資料來源。 - 相關度排序(ranker),找出相關資料之後,需要將資料按照相關度從高到低排序,藉此改善使用者的體驗與效率(不排也可以,只是會很難用), Google 的 PageRank 就是有名的搜尋結果排序的演算法,但並不是只有 PageRank 可以使用, “A search engine in 80 lines of Python” 1 文是使用 BM25 (Elasticsearch 也有提供 BM25 演算法)。
雖然看起來很簡單,但實際上每個步驟都有各自的眉眉角角要克服,譬如光是第 2 步遇到多國語系的斷詞、摘要等步驟都是學術論文的研究領域啊⋯⋯(幾乎想像不到 Google 的搜尋引擎隱藏了多少不為人知的改進)。
不過想了解搜尋引擎運作的話,還是可以從 “A search engine in 80 lines of Python” 著手,它是搜尋引擎從想像到程式碼的開端。