시맨틱 검색
Semantic Search
시맨틱 검색이란?
- 글자 아닌 '의미'로 검색
- 표현 달라도 뜻으로 찾음
- 임베딩·벡터DB 기반
검색이 실패했을 때 누구 탓이 되는지가 바뀝니다. 키워드 검색 시대에는 '검색어를 잘못 넣은 직원'의 문제였습니다. 사내 포털에 '반차'라고 쳐서 0건이 나오면 직원은 '휴가', '연차 사용', '근태 규정'을 차례로 넣어보다 결국 인사팀에 전화를 겁니다. 시맨틱 검색이 들어오면 질문을 정확히 못 던진 책임이 시스템 쪽으로 넘어옵니다. 담당자가 관리할 대상도 '동의어 사전을 몇 개 등록했나'에서 문서를 어떻게 쪼개고 어떤 모델로 벡터화했나로 옮겨갑니다.
동작 자체는 단순합니다. 문서를 300~800토큰 단위로 자르고, 임베딩 모델이 각 조각을 384~3,072차원의 숫자 배열로 바꿔 저장합니다. 질문도 같은 방식으로 벡터화한 뒤 코사인 유사도가 높은 상위 5~10개를 꺼내옵니다. 다만 모든 검색에 우월한 방식은 아닙니다 — 'KX-2200B' 같은 품번, '근로기준법 제60조', 계약서 번호처럼 글자 자체가 정보인 검색은 여전히 BM25 계열 키워드 방식이 훨씬 정확합니다. 그래서 현장 구성은 두 결과를 합친 하이브리드 검색에 리랭커로 순위를 다시 매기는 단계를 얹는 것이 기본값이 됐습니다.
가장 흔한 사고는 '없으면 없다고 하겠지'라는 기대입니다. 벡터 검색은 답이 없어도 반드시 가장 가까운 것을 돌려줍니다. 유사도 0.55짜리 엉뚱한 문서 5건이 그대로 RAG 프롬프트에 들어가면 출처는 사내 문서인데 내용은 틀린 답이 만들어집니다. 유사도 하한선을 두고 그 아래면 '자료 없음'으로 끊어야 합니다. 또 '개정 전 출장비 규정'과 '개정 후 규정'은 의미가 거의 같아 벡터로는 구분되지 않고, '출장비는 지급하지 않습니다' 같은 부정문도 '출장비 지급' 질문에 높은 점수로 끌려옵니다. 개정일·부서·유효여부는 메타데이터 필터로 걸러야 하고, 폐기 문서를 색인에서 빼는 운영이 반드시 따라붙어야 합니다.
단어·문장 임베딩(word2vec 2013 이후) 기술의 발전으로 실용화됐고, 대형 언어모델·RAG의 확산과 함께 표준 검색 방식으로 자리잡았습니다.
가상의 사례로 살펴보겠습니다. 임직원 620명 규모의 산업용 밸브 제조사 A사는 사내 포털에 규정·기술자료 1만 2천 건을 올려두고도, 인사팀과 기술영업팀으로 걸려오는 '그거 어디 있어요' 전화가 하루 40통을 넘었습니다. 검색 로그를 열어보니 결과 0건 비율이 34%였습니다. 3개월 과제로 시맨틱 검색 전환에 들어갔습니다.
- 정보시스템팀 김 과장이 0건 검색어 500개를 뽑아보니 '반차', '경조금', '출장 밥값'처럼 규정 문서에 없는 구어체가 62%였습니다. '직원이 법령 용어를 알 리가 없죠'가 회의 결론이었습니다.
- 규정과 설비 매뉴얼을 조항 단위 약 600토큰으로 잘라 3만 4천 개 조각을 만들고 한국어 임베딩 모델로 벡터화했습니다. 조각마다 부서·개정일·유효여부를 메타데이터로 붙였습니다.
- 1차 테스트에서 '출장비 한도'를 묻자 2021년 폐지된 옛 규정이 1순위로 떴습니다. 유효여부=Y 필터를 검색 앞단에 강제로 걸고 폐지 문서 1,800건은 색인에서 통째로 뺐습니다.
- '품번 검색은 예전이 나았다'는 기술영업팀 항의가 들어와, 키워드(BM25) 결과와 벡터 결과를 합치고 리랭커로 다시 줄 세웠습니다. 'KX-2200B' 검색 정확도가 이전 수준을 회복했습니다.
- 8주 뒤 0건 비율은 34%에서 6%로, 문의 전화는 하루 40통에서 13통으로 줄었습니다. 유사도 0.6 미만이면 '자료 없음'으로 답하게 막은 뒤 오답 신고는 주 9건에서 1건이 됐습니다.