AI/NLP
[NLP스터디] 1주차 토큰화
Mujae98
2024. 1. 19. 19:50
말뭉치(Corpus)에서 token 단위로 분리하는 것을 토큰화라 한다.
단어 토큰화
단어 단위로 토큰화하는 것.
예문: This is the best thing.
토큰화: 'This', 'is', 'the', 'best', 'thing'
토큰화에서 고려해야 할 사항
구두점이나 특수 문자를 함부로 제외하면 안됨.
- '.''의 경우 마침표일 때도 의미가 있고, 'Dr.'같은 경우나 'Ph.D' 같은 경우가 있음. ','도 문장을 끊을 때 쓰거나 1,000 같은 예도 존재.
줄임말과 단어내 띄어쓰기가 있는 경우
- New York 같은 경우 어떻게 할지 고민해봐야함.
문장 토큰화
문장을 .이나 쉼표 같은 걸로 구분하게 되면 위에서 언급한 Ph.D이나 1,000에서 이상해짐.
이때 kss쓰면 잘 해줌.
import kss
text = '이제부터 NLP기본을 빠르게 공부할거야. 어느 정도 기본기가 쌓이면 바로 transformer, bert, GPT 공부를 할거고, LLM(multimodal)공부도 하려해.'
print('한국어 문장 토큰화 :',kss.split_sentences(text))
한국어 문장 토큰화 : ['이제부터 NLP기본을 빠르게 공부할거야.', '어느 정도 기본기가 쌓이면 바로 transformer, bert, GPT 공부를 할거고, LLM(multimodal)공부도 하려해.']
한국어에서 토큰화의 어려움
- 교착어: 고립어와 굴절어의 중간적 성격을 띠는 것으로 어근과 접사에 의해 단어의 기능이 결정되는 언어의 형태
너는, 너가, 너에게 같이 조사 때문에 각각의 단어들을 다 분리시켜줘야 함.
여기서 형태소란 중요한 개념이 나오는데 뜻을 가진 작은 단위를 말하고, 의존과 자립이 있음.
- 체언이나 감탄사 처럼 혼자 존재할 수 있는 자립 형태소.
- 접사, 어미와 같은 의존 형태소.
- 띄어쓰기
한국에서는 띄어쓰기를 잘 안지켜질 때가 많음...
품사태깅
단어는 표기는 같지만 품사에 따라 의미가 달라지는 경우가 많은데 영어를 예로 들면 fly와 같이 명사로는 파리지만 동사로는 날다라는 의미를 가진다. 한국어를 예로 했을 때는 못과 같이 명사로써의 못과 부사의 못이 있다.
NLTK와 KoNLPy 통한 실습
pip install nltk
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
text = "I am a good boy but You are a bad boy."
tokenized_sentence = word_tokenize(text)
print('단어 토큰화 :',tokenized_sentence)
print('품사 태깅 :',pos_tag(tokenized_sentence))
단어 토큰화 : ['I', 'am', 'a', 'good', 'boy', 'but', 'You', 'are', 'a', 'bad', 'boy', '.']
품사 태깅 : [('I', 'PRP'), ('am', 'VBP'), ('a', 'DT'), ('good', 'JJ'), ('boy', 'NN'), ('but', 'CC'), ('You', 'PRP'), ('are', 'VBP'), ('a', 'DT'), ('bad', 'JJ'), ('boy', 'NN'), ('.', '.')]
Penn Treebank POG Tags에서 PRP는 인칭 대명사, VBP는 동사, RB는 부사, VBG는 현재부사, IN은 전치사, NNP는 고유 명사, NNS는 복수형 명사, CC는 접속사, DT는 관사를 의미