00 자연어 처리 (natural language processing)

자연어란 우리가 일상생활에서 말하는 말을 의미한다.

자연어처리는 우리의 말을 컴퓨터에게 전달하여 처리시키는 작업이라고 할 수 있다.

 

이를 위해서 자연어를 컴퓨터가 알아들을 수 있는 말로 바꿔 주어야 한다,

텍스트 전처리 작업에는 크게 토큰화 / 정제 / 정규화가 있다고한다.

 

01-01 토큰화(Tokenization)

자연어처리 모델은 "코퍼스"라는 데이터셋을 바탕으로 만들어지는데, 이 코퍼스에서 "토큰"이라고 불리는 단위로 

나누는 작업을 "토큰화"라고 한다.

일반적으로 토큰은 '의미있는 단위"로 정의한다고 생각하면 된다.

 

영어로 예를 들어 Don't be shy. Mr.San is  expecting a lot from you.라는 문장을 토큰화 한다면,

XXXXX, be , shy , Mr , San , is , expecting , a , lot , from , you 이렇게 될 수 있다.

영어권 언어는 한국과 달리 띄어쓰기만으로 쉽게 토큰화 작업을 수행할 수 있다.

 

하지만 소유격을 나타내는 ' (apostrophe)는 어떻게 토큰화 해야할까?

위에 Don't을 예시로 든다면 다양한 방식이 있다.
Dont

Do, n't 

Don, 't 

word_tokenize 모듈을 통해서 어퍼스트로피를 어떻게 처리하는지 보자.

 

Don't라는 코퍼스를 "Do" 와 "n't"로 구분한 것을 볼 수 있다. 구두점과 공백과 달리 단순 제거하게 되면 올바른 토큰화 작업이 힘들어 질 수 있다.

 

그렇다면 점과 공백은 어떤가?

마찬가지로 고려할 사항들이 있다.

Ph.D 처럼 점 자체가 토큰이 될 수도 있고, 문장에서의 마침표로써의 점은 문장의 경계를 파악하는데 도움이 되기 때문에 

점을 제거하지 않을 수 있다.

 

공백의 경우도 마찬가지이다.

공백이 포함된 단어가 존재할 수 있기 때문이다.New York, rock n roll..)

 

- 문장 토큰화

-> 한 문장씩 구분해야함.

-> 어떠한 기준으로 구분할 것인가?

명확한 기준은 ?나 ! 같은 비교적 명확한 구분자(boundary)가 존재한다.

구두점의 경우는 명확하지 않을 수 있다.

위에서 언급한 Ph.D나 Mr.San.. 등 문장의 끝에서만 등장하지 않을 수 있기 때문이다.

 

- 한국어 토큰화의 어려움

영어는 보편적으로 New York과 같은 합성어나 he's와 같은 예외처리만 한다면 띄어쓰기만 해도 토큰화가 쉽다.

이에 반해 한국어는 띄어쓰기만으로는 토큰화가 힘들다.

 

한국어에서 띄어쓰기 단위가 되는 단위를 "어절"이라고 하는데, 어절 토큰화는 NLP에서 지양하고 있다고 한다.

(어절 토큰화 != 단어 토큰화  때문)

 

이 이유는 근본적으로 한국어가 영어와 다른 형태를 가지는 교착어이기 때문이다. (조사, 어미 등을 붙여서 말을 만드는 것)

교착어는 첨가어라고도 하며, "첨가"라는 말 그대로 어근에 접사가 붙어서 의미가 변화하는 형태의 언어를 말한다.

 

예시로 "그"라는 어근에 다양한 조사가 붙어서 그는, 그가, 그에게, 그또한 등등 다양한 의미로 바뀌기 때문에 토큰화가 어렵다. 영어의 경우는 "그" "에게" 처럼 분리가 되기 때문에 한국어가 어렵다고 하는 것이다.

 

한국어 토큰화의 핵심은 "형태소" ( Morpheme) 이다.

형태소는 "뜻을 가진 가장 작은 말의 단위"이며, 두 가지 형태소로 이루어져 있다. "자립 형태소"와 "의존 형태소"이다.

 

Ex) 에디가 책을 읽었다.

자립 형태소: 에디, 책  (어떠한 접사, 어미, 조사와 관계없이 자립하여 쓸 수 있는 형태소)

의존 향태소: -가, -을, 읽, -었, -다.  (다른 형태소와 결합하여 사용되는 형태소)

 

따라서 한국어의 올바른 토큰화를 하기 위해서는 어절 토큰화가 아닌 위의 분리와 같은 형태소 토큰화를 진행해야 한다.!!

 

- 품사 태깅

단어는 품사에 따라 의미가 달리지기도 한다.

fly -> 동사 : 날다, 명사: 파리

못 -> 명사: 얇고 긴거, 부사 : 부정의 의미

따라서 단어를 올바르게 파악하기 위해서는 단어가 어떠한 품사로 쓰였는지에 따라 구분해놓아야 하는데, 

이를 품사 태깅이라고 한다.

 

NLTK에서는 pos_tag라는 기준을 사용하여 품사를 태깅한다.

VBP - 동사

RB - 부사

.......

 

한국어처리는 대표적으로 KoNLPy(코엔엘파이) 패키지에서, 형태소 분석기로 Okt(Open Korea text)를 이용한다.

 

+ Recent posts