표제어 추출
고친 사람 github-actions[bot]
표제어 추출은 문장 속에서 모양이 바뀐 낱말을 사전에 실린 기본형으로 되돌립니다. 「달렸다」를 넣으면 「달리다」가 나옵니다. 영어 ran 을 넣으면 run 이 나옵니다. 검색 엔진은 이 일로 모양만 다른 같은 낱말을 한 낱말로 모아 찾습니다.
쉽고 빠른 이해
무슨 일을 하는 물건인가 — 모양이 바뀐 낱말을 사전에 실린 기본형으로 되돌립니다. 「달렸다」·「달리는」·「달립니다」는 모두 「달리다」가 됩니다.
왜 이렇게 하나 — 검색 엔진은 글자가 똑같아야 같은 낱말로 봅니다. 되돌려 두지 않으면 「달리는」으로 찾을 때 「달렸다」가 든 글을 놓칩니다.
어떻게 도나
- 글을 낱말 조각으로 쪼갭니다
- 조각마다 명사인지 동사인지 가립니다
- 규칙과 사전으로 그 낱말의 기본형을 찾아 바꿔 적습니다
대가 — 기본형을 적어 둔 사전이 있어야 합니다. 사전에 없는 새 낱말은 못 되돌립니다. 과거형인지 현재형인지처럼 모양에 실려 있던 뜻도 사라집니다.
언제 쓰나 — 사람이 쓴 글을 낱말로 찾을 때 켭니다. 상품 코드나 사람 이름처럼 글자 그대로 맞춰야 하는 값에는 끕니다.
상세
이 절은 「달렸다」와 영어 ran 두 낱말을 들고 갑니다. 먼저 낱말의 모양이 왜 바뀌는지 봅니다. 이어서 검색이 그 모양을 왜 되돌려야 하는지 봅니다. 그다음 되돌리는 절차를 따라갑니다. 끝으로 이웃한 어간 추출과 무엇이 다른지, 무엇을 잃는지를 봅니다.
국어사전에서 「달렸다」를 찾으면 나오지 않습니다. 「달리다」를 펼쳐야 합니다. 사전은 낱말마다 기본형 하나만 항목 제목으로 싣기 때문입니다.
표제어와 굴절
사전에서 한 항목의 제목이 되는 낱말을 표제어라고 합니다. 영어로는 lemma 라고 부릅니다. 표제어 추출이라는 이름이 여기서 왔습니다. 문장 속 낱말을 사전 항목의 제목으로 되돌리는 일이기 때문입니다.
낱말은 문장 속에서 쓰임에 따라 모양이 바뀝니다. 「달리다」는 과거를 말할 때 「달렸다」가 됩니다. 뒤의 명사를 꾸밀 때는 「달리는」이, 격식을 갖춘 말투에서는 「달립니다」가 됩니다. 영어 run 도 주어가 he 나 she 면 runs, 과거면 ran, 진행형이면 running 이 됩니다.
이렇게 뜻의 뼈대는 두고 문법 정보에 따라 모양만 바뀌는 것을 굴절이라고 합니다. 굴절 덕분에 낱말 하나가 시제나 말투까지 함께 전합니다. 표제어 추출은 이 굴절을 거꾸로 되돌리는 일입니다.
flowchart TD
subgraph K["한국어"]
K1["달렸다"] --> KL["달리다"]
K2["달리는"] --> KL
K3["달립니다"] --> KL
end
subgraph E["영어"]
E1["runs"] --> EL["run"]
E2["ran"] --> EL
E3["running"] --> EL
end
한국어 묶음도 영어 묶음도 세 모양이 화살표를 따라 표제어 하나로 모입니다. 모양은 여럿이어도 표제어는 낱말마다 하나입니다.
검색이 표제어 추출을 쓰는 까닭
이 소절은 「어제 한강을 달렸다」라는 문서를 「달리는」으로 찾을 때 무엇이 막히는지 봅니다. 그러려면 검색 엔진이 글을 어떻게 적어 두는지부터 알아야 합니다.
검색 엔진은 글을 낱말로 찾아 주는 시스템입니다. 문서가 들어오면 검색 엔진은 글을 바로 적지 않고 낱말 단위로 나눠 적습니다. 그래야 검색어의 낱말과 맞춰 볼 수 있습니다.
글을 낱말 조각으로 쪼개는 일을 토큰화라고 부릅니다. 쪼갠 조각 하나는 토큰이라고 부릅니다. 「어제 한강을 달렸다」를 쪼개면 「달렸다」도 토큰 하나가 됩니다.
쪼갠 토큰은 역색인에 적힙니다. 역색인은 낱말마다 그 낱말이 든 문서 번호를 적어 둔 찾아보기 표입니다. 검색어가 들어오면 이 표에서 글자가 똑같은 줄을 찾습니다.
글자가 똑같아야 하므로 굴절이 걸림돌이 됩니다. 문서에는 「달렸다」로 적혀 있다고 합시다. 검색어가 「달리는」이면 두 토큰은 서로 다른 줄에 적힙니다. 사람 눈에는 같은 낱말입니다. 그래도 검색 결과에는 안 나옵니다.
아래 표는 같은 문서와 검색어에서 동사 토큰 하나만 떼어 본 것입니다.
| 글 | 표제어 추출 없이 | 표제어 추출 뒤 |
|---|---|---|
| 문서 「어제 한강을 달렸다」 | 달렸다 | 달리다 |
| 검색어 「한강에서 달리는」 | 달리는 | 달리다 |
왼쪽 열에서는 두 토큰의 글자가 달라 문서가 안 걸립니다. 오른쪽 열에서는 둘 다 「달리다」가 되어 역색인의 한 줄에서 만납니다.
표제어 추출은 문서를 넣을 때와 검색어를 받을 때 두 번 다 돕니다. 한쪽만 되돌리면 두 쪽의 모양이 다시 어긋납니다.
두 쪽에 똑같은 처리를 거는 부품을 분석기라고 부릅니다. 분석기는 토큰화로 글을 쪼갠 뒤 표제어 추출 같은 뒤처리를 차례로 겁니다. 문서와 검색어가 같은 분석기를 지나므로 두 쪽의 모양이 맞습니다.
규칙만으로 안 되는 낱말
낱말 끝을 떼는 규칙만으로는 표제어에 닿지 못하는 낱말이 많습니다. 영어 ran 은 어디를 잘라도 run 이 안 됩니다. better 의 표제어는 good 입니다.
한국어에도 같은 낱말이 있습니다. 「도와」의 표제어는 「돕다」입니다. 「불러」의 표제어는 「부르다」입니다. 이렇게 흔한 규칙에서 벗어나 모양이 바뀌는 것을 불규칙 활용이라고 합니다.
그래서 표제어 추출은 규칙과 사전을 함께 씁니다. 규칙으로 되는 낱말은 규칙으로 되돌립니다. 규칙에서 벗어나는 낱말은 낱말 사전에서 찾습니다.
품사를 먼저 가리는 까닭
같은 글자가 두 표제어로 읽힐 때가 있습니다. 영어 saw 는 명사로 쓰이면 톱이라 표제어가 saw 입니다. 동사로 쓰이면 see 의 과거형이라 표제어가 see 입니다.
명사·동사처럼 낱말을 문법 쓰임으로 나눈 갈래를 품사라고 합니다. 품사를 알아야 사전에서 어느 항목을 볼지 정해집니다.
| 문장 | saw 의 품사 | 표제어 |
|---|---|---|
| I saw a bird | 동사 | see |
| I bought a saw | 명사 | saw |
두 문장의 saw 는 글자가 같습니다. 품사가 갈리면서 표제어도 둘로 갈렸습니다.
문장 속 낱말마다 품사를 붙이는 일은 품사 태깅이라고 부릅니다. 표제어 추출은 품사 태깅을 먼저 돌려 품사를 얻은 뒤 사전을 찾습니다.
되돌리는 절차
이 소절은 앞의 두 소절을 한 줄로 이어 봅니다. 토큰 하나가 표제어가 되기까지 네 단계를 거칩니다.
- 토큰화로 글을 토큰으로 쪼갭니다
- 품사 태깅으로 토큰마다 품사를 붙입니다
- 그 품사에 맞는 규칙과 사전으로 표제어를 찾아 바꿔 적습니다
- 사전에서도 못 찾은 토큰은 모양을 바꾸지 않고 둡니다
넷째 단계가 있어서 모르는 낱말이 들어와도 절차가 멈추지 않습니다. 새로 생긴 말이나 제품 이름은 들어온 모양 그대로 역색인에 적힙니다.
한국어에서는 형태소 분석이 맡는다
한국어 낱말은 뜻을 담은 앞부분 뒤에 짧은 말이 붙어 모양이 바뀝니다. 이 소절은 「달렸다」와 「한강을」 두 토큰을 조각으로 나눠 봅니다. 한국어에서 표제어 추출을 무엇이 맡는지가 거기서 드러납니다.
뜻을 가진 가장 작은 말 단위를 형태소라고 합니다. 「달렸다」는 「달리」·「었」·「다」 세 형태소가 합쳐지며 글자가 줄어든 모양입니다.
동사와 형용사에서 뜻을 담은 앞부분을 어간이라고 합니다. 「달렸다」의 어간은 「달리」입니다. 어간에 「-다」를 붙이면 표제어 「달리다」가 됩니다.
어간 뒤에 붙어 시제나 문장의 끝맺음을 나타내는 부분은 어미라고 합니다. 「달렸다」에서는 과거를 나타내는 「-었-」과 문장을 맺는 「-다」가 어미입니다.
명사 뒤에 붙어 그 명사가 문장에서 하는 구실을 나타내는 말은 조사라고 합니다. 「한강을」의 「을」, 「한강에서」의 「에서」가 조사입니다.
글을 형태소로 나누고 형태소마다 품사를 붙이는 일이 형태소 분석입니다. 형태소 분석을 거치면 어간이 드러나므로 한국어에서는 표제어 추출이 형태소 분석 안에서 함께 끝납니다. 「한강을」에서 조사 「을」을 떼는 일도 같은 분석이 맡습니다.
역색인에 적는 모양은 어간 「달리」여도 되고 표제어 「달리다」여도 됩니다. 문서와 검색어가 같은 모양으로 적히기만 하면 역색인에서 만납니다. 여기서 얻은 어간 「달리」는 사전과 품사를 거쳐 나온 것입니다. 다음 소절의 어간 추출이 낱말 끝만 잘라 얻는 조각과는 다릅니다.
어간 추출과 가르는 선
어간 추출도 굴절된 모양을 하나로 모으는 일입니다. 차이는 사전과 품사를 쓰느냐에 있습니다. 어간 추출은 둘 다 없이 -ing · -es 같은 낱말 끝을 규칙으로 잘라 냅니다.
아래 표는 낱말 끝을 규칙으로 자르는 흔한 어간 추출과 표제어 추출에 같은 낱말을 넣은 결과입니다.
| 넣은 낱말 | 어간 추출 | 표제어 추출 |
|---|---|---|
| running | run | run |
| studies | studi | study |
| ran | ran | run |
| better | better | good |
첫 줄에서는 둘이 같은 답을 냅니다. 둘째 줄의 studi 는 사전에 없는 모양입니다. 셋째와 넷째 줄에서는 어간 추출이 모양을 못 모으고 들어온 낱말을 그대로 돌려줍니다.
둘의 차이를 축별로 모으면 이렇습니다.
| 어간 추출 | 표제어 추출 | |
|---|---|---|
| 보는 것 | 낱말 끝의 글자 | 규칙 · 사전 · 품사 |
| 결과 | 사전에 없을 수도 있는 조각 | 사전에 실린 기본형 |
| 불규칙 활용 | 못 모은다 | 모은다 |
| 준비물 | 끝을 자르는 규칙 목록 | 낱말 사전 · 품사 태깅 |
어간 추출은 준비물이 적은 대신 결과가 거칩니다. 표제어 추출은 사전과 품사 태깅을 들고 다니는 대신 사람이 읽을 수 있는 기본형을 돌려줍니다.
드는 비용
표제어 추출은 토큰마다 사전을 한 번 찾습니다. 그래서 걸리는 시간은 글에 든 토큰 수에 비례합니다. 앞 단계인 품사 태깅에도 문장마다 시간이 따로 듭니다.
낱말 사전은 메모리에 올려 두고 찾습니다. 다루는 언어의 낱말이 많을수록 사전이 커지고 메모리도 더 듭니다. 끝을 자르는 규칙 목록만 들고 있는 어간 추출보다 무겁습니다.
무엇을 잃나
첫째로 사전에 없는 새 낱말은 못 되돌립니다. 사전에 google 이 동사로 실려 있지 않다고 합시다. 그러면 googled 와 googling 은 서로 다른 모양으로 남습니다. 문서에 googled 가, 검색어에 googling 이 쓰이면 둘이 만나지 못합니다.
둘째로 품사를 잘못 가리면 엉뚱한 표제어가 나옵니다. 앞의 saw 를 동사로 잘못 가리면 톱에 관한 문서가 see 의 줄에 적힙니다.
셋째로 모양에 실려 있던 뜻이 사라집니다. 「달렸다」와 「달린다」가 둘 다 「달리다」가 되므로 과거와 현재를 가려 찾을 수 없습니다.
모양을 모아 얻는 것과 위의 세 손실은 검색 품질의 두 잣대에 갈라져 나타납니다. 이득은 한 잣대에, 손실은 다른 잣대에 주로 걸립니다.
찾아야 할 문서 가운데 실제로 찾아낸 몫을 재현율이라고 합니다. 모양을 하나로 모으면 놓치던 문서가 걸려 재현율이 오르는 데 도움이 됩니다. 첫째 손실처럼 사전에 없어 못 모은 낱말은 이 이득을 받지 못합니다.
찾아낸 문서 가운데 맞는 문서의 몫을 정밀도라고 합니다. 모양을 모으면 뜻이 조금 다른 문서도 섞여 정밀도가 내려갈 수 있습니다. 둘째와 셋째 손실이 이쪽에 걸립니다.
쓰는 때와 안 쓰는 때
게시글이나 상품 설명처럼 사람이 쓴 글을 낱말로 찾을 때 켭니다. 사용자가 낱말을 어떤 모양으로 칠지 모르기 때문입니다. 찾은 결과의 낱말을 화면에 보여 줘야 할 때도 어간 추출보다 표제어 추출이 맞습니다. 표제어 추출은 사람이 읽을 수 있는 기본형을 돌려줍니다.
글에서 낱말이 몇 번 나오는지 세는 자연어 처리 작업에서도 앞 단계로 씁니다. 「달렸다」와 「달린다」를 따로 세면 같은 낱말의 횟수가 쪼개집니다.
모양 자체가 뜻을 가르는 값에는 켜지 않습니다. 상품 코드, 사람 이름, 로그의 오류 문자열처럼 글자 하나만 달라도 다른 것을 가리키는 값이 그렇습니다. 제품 이름 Windows 를 복수 명사로 읽으면 window 로 바뀌어 창문에 관한 문서와 한 줄에 섞입니다.
검색 엔진은 한 문서 안의 값을 제목·본문처럼 칸을 나눠 담습니다. 이 칸을 필드라고 합니다. 모양 자체가 뜻을 가르는 값은 표제어 추출을 끈 필드에 따로 담습니다. 그 필드에는 들어온 글자 그대로 적힙니다.
관련 항목
표제어 추출과 함께 분석기를 이루는 처리 단계
분석기 · 토큰화 · 형태소 분석 · 어간 추출 · 불용어 · 동의어 사전 · 유니코드 정규화 · 소문자 변환
표제어 추출이 다루는 말의 단위
토큰 · 형태소 · 표제어 · 어간 · 어미 · 조사 · 굴절 · 불규칙 활용
표제어 추출에 앞서 도는 언어 분석
품사 · 품사 태깅 · 형태소 분석기 · Nori · 자연어 처리 · 말뭉치
표제어 추출의 결과를 받아 쓰는 검색 구성 요소
검색 엔진 · 역색인 · 전문 검색 · Apache Lucene · Elasticsearch · BM25
표제어 추출이 바꾸는 검색 품질 지표
다른 이름: lemmatization · 레마타이제이션 · 기본형 복원 · 원형 복원 · lemmatizer · 표제어 추출기