딥러닝을 이용한 자연어처리 입문 #2-1. 텍스트 전처리 (Text Preprocessing)
01) 토큰화(Tokenization)
- 주어진 코퍼스(corpus)에서 토큰(token)이라 불리는 단위로 나누는 작업
1. 단어 토큰화 (Word Tokenization)
- 토큰의 기준을 단어(word)로 하는 경우
- 입력: **Time is an illusion. Lunchtime double so!**
- 출력: "Time", "is", "an", "illusion", "Lunchtime", "double", "so"
2. 토큰화 중 생기는 순간
- 토큰화를 진행하다보면, 예상치 못한 경우가 발생하여 토큰화의 기준을 설정하는 것이 필요
- 분석자가 기준을 정해서 토큰화를 수행
3. 토큰화에서 고려해야할 사항
- 구두점이나 특수 문자를 단순 제외해서는 안 됨. 의미 있는 구두점이나 특수 문자가 포함될 수 있으므로 고려해야 함.
- 줄임말과 단어 내에 띄어쓰기가 있는 경우
- 표준 토큰화 예제
from nltk.tokenize import TreebankWordTokenizer
tokenizer = TreebankWordTokenizer()
text = "Starting a home-based restaurant may be an ideal. it doesn't have a food chain or restaurant of their own."
print(tokenizer.tokenize(text))
#['Starting', 'a', 'home-based', 'restaurant', 'may', 'be', 'an', 'ideal.', 'it', 'does', "n't", 'have', 'a', 'food', 'chain', 'or', 'restaurant', 'of', 'their', 'own', '.']
4. 문장 토큰화(Sentence Tokenization)
import kss
text = '딥 러닝 자연어 처리가 재미있기는 합니다. 그런데 문제는 영어보다 한국어로 할 때 너무 어렵습니다. 이제 해보면 알걸요?'
print(kss.split_sentences(text))
#['딥 러닝 자연어 처리가 재미있기는 합니다.', '그런데 문제는 영어보다 한국어로 할 때 너무 어렵습니다.', '이제 해보면 알걸요?']
5. 이진 분류기(Binary Classifier)
- 문장 토큰화에서 예외 사항을 발생시키는 마침표의 처리를 위해서 입력에 따라 두 개의 클래스로 분류하는 이진 분류기를 사용하기도 함
6. 한국어에서의 토큰화의 어려움
- 한국어는 교착어며, 띄어쓰기가 영어보다 잘 지켜지지 않음.
2) 정제(Cleaning) and 정규화(Normalization)
- 정제(Cleaning): 갖고 있는 코퍼스로부터 노이즈 데이터를 제거
- 정규화(normalization): 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만들어줌
1. 규칙에 기반한 표기가 다른 단어들의 통합
- ex) USA - US, uh huh - uhhuh
2. 대, 소문자 통합
- 영어권 언어에서 대, 소문자를 통합하는 것은 단어의 개수를 줄일 수 있는 또 다른 정규화 방법
3. 불필요한 단어의 제거(Removing Unnecessary Words)
- 등장 빈도가 적은 단어 & 길이가 짧은 단어
- 영어권 언어에서는 길이가 짧은 단어를 삭제하는 것만으로도 어느정도 자연어 처리에서 크게 의미가 없는 단어들을 제거하는 효과를 볼 수 있음.
- 반면에 한국어에서는 길이가 짧은 단어라고 삭제하는 이런 방법이 크게 유효하지 않을 수 있음
4. 정규 표현식
03) 어간 추출 and 표제어 추출
1. 표제어 추출(Lemmatization)
- 표제어: '표제어' 또는 '기본 사전형 단어'
- 예를 들어, am, are, is 는 서로 다른 스펠링이지만 그 뿌리 단어는 be라고 볼 수 있음. 이 단어들의 표제어는 be임
2. 어간 추출(Stemming)
- 어간을 추출하는 작업
3. 한국어에서의 어간 추출
04) 불용어(Stopword)
- 불용어: 문장에서는 자주 등장하지만 실제 의미 분석을 하는데는 거의 기여하는 바가 없는 단어
1 ~ 2.NLTK에서 불용어 확인하기 & 제거하기
from nltk.corpus import stopwords
stopwords.words('english')[:10]
#['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', 'your']
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
example = "Family is not an important thing. It's everything."
stop_words = set(stopwords.words('english'))
word_tokens = word_tokenize(example)
result = []
for w in word_tokens:
if w not in stop_words:
result.append(w)
print(word_tokens)
print(result)
#['Family', 'is', 'not', 'an', 'important', 'thing', '.', 'It', "'s", 'everything', '.']
#['Family', 'important', 'thing', '.', 'It', "'s", 'everything', '.']
3. 한국어에서 불용어 제거하기
from nltk.tokenize import word_tokenize
# 아래의 불용어는 저자가 임의로 선정한 것으로 실제 의미있는 선정 기준이 아님
example = "고기를 아무렇게나 구우려고 하면 안 돼. 고기라고 다 같은 게 아니거든. 예컨대 삼겹살을 구울 때는 중요한 게 있지."
stop_words = "아무거나 아무렇게나 어찌하든지 같다 비슷하다 예컨대 이럴정도로 하면 아니거든"
stop_words = set(stop_words.split(' '))
word_tokens = word_tokenize(example)
result = [word for word in word_tokens if not word in stop_words]
print(word_tokens)
print(result)
#['고기를', '아무렇게나', '구우려고', '하면', '안', '돼', '.', '고기라고', '다', '같은', '게', '아니거든', '.', '예컨대', '삼겹살을', '구울', '때는', '중요한', '게', '있지', '.']
#['고기를', '구우려고', '안', '돼', '.', '고기라고', '다', '같은', '게', '.', '삼겹살을', '구울', '때는', '중요한', '게', '있지', '.']
05) 정규 표현식(Regular Expression)
- 텍스트 데이터를 전처리하다보면 정규 표현식은 아주 유용한 도구로서 사용됨.
- 특정 규칙이 있는 텍스트 데이터를 빠르게 정제할 수 있음
5. 정규 표현식을 이용한 토큰화
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("\s+", gaps=True)
print(tokenizer.tokenize("Don't be fooled by the dark sounding name, Mr. Jone's Orphanage is as cheery as cheery goes for a pastry shop"))
# ["Don't", 'be', 'fooled', 'by', 'the', 'dark', 'sounding', 'name,', 'Mr.', "Jone's", 'Orphanage', 'is', 'as', 'cheery', 'as', 'cheery', 'goes', 'for', 'a', 'pastry', 'shop']
'공부하는 습관을 들이자 > Deep Learning (NLP,LLM)' 카테고리의 다른 글
[딥러닝 자연어처리] 5. 벡터의 유사도 (0) | 2023.12.06 |
---|---|
[딥러닝 자연어처리] 4. 카운트 기반의 단어 표현 (0) | 2023.12.05 |
[딥러닝 자연어처리] 3. 언어모델 (Language Model) (0) | 2023.12.04 |
[딥러닝 자연어처리] 2-2. 텍스트 전처리 (Text Preprocessing) (0) | 2023.12.01 |
[딥러닝 자연어처리] 1. 자연어처리란? (0) | 2023.11.29 |