뒤로가기

Elastic

ElasticSearch로 구성한 오타교정 API 결과 분석

하선호 2020.06.17.

1. 개요

지난번 엘라스틱서치의 SUGGEST API를 사용하여 교정 키워드를 가져올 수 있게 구성해보았습니다. 초기에 약 12만건의 키워드 데이터를 색인하였고 해당 데이터로 교정 품질을 테스트한 결과를 제공받았습니다. 그래서 이번에는 데이터셋을 더 늘려서 처음 테스트 결과와 비교해보고 SUGGEST API 옵션중 편집거리 옵션을 조정하여 나온 결과도 비교해보겠습니다. 교정 키워드 구성이 궁금하신 분들을 지난번 작성한 블로그를 참고해주세요

엘라스틱서치 오타교정 API 만들어보기

2. 테스트 결과

테스트에 사용한 키워드는 1000개이며 오타키워드가 아닌 일반적인 키워드로 테스트한 결과입니다.

2-1. 키워드 12만개의 테스트

초기 구성시 약 12만개의 명사 키워드를 색인해 놓았을 때의 테스트 결과입니다.

키워드 수 교정된 키워드 결과가 같은 키워드
1000 493 507

교정된 유형에 대한 분석은 다음과 같았습니다.

1. 대문자로 들어온 영어 키워드에 대해서는 소문자로 변환

  • 앞서 셋팅에서 분석기의 필터 설정을 lowercase로 사용하여서 색인 및 검색시 대문자는 소문자로 처리되기 때문에 발생하는 현상입니다.
"analyzer": {
          "nfd_analyzer": {
            "filter": [
              "lowercase"
            ],
            "char_filter": [
              "nfd_normalizer"
            ],
            "tokenizer": "standard"
          }
        }
검색 키워드 교정된 키워드
알파스캔 Q3279VWF8 알파스캔 q3279vwf8
CHARLES charms

2.특수문자(‘,’ ‘-‘ ‘/’) 제거</b>

  • 분석기의 tokenizer는 standard tokenizer를 사용하며 해당 tokenizer는 쉼표와 온점을 제외한 특수문자는 생략되어 분리됩니다.
검색 키워드 교정된 키워드
1/48 ROKAF F-86D 1 48 rokit f 86d
BOSSWIZ BA-93 bosswiz ba 93
KEMP ROC.3 kep roc 3
13ZD940-GX40K 배터리 13zd940 gx40k 배터리
i9 - 10700K i9 1300k

3. 단위(ml, kg)및 범위(~) 변환

검색 키워드 교정된 키워드
탐론 18~400mm 탐론 18 4005u
배스앤바디웍스 20ml 배스앤바디웍스 20
쌀 20kg 팝니다 쌀 20 퍕니다

4. 숫자 변환

검색 키워드 교정된 키워드
amd 라이젠 5 3600 메인보드 amd 라이젠 5 36.5 메인보드

5. 잘못 교정된 키워드

  • 각각 분리된 키워드들이 인덱스 내에 없기 때문에 인덱스 내에 있는 엉뚱한 키워드로 교정이 되었습니다.
검색 키워드 교정된 키워드
삼성 ram ddr4 16g21300 삼성 ram dc24 16g21300
아로나민 골드 아리나민 골드
대웅제약 우루사 대웅제약 우르사
티티카카 미니벨로 티티나라 미니밸로
마리카디자인 철제 컴퓨터 마리카디자인 철제 컴퍼터
갤럭시 노트10 플러스 자급제 중고 갤럭시 노트류 플러스 자급재 중고
갤럭시 퀀텀 자급제 갤럭시 큐텀 자급재
맥심 레트로 보온병 맥심 레트로 보온력

2-2. 키워드 추가 후 테스트

검색 키워드가 인덱스 내에 없을 경우 교정된 키워드를 제공해줍니다. 이는 인덱스 내의 키워드들이 많을수록 정상적인 키워드가 엉뚱한 키워드로 교정되는 것을 줄여주고 또한 오타 키워드 검색시 교정 키워드의 제안 수를 늘려주는 효과를 갖습니다. 그래서 이번에는 인덱스 내에 색인할 키워드 수를 늘렸습니다. 다나와에 있는 사전(유사어, 단위명 등..)들을 정제하여 12만건에서 약 59만건으로 키워드셋을 늘린 후 기존 결과와 비교하였습니다. 앞서 설명드린 대문자->소문자, 특수문자 제거에 대한 결과는 셋팅이 동일하므로 제외하였습니다.

항목 기존 오타교정 인덱스 신규 오타교정 인덱스
검색 키워드 수 1000 1000
교정된 키워드 수 493 403
결과가 같은 키워드 507 597

1. 단위(ml, kg)및 범위(~) 변환

  • 단위명 사전 키워드를 인덱스에 포함하였지만 앞에 붙은 숫자가 한 키워드로 인식되기 때문에 숫자에 의해 교정결과가 달랐습니다.
