1. 말뭉치
모든 NLP 작업은 말뭉치(corpus, 복수형은 corpora)라 부르는 텍스트 데이터로 시작합니다. 일반적으로 원시 텍스트(ASCII나 UTF-8 형태)와 이 텍스트에 연관된 메타데이터(metadata)를 포함합니다.
메타데이터는 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해주는 데이터입니다. 속성정보라고도 하며, 보통 데이터를 표현하기 위한 목적과 데이터를 빨리 찾기 위한 목적으로 사용됩니다. 식별자, 레이블, 타임스탬프 등 텍스트와 관련된 어떤 부가 정보도 될 수 있으며, 머신러닝 분야에서는 메타데이터가 붙은 텍스트를 샘플(sample) 또는 데이터 포인트(data point)라고 부릅니다. 또한 샘플의 모음인 말뭉치는 데이터셋(dataset)이라고 부릅니다.
2. 토큰
앞서 설명한 말뭉치에서 토큰(token)이라는 불리는 단위로 나누는 작업을 토큰화(tokenization)라고 합니다. 토큰은 보통 의미있는 단위로 정의하게 됩니다. 토큰의 기준을 단어로 하는 경우, 단어 토큰화라고 하는데 간단한 텍스트를 통해 예시를 들어보겠습니다.
다음은 널리 사용되는 패키지인 spaCy의 예입니다.
import spacy
nlp = spacy.load('en')
text = "Don't give up, study with daiv."
print([str(token) for token in nlp(text.lower())])
>>>
output : ['do', "n't", 'give', 'up', ',', 'study', 'with', 'daiv', '.']
Python
복사
또다른 패키지인 NLTK의 예입니다.
from nltk.tokenize import TweetTokenizer
tweet=u"Snow White and the Seven Degrees#makeAMovieCold@midnight:-)"
tokenizer = TweetTokenizer()
print(tokenizer.tokenize(tweet.lower()))
>>>
['snow', 'white', 'and', 'the', 'seven', 'degrees', '#makeamoviecold', '@midnight', ':-)']
Python
복사
복잡한 특수문자 등이 포함되어 있지 않은 간단한 텍스트의 경우 이런 식으로 직접 단어 토큰화를 수행할 수도 있습니다.
# 공백을 기준으로 단어를 분리해줍니다.
text = "The journey is the reward."
text_low = text.lower()
text_low = text.replace('.', '')
words = text_low.split(' ')
print(words)
>>>
['the', 'journey', 'is', 'the', 'reward']
Python
복사
3. 타입
타입은 말뭉치에 등장하는 고유한 토큰입니다. 말뭉치에 있는 모든 타입의 집합을 어휘 사전 또는 어휘라고 합니다. dictionary의 key처럼 고유한 토큰을 타입이라고 정의한다 생각하면 됩니다.
단어는 내용어(content words)와 불용어(stopword)로 구분됩니다. 보통 조사, 관사, 전치사 등의 불용어는 자주 등장하지만 단어 자체에 큰 의미가 없는 경우, 분석에 방해가 되기 때문에 전처리 과정에서 제거해줍니다.
다음 글 읽기