본문 바로가기

개발/NLP

NLP Load : 맨땅에 헤딩하는 NLP 공부일지 (2)

Tokenization : 토큰화

토큰화는 기계에게 어느 구간까지가 문장이고, 단어인지 알려주는 작업을 말합니다.
꼭 문장, 단어만 알려줘야하는것은 아닙니다. 그렇기에 문장 토큰화, 단어 토큰화 등등 다양한 형태의 토큰화가 존재합니다. 우리가 파이썬을 사용하면서 .split() 을 통해 띄어쓰기를 기준으로 구분하는 것도 일종의 토큰화라고 할 수 있습니다.

단어 토큰화(Word Tokenization)에 대한 고민

문장 내에서 단어를 어떻게 구분할까요? 다음 문장들을 어떻게 단어로 구분하는지 한번 알아봅시다.

  • We're Guardian's of Galaxy!!
  • We are Guardian's of Galaxy!!
  • We are Guardian's of Galaxy

무엇이 다른지 잘 모르겠죠. 서로 같은 의미를 가진 3가지 문장임에도 전혀 다르게 토큰화될 수 있습니다.
바로 아래처럼요.

  • [ 'We're', 'Guardian's', 'of', 'Galaxy!!' ]
  • [ 'We', 'are', 'Guardian's', 'of', 'Galaxy!!' ]
  • [ 'We', 'are', 'Guardian's', 'of', 'Galaxy' ]

말하고자 하는게 무엇이나면, 프로그래밍 언어는 우리가 인지하는것과 다르게 'Galaxy!!'와 'Galaxy'를 다르게 본다는 점입니다. 이러한 관점에서 토큰화는 매우 중요합니다. 또 하나 중요한 문제가 있는데 그건 바로 특수문자의 처리 방식입니다.
요 특수문자가 방해된다고 해서 다 제거해버리면 절대 안됩니다..!
왜냐면 본래 의미를 상실하는 경우가 발생하기 때문이죠. 즉, 토큰화 작업은 상당히 섬세하게 규칙을 설계해야합니다.
이제까지 이야기한 내용을 단어 토큰화에 빗대어 말했는데, 문장 토큰화(Sentence Tokenization)도 동일합니다..

Use Tokenizer!!

그.래.서.
우리는 이미 만들어진 토크나이저를 알아볼 것이고, 이들를 앞으로 이용하고자 합니다.
무슨 토크나이저를 사용할 것이냐..! 아래와 같습니다.

  • Mecab
  • Kkma
  • Okt
  • Hannanum
  • Khaii
  • Soynlp
  • NLTK
  • KSS

종류가 매우 많죠? 이중 NLTKKSSSentence Tokenizer에 해당하고, 나머지는 Word Tokenizer에 해당한답니다.
다음 포스팅에서 이들의 사용을 자세히 알아보고 특징을 살펴봅시다!