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
참고자료
- LegalQA : https://github.com/haven-jeon/LegalQA
- 공식문서 : https://jina.ai/2020/12/16/star-wars-workflow.html
- Jina git : https://github.com/jina-ai/jina
- Jina example : https://github.com/jina-ai/examples
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를 실행합니다.
'공부' 카테고리의 다른 글
[알고리즘] 최소 비용 신장 트리(MST) - 크루스칼 알고리즘(Kruskal Algorithm) (0) | 2021.11.10 |
---|---|
텍스트 파일 형식 .csv, .tsv, .ssv... ?? (0) | 2021.07.06 |
댓글