해당 포스팅은 다음의 위키독스 (https://wikidocs.net/book/2155)를 읽고 정리한 개념임을 밝힙니다
크롤링 등으로 얻어낸 raw 데이터 (=말뭉치=코퍼스) 를 분석하기 위해 토큰단위로 분해해야
- 1. 문장 토큰화 (문단 ⇒문장)
- 그냥 ?, ! 있으면 이 기준이 좋다.
- 다만 마침표(.)는 사람들이 의미가 지속되어도 중간에 그냥 쓰는경우가 많아서 막 쓸수 없음
- 영어 => NLTK의 sent_tokenize 쓰면됨
- 한국어 => kss라는 거 쓰면된다!
- 2. 단어 토큰화 (문장 ⇒ 단어) (흔히 word, 의미 있는 단위로 토큰 정의함)
- 영어와 달리 한글은 무지성으로 띄어쓰기로 토큰구분이 안됨
- 구두점이나 특수문자 제거만으로 끝나는거 아님
- 어퍼스트로피, 줄임말 등의 이슈때문에 표준 토큰화 방법인 ‘Penn Treebank Tokenization’ 과 같은 규칙도 있음 (영어 자연어의 경우)
- 한국어는 그냥 영어처럼 단어로 자르는게 아니라 조사나 어미 이런것도 다 따로 잘라줘야함 그래서 word 기준이 아니라 ‘형태소’기준이라 생각하면됨
- koNLPY 패키지에서 형태소 분석기인 Okt, Mecab, Komoran, Hannanum 등을 사용할 수 있음
이후 단어로만 갖고있는게 아니라 숫자로 바꾸는게 컴퓨터가 인식하기엔 좋으므로 단어별로 숫자로 일대일 매칭해서 정수로 변환하여 저장한다.
이게 word in bag 개념일 것임 (보통 빈도별로 내림차순 정렬)
keras의 Tokenizer : [ [문장1의 토큰], [문장2의 토큰], [문장3의 토큰] ] ⇒ 빈도만큼 인덱스를 알아서 부여함.
"원-핫 인코딩"
단어 집합(vocabulary) : 모든 단어들이 unique하게 들어가 있는 목록, 정수매칭
단어 집합에 들어가있는 정수를 인덱스로 취급하여 해당 인덱스를 1, 나머지는 0으로 채운 벡터로 관리한다
단점
카운트 기반 : LSA, HAL
예측 기반 : NNLM, RNNLM, Word2Vec, FastText
⇒ '카운트 기반' & ‘워드 임베딩 챕터’ 참고.
"패딩"
=> 토큰화 전후로 정제 및 정규화는 항상 함께한다