기타/AI

[딥 러닝을 이용한 자연어 처리 입문] 2. 텍스트 전처리(1)

s-bot 2022. 9. 18. 17:19

 

https://wikidocs.net/book/2155

 

딥 러닝을 이용한 자연어 처리 입문

많은 분들의 피드백으로 수년간 보완되어 온 딥 러닝 자연어 처리 무료 eBook입니다. 기본적인 텍스트 전처리부터 BERT와 같은 PLM의 다양한 다운스트림 태스크를 ...

wikidocs.net

 

해당 포스팅은 "딥 러닝을 이용한 자연어 처리 입문" 서적을 제 생각대로 요약한 내용입니다.

 


 

목차 2. 텍스트 전처리 (Text Preprocessing)

 

① 토큰화 (Tokenization)

 

② 정제 (Cleaning) and 정규화 (Normalization)

 

③ 어간 추출 (Stemming) and 표제어 추출 (Lemmatization)

 

④ 불용어 (Stopword)

 

⑤ 정규 표현식 (Regular Expression)

 

⑥ 정수 인코딩 (Integer Encoding)

 

⑦ 패딩 (Padding)

 

⑧ 원-핫 인코딩 (One-Hot Encoding)

 

⑨ 데이터의 분리 (Splitting Data)

 

⑩ 한국어 전처리 패키지 (Text Preprocessing Tools for Korean Text)

 

 

 


 

 

토큰화 (Tokenization)

 

단어 토큰화 (Word Tokenization)

- 토큰의 기준을 단어(word)로 하는 경우

- 구두점을 지운 뒤에 띄어쓰기를 기준으로 잘라내는 간단한 예시

@ 입력 : Time is an illusion. Lunchtime double so!

@ 출력 : Time , is , an , illusion , Lunchtime , double , so

 

토큰화에서 고려해야할 사항

- 구두점이나 특수 문자를 단순 제외해서는 안 됨

- 줄임말과 단어 내에 띄어쓰기가 있는 경우 하나로 인식할 수 있는 능력 필요

 

 문장 토큰화 (Sentence Tokenization)

- 문장 단위로 구분하는 작업으로 때로는 문장 분류라고도 부름

- NLTK에서 영어 문장의 토큰화를 수행하는 sent_tokenize 존재

- 한국어 문장의 토큰화를 수행하는 KSS(Korean Sentence Splitter) 존재

 

 한국어에서의 토큰화의 어려움

- 교착어의 특성

@ 자립 형태소 : 접사, 어미, 조사와 상관없이 자립하여 사용할 수 있는 형태소 (명사, 관형사, 부사, 감탄사 등)

@ 의존 형태소 : 다른 형태소와 결합하여 사용되는 형태소 (접사, 어미, 조사, 어간 등)

- 영어의 단어 토큰화와 유사한 형태를 얻으려면 어절이 아닌 형태소 토큰화 수행 필요

@ 입력 : 에디가 책을 읽었다

@ 어절 토큰화 : 에디가, 책을, 읽었다.

@ 형태소 토큰화 : 자립 형태소 - 에디, 책 / 의존 형태소 - ~가, ~을, 읽~, ~었, ~다

- 한국어는 띄어쓰기가 영어보다 잘 지켜지지 않는다.

 

 품사 태깅 (Part-of-speech tagging)

- 표기는 같지만 품사에 따라서 단어의 의미가 달라지기도 함

@ fly : 날다 의미, 파리 의미

@ 못 : 망치를 사용해 고정하는 물건 의미, 부사로서 동사를 할 수 없다는 의미

- 영어 문장에서 NLTK에서는 Penn Treebank POS Tags라는 기준을 사용하여 품사 태깅 진행 

- 한국어 자연어 처리를 위해서는 KoNLPy 파이썬 패키지 사용

 

 

 

 

정제 (Cleaning) and 정규화 (Normalization)

 

 개요

@ 정제(cleaning) : 갖고 있는 코퍼스로부터 노이즈 데이터 제거

@ 정규화(normalization) : 표현 방법이 다른 단어들을 통합시켜 같은 단어로 만듦

- 완벽한 정제 작업은 어려운 편이라서 일종의 합의점을 찾기도 함

 

▶ 규칙에 기반한 표기가 다른 단어들의 통합

