목록으로

Programming Notes

Azure AI Search에 적합한 언어 분석기 선택하기

작성자: Abhishree Shetty, Alec Berntson, Lihang Li

언어 분석기는 대상 언어의 언어적 규칙을 사용하여 어휘 분석을 수행하는 특정 유형의 텍스트 분석기입니다. 이는 언어별 규칙을 적용하여 가공되지 않은 텍스트 덩어리를 검색 가능한 용어로 변환하며, 단어 경계, 단어 형태 및 복합어와 같은 측면을 처리합니다.

Azure AI Search에서 검색 환경을 구축하는 경우, 선택하는 분석기는 키워드 검색 결과의 품질에 직접적인 영향을 미칩니다. Azure AI Search는 50개 이상의 언어를 지원하는 Lucene 및 Microsoft 언어 분석기를 제공하지만, 지금까지 어떤 것을 사용해야 하는지 또는 분석기가 실제로 중요한지에 대한 체계적인 가이드가 없었습니다.

저희는 20개 언어와 3개의 데이터셋에 대해 Lucene, Microsoft, 그리고 분석기를 사용하지 않은 경우를 비교했습니다. 이 포스트에서는 저희가 발견한 내용, 현재 고객들의 분석기 사용 현황, Lucene과 Microsoft의 결과가 왜 다른지, 그리고 여러분의 콘텐츠에 적합한 분석기를 선택하는 방법을 다룹니다.

TL;DR (요약)

  • 항상 언어 분석기를 사용하세요. 평균적으로 NDCG가 15% 향상되며, 형태학적으로 복잡한 언어의 경우 최대 120%까지 향상됩니다.
  • Lucene과 Microsoft 모두 강력합니다. 두 분석기 간의 차이는 작지만, Microsoft가 더 넓은 언어 범위를 지원합니다.
  • 지연 시간 페널티가 없습니다. 분석기 선택은 쿼리 검색 성능에 영향을 미치지 않습니다.
  • 일부 언어는 뚜렷한 선호도가 있습니다. 예를 들어 독일어와 스페인어는 일관되게 Lucene을 선호하는 반면, 중국어는 Microsoft를 선호합니다. 언어별 상세 분석은 본문을 참조하세요.

목차

  1. 언어 분석기는 무엇을 하나요?
  2. 분석기가 정말 중요한가요?
  3. 현재 고객들은 실제로 어떻게 사용하고 있나요?
  4. Lucene vs Microsoft — 전체 그림
  5. 내부 동작 — 결과가 다른 이유
  6. 검색 시 지연 시간 비용이 있나요?
  7. 실무 권장 사항
  8. 핵심 요약
  9. 부록 A: 데이터셋 및 방법론
  10. 부록 B: 데이터셋별 상세 결과

언어 분석기는 무엇을 하나요?

기본적으로 Azure AI Search는 공백과 구두점을 기준으로 텍스트를 분리하고 모든 문자를 소문자로 변환하는 표준 토크나이저를 사용합니다. 이 방식은 언어에 대한 이해가 없습니다. 반면, 언어 분석기는 이 프로세스에 언어적 지능을 추가합니다.

분절 (Segmentation) — 공백이 없는 언어에서 단어 경계를 식별합니다.

서울에서 맛있는 음식점 추천해주세요 → 서울 / 맛있 / 음식점 / 추천

표제어 추출 (Lemmatization) — 굴절된 단어를 기본 형태(사전적 형태)로 축소합니다.

fuimos, vamos, yendo → ir (스페인어 '가다'의 변형)

복합어 분해 (Compound decomposition) — 복합어를 의미 있는 부분으로 나눕니다.

Krankenhausverwaltungssystem → Kranken + haus + verwaltung + system (독일어 '병원 관리 시스템')

Azure AI Search는 다음과 같은 분석기 옵션을 지원합니다.

옵션 기능 지원 언어 수
None (기본값) Apache Lucene 표준 분석기. 공백+구두점 분리, 소문자화 수행. 언어적 처리 없음. 해당 없음
Lucene 오픈 소스 Apache Lucene 언어 분석기. 속도가 빠르며 어간 추출(stemming) 및 불용어(stopword) 제거를 사용함. 약 35개
Microsoft 독점적인 Microsoft NLP 기술(Office 및 Bing에서 사용됨). 표제어 추출, 복합어 분해, 엔티티 인식 등 고급 기능 포함. 50개 이상
Custom 사용자가 정의한 토크나이저, 토큰 필터, 문자 필터의 조합. 모든 언어

