4.3 토큰화

tmdwo1016·6일 전

4.3 토큰화

  • Copus : 말뭉치, 특정한 목적을 가지고 모아둔 데이터의 모음
  • Token : 토큰화로 나눌 수 있는 가장 작은 단위

1. 단어 토큰화 (Word Tokenization)

토큰화 : 코퍼스에서 텍스트를 더 작은 단위로 나누는 작업

단어 단위, 구두점 단위, 어구, 의미 등의 문자열로 간주되며 나눠질 수 있음

여기서 중요한 것은 모든 특수문자를 제거하는 것이 의미를 유지하며 적절한 토큰화 과정이 필요하다.

2. 토큰화 기번 코드

from nltk.tokenize import word_tokenize # NLTK(Natural Language Toolkit) 라이브러리의 표준 단어 토크나이저
from nltk.tokenize import WordPunctTokenizer # NLTK의  구두점 기반 토크나이저
from tensorflow.keras.preprocessing.text import text_to_word_sequence # 텐서플로우 케라스 전처리 모듈 함수 (문장 단어 단위로 쪼개면서 모든 영문을 소분자로 변환, 마침표나 쉬표와 같은 구두점은 제거)

위 코드를 맥북에 돌리면 실행이 안될 수 있음. 원인은 import 문이 끊기겨서 생기는 문제, 그리고 Tensorflow가 설치 돼있지 않거나 버전이 충돌 된 문제가 있음. import 문법 문제, 패키지 버전 충돌, 라이브러리 충돌

import sys
sys.modules["pyarrow"] = None  # macOS에서 TensorFlow와 PyArrow 충돌 방지

from nltk.tokenize import word_tokenize, WordPunctTokenizer
from tensorflow.keras.preprocessing.text import text_to_word_sequence

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

3-1 구두점이나 특수문자를 단순 제외 X

마침표의 경우 문장의 경계를 알 수 있기에 제외 하지 않는다. 숫자사이에 들어간 점이나 단위수를 세는 컴마의 경우도 눈여겨 봐야 한다.

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

영어권 언어의 '는 압축ㄱ된 단어를 다시 펼치는 역할을 함. 그리고 rock n roll의 경우 사용용도에 따라 띄어쓰기가 존재함.

4. 문장 토큰화 (Sentence Tokenization)

토큰의 단위가 문장일 경우 코퍼스 내에서 문장 분류를 진행함.
맞침표나 느낌표 물음표와 같은 기호로 문장을 자르면 되지 않을까 생각하면 쉽지만, 다음 예시의 경우 문장의 끝이 구분하기 어려운 경우도 있음

  • 영어 문장분류 도구 : NLTK
  • 한국어 문장 분류 도구 : KSS 사용

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

한국어는 영어와 달리 어절로 인해 NLP에서 좋은 성능을 보여주지 못하고 있음. 한국어가 영어와 다른 형태를 가지는 언어인 교착어라는 점이 가장 큰 원인임.

교착어 : 조사, 어미 등을 부텽서 말을 만드는 언어

5-1. 교착어 특징

  • 조사 : 그가 그에게 그를 그와 그는 -> 다양한 조사 존재. 띄어쓰기 없이 바로 붙게 됨. 서로 다른 조사가 붙어 다른 단어로 인식되는 경우가 있음.
  • 형태소 : 뜻을 가진 가장 작은 말의 단위 (자립 형태소, 의존형태소)
  • 자립 형태소 : 접사, 어미, 조사오 상관 없이 자립하여 사용할 수 잇는 형태소 (그 자체로 단어 : 명사, 대명사, 수사, 수식언, 관형사, 부사, 감탄사 등)
  • 의존 형태소 : 다른 형태소와 결합하여 사용되는 형태소(접사, 어미, 조사, 어간)

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

띄어쓰기가 잘 지켜지지 않아도 글을 쉽게 이해할 수 있는 언어라는 점에서 띄어쓰기 중심으로 처리는 지양.

6. 품사 태깅 (part of speech tagging)

표기는 같지만 품사에 따라서 단어의 의미가 달라지기도 한다. 못 -> 망치를 사용해 고정하는 도구, 못 -> 할 수 없다의 동작 동사

  • 각 단어 토큰화 과정에서 단어가 어떤 품사로 구분해 놓았는지 확인하는 것 : 품사 태깅
profile
할 게 많은데 놀거야?

0개의 댓글