瞭解語意搜尋

已完成

讓我們來看看語意搜尋的基本概念:

  • 它與標準語彙搜尋有何不同。
  • 什麼是向量內嵌?
  • 向量資料庫有何用途?

標準語彙搜尋或關鍵詞搜尋會藉由比對字元來查詢檔。 例如,查詢「light」會比對文字「bright light」,因為字元 light 出現在文件中。

語彙搜尋可以透過模糊比對的方式增強;例如,查詢「lights」仍然可能比對文字「bright light」或拼錯的 lihgts,因為差一個字元 (遺漏 s, 或交換 gh)。 雖然模糊比對和其他技術,例如詞幹分析很實用,但這項技術必須符合同義字或語意類似的語言:不同的片語、俚語、技術詞彙等。若要利用語彙搜尋提供最相關的搜尋結果,作者必須在中繼資料或文字本身內嵌關鍵字 (可能是尷尬的使用者體驗)。

輸入 語意搜尋。 語意搜尋不會使用字元相似性。 相反地,它會使用單字和詞組中概念的數值表示法。 這些數值表示法稱為內嵌向量,或只是 內嵌

如果兩個內嵌在數值上相似,則其語意上也類似。 這種相似性比測試關鍵詞重疊更普遍,因為它對精確的關鍵詞選取或片語較不敏感。

若要執行語意搜尋,請先產生查詢的內嵌向量。 然後,將該向量與向量資料庫進行比較。 最接近查詢內嵌的內嵌是語意與查詢最相似的文件。

大部分的關係資料庫使用案例並不牽涉到儲存 n 維向量,並計算兩者之間的數值距離。 有效率的語意搜尋需要 向量資料庫 功能。

此圖顯示透過OpenAI內嵌 API 成為內嵌向量的文件和查詢。然後使用餘弦距離來比較這些向量。

嵌入技術

內嵌是語意的數值表示法。 內嵌會以 n 維向量表示: n 個數位的陣列。 每個維度都代表內嵌模型所決定的一些語意品質。

此圖顯示“lorem ipsum”輸入文本被傳送至 Azure OpenAI 嵌入 API,產生一個數值向量陣列。

如果兩個嵌入向量朝相似的方向,則它們代表類似的概念,例如「亮麗」和「陽光」。如果它們指向彼此相反的方向,則它們代表相反的概念,如「悲傷」和「快樂」。嵌入模型結構和定型數據會決定被視為類似和不同的概念。

內嵌可以套用至文字和任何類型的數據,例如影像或音訊。 關鍵部分是根據某些模型或函式,將數據轉換成 n 維度內嵌向量。 內嵌 Proxy 的數值相似性會代表其對應數據的語意相似性。

n維向量v1v2的數值相似性由其點乘積給出,記作v1·v2。 若要計算點乘積,請將每個維度的值相乘,然後加總結果:

dot_product(v1, v2) = SUM(
 v1[0] * v2[0],
 v1[1] * v2[1],
 ...,
 v1[n-1] * v2[n-1],
 v1[n] * v2[n]
)

由於內嵌是單位向量 (長度一的向量),因此點乘積等於向量的餘弦相似性,亦即介於 -1 (方向正好相反) 和 1 之間 (方向完全相同) 的值。 具有餘弦相似度為零的向量為正交:語意上不相關。

您可以使用主體元件分析n 維空間投影到 3D 空間,以可視化方式呈現 n 維空間。 PCA 是減少向量維度的標準技術。 結果是 n 維空間的簡化但可可視化投影。 以這種方式轉譯文件內嵌會顯示,較類似的文件以叢集的方式分組,而較不同的文件則距離更遠。

根據這些定義,針對檔內嵌集合執行查詢的語意搜尋,在數學上很簡單:

  1. 使用語言模型產生查詢內嵌。
  2. 根據每個文件的預先計算內嵌,取得查詢內嵌的點乘積。
  3. 排序點乘積,數字從 -1 到 1。
  4. 最相關的(語意相似)檔具有最高的分數,而最不相關的(語意上不同的)檔則具有最低的分數。

雖然在數學上很簡單,但這不是關係資料庫中的簡單或高效能查詢。 若要儲存及處理這類向量相似性查詢,請使用 向量資料庫

向量資料庫

向量資料庫會優化多維度向量的儲存和計算,例如內嵌。 特別是,向量資料庫提供快速且精確的點乘積計算,以執行向量相似度查詢。

向量相似度搜尋有數個使用案例:

  • 尋找類似查詢影像內嵌的影像
  • 在語意上尋找類似查詢文字的檔
  • 尋找具有類似建議系統功能和評等的產品

語意搜尋會查詢向量資料庫,將查詢嵌入與每個預存嵌入進行相似度比較。 然後,應用程式可以擷取對應至內嵌的數據。

有許多原生向量資料庫和資料庫延伸模組可供選擇。 下列 Azure 服務可協助您符合向量資料庫需求: