Deep learning

[Deep learning] 토큰화 (Tokenization)

독립성이 강한 ISFP 2023. 2. 24. 00:16
728x90
반응형

CountVectorizer : 입력된 문장을 토큰화(Tokenize)하여 토큰의 등장 빈도 벡터로 바꿔주는 기법

 

자연어 처리에서 크롤링 등으로 얻어낸 corpus(코퍼스) 데이터가 전처리되지 않은 상태라면, 해당 데이터를 사용하고자 하는 용도에 맞게 토큰화(Tokenization) & 정제(cleaning) & 정규화(normalization)를 해줘야 한다.

 

- 토큰화(Tokenization) : 코퍼스(Corpus)에서 토큰(token)이라 불리는 단위로 나누는 작업

- 토큰(token) : 단위가 상황의 따라 다르지만, 보통 의미 있는 단위로 토큰을 정의한다.

 

1. 단어 토큰화 (Word Tokenization) : 토큰의 기준을 단어로 함.

단어는 단어 단위 외에도 단어구, 의미를 갖는 문자열로도 간주됨.

보통 토큰화 작업은 단순히 구두점이나 특수문자를 전부 제거하는 정제(cleaning) 작업을 수행하는 것만으로 해결되지 않는다. 또한 띄어쓰기를 단위로 자르면 단위 토큰이 구분되는 영어와 달리, 한국어는 띄어쓰기만으로는 단어 토큰을 구분하기 어렵다.

 

2. 토큰화 중 생기는 선택의 순간

토큰화를 하다보면, 토큰화의 기준을 생각해봐야 하는 경우가 있다. 해당 데이터를 가지고 어떤 용도로 사용할 것인지에 따라 용도에 영향이 없는 기준으로 정하면 된다.

 

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

토큰화 작업은 단순히 코퍼스에서 구두점을 제외하고 공백 기준으로 잘라내는 작업이라고 생각해선 안된다. 그 이유를 정리해 보자.

  • 구두점이나 특수 문자를 무조건 제외해서는 안 된다.
  • 마침표(.)와 같은 경우는 문장의 경계를 알 수 있는데 도움이 된다.
  • 단어 자체에 구두점을 갖고 있는 경우 (ex. m.p.h, 01/02/06, $45.55, 455,67)
  • 줄임말과 단어 내에 띄어쓰기가 있는 경우
  • what’re → what are / we’re → we are / I’m → I am
  • New York / rock ‘n’ roll

4. 문장 토큰화(Sentence Tokenization) : 토큰의 단위가 문장일 경우

문장 분류 (sentence segmentation)라고도 부름

코퍼스(corpus) 데이터가 정제되지 않은 상태라면, 코퍼스는 문장 단위로 구분되어 있지 않아서 이를 사용하고자 하는 용도에 맞게 문장 토큰화가 필요할 수 있다.

어떻게 주어진 코퍼스로부터 문장 단위로 분류할 수 있을까?

문장의 마침표(.)나 (!?)와 같은 것들을 기준으로 문장을 분류하면 되지 않을까 생각한다. 하지만 !? 는 문장의 구분을 위한 꽤 명확한 구분자 역할을 하지만 마침표(.)는 그렇지 않다. 마침표는 문장의 끝이 아니더라도 등장할 수 있기 때문이다.

사용하는 코퍼스가 어떤 국적의 언어인지, 또는 해당 코퍼스 내에서 특수문자들이 어떻게 사용되고 있는지에 따라 직접 규칙을 정의해 볼 수 있다.

 

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

  • 교착어의 특성 조사 ’ 그가’,’ 그에게’,’ 그를’과 같이 다양한 조사가 ‘그’라는 글자 뒤에 띄어쓰기 없이 바로 붙게 되는데, 자연어 처리를 하다 보면 같은 단어임에도 서로 다른 조사가 붙어서 다른 단어로 인식이 되면 자연어 처리가 힘들고 번거로워지는 경우가 많다. 그래서 대부분의 한국어 NLP에서 조사는 분리해 줄 필요가 있다. 한국어 토큰화에서는 형태소(morpheme)란 개념을 반드시 이해해야 한다.
     
    • 형태소  : 뜻을 가진 가장 작은 말의 단위
    • 자립 형태소: 접사, 어미, 조사와 상관없이 자립하여 사용할 수 있는 형태소. 명사, 대명사, 수사, 관형사, 부사, 감탄사 등
    • 의존 형태로 : 다른 형태소와 결합하여 사용되는 형태소. 접사, 어미, 조사, 어간
    (ex. 에디가 책을 읽었다. / 자립 형태소 : 에디, 책)
    즉, 한국어에서 영어에서의 단어 토큰화와 유사한 형태를 얻으려면 어절 토큰화가 아니라 형태로 토큰화를 수행해야 한다.
  • 의존 형태소 : -가, -을, 읽-, -었, -다
  • 단위 토큰화 : 에디가 / 책을 / 읽었다
  • 즉, 띄어쓰기 단위가 영어처럼 독립적인 단어라면 띄어쓰기 단위로 토큰화를 하면 되겠지만 한국어는 독립적이지 않고 조사 등의 무언가가 붙어있는 경우가 많아서 이를 전부 분리해줘야 한다는 의미이다.
  • 한국어는 띄어쓰기가 영어보다 잘 지켜지지 않는다. 한국어는 띄어쓰기가 지켜지지 않아도 글을 쉽게 이해할 수 있는 언어이기 때문이다. 한국어는 코퍼스에서 띄어쓰기가 무시되는 경우가 많아 자연어 처리가 어려워졌다.

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

단어의 표기는 같지만 품사에 따라 단어의 의미가 달라지는 경우가 있다. 예를 들어 ‘못’이라는 단어는 명사로는 망치를 사용해서 고정하는 물건을 의미하지만, 부사로서의 ‘못’은 ‘먹는다’, ‘달린다’와 같은 동작 동사를 할 수 없다는 의미로 쓰입니다. 그래서 단어 토큰화 과정에서 각 단어가 어떤 품사로 쓰였는지를 구분해놓기도 하는데, 이 작업을 품사 태깅이라고 합니다.

 

 

 

https://wikidocs.net/book/2155

 

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

많은 분들의 피드백으로 수년간 보완된 입문자를 위한 딥 러닝 자연어 처리 교재 E-book입니다. 오프라인 출판물 기준으로 코드 포함 **약 1,000 페이지 이상의 분량*…

wikidocs.net

*이 글은 위키독스를 읽고 정리한 글입니다.

728x90
반응형