사전 불용어
개념

불용어

gabury1고친 사람 github-actions[bot]

불용어는 검색이나 글 분석에서 일부러 빼고 다루는 낱말입니다. 영어의 the 와 a, 한국어의 조사처럼 어느 글에나 나오는 낱말이 여기 듭니다. 이런 낱말은 글끼리 가려내는 데 거의 도움이 안 됩니다. 그래서 빼 두면 색인이 작아지고 찾기가 빨라집니다.

쉽고 빠른 이해

무슨 일을 하는 물건인가 — 검색 엔진이 글을 색인에 적어 둘 때 버리고 가는 낱말들입니다. 「The cats are on the mat」에서 the · are · on 을 버리면 cats 와 mat 만 남습니다.

왜 이렇게 하나 — the 같은 낱말은 거의 모든 문서에 나옵니다. 이 낱말로는 문서를 하나도 가려낼 수 없습니다. 그런데 적어 두는 데는 공간이 가장 많이 듭니다.

어떻게 도나

  1. 글을 낱말로 쪼갭니다
  2. 쪼갠 낱말을 불용어 목록과 대 봅니다
  3. 목록에 있는 낱말은 버리고 나머지만 적어 둡니다. 검색어도 같은 목록으로 거릅니다

대가 — 버린 낱말로는 찾을 수 없습니다. 「to be or not to be」는 전부 목록에 드는 낱말이라 검색어가 텅 빕니다. 「flights to London」과 「flights from London」은 to 와 from 이 빠지면 같은 검색이 됩니다. 요즘 큰 검색 엔진은 목록을 짧게 쓰거나 아예 쓰지 않습니다.

상세

두꺼운 책의 맨 뒤에는 찾아보기가 있습니다. 찾아보기에는 「그리고」나 「이것」 같은 낱말이 실려 있지 않습니다. 모든 쪽에 나오는 낱말이라 실으면 쪽 번호만 끝없이 늘어섭니다. 찾아보기를 만드는 사람은 그런 낱말을 처음부터 빼고 만듭니다.

불용어가 되는 낱말

불용어는 영어 stop word 를 옮긴 말입니다. 글을 적어 두거나 찾을 때 빼 버리기로 정한 낱말을 가리킵니다. 대개 문장의 뼈대를 잇는 일만 합니다. 내용은 거의 싣지 않습니다.

흔히 불용어로 잡히는 낱말을 언어별로 모으면 이렇습니다.

언어 갈래 예
영어 관사 the · a · an
영어 전치사 of · in · on · to · from
영어 접속사 · 대명사 · be 동사 and · or · it · this · is · are
한국어 조사 은 · 는 · 이 · 가 · 을 · 를 · 의
한국어 의존 명사 것 · 수 · 등
한국어 접속 부사 그리고 · 그러나 · 또는

표의 낱말은 어느 주제의 글에도 고르게 나옵니다. 요리 글에도 법률 글에도 the 와 「을」은 들어 있습니다. 그래서 이 낱말들은 글이 무엇을 다루는지 알려 주지 못합니다.

한국어는 조사가 낱말 끝에 붙어 있습니다. 「한강을」에서 「을」만 떼어 내야 목록과 대 볼 수 있습니다. 「한강」과 「을」처럼 뜻을 가진 가장 작은 말 단위를 형태소라고 합니다. 글을 형태소로 나누는 일이 형태소 분석입니다.

형태소 분석은 조각마다 품사를 붙여서 내놓습니다. 품사는 명사 · 동사 · 조사처럼 낱말을 문법 구실로 나눈 갈래입니다. 그래서 한국어에서는 낱말 목록 대신 품사를 보고 조사와 어미를 한꺼번에 거르기도 합니다.

흔한 낱말이 쓸모없는 까닭

검색은 여러 문서 가운데 원하는 것만 골라내는 일입니다. 골라내려면 어떤 문서에는 있고 어떤 문서에는 없는 낱말이 필요합니다. the 는 거의 모든 영어 문서에 들어 있습니다. 그래서 the 가 들어 있다는 사실로는 문서를 하나도 가려낼 수 없습니다.

한 낱말이 몇 개 문서에 나오는지를 그 낱말의 문서 빈도라고 합니다. 불용어는 문서 빈도가 가장 높은 낱말들입니다. 문서 빈도가 문서 수에 가까울수록 그 낱말은 검색에서 하는 일이 없습니다.

색인 크기와 검색 시간

검색 엔진은 문서를 미리 역색인으로 적어 둡니다. 역색인은 낱말마다 그 낱말이 든 문서 번호를 적어 둔 찾아보기 표입니다. 미리 적어 두면 검색할 때 문서를 처음부터 다 읽지 않고 이 표만 찾아보면 됩니다.

문서 다섯 개로 작은 역색인을 만들면 이렇습니다.

낱말 이 낱말이 든 문서
the 1 · 2 · 3 · 4 · 5
cat 1 · 3
mat 1

표의 한 줄에 달린 문서 번호 목록을 포스팅 리스트라고 부릅니다. the 의 포스팅 리스트는 문서 수만큼 깁니다. 문서가 백만 개면 the 한 낱말에 번호 백만 개가 적힙니다. cat 이나 mat 의 포스팅 리스트는 그보다 훨씬 짧습니다.

낱말이 나오는 횟수는 고르지 않습니다. 횟수가 많은 순으로 줄 세우면 1위 낱말은 2위보다 두 배쯤, 3위보다 세 배쯤 자주 나옵니다. 이 경향을 지프의 법칙이라고 부릅니다. 이 때문에 맨 앞의 몇십 낱말이 전체 등장 횟수의 큰 몫을 가져갑니다.

그 몇십 낱말이 대개 불용어입니다. 불용어를 빼면 가장 긴 포스팅 리스트들이 한꺼번에 사라져 색인이 크게 줄어듭니다. 검색어에 the 가 섞여 들어와도 그 긴 포스팅 리스트를 끝까지 훑을 일이 없어집니다.

불용어가 빠지는 단계

글은 색인에 들어가기 전에 몇 가지 처리를 차례로 지납니다. 이 처리를 한데 묶은 부품을 분석기라고 합니다. 불용어 거르기는 그 가운데 한 단계입니다.

단계는 차례로 이렇습니다.

  1. 토큰화 — 글을 낱말 조각으로 쪼갭니다
  2. 소문자로 바꾸기 — 대문자를 소문자로 바꿉니다
  3. 불용어 거르기 — 목록에 있는 낱말을 버립니다
  4. 어간 추출 — 낱말 끝을 잘라 기본 꼴로 맞춥니다. cats 가 cat 이 되는 식입니다

소문자로 바꾸기가 불용어 거르기보다 먼저 옵니다. 문장 첫머리의 The 와 가운데의 the 를 같은 낱말로 봐야 목록 하나로 둘 다 거를 수 있기 때문입니다.

「The cats are on the mat」 한 문장이 이 단계들을 지나면 이렇게 줄어듭니다.

flowchart TD
    A["원문 · The cats are on the mat"] --> B["토큰화 · The · cats · are · on · the · mat"]
    B --> C["소문자로 바꾸기 · the · cats · are · on · the · mat"]
    C --> D["불용어 거르기 · cats · mat"]
    D --> E["어간 추출 · cat · mat"]

낱말 여섯 개가 불용어 거르기를 지난 뒤 둘로 줄었습니다. 색인에는 cat 과 mat 두 낱말만 적힙니다.

검색어도 같은 분석기를 지나야 합니다. 「the cat」으로 찾으면 the 가 빠지고 cat 만 남아 이 문서와 만납니다. 색인에서 뺀 낱말을 검색어에만 남겨 두면 그 낱말은 색인에 없으므로 어느 문서와도 만나지 못합니다. 낱말을 모두 담은 문서만 찾는 검색이라면 「the cat」은 the 에 걸려 문서를 하나도 못 찾습니다.

목록을 만드는 두 방법

불용어 목록은 크게 두 방법으로 만듭니다. 사람이 손으로 적는 방법과 문서 모음에서 세어 뽑는 방법입니다.

손으로 적은 목록 문서 모음에서 뽑은 목록
만드는 법 언어마다 흔한 관사 · 조사 · 접속사를 사람이 고른다 문서 빈도를 세어 높은 낱말부터 뽑는다
잡히는 낱말 어느 글에나 흔한 낱말 그 모음에서만 흔한 낱말까지
약점 그 모음에만 흔한 낱말을 놓친다 모음이 바뀌면 다시 세야 한다

문서 모음에서 세어 뽑는 방법이 따로 필요한 것은 모음마다 흔한 낱말이 달라서입니다. 요리법만 모은 사이트라면 「넣다」와 「약간」이 거의 모든 문서에 나옵니다. 일반 목록에는 없는 낱말이지만 이 모음에서는 불용어와 같은 일을 합니다.

빼서 잃는 것

불용어를 빼면 그 낱말로는 더 이상 찾을 수 없습니다. 대부분의 검색에서는 티가 안 납니다. 불용어가 뜻을 지고 있는 검색에서만 문제가 드러납니다.

불용어를 빼면 검색어가 이렇게 바뀝니다.

검색어 불용어를 뺀 뒤
to be or not to be 남는 낱말이 없다
The Who who 까지 빠져 남는 낱말이 없다
flights to London flights · london
flights from London flights · london

첫 두 줄은 검색어가 통째로 사라진 경우입니다. 하나는 유명한 대사, 하나는 밴드 이름입니다. 둘 다 흔한 낱말로만 이루어져 있습니다.

아래 두 줄은 방향이 반대인 두 검색이 같은 검색이 된 경우입니다. to 와 from 이 뜻을 가르고 있었기 때문입니다.

소문자로 바꾸는 단계와 맞물려 생기는 일도 있습니다. IT(Information Technology, 정보 기술)는 소문자로 바뀌면 대명사 it 과 모양이 같아집니다. it 이 목록에 있으면 「IT 채용」을 찾을 때 IT 가 빠져 버립니다.

구문 검색도 영향을 받습니다. 구문 검색은 낱말이 붙어 있는 순서까지 맞춰 찾는 검색입니다. 불용어를 색인에서 뺐다면 불용어가 든 구문을 원래 모습 그대로 맞춰 볼 수 없습니다.

목록이 짧아지는 흐름

검색 엔진이 불용어를 다루는 방식은 긴 불용어 목록에서 짧은 목록으로 옮겨 왔습니다. 큰 웹 검색 엔진들은 대개 목록을 아예 쓰지 않는 쪽으로 갔습니다. 그렇게 된 까닭은 둘입니다.

첫째는 색인 공간입니다. 포스팅 리스트를 작게 줄여 적는 색인 압축 방법이 발전했습니다. 긴 포스팅 리스트를 그대로 둬도 드는 공간이 예전만큼 크지 않습니다.

둘째는 점수 매기기입니다. 검색 엔진은 찾은 문서마다 검색어와 얼마나 맞는지 점수를 매깁니다. 이 점수는 드문 낱말에 무게를 크게, 흔한 낱말에 무게를 작게 줍니다. 그 무게를 역문서 빈도라고 부릅니다.

역문서 빈도는 문서 빈도가 높을수록 작아집니다. 모든 문서에 나오는 낱말은 무게가 0 에 가깝습니다. 이 무게를 쓰는 대표 셈식이 TF-IDF(Term Frequency-Inverse Document Frequency)입니다. BM25(Best Matching 25)도 같은 무게를 씁니다.

그래서 불용어를 남겨 둬도 점수는 거의 흔들리지 않습니다. 목록 없이도 불용어를 뺀 것과 비슷한 효과가 저절로 납니다. 그러면서도 「to be or not to be」 같은 검색은 살아납니다.

남는 대가는 공간과 시간입니다. 불용어를 남기면 가장 긴 포스팅 리스트들도 함께 남습니다. 검색어에 불용어가 섞여 오면 그 포스팅 리스트를 훑는 시간도 듭니다.

검색 밖의 불용어

불용어는 자연어 처리에서도 씁니다. 자연어 처리는 사람이 쓴 글을 컴퓨터로 분석하는 일입니다. 뜻은 검색과 같습니다. 글을 분석할 때 빼고 다루는 흔한 낱말입니다.

글에 나온 낱말을 세어 무엇에 관한 글인지 가늠하는 분석이 있습니다. 낱말의 순서는 버리고 낱말마다 몇 번 나왔는지만 세는 방식을 단어 주머니 모델이라고 부릅니다. 이런 분석에서는 불용어를 빼고 셉니다. 빼지 않으면 가장 많이 나온 낱말이 어느 글에서나 the 와 and 가 됩니다.

문장의 뜻을 따져야 하는 일에서는 불용어를 함부로 빼지 않습니다. 글이 긍정인지 부정인지 가리는 감정 분석이 그런 일입니다. not 같은 부정어가 목록에 들어 있으면 「not good」이 「good」으로 바뀌어 뜻이 뒤집힙니다.

관련 항목

불용어 거르기와 함께 도는 글 처리 단계

분석기 · 토큰화 · 토큰 · 형태소 분석 · 형태소 · 품사 · 품사 태깅 · 어간 추출 · 표제어 추출 · 동의어 사전 · 유니코드 정규화 · n-gram

불용어를 빼면 달라지는 색인 구조

역색인 · 포스팅 리스트 · 색인 압축 · 위치 색인

흔한 낱말의 무게를 재는 셈식

문서 빈도 · 역문서 빈도 · TF-IDF · BM25 · 지프의 법칙 · 관련도 점수

불용어 때문에 결과가 달라지는 검색 방식

구문 검색 · 불리언 검색 · 근접 검색 · 전문 검색

불용어 거르기를 쓰는 분야

검색 엔진 · 정보 검색 · 자연어 처리 · 단어 주머니 모델 · 감정 분석 · 토픽 모델링

불용어 거르기를 구현한 검색 라이브러리와 엔진

Apache Lucene · Elasticsearch · OpenSearch · Apache Solr · Nori

다른 이름: stop word · stopword · stop words · 스톱워드 · 불용어 목록