>  기사  >  백엔드 개발  >  벡터 검색 시작하기(2부)

벡터 검색 시작하기(2부)

Linda Hamilton
Linda Hamilton원래의
2024-11-10 02:07:02585검색

Getting Started with Vector Search (Part 2)

1부에서는 pgVector를 사용하여 PostgreSQL을 설정했습니다. 이제 벡터 검색이 실제로 어떻게 작동하는지 살펴보겠습니다.

내용물

  • 임베딩이란 무엇인가요?
  • 샘플 데이터 로드
  • 벡터 검색 탐색
  • PostgreSQL 연산자 이해
  • 다음 단계

임베딩이란 무엇입니까?

임베딩은 콘텐츠를 숫자로 스마트하게 요약한 것과 같습니다. 두 임베딩 사이의 거리는 유사성 수준을 나타냅니다. 거리가 작을수록 벡터가 매우 유사하다는 것을 나타내고, 거리가 멀면 관련성이 낮다는 것을 나타냅니다.

? 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

샘플 데이터 로드

이제 데이터베이스를 일부 데이터로 채워 보겠습니다. 우리는 다음을 사용할 것입니다:

  • 도서 데이터용 Open Library API
  • 임베딩 생성을 위한 OpenAI API
  • 저장하고 검색할 수 있는 pgVector

프로젝트 구조

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

스크립트 만들기

외부 API에서 데이터를 로드하는 스크립트부터 시작해 보겠습니다. 전체 스크립트는 여기에 있습니다.

데이터 로딩 설정

  1. .env 생성:
OPENAI_API_KEY=your_openai_api_key
  1. compose.yml을 업데이트하여 데이터 로더를 추가하세요.
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. 데이터 로드:
docker compose up data_loader

메타데이터가 포함된 프로그래밍 서적 10권을 보실 수 있습니다.

벡터 검색 탐색

데이터베이스에 연결:

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

벡터 데이터 이해

임베딩이 실제로 어떤 모습인지 살펴보겠습니다.

-- View first 5 dimensions of an embedding
SELECT
    name,
    (embedding::text::float[])[1:5] as first_5_dimensions
FROM items
LIMIT 1;
  • 각 임베딩의 크기는 1536개입니다(OpenAI 모델 사용)
  • 값의 범위는 일반적으로 -1에서 1까지입니다
  • 이 숫자는 의미적 의미를 나타냅니다

비슷한 책 찾기

간단한 유사성 검색을 시도해 보세요.

-- 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. 제목에 '웹'이 포함된 책 찾기
  2. 해당 책의 임베딩(수학적 표현) 가져오기
  3. 이 임베딩을 다른 모든 책의 임베딩과 비교
  4. 가장 유사한 책 3권을 가져옵니다(최소 거리)

PostgreSQL 연산자 이해

벡터 검색 쿼리에 사용되는 연산자를 분석해 보겠습니다.

JSON 텍스트 연산자: ->>

JSON 필드에서 텍스트 값을 추출합니다.

예:

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

벡터 거리 연산자: <->

두 벡터 간의 유사성을 측정합니다.

  • 더 작은 거리 = 더 유사함
  • 더 먼 거리 = 덜 유사함

예:

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

다음 단계

다음은 다음과 같습니다.

  • FastAPI 애플리케이션 구축
  • 검색 엔드포인트 생성
  • API를 통해 벡터 검색에 액세스할 수 있도록 하세요

3부: "벡터 검색 API 구축"을 계속 지켜봐 주시기 바랍니다! ?

아래에 댓글을 남겨주세요! ?

위 내용은 벡터 검색 시작하기(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.