LabHub

벡터 데이터베이스 — pgvector 와 Qdrant · 벡터 검색의 원리 · 퀴즈

퀴즈: 벡터 검색의 원리

LabHub 에서 이어서 보기

문항 8개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. 길이를 1 로 정규화한 벡터에서 `<->`·`<=>`·`<#>` 가 같은 순위를 주는 이유는?

    1. pgvector 가 세 연산자를 내부에서 같은 함수 하나로 계산하기 때문이다
    2. 세 연산자 모두 정렬하기 전에 벡터를 다시 정규화하기 때문이다
    3. 길이 1 이면 L2 거리의 제곱이 코사인 거리의 두 배이고 내적이 코사인 유사도가 되기 때문이다
    4. ORDER BY 가 연산자와 무관하게 동점을 id 순으로 처리하기 때문이다
  2. `<#>` 연산자가 음수를 돌려주는 이유는?

    1. 내적은 클수록 가까우므로 부호를 뒤집어 ORDER BY 오름차순 한 줄로 kNN 을 적게 하려고
    2. 부동소수 오차로 음수가 나오는 것이라 abs() 를 씌워 써야 한다
    3. 코사인 거리에서 1 을 뺀 값이라 정규화된 벡터에서는 언제나 음수다
    4. 내적이 큰 쪽이 멀다는 뜻이라 음수가 나올수록 관련 없는 문서다
  3. 임베딩 모델을 새 버전으로 바꿨다. 가장 먼저 해야 하는 일은?

    1. 인덱스만 다시 만든다 — 벡터 값은 모델과 무관하게 유지된다
    2. 차원이 같으면 그대로 섞어 쓴다 — 코사인 거리는 척도에 무관하다
    3. 새 문서만 새 모델로 넣고 옛 문서는 둔다 — 시간이 지나면 자연히 갈린다
    4. 기존 벡터를 전부 새 모델로 다시 만든다 — 다른 모델의 좌표는 다른 공간이다
  4. `embedding vector(64)` 대신 `embedding vector` 로 열을 선언하면 무슨 일이 생기나?

    1. 저장 공간이 두 배로 늘어나지만 검색 결과는 같다
    2. 길이가 다른 벡터가 조용히 섞여 들어가고 거리 계산이 실행 시점에 실패한다
    3. HNSW 인덱스를 만들 수 없어 정확 검색만 가능해진다
    4. COPY 가 거부되므로 INSERT 로만 적재할 수 있다
  5. 이 코스에서 '정확 검색(exact kNN)' 이 하는 역할은?

    1. 인덱스가 있을 때만 쓸 수 있는 검색으로 재현율 1.0 을 보장한다
    2. 모든 행의 거리를 재어 정렬한 결과라 근사 검색이 무엇을 놓쳤는지 재는 정답 기준이 된다
    3. 질의 벡터와 완전히 같은 벡터를 가진 행만 돌려주는 검색이다
    4. 표본 10% 만 읽어 빠르게 순위를 어림하는 검색이다
  6. 정확 검색에 `WHERE category = 'storage'` 를 붙이면?

    1. 필터 열에 B-tree 인덱스가 있어야 벡터 정렬이 가능하다
    2. 필터가 정렬 뒤에 걸리므로 LIMIT 보다 결과가 줄어든다
    3. 벡터 연산자와 WHERE 는 같은 쿼리에 쓸 수 없어 서브쿼리가 필요하다
    4. 조건에 맞는 행만 읽어 그 안에서 정렬하므로 결과가 줄어드는 함정이 없다
  7. 질의 벡터를 만들 때 반드시 지켜야 하는 것은?

    1. 문서와 같은 어휘표·같은 사영 행렬로 만들어 같은 공간에 놓는다
    2. 질의는 짧으니 차원을 줄인 별도 모델을 쓰는 편이 정확하다
    3. 질의 벡터는 정규화하지 않아야 거리 차이가 커져 순위가 뚜렷해진다
    4. SQL 안에서 to_tsvector 로 만든 값을 vector 로 형변환한다
  8. 범주마다 `avg(embedding)` 으로 구한 중심 벡터는 무엇에 쓸 수 있나?

    1. 평균은 길이가 1 이 아니라 pgvector 가 거부하므로 sum 을 써야 한다
    2. 중심 벡터끼리의 거리는 언제나 같아서 범주 구분에는 쓸 수 없다
    3. 범주의 대표 좌표라 질의가 어느 범주에 가까운지 문서를 훑지 않고 어림할 수 있다
    4. 범주의 문서 수가 다르면 평균을 낼 수 없어 표본 수를 맞춰야 한다