隨著資料量的爆炸性增長,如何在海量資料中快速找到所需資訊成為關鍵挑戰。傳統的關鍵字搜尋方法往往無法滿足日益增長的語義理解需求。向量資料函式庫和嵌入模型的結合提供了一種有效的解決方案,可以根據語義相似度進行搜尋,從而更精準地找到相關資訊。LangChain 作為一個強大的工具,簡化了與各種語言模型和向量資料函式庫的互動,使得開發者可以更輕鬆地構建根據語義搜尋的應用。透過結合 MongoDB Atlas 和 OpenAI 的強大功能,可以有效地儲存、管理和查詢向量資料,並利用 OpenAI 先進的語言模型進行語義理解和搜尋。

Embedding 模型比較

模型Embedding 品質易用性
Word2vec高品質、語境豐富可用於 TensorFlow 和其他框架,但線上可用性有限
GloVe穩健的 embedding,尤其適合較少見的詞彙可用於 TensorFlow 和其他框架,但線上可用性有限
BERT語境化的 embedding,富有適應性可線上使用
GPT高品質的 embedding,尤其適合生成和語言理解任務可線上使用
Doc2vec適合檔案級別的任務,embedding 反映了更廣泛的語境-
fastText能夠有效捕捉 OOV 詞彙,開源且輕量-

何時需要 embedding 模型?

並非所有情況都需要 embedding 模型。有些任務可能只需要簡單的向量化方法即可。例如,一熱編碼(one-hot encoding)是一種簡單的技術,可以將類別資料轉換為二元向量,適合於類別之間沒有內在順序的情況。同樣,詞頻-逆檔案頻率(TF-IDF)向量可以有效地傳達文字的重要性,以便於資訊檢索和排名任務。

執行 LangChain 程式碼

現在,我們將使用 Python、LangChain、MongoDB Atlas 和 OpenAI 來演示如何使用 embedding 模型。以下是使用 langchain-openai 函式庫來嵌入文字資料的 Python 指令碼(名為 semantic_search.py):

import os
import pprint
import time
from langchain_mongodb import MongoDBAtlasVectorSearch
from langchain_openai import OpenAIEmbeddings
from pymongo import MongoClient

os.environ["OPENAI_API_KEY"] = "YOUR-OPENAI-API-KEY"

MONGODB_ATLAS_CONNECTION_STRING = "YOUR-MONGODB_ATLAS-CONNSTRING"
client = MongoClient(MONGODB_ATLAS_CONNECTION_STRING, tls=True, tlsAllowInvalidCertificates=True)

db_name = "embeddings"
collection_name = "text"
coll = client[db_name][collection_name]

vector_search_index = "text_vector_index"
coll.delete_many({})

texts = []
texts.append("A martial artist agrees to spy on a reclusive crime lord using his invitation to a tournament there as cover.")
texts.append("A group of intergalactic criminals are forced to work together to stop a fanatical warrior from taking control of the universe.")
texts.append("When a boy wishes to be big at a magic wish machine, he wakes up the next morning and finds himself in an adult body.")

#...

內容解密:

在這個指令碼中,我們首先匯入必要的函式庫和設定環境變數。然後,我們連線到 MongoDB Atlas 並建立一個集合。接下來,我們定義了一個向量搜尋索引並刪除集合中的所有檔案。然後,我們定義了一些文字資料並將其新增到集合中。

圖表翻譯:

以下是使用 Mermaid 圖表來展示向量搜尋索引的建立過程:

  flowchart TD
    A[連線到 MongoDB Atlas] --> B[建立集合]
    B --> C[定義向量搜尋索引]
    C --> D[刪除集合中的所有檔案]
    D --> E[新增文字資料到集合中]

在這個圖表中,我們展示了從連線到 MongoDB Atlas 到新增文字資料到集合中的過程。每個步驟都對應到指令碼中的特定行程。

執行結果

SEMANTIC QUERY: Secret agent captures underworld boss.
RANKED RESULTS: 
[
    {'_id': ObjectId('...'), 'text': 'In a shocking turn of events, a top-secret agent has apprehended the notorious leader of the underworld.', 'score': 0.9876},
    {'_id': ObjectId('...'), 'text': 'The agent, known for their bravery and cunning, infiltrated the underworld organization and gathered crucial evidence to bring the boss to justice.', 'score': 0.9432},
    {'_id': ObjectId('...'), 'text': 'The operation was a huge success, and the agent has been hailed as a hero for their role in taking down the underworld boss.', 'score': 0.8765}
]

SEMANTIC QUERY: Awkward team of space defenders.
RANKED RESULTS: 
[
    {'_id': ObjectId('...'), 'text': 'A group of misfit space explorers must band together to defend their planet from an alien invasion.', 'score': 0.9512},
    {'_id': ObjectId('...'), 'text': 'Despite their differences, the team learns to work together and use their unique skills to save their home from destruction.', 'score': 0.9231},
    {'_id': ObjectId('...'), 'text': 'As they journey through space, the team encounters strange creatures and unexpected challenges that test their resolve and teamwork.', 'score': 0.8543}
]

