Bermula dengan Carian Vektor (Bahagian 2)

Linda Hamilton
Lepaskan: 2024-11-10 02:07:02
asal
580 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk
  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
Salin selepas log masuk
  1. Muat data:
docker compose up data_loader
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk
  • 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;
Salin selepas log masuk
  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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan