Azure AI Search 的向量搜尋

Ian Chen
playtech
Published in
6 min readMar 4, 2024

--

Azure AI Search

原為Azure Cognitive Search,在生成式AI爆發後增強了許多功能,其中一項就是支援向量搜尋,有了向量搜尋便可以向量方式進行相似度搜尋,也可以進一步再結合Semantic Kernel實現RAG架構。

向量搜尋

向量搜尋是一種基於機器學習模型的搜尋技術,將文字、圖片或其他資料轉換成數學上的向量形式,用於表達高維空間中的點(即向量),透過計算向量之間的距離或相似度來進行搜尋,這些距離可以用不同的算法來計算,目前最常見的是歐氏距離餘弦相似度

歐氏距離是指在高維空間中兩點之間的直線距離。距離越近表示關聯性越高,然而僅考慮距離而不考慮向量的方向性,有時候可能無法充分反映資料的相關性或相似性。例如在分析情感時,向量A可能代表正面情緒,而向量B代表負面情緒,從直線距離上看它們的距離也許相近,但從意義上來看,它們實際上代表了完全不同的概念。在這種情況下,若是僅考慮它們之間的歐氏距離是不足以反映這兩個向量在語義上的差異。

餘弦相似度(Cosine)衡量的是兩個向量在方向上的相似程度,以兩個向量夾角的大小來衡量它們之間的相似度,餘弦相似度的值範圍從-1到1。然而在處理非常稀疏的高維資料時,計算餘弦相似度會比只計算歐氏距離更加複雜耗時。
1.當兩個向量的方向完全相同時,它們之間的夾角為0度,餘弦值為1,表示相似度最高。
2.當兩個向量方向完全相反時,夾角為180度,餘弦值為-1,表示它們是完全不相關的。
3.如果兩個向量夾角為90度,它們的餘弦相似度為0,表示這兩個向量之間沒有相關性。
因此,餘弦相似度較高(接近於1)表示兩個向量在方向上更接近,它們之間的關聯性較強。這種衡量方式對於處理文本的高維資料時,能夠有效捕捉到文本項目之間的語義相關性,而不受文本的長度影響。

Azure AI Search 向量搜尋

在Azure AI Search 要實現向量搜尋需要以下的服務一起配合
1. Azure AI Search:做為向量資料儲存的資料庫,以及實現搜尋的索引建立
2. Azure Blob Storage :原始知識庫的資料來源
3. Azure OpenAI Service :實現資料轉向量的服務,需要建立向量專用模型服務,例如:text-embedding-ada-002(目前最新模型是text-embedding-3-large)

Step 1 : 首先把Azure Blob Storage與Azure OpenAI Service先建立起來,這部份沒什麼困難度,接著上傳知識文件至Azure Blob Storage中,本例以"公寓大廈管理條例"為例,採pdf格式。

Step 2 : 由於Azure AI Search必須連接Azure Blob Storage讀取知識庫文件,因此必須讓Azure AI Search具有Azure Blob Storage相關權限,首先啟用Azure AI Search Identity (System assigned)

Step 3 : Azure Blob Storage 設定讓Azure AI Search可以連接並給予相關權限。在Azure Blob Storage的Access Control (IAM)加入角色授權,共計授予三項角色
Storage Blob Data Reader
Reader and Data Access
Storage Blob Data Contributor

檢視確認最終應授予的權限

Step 4 : 使用 Azure AI Search 的Import and vectorize data精靈進行向量及索引的建立。

連接Azure Blob Storage,如果權限沒有建立正確,最終會沒有任何資料被讀取(讀取失敗也不會有任何錯誤資訊 :( )。

連接Azure OpenAI Service做為資料轉向量的服務,必須建立有text-embedding模型(請注意這個會有Azure OpenAI Service的費用產生)。另外建議一併勾選”語意排名Semantic ranker” ( 參閱 語意排名 — Azure AI Search | Microsoft Learn)。Schedule indexing,可以設定定期排程重建index。

由於整個Azure AI Search會建立多個作業物件,並且可以支援多次建立多個不同的index,因此設定前綴可以有效的進行後續管理。

作業處理完成後,會顯示已建立成功,此時便可以進到index進行Search測試。

Step 5 : 進入Indexes,選擇Index然後進行搜尋測試

搜尋結果,由於採用的是OpenAI的模型,因此相似度的算法是使用餘弦相似度Cosine。

Step 6 : Azure AI Search有提供相關SDK與REST API,因此應用面的開發可以自由選擇採用SDK或REST API來實作 .NET 範例 — Azure AI Search | Microsoft Learn

結論

透過Azure AI Search可以改善過去傳統式的關鍵字搜尋的缺點,提升搜尋精確性,並且支援向量搜尋後更可以實作以自然語言為基礎的語義搜尋。

參考資源:Azure AI Search documentation | Microsoft Learn

--

--

Ian Chen
playtech

Microsoft MVP / Microsoft Certified Trainer(MCT)