250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- YOLOv5
- count
- pcce 기출문제
- 슬라이싱
- 프로젝트
- Django
- html
- python
- 파이썬
- 코딩테스트 연습
- 백준
- 단어 공부
- Len
- Join
- sql
- GIT
- Python3
- css
- where
- SQL 고득점 Kit
- 아이엠어바텐더
- ORDER BY
- 설계
- List Comprehension
- 파이썬 몫
- 데이터
- 프로그래머스
- map
- 파이썬 슬라이싱
- date_format
Archives
- Today
- Total
nan + nan = 2nan
[NLP] 딥러닝을 이용한 자연어 처리 입문_01)토큰화 본문
728x90
* 해당 글은 위키독스의 딥러닝을 이용한 자연어 처리 입문을 참고하여 작성하였습니다.
https://wikidocs.net/book/2155
01) 토큰화
NLP에서 크롤링으로 얻은 Corpus 데이터가 필요에 맞게 전처리 되지 않은 상태라면, 용도에 맞게 토큰화 / 정제 / 정규화가 필요
단어 토큰화 (Word Tokenization)
- 토큰이란 보통 의미있는 단위
- 토큰의 기준을 단어로 설정 시, 단어 토큰화라고 명명
- ex) 구두점 및 특수기호 제외하는 간단한 토큰화 작업출력 : "Time", "is", "an", "illustion", "Lunchtime", "double", "so"
- 입력: **Time is an illusion. Lunchtime double so!**
- 보통 토큰화 작업은 구두점, 특수문자를 전부 제거하는 정제작업을 수행하는 것만으로 해결되지 않음.
- 영어의 경우 띄어쓰기 단위로 자르면 사실상 단어 토큰이 구분됨
- 한국어의 경우에는 띄어쓰기만으로는 토큰 구분이 어렵다
토큰화 중 생기는 선택의 순간
- 만약, 문장에서 어퍼스트로피(’)가 포함될 때 어떻게 토큰으로 분류할지 3가지 라이브러리 비교
- ex) Don’t / John’s
- NLTK의 라이브러리
- word_tokenize
- Do, n’t, John, ‘s 로 분류
- WorkPunctTokenizer
- 각 구두점을 별도로 분류하는 특징
- Don, ‘, t, John, ‘, s
- word_tokenize
- Keras 내 라이브러리
- text_to_word_sequence
- 모든 알파벳을 소문자로 변환하며 마침표나 컴마, 느낌표 등의 구두점을 제거
- 하지만, 아래 단어들의 어퍼스트로피는 보존
- don’t, john’s
- text_to_word_sequence
- NLTK의 라이브러리
토큰화에서 고려해야 할 사항
- 구두점이나 특수 문자를 단순 제외해서는 안 된다.
- 구두점조차도 하나의 토큰으로 분류하기도 함
- 단어 자체의 구두점을 가지는 경우도 존재
- $45.55 에서 구두점 분리하면 의미 없어짐
- 줄임말과 단어 내에 띄어쓰기가 있는 경우
- 어퍼스트로피는 종종 압축된 단어를 표현
- what’re, i’m, …
- 어퍼스트로피는 종종 압축된 단어를 표현
- 표준 토큰화 예제
- Penn Treebank Tokenization
문장 토큰화 (Sentence Tokenizataion)
- 문장의 경우 코퍼스가 정제되어 있지 않은 상태라면, 용도에 따라 문장 분류가 필요
- 구두점으로 분류하면 되지 않겠냐는 의견도 있지만, 항상 그렇지 않음
- NLTK에는 영어 문장의 토큰화를 수행하는 sent_tokenize 라이브러리 지원
- 이는 단순히 마침표를 구분자로 하여 문장을 구분하지 않기 때문에, 중간 단어에 마침표가 존재해도 문장 내 단어로 인식
한국어에서의 토큰화의 어려움
- 영어는 합성어, 줄임말에 대한 예외처리만 한다면 띄어쓰기를 기준으로 하는 띄어쓰기 토큰화를 수행해도 단어 토큰화가 잘 작동 거의 대부분, 단어 단위 띄어쓰기로 이루어지기 때문에 띄어쓰기 토큰화와 거의 일치함
- 하지만, 한국어의 경우에는 영어와는 다른 교착어 형태이기 때문에 어려움
- 교착어의 특성
- 한국어는 조사가 존재하기 때문에 의미가 달라져 다른 단어로 인식하게 되는 현상 발생. 때문에, 조사를 분리해줄 필요 존재
- 형태소(뜻을 가진 가장 작은 말의 단위)가 존재
- 자립 형태소 : 자립하여 사용 가능
- ex) 이난, 책, …
- 의존 형태소 : 독립적으로 사용 불가능
- ex) -가, -을, 읽-, -었, -다
- 자립 형태소 : 자립하여 사용 가능
- 한국어는 띄어쓰기가 영어보다 잘 지켜지지 않는다.
- 한국어는 띄어쓰기를 하지 않아도 글을 쉽게 이해할 수 있는 언어이기 때문이라는 점
품사 태깅 (Part-of-speech tagging)
- 각 단어가 품사에 따라 의미가 달라지는 경우 발생
- ex) 못
- 명사 : ~따위를 고정하는 물건
- 부사 : 할 수 없다는 의미
- ex) 못
NLTK를 이용한 품사 태깅 실습
- Penn Treebank POS Tags라는 기준을 사용해 품사를 태깅
- from nltk.tag import pos_tag
'Statistics > Machine Learning' 카테고리의 다른 글
[NLP] 딥러닝을 이용한 자연어 처리 입문_02)정제 및 정규 표현식 (0) | 2022.09.08 |
---|---|
[DATAHERO 3기] 2주차 미션 (회귀분석) (0) | 2022.07.26 |
[DATAHERO 3기] 1주차 미션 (EDA) (0) | 2022.07.09 |
[M/L] GridSearchCV, RandomSearchCV (0) | 2022.05.21 |
[통계] 딥러닝 모델 성능 평가 지표 - mAP (0) | 2022.05.19 |
Comments