미등록단어(OOV) 처리
미등록단어(OOV) 처리 — 임베딩 vs 사용자 사전 vs 내장 사전
세상의 모든 단어를 사전에 담을 수는 없습니다. 신조어, 전문 용어, 고유명사는 끊임없이 생겨납니다.
바른은 이렇게 사전에 없는 단어, 곧 미등록단어(OOV, Out-Of-Vocabulary) 를 만났을 때
어디서 그 단어를 알아냈는지 형태소마다 표시합니다. 이 출처 정보가 out_of_vocab 필드입니다.
출처를 알려주는 7가지 표시
각 형태소(Morpheme)에는 out_of_vocab 값이 붙어, 그 형태소를 어떻게 알아냈는지 알려줍니다.
| 값 | 이름 | 의미 |
|---|---|---|
| 0 | IN_WORD_EMBEDDING |
워드 임베딩(학습)에 포함된 단어 |
| 1 | OUT_OF_VOCAB |
사전에 없어 모델이 자동 추측한 미등록단어 |
| 2 | IN_CUSTOM_DICT |
사용자 사전에 있는 단어 |
| 3 | IN_BUILTIN_DICT |
기본(내장) 사전에 포함된 단어 |
| 4 | IN_URIMALSAEM |
우리말샘(국립국어원)에 있는 단어 |
| 5 | IN_WIKI_DICT |
위키백과 사전에 있는 단어 |
| 6 | IN_ON_DICT |
온용어 사전에 있는 단어 |
IN_CUSTOM_DICT로 표시된 형태소는 custom_dict_name 값으로 어떤 사용자 사전에서
왔는지까지 확인할 수 있습니다.
단어를 알아내는 우선순위
바른은 여러 출처를 단계적으로 활용해 형태소를 인식합니다.
graph TD
W[단어 입력] --> EMB{임베딩에 있나?};
EMB -->|있음| A[IN_WORD_EMBEDDING];
EMB -->|없음| CUS{사용자 사전?};
CUS -->|있음| B[IN_CUSTOM_DICT];
CUS -->|없음| DIC{내장·우리말샘·위키·온 사전?};
DIC -->|있음| C[IN_BUILTIN_DICT 등];
DIC -->|없음| D[OUT_OF_VOCAB<br/>모델이 자동 추측];
사전에 없어도 추측한다
어떤 사전에도 없는 신조어를 만나면 바른은 분석을 포기하지 않습니다.
트랜스포머 모델이 주변 문맥을 보고 분절·품사를 추측하고, 그 형태소에 OUT_OF_VOCAB을
표시합니다. 이것이 사전 기반 분석기와의 가장 큰 차이입니다.
워드 임베딩으로 미등록단어를 추출한다
바른은 워드 임베딩을 통해 미등록단어를 추출합니다. 명사·고유명사뿐 아니라
조사·어미까지 포함해 형태 단위로 다룹니다. 이때 학습 데이터에서 거의 등장하지 않은
저빈도 토큰은 모두 UNKNOWN으로 처리합니다.
저빈도 토큰을 UNKNOWN으로 모으는 이유
어쩌다 한두 번 나온 토큰까지 모두 어휘로 잡으면, 모델이 신뢰할 수 없는 신호를 외워
오히려 흔들립니다. 저빈도 토큰을 UNKNOWN으로 모아 두면, 처음 보는 신조어가 등장해도
같은 경로로 인지하고 문맥으로 분석해 인정할 수 있습니다. 그래서 바른은 학습 시점에
없던 새 단어도 다양한 방법으로 분석해냅니다.
신조어 자동 추출에 활용한다
out_of_vocab 표시는 신조어 자동 추출에 그대로 쓸 수 있습니다.
대량의 최신 문서를 분석한 뒤 OUT_OF_VOCAB으로 표시된 형태소를 모으면,
아직 어떤 사전에도 없는 새로운 단어 후보를 추려낼 수 있습니다.
이렇게 발견한 단어를 사용자 사전에 등록하면 다음 분석부터는 정확히 인식됩니다.
출처 표시의 가치
같은 명사라도 임베딩에서 온 것인지, 사용자 사전에서 온 것인지, 모델이 추측한 것인지를
구별하면 분석 결과의 신뢰도를 가늠할 수 있습니다. 추측(OUT_OF_VOCAB)이 많은 영역은
사용자 사전 보강이 필요하다는 신호이기도 합니다.
자주 묻는 질문
Q. out_of_vocab 값에는 어떤 것이 있나요?
IN_WORD_EMBEDDING, OUT_OF_VOCAB, IN_CUSTOM_DICT, IN_BUILTIN_DICT,
IN_URIMALSAEM, IN_WIKI_DICT, IN_ON_DICT의 7가지입니다. 각 형태소가
어디서 인식되었는지 출처를 알려줍니다.
Q. 사전에 없는 단어는 어떻게 처리되나요?
트랜스포머 모델이 주변 문맥을 보고 분절과 품사를 자동으로 추측합니다.
이런 형태소에는 OUT_OF_VOCAB 표시가 붙습니다.
Q. 신조어를 어떻게 찾을 수 있나요?
최신 문서를 분석한 뒤 OUT_OF_VOCAB으로 표시된 형태소를 모으면 신조어 후보를 추릴 수 있습니다.
이를 사용자 사전에 등록하면 이후 분석부터 정확히 인식됩니다.
Q. 미등록단어는 어떻게 추출하나요?
바른은 워드 임베딩으로 미등록단어를 추출하며, 명사뿐 아니라 조사·어미까지 형태 단위로 다룹니다.
학습에서 거의 나오지 않은 저빈도 토큰은 모두 UNKNOWN으로 처리해, 처음 보는 신조어도
같은 경로로 인지하고 문맥으로 분석합니다.
Q. 저빈도 토큰은 왜 UNKNOWN으로 처리하나요?
한두 번만 등장한 토큰까지 어휘로 잡으면 모델이 신뢰할 수 없는 신호를 외워 흔들립니다.
저빈도 토큰을 UNKNOWN으로 모아 두면 학습 시점에 없던 새 단어도 인지·인정할 수 있습니다.
도움이 되었나요?