點擊上方圖片觀看本課程影片
LLM 不只是聊天機器人和文字生成,還可以利用 Embeddings 建立搜尋應用程式。Embeddings 是資料的數值表示,也稱為向量,可用於資料的語意搜尋。
在本課程中,您將為我們的教育新創公司建立搜尋應用程式。該新創公司是一個非牟利組織,提供開發中國家學生免費教育。我們擁有大量 YouTube 影片,讓學生學習 AI。我們想建構一個搜尋應用程式,讓學生可以透過輸入問題搜尋 YouTube 影片。
例如,學生可能輸入「什麼是 Jupyter 筆記本?」或「什麼是 Azure ML」,搜尋應用程式會回傳與問題相關的 YouTube 影片清單,更棒的是,應用程式會回傳影片中答案所在位置的連結。
本課程內容包括:
- 語意搜尋與關鍵字搜尋的比較。
- 何謂文字 Embeddings。
- 建立文字 Embeddings 索引。
- 搜尋文字 Embeddings 索引。
完成本課程後,您將能夠:
- 分辨語意搜尋與關鍵字搜尋的差異。
- 解釋什麼是文字 Embeddings。
- 使用 Embeddings 建立搜尋資料的應用程式。
建立搜尋應用程式可幫助您了解如何使用 Embeddings 搜尋資料,也學會如何打造能讓學生快速找到資訊的搜尋工具。
本課程附有 Microsoft AI Show YouTube 頻道的影片轉錄 Embedding 索引。AI Show 是一個教授 AI 與機器學習的 YouTube 頻道。Embedding 索引收錄截至 2023 年 10 月的各影片轉錄 Embeddings。您將使用此索引建置搜尋應用程式,該應用程式可以回傳影片中問題答案所在位置的連結,讓學生迅速找到所需資訊。
以下是針對問題「你可以在 Azure ML 中使用 RStudio 嗎?」的語意查詢範例。查看 YouTube 連結即可看到包含時間戳記的 URL,會直接帶您到影片中答案所在位置。
您可能會想知道,什麼是語意搜尋?語意搜尋是一種使用查詢中詞彙語意(意義)來回傳相關結果的搜尋技術。
這裡舉個語意搜尋的例子。假如您想買車,搜尋「我的夢想車」,語意搜尋會理解您不是在「夢想」一輛車,而是在尋找您「理想」的車。語意搜尋理解您的意圖並回傳相關結果;相對而言,「關鍵字搜尋」則會字面搜尋與「夢想」和「車」相關的內容,經常會出現不相關的結果。
文字 Embeddings是一種用於自然語言處理的文字表示技術。文字 Embeddings 是文字的語意數值表示。Embeddings 用來將資料表示成機器易於理解的形式。有許多模型可用以建構文字 Embeddings,本課程將專注於使用 OpenAI Embedding 模型產生 Embeddings。
舉例來說,假設下列文字來自 AI Show YouTube 頻道某集影片的轉錄:
Today we are going to learn about Azure Machine Learning.
我們會把文字傳給 OpenAI Embedding API,API 回傳由 1536 個數字組成的 Embedding(即向量)。向量中的每個數字代表文字的不同面向。為簡潔起見,下方僅列出向量的前 10 個數字。
[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...]本課程的 Embedding 索引是利用一連串 Python 腳本建立。腳本與說明可在本課程的 scripts 資料夾中的 README 找到。您無需執行這些腳本即可完成本課程,因為已提供 Embedding 索引。
腳本執行以下操作:
- 下載 AI Show 播放清單中每支 YouTube 影片的轉錄稿。
- 使用 OpenAI Functions嘗試從影片前 3 分鐘轉錄中擷取講者名稱。每支影片的講者名稱存於名為
embedding_index_3m.json的 Embedding 索引中。 - 轉錄文字切分為 3 分鐘文字段落。段落間會重疊約 20 個字,以確保向量不被截斷並提供更佳搜尋上下文。
- 將每個文字段落傳給 OpenAI Chat API,摘要文字精簡為 60 字。摘要結果也存入 Embedding 索引
embedding_index_3m.json。 - 最後將段落文字傳給 OpenAI Embedding API,API 回傳 1536 維向量,表徵該段落的語意。段落與 Embedding 向量存於
embedding_index_3m.json索引中。
為簡化教學,Embedding 索引存於名為 embedding_index_3m.json 的 JSON 檔案,並載入 Pandas DataFrame。生產環境中,Embedding 索引通常儲存在向量資料庫,如 Azure Cognitive Search、Redis、Pinecone、Weaviate 等等。
了解文字 Embeddings 後,接著將學習如何使用 Embeddings 搜尋資料,尤其是利用余弦相似度尋找與查詢最相似的 Embeddings。
余弦相似度是衡量兩個向量相似度的方法,有時稱為「最近鄰搜尋」。執行余弦相似度搜尋時,需使用 OpenAI Embedding API 將查詢文字「向量化」,然後計算查詢向量與 Embedding 索引中每個向量的余弦相似度。索引中每個向量代表一個 YouTube 轉錄文字段落。最後依余弦相似度排序,得分最高的文字段落即最相似於查詢。
從數學角度看,余弦相似度量測多維空間中兩向量間夾角的餘弦。此量測有助於克服大小導致歐氏距離偏大的問題,即使兩文件因大小相差大而歐氏距離遠,但若夾角較小則余弦相似度高。更多詳情請參考余弦相似度。
接下來我們將學習如何使用 Embeddings 建立搜尋應用程式。該應用程式允許學生輸入問題搜尋影片,並回傳與問題相關的影片清單,還會提供影片中答案的連結位置。
此方案已在 Windows 11、macOS 和 Ubuntu 22.04 上以 Python 3.10 或以上版本開發測試。您可從 python.org 下載 Python。
我們在課程開頭介紹了新創公司,現在該讓學生動手建立搜尋應用程式以完成評估任務。
本作業中,您將建立用於搜尋應用程式的 Azure OpenAI 服務。您需要建立以下 Azure OpenAI 服務,並需有 Azure 訂閱才能完成作業。
- 登入 Azure 入口網站。
- 點選 Azure 入口網站右上角的 Cloud Shell 圖示。
- 選擇 Bash 作為執行環境。
本說明使用位於 East US 的名為 "semantic-video-search" 的資源群組。 您可更改資源群組名稱,但更改資源位置時, 請查閱 模型可用性表。
az group create --name semantic-video-search --location eastus在 Azure Cloud Shell 執行下列指令,以建立 Azure OpenAI 服務資源。
az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \
--location eastus --kind OpenAI --sku s0在 Azure Cloud Shell 執行下列指令,取得 Azure OpenAI 服務資源的端點與金鑰。
az cognitiveservices account show --name semantic-video-openai \
--resource-group semantic-video-search | jq -r .properties.endpoint
az cognitiveservices account keys list --name semantic-video-openai \
--resource-group semantic-video-search | jq -r .key1在 Azure Cloud Shell 執行下列指令,部署 OpenAI Embedding 模型。
az cognitiveservices account deployment create \
--name semantic-video-openai \
--resource-group semantic-video-search \
--deployment-name text-embedding-ada-002 \
--model-name text-embedding-ada-002 \
--model-version "2" \
--model-format OpenAI \
--sku-capacity 100 --sku-name "Standard"打開 GitHub Codespaces 中的 解決方案筆記本,並依照 Jupyter 筆記本指示操作。
執行筆記本時,系統會提示您輸入查詢,輸入框如下所示:
完成本課程後,請查閱我們的生成式 AI 學習合輯,繼續提升您的生成式 AI 知識!
接著前往第九課,我們將介紹如何建立影像生成應用程式!
免責聲明: 本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。