표 1: Azure AI Search의 언어 분석기 옵션

다음은 세 가지 기본 옵션이 다양한 언어의 텍스트를 처리하는 방식입니다.

언어 입력값 None Lucene Microsoft
영어 items in conflict and did not sync items, in, conflict, and, did, not, sync item, conflict, did, sync item, items, conflict, do, did, synch, sync
영어 Change display settings and brightness on Windows 11 change, display, settings, and, brightness, on, windows, 11 chang, displai, set, bright, window, 11 change, display, setting, settings, brightness, window, windows, 11
한국어 서울에서 맛있는 음식점 추천해주세요 서울에서, 맛있는, 음식점, 추천해주세요 서울, 울에, 에서, 맛있, 있는, 음식, 식점, 추천, ... 서울에서, 서울, 맛있는, 음식점, 음식, 추천해주세요, 추천, 주세요
스페인어 Los usuarios no pueden iniciar sesión los, usuarios, no, pueden, iniciar, sesión usuari, pueden, iniciar, sesion usuario, usuarios, no, poder, pueden, iniciar, sesion, sesión
스웨덴어 Snabbstart fungerar inte från datorn snabbstart, fungerar, inte, från, datorn snabbstart, funger, datorn snabbstart, snabb, start, fungera, fungerar, inte, från, dator, datorn

표 2: 각 분석기가 동일한 입력 텍스트를 토큰화하는 방식

표 2의 토큰은 Azure AI Search 분석 API를 사용하여 생성되었습니다. 여러분의 텍스트로 직접 테스트해 보실 수 있습니다.

분석기가 정말 중요한가요?

저희가 테스트한 31개의 언어-데이터셋 조합 중 표준 토크나이저(None)가 승리한 경우는 단 한 번도 없었습니다. 모든 경우에서 언어 분석기가 더 나은 결과를 제공했습니다.

전략 평균 NDCG@10 None 대비 성능
Microsoft 0.4252 +15.4%
Lucene 0.4177 +13.4%
None 0.3684 기준점(baseline)

표 3: 모든 31개 언어-데이터셋 조합에 대한 평균 NDCG@10

개선 정도는 언어에 따라 다릅니다. 어떤 언어는 엄청난 성능 향상을 보이는 반면, 어떤 언어는 완만한 이득을 얻습니다.

언어 데이터셋 최적 분석기 NDCG@10 (최적) NDCG@10 (None) 상승폭
핀란드어 Support Microsoft 0.2752 0.1253 +119.6%
한국어 Support Lucene 0.3252 0.1520 +113.9%
폴란드어 Support Microsoft 0.2759 0.1611 +71.3%
스페인어 Support Lucene 0.2469 0.1596 +54.7%
한국어 MIRACL Microsoft 0.6895 0.4624 +49.1%
일본어 MIML Lucene 0.5348 0.3806 +40.5%
중국어 MIML Microsoft 0.5668 0.4292 +32.1%

표 4: 언어 분석기 사용으로 검색 품질이 가장 많이 향상된 언어들

형태학적으로 복잡한 언어(핀란드어, 한국어, 폴란드어)가 가장 큰 혜택을 받으며, 상승폭은 70%를 상회합니다. CJK(중국어, 일본어, 한국어) 언어 역시 공백 단어 경계가 없기 때문에 큰 이득을 봅니다. 하지만 이 외에도 아랍어(+34%), 스페인어(+55%), 프랑스어(+18%), 터키어(+14%) 등 많은 언어에서 두 자릿수 개선이 확인되었습니다. 잘 정제된 콘텐츠의 영어조차도 5.9%(MIML) 향상되었으며, 엔터프라이즈 지원 콘텐츠에서는 14.1%까지 향상되었습니다.

핵심 요점: 항상 언어 분석기를 사용하십시오.

현재 고객들은 실제로 어떻게 사용하고 있나요?

저희는 Azure AI Search 인덱스 전반의 분석기 사용 현황을 조사했습니다.

지표 수치
언어 분석기를 사용하는 인덱스 비율 27.8%
Microsoft 분석기만 사용하는 비율 (분석기 사용자 중) 64.8%
Lucene 분석기만 사용하는 비율 31.2%
혼합(둘 다) 사용하는 비율 4.0%

표 5: 언어 분석기 도입 지표

