전체 아키텍처
Milvus 프로젝트:github.com/milvus-io/milvus
질문 답변 시스템은 자연어 처리 분야에서 일반적으로 사용됩니다. 자연어 형태로 질문에 답하는 데 사용되며 다양한 용도로 활용됩니다. 일반적인 애플리케이션으로는 지능형 음성 상호작용, 온라인 고객 서비스, 지식 습득, 개인화된 감성 채팅 등이 있습니다. 대부분의 질문 답변 시스템은 생성 및 검색 질문 답변 시스템, 단일 라운드 질문 답변 및 다중 라운드 질문 답변 시스템, 개방형 질문 답변 시스템, 특정 질문 답변 시스템으로 분류할 수 있습니다.
이 문서에서는 주로 지능형 고객 서비스 로봇이라고 하는 특정 분야를 위해 설계된 QA 시스템에 대해 다룹니다. 과거에는 고객 서비스 로봇을 구축하려면 일반적으로 도메인 지식을 일련의 규칙과 지식 그래프로 변환해야 했습니다. 이 구축 과정은 '인간'의 지능에 크게 의존합니다. 일단 장면이 바뀌면 많은 반복 작업이 필요했습니다. 자연어 처리(NLP)에 딥러닝을 적용하면 기계 독해가 문서에서 직접 일치하는 질문에 대한 답을 자동으로 찾을 수 있습니다. 딥러닝 언어 모델은 질문과 문서를 시맨틱 벡터로 변환하여 일치하는 답변을 찾습니다.
이 문서에서는 Google의 오픈 소스 BERT 모델과 오픈 소스 벡터 검색 엔진인 Milvus를 사용하여 의미 이해를 기반으로 Q&A 봇을 빠르게 구축합니다.
전체 아키텍처
이 문서에서는 의미 유사도 매칭을 통한 질의응답 시스템을 구현합니다. 일반적인 구축 과정은 다음과 같습니다:
- 특정 분야의 답변이 포함된 다수의 질문(표준 질문 세트)을 확보합니다.
- BERT 모델을 사용하여 이러한 질문을 특징 벡터로 변환하고 Milvus에 저장합니다. 그리고 Milvus는 각 특징 벡터에 벡터 ID를 동시에 할당합니다.
- 이러한 대표 질문 ID와 그에 해당하는 답변을 PostgreSQL에 저장합니다.
사용자가 질문을 하면:
- BERT 모델은 이를 특징 벡터로 변환합니다.
- Milvus는 유사도 검색을 수행하여 질문과 가장 유사한 ID를 검색합니다.
- PostgreSQL은 해당 답변을 반환합니다.
시스템 아키텍처 다이어그램은 다음과 같습니다(파란색 선은 가져오기 프로세스를, 노란색 선은 쿼리 프로세스를 나타냄):
1-시스템 아키텍처-밀버스-버트-포스트그레스큐엘.png
다음은 온라인 Q&A 시스템을 구축하는 방법을 단계별로 보여드리겠습니다.
Q&A 시스템 구축 단계
시작하기 전에 Milvus와 PostgreSQL을 설치해야 합니다. 구체적인 설치 단계는 Milvus 공식 홈페이지를 참조하세요.
1. 데이터 준비
이 문서의 실험 데이터 출처: https://github.com/chatopera/insuranceqa-corpus-zh
이 데이터 세트에는 보험 업계와 관련된 질문과 답변 데이터 쌍이 포함되어 있습니다. 이 글에서는 이 데이터에서 20,000개의 질문과 답변 쌍을 추출합니다. 이 질문과 답변 데이터 세트를 통해 보험 업계용 고객 서비스 로봇을 빠르게 구축할 수 있습니다.
2. 특징 벡터 생성
이 시스템은 BERT가 사전 학습한 모델을 사용합니다. 서비스를 시작하기 전에 아래 링크에서 다운로드하세요: https://storage.googleapis.com/bert_models/2018_10_18/cased_L-24_H-1024_A-16.zip
이 모델을 사용하여 질문 데이터베이스를 향후 유사도 검색을 위한 특징 벡터로 변환합니다. BERT 서비스에 대한 자세한 내용은 https://github.com/hanxiao/bert-as-service 을 참조하세요.
2-code-block.png
3. Milvus 및 PostgreSQL로 가져오기
생성된 특징 벡터를 정규화하여 Milvus로 가져온 다음, Milvus에서 반환한 ID와 그에 해당하는 답변을 PostgreSQL로 가져옵니다. 다음은 PostgreSQL의 테이블 구조를 보여줍니다:
3-import-milvus-postgresql.png
4-import-milvus-postgresql.png
4. 답변 검색
사용자가 질문을 입력하면 BERT를 통해 특징 벡터를 생성한 후 Milvus 라이브러리에서 가장 유사한 질문을 찾을 수 있습니다. 이 문서에서는 코사인 거리를 사용하여 두 문장 간의 유사도를 나타냅니다. 모든 벡터는 정규화되어 있기 때문에 두 특징 벡터의 코사인 거리가 1에 가까울수록 유사도가 높아집니다.
실제로는 시스템이 라이브러리에서 완벽하게 일치하는 문제를 찾지 못할 수도 있습니다. 그런 경우 임계값을 0.9로 설정할 수 있습니다. 검색된 최대 유사도 거리가 이 임계값보다 작으면 시스템에서 관련 문제가 포함되지 않았다는 메시지를 표시합니다.
4-retrieve-answer.png
시스템 데모
다음은 시스템의 인터페이스 예시입니다:
5-milvus-QA-시스템-응용.png
대화 상자에 질문을 입력하면 해당 답변을 받을 수 있습니다:
5-milvus-QA-시스템-응용-2.png
요약
이 글을 읽고 나면 자신만의 Q&A 시스템을 쉽게 구축할 수 있기를 바랍니다.
BERT 모델을 사용하면 더 이상 텍스트 말뭉치를 미리 분류하고 정리할 필요가 없습니다. 동시에 오픈 소스 벡터 검색 엔진 Milvus의 고성능과 높은 확장성 덕분에 최대 수억 개의 텍스트로 구성된 코퍼스를 지원할 수 있는 QA 시스템을 구축할 수 있습니다.
Milvus는 인큐베이션을 위해 Linux AI(LF AI) 재단에 공식적으로 가입했습니다. Milvus 커뮤니티에 가입하여 저희와 함께 AI 기술 적용을 가속화하세요!
=> 온라인 데모 체험하기: https://www.milvus.io/scenarios
- Q&A 시스템 구축 단계
- 시스템 데모
- 요약
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word