인덱싱 & 임베딩

Sirius·2024년 7월 30일
0

인덱스

  • 인덱스란 무엇인가?

    LlamaIndex 에서 인덱스는 Document 객체(혹은 Node)로 구성된 데이터 구조로, LLM(대형 언어 모델)에 의해 쿼리할 수 있도록 설계되었다.

  • Document vs Node
    1) Document는 원본 텍스트 데이터를 나타내며, 전체 텍스트 블록이다.
    2) Node는 Document를 더 작은 단위로 분할한 것이며, 각 Node는 독립적인 텍스트 조각이다.

    Document는 인덱싱 과정의 시작점이고, Node는 그 결과로 생성되어 더 효율적인 검색을 가능하게 합니다.

Llamaindex 인덱스 유형

1) 벡터 스토어 인덱스

VectorStoreIndex는 가장 자주 사용되는 인덱스 유형이다.
Vector Store Index는 Documents를 Nodes로 분할한다.
그런 다음 각 노드의 텍스트에 대한 벡터 임베딩을 생성하여 LLM이 쿼리할 준비를 한다.

2) 임베딩

벡터 임베딩, 종종 임베딩이라고 불리는 것은 텍스트의 의미, 즉 의미론의 수치적 표현이다.
의미가 유사한 두 개의 텍스트는 실제 텍스트가 많이 다르더라도 수학적으로 유사한 임베딩을 갖는다.

이 수학적 관계는 사용자가 쿼리 용어를 제공하면 LlamaIndex가 단순한 키워드 매칭이 아니라 쿼리 용어의 의미와 관련된 텍스트를 찾을 수 있게 해주는 의미 검색을 가능하게 합니다.
이것은 검색 증강 생성(Retrieval-Augmented Generation) 및 LLM이 작동하는 일반적인 방식의 큰 부분입니다.

임베딩의 유형은 많으며, 효율성, 효과 및 계산 비용이 다양하다.
기본적으로 LlamaIndex는 OpenAI에서 사용하는 기본 임베딩인 text-embedding-ada-002를 사용한다.

3) 벡터 스토어 인덱스가 문서를 임베딩

Vector Store Index는 LLM의 API를 사용하여 모든 텍스트를 임베딩으로 변환한다.
이 과정이 "텍스트를 임베딩한다"는 의미다.
텍스트가 많으면 임베딩 생성에 많은 시간이 걸릴 수 있다.
이는 많은 왕복 API 호출이 필요하기 때문이다.

임베딩을 검색하고 싶을 때, 쿼리 자체가 벡터 임베딩으로 변환된 후, VectorStoreIndex가 수학적 연산을 수행하여 쿼리와 의미적으로 유사한 모든 임베딩을 순위 매긴다.

4) Top K Retrieval

순위 매기기가 완료되면, VectorStoreIndex는 가장 유사한 임베딩을 해당 텍스트 조각과 함께 반환한다.
반환되는 임베딩의 수를 k라고 하며, 반환할 임베딩 수를 제어하는 매개변수를 top_k라고 합니다.
이러한 유형의 검색은 종종 "top-k 의미 검색"이라고 불린다.

top-k 검색은 벡터 인덱스를 쿼리하는 가장 간단한 형태이다.

0개의 댓글