NLP와 Milvus를 활용한 지능형 QA 시스템 구축
Milvus 프로젝트:github.com/milvus-io/milvus
질문 응답 시스템은 자연어 처리 분야에서 일반적으로 사용됩니다. 자연어 형식의 질문에 답하는 데 사용되며 광범위한 응용 분야를 가지고 있습니다. 대표적인 응용 분야로는 지능형 음성 상호작용, 온라인 고객 서비스, 지식 습득, 개인화된 감성 채팅 등이 있습니다. 대부분의 질문 응답 시스템은 생성형 및 검색형 질문 응답 시스템, 단일 턴 질문 응답 및 멀티 턴 질문 응답 시스템, 오픈 질문 응답 시스템, 특정 질문 응답 시스템으로 분류할 수 있습니다.
이 글은 주로 특정 분야를 위해 설계된 QA 시스템을 다루며, 이는 일반적으로 지능형 고객 서비스 로봇이라고 불립니다. 과거에는 고객 서비스 로봇을 구축하려면 일반적으로 도메인 지식을 일련의 규칙과 지식 그래프로 변환해야 했습니다. 구축 과정은 “인간” 지능에 크게 의존합니다. 일단 상황이 바뀌면 많은 반복 작업이 필요했습니다. 자연어 처리(NLP)에 딥러닝이 적용되면서, 기계 독해는 문서에서 일치하는 질문에 대한 답을 자동으로 직접 찾을 수 있습니다. 딥러닝 언어 모델은 질문과 문서를 의미 벡터로 변환하여 일치하는 답을 찾습니다.
이 글에서는 Google의 오픈 소스 BERT 모델과 오픈 소스 벡터 검색 엔진인 Milvus를 사용하여 의미 이해를 기반으로 한 Q&A 봇을 빠르게 구축합니다.
전체 아키텍처
이 글은 의미 유사도 매칭을 통해 질문 응답 시스템을 구현합니다. 일반적인 구축 과정은 다음과 같습니다:
- 특정 분야에서 답변이 있는 많은 수의 질문을 확보합니다(표준 질문 세트).
- BERT 모델을 사용하여 이러한 질문을 특징 벡터로 변환하고 Milvus에 저장합니다. 그리고 Milvus는 동시에 각 특징 벡터에 벡터 ID를 할당합니다.
- 이러한 대표 질문 ID와 해당 답변을 PostgreSQL에 저장합니다.
사용자가 질문을 하면:
- BERT 모델이 이를 특징 벡터로 변환합니다.
- Milvus가 유사도 검색을 수행하고 질문과 가장 유사한 ID를 검색합니다.
- PostgreSQL이 해당 답변을 반환합니다.
시스템 아키텍처 다이어그램은 다음과 같습니다(파란색 선은 가져오기 과정을 나타내고 노란색 선은 쿼리 과정을 나타냅니다):
그림 1.
다음으로, 온라인 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.
3. Milvus 및 PostgreSQL로 가져오기
생성된 특징 벡터를 정규화하여 Milvus로 가져온 다음, Milvus가 반환한 ID와 해당 답변을 PostgreSQL로 가져옵니다. 다음은 PostgreSQL의 테이블 구조를 보여줍니다:
그림 3.
그림 4.
4. 답변 검색
사용자가 질문을 입력하면, BERT를 통해 특징 벡터를 생성한 후 Milvus 라이브러리에서 가장 유사한 질문을 찾을 수 있습니다. 이 글에서는 두 문장 간의 유사도를 나타내기 위해 코사인 거리를 사용합니다. 모든 벡터가 정규화되어 있으므로, 두 특징 벡터의 코사인 거리가 1에 가까울수록 유사도가 높습니다.
실제로는 시스템의 라이브러리에 완벽하게 일치하는 질문이 없을 수 있습니다. 이 경우 임계값을 0.9로 설정할 수 있습니다. 검색된 최대 유사도 거리가 이 임계값보다 작으면, 시스템은 관련 질문이 포함되어 있지 않다고 안내합니다.
그림 5.
시스템 시연
다음은 시스템의 예시 인터페이스를 보여줍니다:
그림 6.
대화 상자에 질문을 입력하면 해당 답변을 받게 됩니다:
그림 7.
요약
이 글을 읽고 나면 여러분이 자신만의 Q&A 시스템을 쉽게 구축할 수 있기를 바랍니다.
BERT 모델을 사용하면 더 이상 텍스트 말뭉치를 미리 분류하고 정리할 필요가 없습니다. 동시에 오픈 소스 벡터 검색 엔진 Milvus의 높은 성능과 뛰어난 확장성 덕분에, QA 시스템은 최대 수억 개의 텍스트로 구성된 말뭉치를 지원할 수 있습니다.
Milvus는 인큐베이션을 위해 공식적으로 Linux AI (LF AI) Foundation에 합류했습니다. Milvus 커뮤니티에 참여하여 AI 기술의 적용을 가속화하는 데 함께해 주시기 바랍니다!
=> 여기에서 온라인 데모를 사용해 보세요: https://www.milvus.io/scenarios
계속 읽기

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

How to Build RAG with Milvus, QwQ-32B and Ollama
Hands-on tutorial on how to create a streamlined, powerful RAG pipeline that balances efficiency, accuracy, and scalability using the QwQ-32B and Milvus.

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.



