본문 바로가기
공부

Jina AI

by Lagooni 2021. 7. 17.

Jina란?

Cloud-Native Neural Search Framework for Any Kind of Data

jina - 3 fundamental concepts

  • Document - jina의 기본 데이터 타입
  • Executor - Document를 어떻게 처리하느냐의 함수
  • Flow - Jina streamlines 와 Excutor배포

LegalQA와 공식문서로 이해하는 Jina

참고자료

 

jina-ai/examples

Jina examples and demos to help you get started. Contribute to jina-ai/examples development by creating an account on GitHub.

github.com

Jina의 전체적인 흐름

jina의 전체적인 흐름은 위와 같습니다. 우리의 Dataset 과 Search query가 jina core를 거쳐서 우선순위대로 나열된 result를 출력합니다.

 

여기서 Jina Core는 우리의 데이터셋을 결과를 출력하기까지 의 Flow를 갖습니다. Flow는 인덱싱 및 쿼리를 위한 pipeline 역할을 합니다.

Jina는 여러 종류의 데이터를 다룰 수 있지만 이 문서는 legalQA의 예를 들어 보겠습니다.

legalQA의 flow는 craft - encode -chunk index,doc index 의 과정을 가지고 있습니다.

위의 과정 각각을 Pod라고 부릅니다.

flow는 flows/index.yml 파일로 지정하여 사용할 수 있습니다.

 

Craft

Craft 는 우리의 Dataset의 각 줄을 개별문장으로 분할합니다.

각 하위 문서는 자체 메타데이터(ex. doc_id, parent_id, granularity 등)가 있습니다.

Encoder

Encoder는 Craft로 분리된 각 하위 문서들을 벡터 임베딩으로 변환합니다. 여기서의 임베딩된 벡터들은 각 문장들의 유사성을 비교하는데 사용될 것입니다. Jina의 excutor는 이 encoder를 더 쉽게 작업할 수 있는 wrapper입니다.

 

Indexer

Indexer로는 chunk indexer와 doc indexer가 있습니다.

chunk indexer는 모든 하위문서와 임베딩된 벡터들을 입력으로 받아 두개의 index를 출력으로 만듭니다.

doc indexer는 doc_id 각 세부 수준에 대해 Documents 및 관련 문서의 인덱스를 생성합니다.

저장

이렇게 만들어진 indexer는 Jina에서 일반적으로 workspace 작업 디렉토리를 사용합니다.

실행

이제 flow를 실행해 보겠습니다.

python app.py -t index

위 명령어를 실행하면 데이터셋이 flow의 과정을 거쳐서 workspace에 저장될 것입니다.

쿼리

이제 User가 쿼리를 보내 보겠습니다.

쿼리의 처리 과정은 이렇습니다.

쿼리의 Flow는 indexing Flow와 매우 유사합니다.

  • 사용자 쿼리를 입력으로 사용(ex. Give me a hand Mr Space Wizard)
  • query encode (벡터 형식으로 변환)
  • chunk index에서 쿼리 벡터와 가장 가까운 벡터를 찾고 doc_ids를 얻습니다.
  • 가장 일치하는 문서의 순위를 지정합니다.
  • REST 또는 gRPC를 통해 사용자에게 순위 목록을 반환합니다.

인덱싱과 마찬가지로 다음을 사용하여 Flow를 실행합니다.

댓글