본문 바로가기
  • 공부 기록 인생 기록
Python/NLP

토큰화(Tokenization)

by 티권 2023. 2. 17.

토큰화(tokenization)

- 주어진 코퍼스(corpus)에서 토큰(token)이라 불리는 단위로 나누는 작업

- 토큰의 단위가 상황에 따라 다르지만, 보통 의미있는 단위로 토큰을 정의

 

 

토큰화에서 고려해야할 상황

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

  - 구두점조차도 하나의 토큰으로 분류하기도 함. ex) 마침표(.)는 문장의 경계를 알 수 있게 해줌

  - 단어 자체에 구두점이나 특수문자를 갖고 있는 경우도 있음. ex) $45.55, 01/02/06, 숫자 사이의 컴마

- 줄임말과 단어 내에 띄어쓰기가 있는 경우

   ex)  we're, New York

- 사용하는 코퍼스가 어떤 국적의 언어인지, 또는 해당 코퍼스 내에서 특수문자들이 어떻게 사용되고 있는지

- 100% 정확도를 얻는 건 쉽지 않다. 코퍼스에 오타, 문장의 구성이 엉망일 수도 있기 때문.

 

 

단어 토큰화(Word Tokenization)

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

- 단어는 단어 단위 외에도 단어구, 의미를 갖는 문자열로도 간주되기도 합니다.

- 토큰화의 기준?

  - 해당 데이터를 가지고 어떤 용도로 사용할 것인지에 따라서 그 용도에 영향이 없는 기준으로 정한다

  ex) 영어권 언어에서 아포스트로피(')가 들어가있는 단어는 어떻게 토큰으로 분류해야 하는지

  • Don't
  • Don t
  • Dont
  • Do n't
  • Jone's
  • Jone s
  • Jone
  • Jones

기존에 공개된 도구들을 사용하였을 때의 결과가 사용자의 목적과 일치한다면 해당 도구를 사용

 

NLTK는 영어 코퍼스를 토큰화하기 위한 도구들을 제공

 

아파스트로피를 처리하는 방식이 다르다

 

 

 

문장 토큰화(Sentence Tokenization)

- 토큰의 기준을 문장으로 하는 경우, 문장 분류(sentence segmentation)라고도 함

- !나 ?는 문장의 구분을 위한 꽤 명확한 구분자 역할. 하지만 마침표는 그렇지 않음.

- 마침표는 문장의 끝이 아니더라도 등장.

  ex) IP 192.168.56.31 서버에 들어가서 로그 파일 저장해서 aaa@gmail.com로 결과 좀 보내줘. 그 후 점심 먹으러 가자.

 

NLTK에서는 영어 문장의 토큰화를 수행하는 sent_tokenize를 지원

NLTK는 단순히 마침표를 구분자로 하여 문장을 구분하지 않음. Ph.D를 문장 내의 단어로 인식.

 

 

 

한국어 문장 토큰화 도구 KSS(Korean Sentence Splitter) - 설치 후 사용

"딥.러닝" 을 문장 내의 단어로 인식. 

 

 

 

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

 

  교착어

  - 조사, 어미 등을 붙여서 말을 만드는 언어

  - 한국어에서 띄어쓰기 단위가 되는 단위를 어절 이라고 함. 어절 토큰화는 한국어 NLP에서 지양되고 있음

  - 어절 토큰화와 단어 토큰화는 다르다. 이유는 교착어라는 점에서 기인함

  - 대부분의 한국어 NLP에서 조사는 분리해줄 필요가 있음.

  - 같은 단어임에도 서로 다른 조사가 붙어서 다른 단어로 인식 되면 자연어 처리가 번거로움.

 

  형태소

  - 뜻을 가진 가장 작은 말의 단위.

  - 자립 형태소

    - 접사, 어미, 조사와 상관없이 자립하여 사용할 수 있는 형태소

    - 그 자체로 단어가 된다. 체언(명사, 대명사, 수사), 수식언(관형사, 부사), 감탄사 등

  - 의존 형태소

    - 다른 형태소와 결합하여 사용되는 형태소. 접사, 어미, 조사, 어간

 

  ex) 에디가 책을 읽었다

  형태소 단위로 분해

  자립 형태소 : 에디, 책
  의존 형태소 : -가, -을, 읽-, -었, -다

 

  한국어에서 영어에서의 단어 토큰화와 유사한 형태를 얻으려면

  어절 토큰화가 아니라 형태소 토큰화를 수행해야한다

 

  띄어쓰기

  - 띄어쓰기가 영어보다 잘 지켜지지 않음

  - 수많은 코퍼스에서 띄어쓰기가 무시되는 경우가 많음

  - 한국어는 띄어쓰기가 지켜지지 않아도 글을 쉽게 이해할 수 있음

 

 

 

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

- 단어 토큰화 과정에서 각 단어가 어떤 품사로 쓰였는지를 구분해놓는 작업

- 단어 표기는 같아도 품사에 따라서 의미가 달라지기도함. ex) fly, 못

- 해당 단어가 어떤 품사로 쓰였는지 보는 게 의미를 제대로 파악하는 방법

 

KoNLPy

- 한국어 자연어 처리를 위한 패키지

- 형태소 분석기 : Okt(Open Korea Text), 메캅(Mecab), 코모란(Komoran), 한나눔(Hannanum), 꼬꼬마(Kkma)

 

공통적으로 제공하는 메소드

 - morphs : 형태소 추출

 - pos : 품사 태깅

 - nouns : 명사 추출

 

Okt, 꼬꼬마

두 개의 형태소 분석기가 결과가 다르다.

각 형태소 분석기는 성능과 결과가 다르게 때문에 용도에 따라 적절한 거 사용

속도를 중요시한다면 메캅

 

 

 

 

'Python > NLP' 카테고리의 다른 글

펄플렉서티(Perplexity, PPL)  (0) 2023.03.14
N-gram 언어 모델  (0) 2023.03.14
언어 모델 - 통계적 언어 모델  (0) 2023.03.14
정제, 정규화  (0) 2023.02.19
konlpy 사용 시 오류  (0) 2023.02.18