當 Elasticsearch 搜尋引擎遇上 AI
Hello World Dev Conference 2024
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)

倒排索引 (Inverted Index)

Elasticsearch 使用 Search 時的重要觀念

Query:查詢文件的相關性 依 Term 計算文件與查詢字串的相關性分數 TF (Term Frequency) 詞頻 IDF (Inverse Document Frequency) 詞稀有性 Document Length Normalization 文件長度正規化 Filter:篩選符合的文件 僅篩選符合條件的文件,不計算相關性分數 適合不需要排序的精確篩選條件. Filter Cache 可重複使用以提升效能。 Highlighting 知道為什麼被搜尋出來,也是很重要的一件事

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

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

資料來源: A Gentle Introduction to Vector Search 貓貓狗狗、蘋果香蕉,怎麼放到這個空間中? 👉 透過預訓練的 Embedding Model 如何比較貓貓狗狗之間的關係? 使用 KNN (K-Nearest Neighbors) Search 來進行搜尋目標附近的節點。 資料來源: A Gentle Introduction to Vector Search Elasticsearch 的 KNN (K-Nearest Neighbors) Search,其實是使用近似最近鄰搜尋 ANN (Approximate K-Nearest Neighbor) Search 實作,針對高維度空間適用,精確度較差,但有更好的查詢效率。 可使用 Script Query 的方式,做到 精確 KNN 搜尋。 Index_options 設定中,支援 HNSW (Hierarchical Navigable Small World): 適用於大量資料與高維度數據,犧牲些許準確度但大幅提升效率。 Element Type: 預設 float,提供高精準度,適用準確語意搜尋的情境。 支援 bit, byte 可接受量化壓縮處理,以節省儲存空間及提升查詢速度。

Elasticsearch Index

Searching
查詢

Indexing
存入資料

Embedding

轉換成向量

Embedding

轉換成向量

向量儲存庫

Dense Vector

KNN Search

查詢結果

Embedding Model

Embedding Model

選擇 Embedding 模型

應用場景 語意搜尋 文本分類 推薦系統 支援的語言 英文 繁體中文 特定領域用途 訓練資料 法律 醫療 模型大小與效能 模型參數量 Model Size 量化與裁剪 Quantization Pruning Sentence Transformer intfloat/multilingual-e5-small intfloat/multilingual-e5-small · Hugging Face 支援中文 Model Size: 118M Params Embedding Size: 384 dimensions Token Limit: 512 使用時,特別注意 Dimensions 以及 Tokens Limit

向量資料庫處理範圍

Searching
查詢

Indexing
存入資料

Embedding

轉換成向量

Embedding

轉換成向量

向量儲存庫

Dense Vector

KNN Search

查詢結果

Embedding Model

Elasticsearch Index

Embedding Model

Rerank 重新排名

語義搜尋要找得精準,執行成本很高 配合 Rerank 的執行策略: ANN: 使用犧牲精準度的方法進行大圍範搜尋 Rerank: 使用精準度較高的模型進行結果的重新排序 資料來源:openai

ElasticSearch Relevance Engine

ESRE (Elasticsearch Relevance Engine)

Machine Learning Models 模型管理 Click to Download ELSER (Elastic Learned Sparse EncodeR) 效果不錯,但只支援英文 multilingual-e5-small 載入 3rd Party Model (HuggingFace) Eland Python Client (Enterprise License 才有的功能) Data Storage 資料儲存 Dense Vector Field (密集向量) Sparse Vector Field (稀疏向量) Rank Feature Field (特徵排名) 以文件指定欄位中的數值,加權排名結果的計分 Data Transformation 資料轉換 Ingest Pipeline Inference Processors Search 搜尋 KNN Query Sparse Vector Query 配合 ELSER 使用 Hybrid (RRF, Reciprocal Rank Fusion) Rerank (Enterprise License 才有的功能) Inference API 資料來源:elastic.co Inference API 支援的類型,以及整合的服務來源 Text Embedding Amazon Bedrock, Azure, Cohere, Google, HuggingFace, Mistral, OpenAI Sparse Embedding ELSER Completion Anthropic, Azure, Amazon Bedrock, Cohere, Google, OpenAI Rerank Cohere (可能是 Enterprise License 才有的功能) 其它還有:Security & Data Privacy, Application Development Tools…等整個生態圈的功能與工具。

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