- USA와 US, uh-huh와 uhhuh는 같은 의미를 가지므로 하나의 단어로 정규화 가능

 

▶ 대, 소문자 통합

- 영어권 언어에서 대,소문자를 통합하는 것은 단어의 개수를 줄일 수 있는 또 다른 정규화 방법

- 대부분 대문자를 소문자로 변환하는 소문자 변환작업으로 이루어짐

- 대문자와 소문자를 무작정 통합해서는 안 됨 (미국을 뜻 하는 US와 우리를 뜻하는 us)

 

▶ 불필요한 단어의 제거

- 정제 작업에서 제거해야하는 노이즈 데이터(noise data)

- 자연어가 아니면서 아무 의미도 갖지 않는 글자들(특수 문자 등)과 분석 목적에 맞지 않는 불필요 단어들

- 등장 빈도가 적은 단어와 길이가 짧은 단어

- 영어 단어의 평균 길이는 6~7, 한국어 단어의 평균 길이는 2~3이라 길이가 짧은 단어 제거는 영어에서 효과적

 

▶ 정규 표현식 (Regular Expression)

- 정규 표현식은 계속해서 등장하는 글자들을 규칙에 기반하여 한 번에 제거하는 방식으로 유용

- 예를 들어 길이가 짧은 단어를 제거할 때도 유용하게 사용

 

 

 

 

 어간 추출 (Stemming) and 표제어 추출 (Lemmatization)

 

표제어 추출 (Lemmatization)

@ 표제어 (Lemmatization) : '기본 사전형 단어'

- 단어들로부터 표제어를 찾아가는 과정으로 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단

- 표제어 추출을 위해 형태학적 파싱을 진행

@ 형태학 (morphology)이란 형태소로부터 단어들을 만들어가는 학문, 형태소 종류에 어간과 접사가 존재

@ 어간 (stem) : 단어의 의미를 담고 있는 단어의 핵심 부분

@ 접사 (affix) : 단어에 추가적인 의미를 주는 부분

- NTLK에서는 표제어 추출을 위한 도구인 WordNetLemmatizer 지원

@ 예시 : am -> be , the going -> the going, having -> have

 

 어간 추출 (Stemming)

- 형태학적 분석을 단순화한 버전, 정해진 규칙만 보고 단어의 어미를 자르는 어림짐작의 작업

- 어간 추출 후에 나오는 결과 단어는 사전에 존재하지 않는 단어일 확률 존재

- 어간 추출 알고리즘 중 하나인 포터 알고리즘(Porter Algorithm)

@ 예시 : am -> am , the going -> the go , having -> hav

 

 한국어에서의 어간 추출

- 위의 표와 같이 5언 9품사의 구조를 가지고 있음

- 용언에 해당되는 '동사'와 '형용사'는 어간(stem)과 어미(ending)의 결합으로 구성

@ 어간 (stem) : 용언을 활용할 때, 원칙적으로 모양이 변하지 않는 부분

@ 어미 (ending) : 용언의 어간 뒤에 붙어서 활용하면서 변하는 부분

@ 활용 (conjugation) : 언어적 특징 중 하나를 말하는 통칭적인 개념, 용언의 어간(stem)이 어미(ending)를 가짐

- 어간이 어미를 취할 때 어간의 모습이 일정하다면 규칙 활용, 변한다면 불규칙 활용으로 나뉨

 

 

 

 

 불용어(Stopword)

 

 개요

- 유의미한 단어 토큰만을 선별하기 위해서는 큰 의미가 없는 단어 토큰 제거 작업 필요

- 자주 등장하지만 분석을 하는 것에 있어서는 큰 도움이 되지 않는 단어들

@ 예시 : I, my, me, over, 조사, 접미사

- NLTK에서는 위와 같은 100여개 이상의 영어 단어들을 불용어 패키지 내에서 미리 정의

 

 한국어에서 불용어 제거하기

- 간단하게는 토큰화 후에 조사, 접속사 등을 제거하는 방법이 있음

- 사용자가 직접 불용어 사전을 만들게 되는 경우가 많음

- 보편적으로 선택할 수 있는 한국어 불용어 리스트 링크 참고 (https://www.ranks.nl/stopwords/korean)

- 불용어가 많은 경우에는 코드 내에서 직접 정의하지 않고 txt, csv 파일로 정리하여 불러와서 사용