검색 키워드 기존 신규
탐론 18~400mm 탐론 18 4005u 탐론 18 40.5mm
배스앤바디웍스 20ml 배스앤바디웍스 20 배스앤바디웍스 20ml
쌀 20kg 팝니다 쌀 20 퍕니다 쌀 20eg 퍕니다

2. 숫자 변환

  • 숫자의 경우도 실제 인덱스 내에 숫자가 없을 경우 무조건 교정된 결과가 나옵니다.
검색 키워드 교정된 키워드 신규
amd 라이젠 5 3600 메인보드 amd 라이젠 5 36.5 메인보드 amd 라이젠 5 3400 메인보드

3. 잘못 교정된 키워드

  • 기대했던 대로 키워드셋이 기존보다 약 5배 늘어나면서 각 키워드가 엉뚱한 키워드로 교정되는 빈도수는 줄어들었습니다.
검색 키워드 교정된 키워드 신규
삼성 ram ddr4 16g21300 삼성 ram dc24 16g21300 삼성 ram ddr4 16g21300
아로나민 골드 아리나민 골드 아로나민 골드
대웅제약 우루사 대웅제약 우르사 대웅제약 우루사
티티카카 미니벨로 티티나라 미니밸로 티티카카 미니벨로
마리카디자인 철제 컴퓨터 마리카디자인 철제 컴퍼터 마리카디자인 철제 컴퓨터
갤럭시 노트10 플러스 자급제 중고 갤럭시 노트류 플러스 자급재 중고 갤럭시 노트8.0 플러스 자급제 중고
갤럭시 퀀텀 자급제 갤럭시 큐텀 자급재 갤럭시 퀀텀 자급제
맥심 레트로 보온병 맥심 레트로 보온력 맥심 레트로 보온병

2-3. 편집거리 옵션 변경 후 테스트

suggest api의 편집거리는 기본값이 2로 설정되어 있습니다. 편집거리란 한 단어에서 글자를 추가,제거,교체하여 다른 단어로 바꿀 때의 필요한 최소 횟수입니다. 해당 옵션은 max_edits 를 통해 조정할수 있으며 1과 2사이 값만 가질수 있습니다. 두 값에 대한 결과 차이도 비교해보았습니다. 비교대상은 2-2에서 테스트한 결과입니다.

항목 편집거리 1 편집거리 2
검색 키워드 수 1000 1000
교정된 키워드 수 258 403
결과가 같은 키워드 742 597

결과

  • 키워드가 인덱스에 존재하지 않더라도 편집거리가 1이 넘는 교정은 하지 않았습니다.
  • 기존 편집거리 2에서 숫자+단위, 숫자가 교정되었던 빈도수가 줄어들었습니다.

CASE1 : 일반 키워드

검색 키워드 편집거리 1 편집거리 2
캠프밸리 카쉘터 캠프밸리 카쉘터 캠프밸리 카센터
대웅제약 임팩타민 프리미엄정 대웅제약 임팩타민 프리미엄정 대웅제약 임팩타민 프리미엄용
유니공조 냉난방기 유니공조 냉난방기 유공조 냉난방기

CASE2 : 숫자

검색 키워드 편집거리 1 편집거리 2
맥북에어 20202 맥북에어 20202 맥북에어 2000
탐탁 a06 12.9 탐탁 a06 12.9 탐탁 a06 1200
아디다스 슬리퍼 알파바운스 230mm 아디다스 슬리퍼 알파바운스 230mm 아디다스 슬리퍼 알파바운스 2000mm

CASE3 : 단위명

검색 키워드 편집거리 1 편집거리 2
비정제조조바오일 100 118mg 비정제조조바오일 100 118mg 비정제조조바오일 100 128g
웰즈 덴탈마스크 50매 웰즈 덴탈마스크 50매 웰즈 덴탈마스크 500g
에프킬라울트라 24개 에프킬라울트라 24개 에프킬라울트라 24대 냉난방기

설정대로 편집거리가 1이 넘는 오타는 교정해줄 수가 없습니다.

검색 키워드 편집거리 1 편집거리 2
왜장햐드 왜장햐드 외장하드
삼엇전자 모니터 삼엇전자 모니터 삼성전자 모니터
갤략시탬 lte 갤략시탬 lte 갤럭시탭 lte

3. 결론

이번 테스트로 교정 인덱스 내의 키워드가 많으면 많을 수록 정상적인 키워드가 교정되는 현상이 줄어듬을 보았습니다. 현재 구성에서 키워드셋을 늘리는게 효과가 가장 큼을 확인했으며 다만 숫자+단어, 특수문자 포함된 단어 같이 특정한 형태의 키워드에 대해서는 따로 처리할 방안이 필요합니다. 또한 편집거리를 줄임으로써 편집거리2일 때의 엉뚱한 결과들이 줄어들었지만 2자 혹은 2음절 오타의 경우는 교정을 못해주는 단점도 발견하였습니다. 사용자들의 오타빈도를 측정하면 기준을 잡을 수 있을 것 같으며 무조건 교정결과를 제공하는 것 보다도 어떤 상황일 때 교정 결과를 제공해주는게 좋을지도 고민해야 할 것 같습니다.

참고 자료

  • https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html#search-suggesters