Rumah >pembangunan bahagian belakang >Tutorial Python >Bermula dengan Carian Vektor (Bahagian 2)

Bermula dengan Carian Vektor (Bahagian 2)

Linda Hamilton
Linda Hamiltonasal
2024-11-10 02:07:02609semak imbas

Getting Started with Vector Search (Part 2)

Dalam Bahagian 1, kami menyediakan PostgreSQL dengan pgvector. Sekarang, mari kita lihat cara carian vektor sebenarnya berfungsi.

Kandungan

  • Apakah itu Pembenaman?
  • Memuatkan Data Sampel
  • Meneroka Carian Vektor
  • Memahami Operator PostgreSQL
  • Langkah Seterusnya

Apakah Embeddings?

Pembenaman adalah seperti ringkasan pintar kandungan dalam nombor. Jarak antara dua benam menunjukkan tahap persamaannya. Jarak yang kecil menunjukkan bahawa vektor adalah agak serupa, dan jarak yang besar menunjukkan bahawa ia kurang berkaitan.

? Book A: Web Development  (Distance: 0.2) ⬅️ Very Similar!
? Book B: JavaScript 101   (Distance: 0.3) ⬅️ Similar!
? Book C: Cooking Recipes  (Distance: 0.9) ❌ Not Similar

Memuatkan Data Contoh

Sekarang, mari isi pangkalan data kami dengan beberapa data. Kami akan menggunakan:

  • API Perpustakaan Terbuka untuk data buku
  • API OpenAI untuk mencipta pembenaman
  • pgvector untuk menyimpan dan mencarinya

Struktur Projek

pgvector-setup/             # From Part 1
  ├── compose.yml
  ├── postgres/
  │   └── schema.sql
  ├── .env                  # New: for API keys
  └── scripts/              # New: for data loading
      ├── requirements.txt
      ├── Dockerfile
      └── load_data.py

Buat Skrip

Mari kita mulakan dengan skrip untuk memuatkan data daripada API luaran. Skrip penuh ada di sini.

Menyediakan Pemuatan Data

  1. Buat .env:
OPENAI_API_KEY=your_openai_api_key
  1. Kemas kini compose.yml untuk menambah pemuat data:
services:
  # ... existing db service from Part 1

  data_loader:
    build:
      context: ./scripts
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/example_db
      - OPENAI_API_KEY=${OPENAI_API_KEY}
    depends_on:
      - db
  1. Muat data:
docker compose up data_loader

Anda sepatutnya melihat 10 buku pengaturcaraan dengan metadatanya.

Meneroka Carian Vektor

Sambung ke pangkalan data anda:

docker exec -it pgvector-db psql -U postgres -d example_db

Memahami Data Vektor

Mari kita lihat rupa benam sebenarnya:

-- View first 5 dimensions of an embedding
SELECT
    name,
    (embedding::text::float[])[1:5] as first_5_dimensions
FROM items
LIMIT 1;
  • Setiap benam mempunyai 1536 dimensi (menggunakan model OpenAI)
  • Nilai biasanya berjulat dari -1 hingga 1
  • Nombor ini mewakili makna semantik

Mencari Buku Serupa

Cuba carian persamaan mudah:

-- Find 3 books similar to any book about Web
SELECT name, metadata
FROM items
ORDER BY embedding <-> (
    SELECT embedding
    FROM items
    WHERE metadata->>'title' LIKE '%Web%'
    LIMIT 1
)
LIMIT 3;
  1. Cari buku dengan "Web" dalam tajuknya
  2. Dapatkan pembenaman buku itu (perwakilan matematiknya)
  3. Bandingkan benam ini dengan semua benam buku lain
  4. Dapatkan 3 buku yang paling serupa (jarak terkecil)

Memahami Operator PostgreSQL

Mari kita pecahkan pengendali yang digunakan dalam pertanyaan carian vektor:

Operator Teks JSON: ->>

Mengekstrak nilai teks daripada medan JSON.

Contoh:

-- If metadata = {"title": "ABC"}, it returns "ABC"
SELECT metadata->>'title' FROM items;

Operator Jarak Vektor: <->

Mengukur persamaan antara dua vektor.

  • Jarak lebih kecil = Lebih serupa
  • Jarak lebih jauh = Kurang serupa

Contoh:

-- Find similar books
SELECT name, embedding <-> query_embedding as distance
FROM items
ORDER BY distance
LIMIT 3;

Langkah Seterusnya

Seterusnya, kami akan:

  • Bina aplikasi FastAPI
  • Buat titik akhir carian
  • Jadikan carian vektor kami boleh diakses melalui API

Nantikan Bahagian 3: "Membina API Carian Vektor"! ?

Sila tinggalkan komen di bawah! ?

Atas ialah kandungan terperinci Bermula dengan Carian Vektor (Bahagian 2). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn