GloZ의 Amazon OpenSearch Service 기반 자연어 이력서 검색 시스템 구축 사례 - 1부: 데이터 파이프라인과 인덱싱
GloZ는 OpenSearch와 Bedrock으로 10만 명 이력서 검색 파이프라인과 인덱싱을 재설계했다.
글로지는 E’nuff에 등록된 약 10만 명의 번역가 이력서를 대상으로, PostgreSQL 기반 메타데이터 필터링과 자체 벡터 라이브러리의 한계를 넘기 위해 Amazon OpenSearch Service로 검색 구조를 재설계했다. 기존 방식은 BM25와 벡터 검색을 분리 운영해야 했고, 인덱스 갱신·모니터링·확장과 한국어 형태소 처리도 약했다.
프로젝트 목표는 자연어 검색에서 nDCG@10 0.90 이상을 확보하고, BM25와 벡터 검색을 단일 쿼리로 결합하며, Nori와 다국어 임베딩으로 한국어·다국어 이력서 검색 품질을 끌어올리는 것이었다.
Amazon Bedrock에서는 Cohere Embed Multilingual v4와 Claude Haiku 4.5를 중심으로 파이프라인을 구성했다. 모델 비교에서는 Cohere가 Titan Text Embedding v2 대비 nDCG@10 약 40% 우위를 보여 채택됐고, Claude Haiku 4.5는 원문 검증을 붙여 **환각(Hallucination)**을 통제해 상위 모델 없이도 안정적인 구조화를 가능하게 했다.
- PDF는 PyMuPDF로 직접 추출하고, DOCX는 LibreOffice 변환, 이미지 기반 PDF는 OCR로 처리했다.
- 추출 텍스트는 언어쌍, 도메인, 도구, 경력 수준 등으로 구조화한 뒤, 표준 어휘 사전, 별칭 매핑, 퍼지 매칭의 3단계 정규화로 통일했다.
- 텍스트 추출이 실패하거나 품질이 낮은 문서는 LLM fallback으로 보완했다.
- **환각(Hallucination)**은 원문 키워드 매칭 후처리로 걸러내, 원문에 없는 도구·도메인 값이 인덱스에 들어가지 않도록 했다.
임베딩 입력 방식도 실험으로 결정했다. 원문 전체 임베딩은 nDCG@10 0.781로 가장 낮았고, 구조화 JSON은 0.802, 요약만은 0.831이었다. 최종 채택한 요약 + 메타데이터 키워드 평탄화 방식이 0.852로 가장 높았으며, 운영 환경의 약 150건 평가 쿼리에서도 같은 경향이 재확인됐다.
인덱스 resumes-v01은 embedding을 1024차원 knn_vector로 두고 HNSW + L2를 적용했으며, ef_search 512, ef_construction 512, m 16 설정으로 빠른 응답을 노렸다. summary는 다국어용 analyzer와 Nori 기반 한국어 sub-field로 분리해 색인했고, 메타데이터는 정확 매칭과 필터링을 위해 keyword 타입으로 유지했다.
default_pipeline과 Ingest Pipeline(resume-embedding-pipeline)을 연결해, Script Processor가 search_text를 만들고 ML Connector가 OpenSearch에서 직접 Bedrock 임베딩을 호출하도록 자동화했다. Part 1은 데이터 정제와 인덱싱 설계에 집중하고, BM25와 벡터를 하나의 쿼리로 결합하는 하이브리드 검색 최적화는 Part 2에서 다룬다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.