Upgrade to Pro — share decks privately, control downloads, hide ads and more …

딥(Deep)하게 오타 교정하기

kakao
December 08, 2022

딥(Deep)하게 오타 교정하기

#NLP #검색

사용자에게 양질의 검색 결과를 제공하기 위해서는 검색어 교정이 필요합니다.
이번 발표에서는 딥러닝 모델을 이용한 검색어 오타 교정 방법과 저희가 고민했던 부분들을 소개합니다.

발표자 : daniel.e
카카오 엔터프라이즈 AI Assistant팀 다니엘입니다. 텍스트와 발화의 오타 교정 업무를 담당하고 있습니다. 데이터 관찰을 좋아하는 개발자입니다.

kakao

December 08, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. 이다니엘 daniel.e 카카오 엔터프라이즈 Copyright 2022. Kakao Corp. All rights

    reserved. Redistribution or public display is not permitted without written permission from Kakao. 딥(Deep)하게 오타 교정하기 if(kakao)2022
  2. 오타란? - 의도와 다른 입력 - ’아이우 콘서트 애매’ -

    ‘아이유 콘서트 예매’를 잘못 입력하는 경우 - (반대로) 올바르게 입력된 경우: 정타 4
  3. 검색에서 오타는? - 일반적인 맞춤법 오류와는 다름 - ‘검색’을 이용하는

    사용자 목적이 중요 - 맞춤법에 맞지 않는 검색어라도 오타가 아닐 수 있음 - 예) 블럭: 비표준어 5
  4. - 검색어에 대해 오타인지 판별하고, 오타인 경우 적절한 정타로 교정하는

    것 - 잘못 입력한 검색어라도 적절한 검색 결과 제공을 위해 검색어 오타 교정은 꼭 필요한 서비스 검색어 오타 교정(스펠러, Speller)이란? 6
  5. 오타 유형 정리 오타를 몇가지 유형으로 정리 오류 유형 설명

    예(정타 / 오타) 단순 입력 오류 규칙성이 없는 단순한 입력 오류 카톡 / 까톡, 카턱 문자 변환 오류 한글이 영어로(또는 영어가 한글로) 변환된 오류 카카오 / zkzkdh 맞춤법 오류 맞춤법 표기법에 어긋난 오류 육개장 / 육계장 외래어 표기 오류 외래어 표기법과 관련된 오류 문화센터 / 문화센타 잘못된 배경 지식으로 인한 오류 잘못된 정보로 발생한 오류 광교 갤러리아백화점 / 판교 갤러리아백화점 7
  6. 기존 스펠러 구조 - 노이즈 채널을 이용한 통계 기반 오타

    교정 모델 - 노이즈 채널 모델(Noisy channel Model) - 오류 모델, 언어 모델의 곱 결과에서 
 가장 큰 확률값을 가지는 결과를 정타 후보로 예측 - 오류 모델(Error Model): - 언어 모델(Language Model): P(x|w) P(w) ̂ w = argmax w∈V P(x|w)P(w) : 예측된 정타 후보 : 오타 : 정타 : 정타 후보 사전 ̂ w x w V 11
  7. 기존 스펠러 단점 - 교정 커버리지(coverage)가 낮음 - 교정 대상

    중 교정한 비율 - 높은 교정 정확률을 위해 제한된 편집 거리 사용 - 교정 정확률(precision) - 교정 결과가 정답인 비율 - 오교정이 치명적인 스펠러 특성상 매우 중요 - 참고, 편집거리(Edit Distance) - 한 문자열에서 다른 문자열로 변환시 연산 횟수 - 예) <abc, abd>의 편집 거리는 1 12 42.8% 57.2% 미교정 교정 교정 대상
  8. - 기존 서비스의 단점들을 딥러닝 모델을 이용해 해결해보고자 했습니다. -

    오타 교정: 오타로부터 정타를 생성하는 문제로 정의 - 디노이징 Seq2seq 모델(Denoising Seqence - to - Sequence Model)을 사용 - 기존 모델의 한계를 여러 도메인에서 좋은 성능을 내는 딥러닝 모델을 통해 극복해보고자 함 그래서… 13
  9. - 복잡한 서비스 구조를 단순한 구조로 변경 - 데이터 추가시

    지속적인 성능 개선 가능 - 학습 데이터에 따라 도메인에 특화된 모델 제공 가능 - ex) 음악, 쇼핑, 로컬 등 - (디노이징 모델을 위한) 노이즈 생성 함수 개발 - 확장이 용이하고, 여러 도메인에 적용 가능한 오타 생성 방법 개발 가능 - 학습 데이터: <오타, 정타> 쌍 데이터 기대효과 14
  10. 구분 설명 기존 검색어 로그 데이터 활용 - 세션 로그(쿼리1

    -> 쿼리2) 기존 서비스에서 사용중인 데이터 - 관리 도구 데이터 오타 생성 모델(방법)을 이용 - 정타 데이터를 입력하여 
 임의의 <오타, 정타> 쌍을 생성 - 데이터 양이 적을 때 효과적 - Seq2seq 모델 학습에는 쌍을 가지는 데이터가 필요 - <오타, 정타> 데이터 - 기존 검색어 로그 데이터 활용 - 기존 서비스에서 사용중인 데이터 - 오타 생성 모델(방법)을 이용 Seq2seq 모델의 학습 데이터
  11. - 디노이징 모델(Denoising Model)을 사용 - 입력을 노이즈 함수를 통해

    변형하고 변형된 결과를 다시 입력으로 복원하는 것을 학습하는 모델 - 부족한 <오타, 정타> 쌍 데이터를 노이즈 함수를 통해 보충 - 검색 로그, 정타 데이터 등 보유한 리소스를 최대한 활용할 수 있고, 다양한 실험이 가능 - 참고로 MS, Hubspot 등 다양한 곳에서도 디노이징 모델을 오타 교정에 활용 학습 데이터를 잘 보충하기 18 노이즈 함수 디노이징 노이즈 적용 입력 입력
  12. 딥(Deep) 스펠러 입력 노이즈 함수 모델 인코더 디코더 분류기 예)

    카카오 선물하기 노이즈 적용 예) 카카옼 선믈하기 출력 예) 카카오 선물하기 : 학습 : 추론 입력 19
  13. 노이즈 함수 - 노이즈가 적용된 학습 데이터(<오타, 정타> 쌍)를 생성하는

    부분 - 정타를 입력하여 오타를 생성 - 정타: 관리 도구 데이터와 검색 로그를 활용 입력 노이즈 함수 예) 카카오 선물하기 노이즈 적용 예) 카카옼 선믈하기 키카오 선물하기 카키오 선물하기 카카오 선물학 카카오 선물학기 20
  14. 다양한 노이즈 함수 노이즈 함수 설명 예 keystroke 변환 입력을

    keystroke로 변환 dlvm zkzkdh 오류 모델 기반 오타 생성 기존 서비스의 오류 모델을 활용 이프키카오, 이푸카카오, 니프카카오 패턴 기반 오타 생성 관리 도구 데이터, 세션 로그를 이용하여 <정타, 오타> 패턴으로 오타 생성 이프 카캉, 이프 카코오, 이프 ㅋk카오 번역 모델 기반 오타 생성 관리 도구 데이터, 세션 로그를 이용하여 <정타, 오타> 오타 생성 모델 학습 이푸 카카오, 아프 카카오, 이프 카카어 노이즈 함수 입력으로 ‘이프 카카오’가 입력된 경우 21
  15. - 오타를 정타로 교정하도록 학습 - 학습 데이터: <오타, 정타>

    쌍 데이터를 사용 - Seq2seq 모델 - 인코더, 디코더 레이어: 각 3개씩 사용 - 빠른 처리 시간을 위해 모델 사이즈를 최소화 - 토큰 단위: 문자 모델 모델 예) 카카오 선물하기 입력 예) 카카옼 선믈하기 출력 인코더 디코더 22
  16. 학습 데이터 - 관리 도구 데이터, 검색 로그를 정제 후

    사용 - 정제 기준 - 숫자, 기호, 자모, url만 있는 경우 - 오타 패턴이 포함되어 있는 경우 23 관리 도구 데이터 예) 카카오 선물하기 123-456-789 zkzkdh ^^ 검색 로그 노이즈 함수 정제 로직 예) 카카오 선물하기 123-456-789 zkzkdh ^^
  17. 분류기 - 교정 결과의 신뢰도를 높이는 과정 - <입력, 출력>

    쌍에 대해 출력의 언어 모델 확률이 더 높을 때 교정 결과를 사용 - 여러가지 실험을 통해 언어 모델을 이용한 분류기를 사용 24
  18. - 입력 데이터 종류에 따라 나눠 평가 - 오타 정확률

    - True: 오타를 바르게 교정한 경우 - False: 오타를 교정하지 않거나, 
 잘못 교정한 경우 - 정타 정확률 - True: 정타를 교정하지 않은 경우 - False: 정타를 잘못 교정한 경우 평가 방법 정확률 = count(True) count(True + False) 26
  19. 평가 데이터 - 검색 로그를 활용하여 구축 - 모수를 잘

    반영할 수 있도록 층화 샘플링 - 구축 방법 1. 입력이 정타인지 오타인지 분류하고 2. 오타인 경우 오타 유형을 구분, 정타 기록 - 예) ‘카카옼’ - 오타, 단순 입력 오류, 정타는 ‘카카오’ - 2명의 리뷰어가 교차 검증을 통해 데이터를 구축 - 데이터 규모: 약 10만개 - 오타: 전체 데이터의 약 5% 27 검색 로그 샘플 정타, 오타 분류 정타 오타 평가 데이터 오타 유형 구분 
 정타 기록
  20. 기존 서비스 딥 스펠러(분류기가 없을 때) 딥 스펠러 분류기 유무에

    따른 성능 비교 기존 서비스 딥 스펠러(분류기가 없을 때) 딥 스펠러 오타 정확률 정타 정확률 +16% -8% 29 +13% -1%
  21. 오류 유형 설명 케이스(오타 / 정타) 단순 입력 오류 규칙성이

    없는 단순한 입력 오류 동탄숲소헝당 / 동탄 숲속성당 문자 변환 오류 한글이 영어로(또는 영어가 한글로) 변환된 오류 rnrzktmxps 샤ㅡㄷ ㅁㄽㄷㄱ 샤ㅡㄷ / 국카스텐 time after time 맞춤법 오류 맞춤법 표기법에 어긋난 오류 공인중계사 시험일정 / 공인중개사 시험일정 외래어 표기 오류 외래어 표기법과 관련된 오류 핸드 그라인다 속도조절기 / 핸드 그라인더 속도조절기 오류 유형 케이스 30
  22. 오류 유형별 비율 31 2.6% 3.2% 7.8% 86.4% 외래어 표기

    오류 문자 변환 오류 맞춤법 오류 단순 입력 오류
  23. 오류 유형별 성능 비교 32 단순 입력 오류 맞춤법 오류

    외래어 표기 오류 문자 변환 오류 기존 서비스 딥 스펠러 +11% +3% +13% +25%
  24. - 모델 개선 - 노이즈 함수 추가 개발 - 웹문서

    키워드를 추출을 통한 학습 데이터 보강 - 시스템 개선 - 모델 최적화 - 유저의 피드백(클릭 유무) 활용 앞으로 해야 할 일 34