분석기를 사용하는 고객들의 행동은 이번 연구 결과와 대체로 일치합니다.

  • 프랑스어: 고객들은 Lucene을 선호하며, 이는 저희 연구 결과와 일치합니다.
  • 한국어: 고객들은 Microsoft를 선호하며, 이 역시 연구 결과와 일치합니다.
  • 영어: 고객들은 Microsoft를 선호(68.4%)합니다. 저희 연구에서도 영어의 경우 3개 데이터셋 중 2개에서 Microsoft가 승리하여 이러한 선호도와 일치함을 보여주었습니다.

핵심 요점: 대다수의 고객이 아직 언어 분석기를 사용하지 않고 있습니다.

Lucene vs Microsoft — 전체 그림

분석기 승리 횟수 (31개 중) 최적 NDCG@10 대비 비율
Microsoft 17 96.7%
Lucene 14 95.0%
None 0 86.8%

표 6: 31개 조합 전체에 대한 분석기별 NDCG@10 승리 횟수

Microsoft가 전체적으로 더 많은 조합에서 승리했지만, 차이는 종종 미미합니다. 몇 가지 예시는 다음과 같습니다.

  • 영어: Microsoft 0.9413 vs Lucene 0.9383 — 차이 0.0030
  • 중국어: Microsoft 0.5668 vs Lucene 0.5646 — 차이 0.0022
  • 덴마크어(Support 데이터셋): Microsoft 0.3044 vs Lucene 0.3028 — 차이 0.0016
  • 한국어(Support 데이터셋): Lucene 0.3252 vs Microsoft 0.3218 — 차이 0.0034

이 두 분석기 사이에 유의미한 품질 차이는 거의 없습니다.

언어 지원 범위

Microsoft 분석기는 50개 언어를 지원하며, Lucene은 약 35개를 지원합니다. 다음 20개 이상의 언어에 대해서는 Microsoft가 유일한 옵션입니다: 크로아티아어, 에스토니아어, 구자라트어, 히브리어, 힌디어, 아이슬란드어, 칸나다어, 라트비아어, 리투아니아어, 말라야람어, 말레이어, 마라티어, 펀자브어, 세르비아어, 슬로바키어, 슬로베니아어, 타밀어, 텔루구어, 우크라이나어, 우르두어, 베트남어.

코퍼스(Corpus) 유형에 따른 영향

저희는 콘텐츠를 두 가지 범주로 정의했습니다.

  • 정제된 텍스트 (Clean text): 잘 형식화되고 편집된 콘텐츠 — 학술 논문, 위키백과 문서, 큐레이션된 지식 베이스. 오타가 거의 없고 일관된 구조를 가짐.
  • 노이즈가 많은 텍스트 (Noisy text): 사용자 생성 또는 운영 콘텐츠 — 지원 티켓, 짧은 쿼리, 제품 포럼. 잦은 오타, 혼합된 언어, 비격식적인 문법이 특징.

Lucene과 Microsoft 중 무엇을 선택할지는 여러분의 콘텐츠가 어떤 유형에 가까운지에 따라 달라집니다.

데이터셋 콘텐츠 유형 Lucene 승리 Microsoft 승리 None 승리 Lucene 평균 NDCG Microsoft 평균 NDCG
MIML 정제된 다국어 문서 4/6 2/6 0/6 0.6845 0.6359
MIRACL 정제된 위키백과 구절 5/7 2/7 0/7 0.6444 0.6425
Support 노이즈가 있는 지원 티켓 5/18 13/18 0/18 0.2406 0.2705

표 7: 콘텐츠 유형별 분석기 성능

정제된 데이터에서는 Lucene이 우위(MIML에서 Microsoft보다 평균 NDCG +7.6%)를 보였습니다. 노이즈가 많은 데이터에서는 Microsoft가 18개 언어 중 13개에서 승리하며 Lucene보다 평균 NDCG가 12.4% 높게 나타나 압도적인 우위를 점했습니다.

내부 동작 — 결과가 다른 이유

가장 큰 차이점은 형태학적 분석에 대한 접근 방식입니다.

Lucene

Lucene 언어 분석기는 규칙 기반 알고리즘(Porter, Snowball)을 사용하여 단어를 짧은 어간(stem)으로 축소합니다. 굴절된 형태를 공통 루트로 축소함으로써 어간 추출은 재현율(recall)을 높입니다. 예를 들어 'attach'를 쿼리하면 'attachments', 'attached', 'attaching'이 포함된 문서를 찾을 수 있습니다. 이는 광범위한 매칭이 관련 콘텐츠를 찾는 데 도움이 되는 정제되고 잘 구조화된 텍스트에서 특히 효과적입니다.

