미지 단어(OOV)의 방어막: 서브워드 덧셈 패키지 (FastText)
천하무적 같았던 구글의 Word2Vec 제국에도 치명적인 구멍이 있었습니다. 바로 기계가 태어나서 처음 보는 신조어나 엄청나게 희소한 오타 문자가 나타나면 에러를 뿜으며 기절해 버리는 고대 통계학의 질병 OOV(Out-Of-Vocabulary)가 재발했다는 점입니다. 이 약점을 파괴한 페이스북(현 Meta)의 FastText의 서브워드 임베딩 기술을 알아봅니다.
00. 구글 Word2Vec 제국의 절망적인 한계
Word2Vec은 “단어집 사전” 안에 들어있는 단어(예: Apple 행성과 Phone 행성)에 대해서는 수학적인 기하학 좌표 공간을 환상적으로 예쁘게 잘 그려냈습니다. 하지만 뼈저린 아픔이 생깁니다.
- 신조어나 오타 (OOV의 부활): 한국어 리뷰에서
"사과폰 좐맛탱이네 ㅋㅋㅋ"라는 문장이 들어왔다고 칩시다. Word2Vec 사전에는존맛탱만 있고좐맛탱은 10만 단어 DB 어디를 뒤져봐도 없습니다. 사전 목록 자체(Vector 좌표계)에 없다 보니까 거대한 GPU 서버가UNK(미지 단어 에러)를 띄우면서 문장 전체를 쓰레기통에 처박아 버립니다. - 출현 빈도가 매우 희소한 단어의 망령: NNLM 챕터에서 단어 벡터 학습을 하려면 SGNS 게임 등 단어가 자주 출현해서 가중치를 먹어야 한다고 했습니다. 그러나 1,000만 줄 텍스트에서 딱 1번만 등장한 특이한 사람 이름 토큰은? 훈련 자체가 전혀 부족하니 좌표상 개판 엉뚱한 우주 곳곳에 표류해 버립니다. 벡터가 망가집니다.
01. 페이스북의 반격: 글자 쪼개기(n-gram) 전략 FastText
이 멘붕 사태를 지켜보던 페이스북 AI 리서치 연구팀이 2016년에 FastText (패스트텍스트) 라는 라이벌 무기를 공개했습니다. 그들의 사상은 아주 폭력적이면서도 탁월했습니다.
“야, 왜 단어를 통째로만 바라보고 암기하냐? 한 단어를 알파벳 단위(서브워드) 조각조각으로 도마에서 다시 잘게 썰어서 훈련해!”

02. 부분 단어 (Subword) 분해 공식의 마법
FastText 알고리즘 안에서는 원래 단어 1개를 바라볼 때, 알파벳 앞뒤로 임의의 껍데기 특수기호 < , > 를 강제로 붙입니다. 그리고 N-gram (글자들을 $N$개 묶음으로 썰기) 칼질을 시작합니다.
예를 들어 N=3 (글자를 3개 단위로 칼질) 이라고 치고 apple을 썰어버리면 어떻게 될까요?
<apapppplplele>
즉 기계는 이제 더 이상 우주 공간에 apple 이라는 단일 거대 벡터 행성을 저장하지 않습니다. 저 썰려 나간 쪼가리 부분 알파벳 조각 5개 스펠링들 각각에 임베딩 벡터 값(좌표점)을 부여하여 훈련시킵니다.
거기다 심지어 원래 덩어리였던 특별 단어인 <apple> 통째 단어 벡터까지 몽땅 다 메모리 도서관에 때려 박아버립니다.
[!TIP]
📖 초심자를 위한 쉬운 해설: 조각 레고 모아서 짱돌 조립하기
그럼 최종 목표인apple이라는 의미를 추출할 땐 이 수많은 파편 더미 중 누구를 출력할까요?
아주 단순무식합니다. “야, 저 쪼가리 n-gram 서브워드 벡터(기하학 화살표)들 다 끌고 와서 수학적으로 1개로 평균(Sum) 내서 짬뽕 합쳐버려!!”\(\vec{\text{apple}} = \vec{\text{<ap}} + \vec{\text{app}} + \vec{\text{ppl}} + \vec{\text{ple}} + \vec{\text{le>}} + \vec{\text{<apple>}}\) 즉 FastText 행성 벡터의 본질은 무수한 파편 조각 벡터 성질의 총합 덩어리입니다.
03. FastText의 압도적인 OOV 에러 해결 (기적의 복원)
이 무식하게 무거운 서브워드 벡터 덧셈 기술이 대체 OOV(새로운 외계어)를 방어하는데 어떻게 쓰일까요?
상황: 문장에
apples라는 아예 사전에 등록 안 된 희소 단어(OOV)가 유저 손가락 오타로 갑자기 툭 튀어나왔습니다!
- 구글 Word2Vec AI (기존): “에러 삐빅!
apples는 내 백과사전에 없음 파업 선언!” - 페이스북 FastText AI: “음… 내가 전체 큰 단어인
apples는 살면서 한 번도 본 적이 없는 무명 단어지만… 잠깐? 이 이어진 철자 조각을 3조각씩 쪼개보자 (<ap,app,ppl…) 어랍쇼!? 이 알파벳 조각 찌꺼기 벡터들은 내가 옛날 구글 단어apple공부할 때 미친 듯이 많이 보던 그 성질 벡터 데이터들이네? 그럼 이 서브워드 알파벳 쪼가리들만 팍 모아서 합쳐버리면 이 새로 나온apples단어의 대략의 위치 벡터 행성을 나름 추측 계산해 낼 수 있겠군!!”
이처럼 FastText는 처음 보는 단어나 철자 오타, 모음이 하나 빠진 희박한 한글 단어일지라도, 내부 글자 조각만 분해해 보면 다른 단어 훈련에서 주워들었던 그 서브워드 조각 지식 벡터가 고스란히 남아있어서 기적의 벡터 복원 추론 을 달성하게 해 줍니다. 한국어 같은 변화무쌍한 교착어나 의료 공학 같은 전문(희박한) 용어를 다루는 NLP 필드에서는 오히려 Word2Vec보다 이 FastText가 압도적 성능 우위를 발휘하는 구세주가 되었습니다.