본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

추가와 검색, 세 가지 결과 형태

~22 min · chroma, queries

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

add가 받는 값

collection.add()는 길이가 같은 ids, documents, metadatas 목록과 선택적인 embeddings를 받아. 문서만 주고 임베딩을 생략하면 Chroma가 기본 임베딩 함수를 호출해. 실제 서비스에서는 모델을 직접 통제해야 하므로 원하는 동작이 아니야.

query가 돌려주는 값

collection.query()query_embeddings 또는 query_texts를 받아 가장 가까운 상위 k개 결과를 돌려줘. 결과에는 ID, 문서, 메타데이터, 거리가 들어 있어. 여기서 distance는 코사인 유사도가 아니라 코사인 거리야. 0이면 같은 방향이고 2면 반대 방향이지.

알아둘 결과 형태 세 가지

  • 기본 결과 — ID, 거리, 임베딩을 반환해. 텍스트와 메타데이터가 필요하면 include=['documents','metadatas']를 넘겨.
  • 임베딩만 받기 — 별도 모델로 순위를 다시 매길 때 유용해.
  • where 필터 적용 — 순위를 매기기 전에 메타데이터로 후보를 걸러.

Code

직접 만든 임베딩과 함께 청크 추가하기·python
vecs = model.encode([c['text'] for c in chunks], normalize_embeddings=True).tolist()

docs.add(
    ids       =[c['id']       for c in chunks],
    documents =[c['text']     for c in chunks],
    metadatas =[c['metadata'] for c in chunks],
    embeddings=vecs,
)
print(docs.count())
검색 후 거리를 유사도로 바꾸기·python
q_vec = model.encode(['how do I cancel?'], normalize_embeddings=True).tolist()

res = docs.query(
    query_embeddings=q_vec,
    n_results=5,
    include=['documents', 'metadatas', 'distances'],
)

for doc, meta, dist in zip(res['documents'][0], res['metadatas'][0], res['distances'][0]):
    similarity = 1 - dist
    print(f'{similarity:.3f}  {meta["source"]}  → {doc[:80]}')

External links

Exercise

컬렉션에 문서와 메타데이터를 갖춘 청크 100개를 추가해. 같은 질문을 다섯 가지 표현으로 바꿔 검색하고, 각각 상위 세 결과의 ID와 거리를 출력해. 순위가 얼마나 안정적인지 보면 검색 결과의 신뢰도를 가늠할 수 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.