點擊上方圖片觀看本課程的影片
大型語言模型(LLMs)不僅僅用於聊天機器人和文字生成。透過嵌入技術(Embeddings),也可以建立搜尋應用程式。嵌入是數據的數值表示,也稱為向量,可用於進行語義搜尋。
在本課程中,您將為我們的教育初創公司建立一個搜尋應用程式。我們的初創公司是一家非營利組織,致力於為發展中國家的學生提供免費教育。我們的初創公司擁有大量的 YouTube 影片,學生可以用來學習 AI。我們希望建立一個搜尋應用程式,讓學生可以透過輸入問題來搜尋相關的 YouTube 影片。
例如,學生可能會輸入「什麼是 Jupyter Notebooks?」或「什麼是 Azure ML」,而搜尋應用程式將返回與問題相關的 YouTube 影片列表,更棒的是,搜尋應用程式還會返回影片中回答問題的具體時間點的連結。
在本課程中,我們將涵蓋以下內容:
- 語義搜尋與關鍵字搜尋的比較。
- 什麼是文字嵌入。
- 建立文字嵌入索引。
- 搜尋文字嵌入索引。
完成本課程後,您將能夠:
- 區分語義搜尋和關鍵字搜尋。
- 解釋什麼是文字嵌入。
- 使用嵌入技術建立搜尋數據的應用程式。
建立搜尋應用程式將幫助您了解如何使用嵌入技術來搜尋數據。您還將學習如何建立一個搜尋應用程式,幫助學生快速找到所需資訊。
本課程包含 Microsoft AI Show YouTube 頻道的影片文字稿嵌入索引。AI Show 是一個教授 AI 和機器學習的 YouTube 頻道。嵌入索引包含截至 2023 年 10 月的所有 YouTube 文字稿的嵌入。您將使用嵌入索引為我們的初創公司建立搜尋應用程式。搜尋應用程式會返回影片中回答問題的具體時間點的連結。這是一種幫助學生快速找到所需資訊的好方法。
以下是一個語義搜尋的示例,問題是「可以使用 rstudio 與 azure ml 嗎?」。查看 YouTube 的 URL,您會看到 URL 包含一個時間戳,指向影片中回答問題的具體時間點。
您可能會好奇,什麼是語義搜尋?語義搜尋是一種使用查詢中單詞的語義或意義來返回相關結果的搜尋技術。
以下是一個語義搜尋的示例。假設您想買一輛車,可能會搜尋「我的夢想車」,語義搜尋能理解您不是在「夢想」一輛車,而是想要購買您的「理想」車。語義搜尋能理解您的意圖並返回相關結果。相反,關鍵字搜尋會字面上搜尋與車有關的夢想,通常會返回不相關的結果。
文字嵌入是一種用於自然語言處理的文字表示技術。文字嵌入是文字的語義數值表示。嵌入用於以機器易於理解的方式表示數據。在本課程中,我們將重點介紹如何使用 OpenAI 嵌入模型生成嵌入。
以下是一個示例,假設以下文字來自 AI Show YouTube 頻道某一集的文字稿:
Today we are going to learn about Azure Machine Learning.
我們將文字傳遞給 OpenAI 嵌入 API,它會返回由 1536 個數字組成的嵌入,也就是向量。向量中的每個數字代表文字的不同方面。為了簡潔起見,以下是向量中的前 10 個數字。
[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...]本課程的嵌入索引是透過一系列 Python 腳本建立的。您可以在本課程的「scripts」資料夾中的 README 中找到腳本和指示。您不需要執行這些腳本即可完成本課程,因為嵌入索引已提供給您。
這些腳本執行以下操作:
- 下載 AI Show 播放列表中每個 YouTube 影片的文字稿。
- 使用 OpenAI Functions,嘗試從 YouTube 文字稿的前 3 分鐘中提取講者姓名。每個影片的講者姓名存儲在嵌入索引
embedding_index_3m.json中。 - 將文字稿分割成3 分鐘的文字片段。片段包括約 20 個與下一片段重疊的單詞,以確保片段的嵌入不被截斷並提供更好的搜尋上下文。
- 將每個文字片段傳遞給 OpenAI Chat API,將文字摘要為 60 個單詞。摘要也存儲在嵌入索引
embedding_index_3m.json中。 - 最後,將片段文字傳遞給 OpenAI 嵌入 API。嵌入 API 返回一個由 1536 個數字組成的向量,表示片段的語義意義。片段及其 OpenAI 嵌入向量存儲在嵌入索引
embedding_index_3m.json中。
為了簡化課程,嵌入索引存儲在名為 embedding_index_3m.json 的 JSON 文件中,並載入到 Pandas DataFrame 中。然而,在生產環境中,嵌入索引通常存儲在向量資料庫中,例如 Azure Cognitive Search、Redis、Pinecone、Weaviate 等。
我們已經了解了文字嵌入,下一步是學習如何使用文字嵌入來搜尋數據,特別是使用餘弦相似度找到與給定查詢最相似的嵌入。
餘弦相似度是衡量兩個向量之間相似度的一種方法,您也可能聽過它被稱為「最近鄰搜尋」。要執行餘弦相似度搜尋,您需要使用 OpenAI 嵌入 API 將查詢文字轉換為向量。然後計算查詢向量與嵌入索引中每個向量的餘弦相似度。記住,嵌入索引包含每個 YouTube 文字稿片段的向量。最後,根據餘弦相似度排序結果,餘弦相似度最高的文字片段與查詢最相似。
從數學角度來看,餘弦相似度測量兩個向量在多維空間中投影的角度的餘弦值。這種測量方法很有用,因為即使兩個文檔因大小而在歐幾里得距離上相距甚遠,它們之間的角度仍可能較小,因此具有較高的餘弦相似度。關於餘弦相似度方程的更多資訊,請參閱 餘弦相似度。
接下來,我們將學習如何使用嵌入技術建立搜尋應用程式。該搜尋應用程式將允許學生透過輸入問題來搜尋影片。搜尋應用程式會返回與問題相關的影片列表,並提供影片中回答問題的具體時間點的連結。
此解決方案已在 Windows 11、macOS 和 Ubuntu 22.04 上使用 Python 3.10 或更高版本進行構建和測試。您可以從 python.org 下載 Python。
我們在本課程開始時介紹了我們的初創公司。現在是時候幫助學生建立一個用於他們評估的搜尋應用程式了。
在本次作業中,您將建立用於構建搜尋應用程式的 Azure OpenAI Services。您需要建立以下 Azure OpenAI Services。完成此作業需要一個 Azure 訂閱。
- 登錄 Azure 入口網站。
- 在 Azure 入口網站右上角選擇 Cloud Shell 圖示。
- 選擇 Bash 作為環境類型。
在這些指示中,我們使用名為 "semantic-video-search" 的資源群組,位於美國東部。 您可以更改資源群組的名稱,但在更改資源位置時,請檢查模型可用性表。
az group create --name semantic-video-search --location eastus在 Azure Cloud Shell 中執行以下命令以建立 Azure OpenAI Service 資源。
az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \
--location eastus --kind OpenAI --sku s0在 Azure Cloud Shell 中執行以下命令以獲取 Azure OpenAI Service 資源的端點和金鑰。
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 嵌入模型。
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 Notebook 中的指示操作。
當您運行筆記本時,系統會提示您輸入查詢。輸入框看起來像這樣:
完成本課程後,請查看我們的 生成式 AI 學習集合,繼續提升您的生成式 AI 知識!
前往第 9 課,我們將探討如何建立影像生成應用程式!
免責聲明:
本文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,機器翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。


