딥(Deep)하게 오타 교정하기[컨퍼런스 내용정리]

2024. 12. 3. 13:21전공관련 이슈 어슬렁어슬렁

728x90
반응형

https://if.kakao.com/2022/session/72 

 

1. 오타 교정을 아시나요?

오타란?

-의도와 다른 입력

-‘아이우 콘서트 애매’

->아이유 콘서트 예매를 잘못 입력하는 경우

-(반대로) 올바르게 입력된 경우: 정타

 

검색에서 오타는?

-일반적인 맞춤법 오류와는 다름

-‘검색’을 이용하는 사용자 목적이 중요

-맞춤법에 맞지 않는 검색어라도 오타가 아닐 수 있음

-예) 블럭: 비표준어

 

검색어 오타 교정(스펠러, Speller)이란?

-검색어에 대해 오타인지 판별하고, 오타인 경우 적절한 정타로 교정하는 것

-잘못 입력한 검색어라도 적절한 검색 결과 제공을 위해 검색어 오타 교정은 꼭 필요한 서비스

 

오타를 몇가지 유형으로 정리

: 단순입력 오류, 문자 변환 오류, 맞춤법 오류, 외래어 표기 오류, 잘못된 배경 지식으로 인한 오류

 

스펠러는 다음 검색, 카카오톡, 멜론, 다음 지도 등 다양한 곳에 적용되어 있습니다.

 

2. 기존 서비스의 문제

기존 스펠로 구조

-노이즈 채널을 이용한 통계 기반 오타 교정 모델

-노이즈 채널 모델(noisy channel Model)

-오류 모델, 언어 모델의 곱 결과에서 가장 큰 확률값을 

가지는 결과를 정타 후보로 예측

-오류 모델

-언어 모델

 

기존 스펠러 단점

-교정 커버리지(coverage)가 낮음

-교정 대상 중 교정한 비율

-높은 교정 정확률을 위해 제한된 편집 거리 사용

-교정 정확률(precision)

-교정 결과가 정답인 비율

-오교정이 치명적인 스펠러 특성상 매우 중요

 

-참고 편집거리

-한 문자열에서 다른 문자열로 변환시 연산 횟수

-예)<abc,abd>의 편집 거리는 1

 

그래서…

-기존 서비스의 단점들을 딥러닝 모델을 이용해 해결해보고자 했습니다.

-오타 교정: 오타로부터 정타를 생성하는 문제로 정의

-디노이징 seq2seq모델

(Denoising Seqence-to-Sequence Model)을 사용

-기존 모델의 한계를 여러 도메인에서 좋은 성능을 내는 딥러닝 모델을 통해 극복해보고자 함

 

기대효과

—복잡한 서비스 구조를 단순한 구조로 변경

—데이터 추가시 지속적인 성능 개선 가능

—학습 데이터에 따라 도메인에 특화된 모델 제공 가능

—ex) 음악, 쇼핑, 로컬 등

—(디노이징 모델을 위한) 노이즈 생성 함수 개발

—확장이 용이하고, 여러 도메인에 적용 가능한 오타 

생성 방법 개발 가능

학습 데이터: <오타, 정타>  데이터

3. 딥 스펠러 소개

Seq2seq 모델의 학습 데이터

노이즈 함수

—노이즈가 적용된 학습 데이터(<오타, 정타>쌍)를 생성하는 부분

—정타를 입력하여 오타를 생성

—정타: 관리 도구 데이터와 검색 로그를 활용

 

-keystroke 변환 : 입력을 keystroke로 변환

-오류 모델 기반 오타 생성 : 기존 서비스의 오류 모델을 활용

-패턴 기반 오타 생성 : 관리 도구 데이터, 세션 로그를 이용하여<정타, 오타> 패턴으로 오타 생성

-번역 모델 기반 오타 생성 : 관리 도구 데이터, 세션 로그를 이요하여 <정타, 오타> 오타 생성 모델 학습

 

모델

—오타를 정타로 교정하도록 학습

—학습 데이터: <오타, 정타> 쌍 데이터를 사용

—Seq2seq 모델

—인코더, 디코더 레이어: 각 3개씩 사용

—빠른 처리 시간을 위해 모델 사이즈를 최소화

—토큰 단위: 문자

 

학습 데이터

—관리 도구 데이터, 검색 로그를 정제 후 사용

—정제 기준

—숫자, 기호, 자모 url만 있는 경우

—오타 패턴이 포함되어 있는 경우

 

분류기

—교정 결과의 신뢰도를 높이는 과정

—<입력, 출력> 쌍에 대해 출력의 언어 모델 확률이 더 높을 때 교정 결과를 사용

—여러가지 실험을 통해 언어 모델을 이용한 분류기를 사용 

 

4. 개선 결과

평가 방법

—입력 데이터 종류에 따라 나눠 평가

—오타 정확률

—True : 오타를 바르게 교정한 경우

—False : 오타를 교정하지 않거나, 잘못 교정한 경우

—정타 정확률

—True : 정타를 교정하지 않는 경우

—False : 정타를 잘못 교정한 경우

 

평가 데이터

—검색 로그를 활용하여 구축

—모수를 잘 반영할 수 있도록 층화 샘플링

—구축방법

1. 입력이 정타인지 오타인지 분류하고

2. 오타인 경우 오타 유형을 구분, 정타 기록

—예) ‘카카옼’

-오타, 단순 입력 오류, 정타는 ‘카카오’

—2명의 리뷰어가 교차 검증을 통해 데이터를 구축

—데이터 규모: 약 10만개

오타 : 전체 데이터의 약 5%

 

분류기 유무에 따른 성능 비교

오타 정확률 : +16% —> +13% 

정타 정확률 : -8% —> -1%

 

5. 향후 계획

앞으로 해야 할 일

—모델 개선

—노이즈 함수 추가 개발

—웹문서 키워드 추출을 통한 학습 데이터 보강

—시스템 개선

—모델 최적화

유저의 피드백(클릭 유무) 활용

728x90
반응형