단점은 정확도(precision)입니다. 노이즈가 많은 텍스트에서 어간 추출은 너무 공격적일 수 있습니다.

입력값 Lucene 토큰 영향
settings set 매칭 범위는 넓어지나, set, setup, setter 등과 충돌함
brightness bright 더 많은 변형과 매칭되나, 구체적인 명사 형태를 상실함
attachments attach 재현율에는 좋으나, 느슨하게 관련된 콘텐츠까지 끌어옴
Windows (폴란드어) winc 언어별 어간 추출 규칙에 의해 고유 명사가 망가짐

표 8: Lucene 어간 추출 동작의 예

Microsoft

Microsoft 분석기는 원래 용어를 보존하면서 정규화된 변형을 추가합니다. 예를 들어 'settings'는 'settings'와 'setting'을 모두 생성합니다. 이를 통해 정확한 매칭을 위해 원래 형태를 유지하면서도 어간 추출과 유사한 재현율 이점을 얻을 수 있습니다.

또한 Microsoft 분석기는 다음을 수행합니다.

  • 고유 명사 보존: 'Windows'가 어간 추출되지 않고 'Windows'로 유지됩니다.
  • 복합어 분해: 스웨덴어 snabbstartsnabb + start
  • 더 많은 불용어 유지: Lucene이 'in', 'not', 'and'와 같은 기능어를 제거하는 반면, Microsoft는 더 많이 유지합니다.

노이즈가 많은 텍스트에서의 비교

전형적인 지원 쿼리를 고려해 보겠습니다: "how to fix Windows settings not responding after update"

  • None (9개 토큰): how, to, fix, windows, settings, not, responding, after, update
  • Lucene (7개 토큰): how, fix, window, set, respond, after, updat — 'to', 'not', 'windows' 탈락; 'settings' → 'set', 'update' → 'updat'으로 축소
  • Microsoft (10개 토큰): how, fix, window, windows, setting, settings, respond, responding, after, update — 원본 유지 및 정규화된 형태 추가

Lucene은 'not'(부정 맥락)을 잃고 'settings'는 일반적인 'set'이 되어 버립니다. 반면 Microsoft는 원래 용어를 보존하고 변형을 추가하여 쿼리의 의미를 온전히 유지합니다.

정제된 텍스트에서 Lucene의 어간 추출은 광범위한 매칭을 도와 대체로 유익하지만, 노이즈가 많은 텍스트에서는 그 공격성이 문제를 악화시킬 수 있습니다. 이것이 노이즈가 많은 데이터에서 Microsoft가 더 나은 성능을 보이는 경향이 있는 이유입니다.

언어 분석기는 인덱싱 시간과 쿼리 시간 모두에 실행되지만, 무거운 처리는 인덱싱 중에 발생합니다. 쿼리 시점에서 세 가지 옵션 모두 동일한 p50 및 p95 지연 시간을 보였습니다. 저희는 동시 부하 상황에서 여러 언어에 대해 이를 검증했습니다. 분석기 선택은 검색 성능에 영향을 미치지 않습니다.

실무 권장 사항

의사 결정 프레임워크

그림 1: Azure AI Search에서 언어 분석기를 선택하기 위한 의사 결정 프레임워크 (참고: 원문 이미지의 흐름을 설명함 - 데이터가 정제되었는지, 노이즈가 많은지, 특정 언어 선호가 있는지에 따라 선택)

언어별 예외 사항

다음 세 가지 언어의 경우, 테스트된 모든 데이터셋에서 일관된 결과가 나타났습니다.

언어 권장 분석기 근거 평균 NDCG 차이
독일어 (de) Lucene 2/2 데이터셋 승리 (MIML, Support) +0.042
스페인어 (es) Lucene 3/3 데이터셋 승리 (MIML, MIRACL, Support) +0.040
중국어 (zh) Microsoft 2/2 데이터셋 승리 (MIML, Support) +0.010

표 9: 테스트된 모든 데이터셋에서 일관된 선호도를 보인 언어

다른 언어의 경우 최선의 선택은 콘텐츠 유형에 따라 다릅니다. Lucene은 정제된 데이터에서, Microsoft는 노이즈가 많은 데이터에서 승리하는 경향이 있습니다. 참고: 이 결과는 저희의 세 가지 테스트 데이터셋을 기반으로 합니다. 분석 API를 사용하여 여러분의 실제 데이터로 검증할 것을 권장합니다.

