토큰화(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 |