當 Elasticsearch 搜尋引擎遇上 AI
Hello World Dev Conference 2024

by Joe Wu

https://hackmd.io/@estraining/hwdc2024
Who Am I
Entrepreneur
Elastic Stack Expert
Tech Instructor
Distributed System Architect
Blockchain AI Enthusiast
Joe Wu
喬叔
動手玩技術
探索事情的本質與運作原理
最後一刻才把東西趕出來
14 屆 iThome 鐵人賽 DevOps 組冠軍
13 屆 iThome 鐵人賽 Elastic Stack on Cloud 組冠軍
Certified Scrum Product Owner
Certified Scrum Master
Certified Elastic Observability Engineer
Certified Elastic Engineer
在這場工作坊…
Terminology 術語
Elastic Cloud
Elastic 公司,以 SaaS 模式所提供 Elastic Stack (Elasticsearch, Kibana, Machine Learning…等) 的服務。
Kibana
Elastic Stack 中的主要網頁入口,提供各種 Dashboard, Monitoring 工具, Stack Management 工具, Dev Tools… 等。
Google Colaboratory
雲端免費的 Jupyter 筆記本環境,可以在瀏覽器上,運用 Google 的雲端運算資源,執行 Python 的程式。
Elasticsearch Index
資料存放的 Namespace,可以理解為 DBMS (Database Management System) 中的 Database (資料庫)。
Index Mapping
定義資料存入 Index 時,每個欄位分別要如何被處理,可理解為 Database 的 Schema 定義。
Elasticsearch Shard (分片)
將 Index 內的文件切分儲存。
也是在不同節點之間搬移資料的最小單位。
全文檢索 (Full-text Search) 是怎麼運作的?

Elasticsearch 處理範圍

Searching
查詢

Indexing
存入資料

Analyzer

斷詞處理

Analyzer

斷詞處理

Segment Files

(Inverted Index)

Full-text Search

查詢結果

Elasticsearch Index

倒排索引 (Inverted Index)

View more

Elasticsearch 使用 Search 時的重要觀念

View more

語意搜尋 (Semantic Search) 是如何運作的?

能儲存語意關係的 - 向量空間 (Vector Store)

View more

Elasticsearch Index

Searching
查詢

Indexing
存入資料

Embedding

轉換成向量

Embedding

轉換成向量

向量儲存庫

Dense Vector

KNN Search

查詢結果

Embedding Model

Embedding Model

選擇 Embedding 模型

View more

向量資料庫處理範圍

Searching
查詢

Indexing
存入資料

Embedding

轉換成向量

Embedding

轉換成向量

向量儲存庫

Dense Vector

KNN Search

查詢結果

Embedding Model

Elasticsearch Index

Embedding Model

Rerank 重新排名

View more

ElasticSearch Relevance Engine

ESRE (Elasticsearch Relevance Engine)

View more

ElasticSearch Relevance Engine (ESRE) 處理範圍

Searching
查詢

Indexing
存入資料

Embedding

轉換成向量

Embedding

轉換成向量

向量儲存庫

Dense Vector

KNN Search

查詢結果

Embedding Model

Rerank

Click to Download & Eland

Ingest & Inference

Ingest & Inference

Elasticsearch Index

Embedding Model

Click to Download & Eland

Completion

Embedding

選擇 Search 的方式?
Full-text search(全文檢索)
使用者已經期待關鍵字比對的效果。
  • 非結構化文件:如新聞文章、部落格、評論等,這些文件可以通過關鍵字精確匹配來進行檢索。
  • 產品描述:電商網站中的商品描述,可以基於產品關鍵字進行查詢和排序。
  • 法律文件:基於具體的條款和法規進行文件比對時非常適合。
Semantic Search (語意搜尋)
無法從關鍵字比對的自然語言搜尋
  • 問答系統:用於根據用戶問題語義相似的答案檢索,而不僅僅依賴於關鍵字比對。
  • 客服對話系統:根據對話內容找到最相關的答案,而不是基於簡單的詞彙比對。
  • 推薦系統:當資料需要語義相似度來推薦相關內容時,使用語義搜索能提高比對準確度。
Hybrid search (混合查詢)
  • 產品搜索電商網站既需要基於關鍵詞進行精確匹配(如品牌或型號),又需要通過語義相似性來提供更智能的推薦。
  • 技術文件檢索:用戶查詢可能包含專業詞彙,需要精確匹配,同時也要考慮語義上的相似性來提供相關答案。
  • 求職網站:根據工作描述進行語義匹配,但也需要具體技能的關鍵詞精確匹配。
與其他查詢方式混合使用
  • 篩選:時間、數值、關鍵字比對。
  • 地理位置查詢
  • Fuzzy (模糊查詢)
  • Aggregation (結果資料的統計與分析)
  • 自定義相關性計分權重
  • 愈新的資料愈高分
  • 愈熱門的資料愈高分
  • 滿足特定查詢條件的文件較高分
Takeaways

搜尋的方式、期待的結果
  • 語意搜尋僅是眾多搜尋方法的其中一種方式。
  • 依照使用情境的期待結果,仔細挑選+組合,合適的搜尋或篩選機制。
  • 甚至可以讓 LLM 先針對使用者提問進行分析,轉成半結構化結果,再進行混合查詢。
  • RAG 品質要好的重點:能找到需要的資料。

Embedding 模型的選擇
  • 應用場景:語意、分類、推薦
  • 型態:文字、圖片…
  • 語系的支援:是否要支援中文?
  • 訓練資料的特性:特定領域、通用型、問答…
  • 效能:模型的大小
  • 自架或是第三方服務

Elasticsearch 向量儲存的配置與最佳化
  • Dimensions (維度) 大小: 目前支援 <= 4096
  • Token 長度限制
  • index_options: HNSW (Hierarchical Navigable Small World) 量化向量維度
  • element_type: 量化壓縮 vs 精準執行
  • similarity: l2_norm (歐氏距離), dot_product, cosine, max_inner_product

Ingest Pipeline + Inference API
  • 將 Embedding 的工作留在 Elasticsearch 裡,使用端僅專注於原始 JSON 文件格式。
  • 在 ETL 加入 LLM Completion 的能力,產生各種可能的應用。
  • 要留意 Indexing 效能,以及準備好 Ingest Failure 的例外狀況處理機制。

KNN 可以配合 Aggregation 使用
  • 但是只會套用在 K 數量的文章當中。
  • 當 Search 同時有 Query 與 KNN 時,只會套用在交集的文件中。
參考資料 與 推薦連結

GitHub

GitHub - elastic/elasticsearch-labs: Notebooks & Example Apps for Search & AI Applications with Elasticsearch

Notebooks & Example Apps for Search & AI Applications with Elasticsearch - elastic/elasticsearch-labs

pinecone

Dense Vectors: Capturing Meaning with Code

Pinecone is a vector database for storing and searching through dense vectors. Why would you ever want to do that? Keep reading to find out, then try Pinecone for free.

ihower { blogging }

使用繁體中文評測各家 Embedding 模型的檢索能力

評估數據結果 google spreadsheets 傳送門 ↗️ 在 RAG 系統中,將文字轉語意向量的 e...

ihower { blogging }

使用繁體中文評測各家 Reranker 模型的重排能力

(2024/7/25) 有新增內容 LLM-based Ranker 在最後 接續上一篇 Embedding ...

謝謝大家的參與
喬叔 - Elastic Stack 技術交流
Made with Gamma