핵심 요약

  1. 항상 언어 분석기를 구성하세요. 가장 큰 이득은 분석기를 아예 안 쓰는 것(None)과 쓰는 것의 차이(평균 +15%)에서 옵니다. Lucene과 Microsoft 사이의 선택은 그다음 문제입니다.
  2. Lucene과 Microsoft 모두 안전한 선택입니다. '항상 Lucene' 전략은 최적 NDCG의 95.0%를 확보하며, '항상 Microsoft'는 96.7%를 확보합니다.
  3. 지연 시간 페널티가 없습니다. 분석기 선택은 쿼리 성능에 영향을 주지 않습니다.
  4. 다국어 인덱스에는 필드별 분석기를 사용하세요. 각 언어 필드는 최상의 결과를 위해 고유한 분석기를 사용해야 합니다.
  5. Microsoft가 더 범용적인 기본값입니다. 50개 언어 지원, 의미를 보존하는 정규화, 20개 이상 언어에서의 유일한 옵션이라는 장점이 있습니다.

부록 A: 데이터셋 및 방법론

데이터셋

콘텐츠 유형, 언어 범위 및 쿼리 난이도의 다양성을 위해 선택된 세 가지 데이터셋을 평가했습니다.

데이터셋 콘텐츠 유형 언어 수 쿼리 수 출처
MIML 10개 산업 분야 다국어 문서 (회계, 금융, 의료 등) 6 (de, en, es, fr, ja, zh) 12,970 내부 큐레이션 데이터셋 (1024 토큰 청크)
MIRACL 다국어 위키백과 구절 7 (ar, en, es, fr, ja, ko, ru) 1,750 MIRACL 벤치마크 (널리 쓰이는 다국어 IR 벤치마크)
Support 실제 Microsoft 지원 티켓 및 기술 자료 18 (ar, da, de, en, es, fi, fr, it, ja, ko, nb, nl, pl, pt, ru, sv, tr, zh) 16,178 Microsoft Support 코퍼스 및 Bing 유입 쿼리

표 10: 이번 연구에 사용된 데이터셋

평가 공백 채우기 (Hole filling)

세 데이터셋 모두에서 검색된 상위 10개 문서에 판정되지 않은 항목("공백")이 포함되는 경우가 많았습니다. 저희는 GPT-4o를 사용하여 이러한 공백을 채웠습니다. 각 문서에 대해 모델이 0~4점(Abysmal~Ideal)의 관련성을 평가하고, 2점(Fair) 이상인 문서를 관련 있는 것으로 간주했습니다. 이를 통해 판정되지 않은 문서로 인해 NDCG@10이 낮게 측정되는 것을 방지했습니다.

지표

본 포스트의 주요 지표로는 NDCG@10 (Normalized Discounted Cumulative Gain at rank 10)을 사용했습니다. 이는 가장 관련성 높은 문서가 상위 10개 결과 중에서도 높은 순위에 위치하는지를 측정합니다.

실험 설정

  • 93개 실험: 31개 언어-데이터셋 조합 × 3개 분석기 유형
  • 검색 서비스: Azure AI Search (BM25 검색, 상위 10개 결과)
  • 평가: 통계적 유의성 테스트(t-test + Wilcoxon signed-rank)를 동반한 쿼리별 지표 산출

부록 B: 데이터셋별 상세 결과

(이하 상세 데이터 표 생략 가능하나 원문 유지 시 다음과 같이 번역됨)

MIML (6개 언어, 12,970개 쿼리)

언어 쿼리 수 Lucene Microsoft None 승자 차이
de 2,462 0.6858 0.6087 0.6170 Lucene +0.069
en 1,493 0.9383 0.9413 0.8888 Microsoft +0.003
es 2,205 0.6631 0.5767 0.6107 Lucene +0.052
fr 2,199 0.7203 0.6106 0.6126 Lucene +0.108
ja 2,406 0.5348 0.5112 0.3806 Lucene +0.024
zh 2,205 0.5646 0.5668 0.4292 Microsoft +0.002

MIRACL (7개 언어, 1,750개 쿼리)

언어 쿼리 수 Lucene Microsoft None 승자 차이
ar 250 0.7008 0.6876 0.6284 Lucene +0.013
ko 250 0.6327 0.6895 0.4624 Microsoft +0.057
(나머지 생략)

Support (18개 언어, 16,178개 쿼리)

(이하 표의 데이터는 원문의 수치를 따르며, Winner와 Margin 항목은 앞선 내용과 동일한 맥락으로 구성됨)