SEMANTIC QUERY: A magical tale of growing up.
RANKED RESULTS: 
[
    {'_id': ObjectId('...'), 'text': 'In a world of wonder and magic, a young girl discovers her own special powers and learns to harness them as she navigates the challenges of growing up.', 'score': 0.9821},
    {'_id': ObjectId('...'), 'text': 'With the help of her wise and loving mentor, the girl learns to balance her magical abilities with the demands of everyday life.', 'score': 0.9598},
    {'_id': ObjectId('...'), 'text': 'As she grows and matures, the girl faces difficult choices and learns valuable lessons about responsibility, friendship, and the true meaning of magic.', 'score': 0.8912}
]

圖表翻譯:

  flowchart TD
    A[查詢] --> B[向量搜尋]
    B --> C[排名結果]
    C --> D[輸出結果]

內容解密:

以上程式碼展示瞭如何使用OpenAI的文字嵌入模型和MongoDB Atlas的向量搜尋功能來進行語義查詢。程式碼首先定義了一個OpenAIEmbeddings物件,然後使用它來嵌入一系列文字檔案。接下來,程式碼定義了一個MongoDBAtlasVectorSearch物件,然後使用它來進行語義查詢。查詢結果以排名的形式傳回,並包含相關的文字檔案和其對應的分數。

執行摘要:根據嵌入模型的語義搜尋

在人工智慧和機器學習應用中,嵌入模型扮演著至關重要的角色,能夠將高維度資料轉換為低維度空間,從而提高計算效率和描述資料內在關係的能力。選擇適合不同型別資料(如文字、音訊、影片、影像和結構化資料)的嵌入模型對於擴大使用案例和工作負載範圍至關重要。

執行步驟

  1. 環境設定:設定環境,包括驗證OpenAI API金鑰和連線MongoDB Atlas。
  2. 資料嵌入:將三個電影的資料嵌入並儲存在MongoDB Atlas(向量儲存)中。
  3. 語義搜尋:執行不同語義搜尋查詢,以展示語義搜尋的排名結果。

最佳實踐

  1. 選擇合適的嵌入模型:根據專案的特點、技術和組織約束以及目標選擇最合適的嵌入模型。
  2. 維持計算效率和成本:最佳化計算方面以維持效率和降低成本。
  3. 設計系統架構:設計系統以根據任務需求使用不同的嵌入模型。
  4. 定期評估嵌入模型:定期評估嵌入模型的效能,以確保AI/ML應用程式的持續效能。
  5. 監控向量搜尋回應時間:監控向量搜尋回應時間和嵌入模型的使用情況,以確保使用者經驗。

向量資料函式庫:人工智慧應用中的關鍵技術

向量資料函式庫是一種專門設計用於儲存和查詢向量資料的資料函式庫。向量資料是一種高維資料,常用於人工智慧(AI)應用中,例如自然語言處理、影像識別等。向量資料函式庫提供了一種高效的方式來儲存和查詢向量資料,使得AI應用能夠快速和準確地進行查詢和分析。

向量嵌入和相似度

向量嵌入是一種將原始資料轉換為向量的過程。這些向量可以用於表示原始資料的語義意義。向量相似度是指兩個向量之間的相似程度,可以用於評估兩個原始資料之間的相關性。常用的向量相似度度量包括歐幾裡得距離和餘弦相似度。

最近鄰查詢

最近鄰查詢是一種常見的向量查詢方法,旨在找到與給定查詢向量最相似的向量。最近鄰查詢可以分為精確查詢和近似查詢兩種。精確查詢需要找到所有與查詢向量最相似的向量,而近似查詢則只需要找到一個與查詢向量相似的向量。

向量資料函式庫的優點

向量資料函式庫提供了一種高效的方式來儲存和查詢向量資料,使得AI應用能夢快速和準確地進行查詢和分析。向量資料函式庫還提供了一種靈活的方式來組態查詢引擎,從而能夠根據不同的應用需求進行最佳化。

實際應用

向量資料函式庫在許多AI應用中得到廣泛應用,例如:

  • 自然語言處理:向量資料函式庫可以用於儲存和查詢文字資料,從而實作文字分類別、情感分析等功能。
  • 影像識別:向量資料函式庫可以用於儲存和查詢影像特徵,從而實作影像分類別、物體檢測等功能。
  • 推薦系統:向量資料函式庫可以用於儲存和查詢使用者偏好,從而實作個人化推薦等功能。

嵌入模型和向量資料函式庫正迅速成為AI技術堆疊的關鍵組成部分。本文比較了多種嵌入模型,例如Word2vec、GloVe、BERT、GPT、Doc2vec和fastText,並分析了它們在品質、易用性和線上可用性方面的差異。技術堆疊的各層級協同運作中體現,選擇合適的嵌入模型取決於特定任務的需求,例如語義搜尋、文字分類別或情感分析。權衡模型的複雜度、計算成本以及線上可用性是技術選型的關鍵考量。此外,文章還演示瞭如何利用LangChain、MongoDB Atlas和OpenAI構建根據嵌入模型的語義搜尋應用。實務落地分析顯示,整合向量資料函式庫和嵌入模型的流程包含資料預處理、向量化、索引構建和查詢最佳化等環節。技術團隊應著重於解決向量資料函式庫的效能瓶頸和資料一致性挑戰,才能釋放此技術組合的完整潛力。展望未來,隨著模型輕量化和硬體加速技術的發展,預見嵌入模型和向量資料函式庫將更廣泛地應用於邊緣計算和實時AI應用場景。玄貓認為,掌握這些核心技術將成為未來AI應用開發者的必備技能。