-
[딥 러닝을 이용한 자연어 처리 입문] 2. 텍스트 전처리(3)기타/AI 2022. 9. 25. 12:54
https://wikidocs.net/book/2155
딥 러닝을 이용한 자연어 처리 입문
많은 분들의 피드백으로 수년간 보완되어 온 딥 러닝 자연어 처리 무료 eBook입니다. 기본적인 텍스트 전처리부터 BERT와 같은 PLM의 다양한 다운스트림 태스크를 ...
wikidocs.net
해당 포스팅은 "딥 러닝을 이용한 자연어 처리 입문" 서적을 제 생각대로 요약한 내용입니다.
목차 2. 텍스트 전처리 (Text Preprocessing)
① 토큰화 (Tokenization)
② 정제 (Cleaning) and 정규화 (Normalization)
③ 어간 추출 (Stemming) and 표제어 추출 (Lemmatization)
④ 불용어 (Stopword)
⑤ 정규 표현식 (Regular Expression)
⑥ 정수 인코딩 (Integer Encoding)
⑦ 패딩 (Padding)
⑧ 원-핫 인코딩 (One-Hot Encoding)
⑨ 데이터의 분리 (Splitting Data)
⑩ 한국어 전처리 패키지 (Text Preprocessing Tools for Korean Text)
⑧ 원-핫 인코딩 (One-Hot Encoding)
▶ 배경
- 원-핫 인코딩을 위해서 가장 먼저 해야할 일은 단어 집합을 만드는 일
@ 단어 집합 (vocabulary) : 서로 다른 단어들의 집합, book과 books도 다른 단어로 간주
- 텍스트의 모든 단어를 중복을 허용하지 않고 모아놓으면 이를 단어 집합이라고 함
- 이 단어 집합에 고유한 정수를 부여하는 정수 인코딩 진행
▶ 개요
- 단어 집합의 크기를 벡터의 차원으로 함, 원-핫 인코딩은 단어의 벡터 표현 방식
- 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여
- Okt (KoNLPy) 형태소 분석기 통해서 문장 토큰화 수행 후 각 토큰에 대해서 고유한 정수 부여
@ 단어 집합 : {'나' : 0, '는' : 1, '자연어' : 2, '처리' : 3, '를' : 4, '배운다' : 5}
@ '자연어'라는 단어의 원-핫 벡터 : {0, 0, 1, 0, 0, 0}
- 케라스(Keras)에서는 이를 지원하는 to_categorical() 도구 존재
▶ 원-핫 인코딩 (One-Hot Encoding)의 한계
- 단어의 개수가 늘어날 수록, 벡터를 저장하기 위해 필요한 공간(차원)이 계속 늘어남
@ 예시 : 단어가 1000개인 코퍼스의 경우, 1의 값 1개와 0의 값 999개
- 단어의 유사도를 표현하지 못함, 검색 시스템 등에서는 문제가 될 소지가 있음
- 이러한 단점을 해결하기 위해 단어의 잠재 의미를 반영하여 다차원 공간에 벡터화 하는 기법 2가지
@ 첫째 : LSA, HAL 등 카운트 기반으로 벡터화
@ 둘째 : NNLM, RNNLM, Word2Vec 등 예측 기반으로 벡터화
- 두 가지 방법을 모두 사용하는 GloVe 방법도 있음
⑨ 데이터의 분리 (Splitting Data)
▶ 지도 학습 (Supervised Learning)
- 정답이 무엇인지 맞춰야 하는 '문제' 데이터와 레이블이라고 부르는 '정답' 데이터 존재
- 기계는 정답이 적혀져 있는 문제지를 문제와 정답을 함께 보면서 열심히 공부
- 향후에 정답이 없는 문제에 대해서도 정답을 잘 예측해야 함
▶ x와 y 분리하기
- x는 문제 데이터, y는 문제에 대한 정답 데이터
- zip 함수, 데이터프레임, Numpy를 이용하여 분리 가능
▶ 테스트 데이터 분리하기
- 훈련 목적 데이터와 테스트 목적 데이터로 분리
- 사이킷 런(train_test_split())을 이용하거나 수동으로 분리 가능
⑩ 한국어 전처리 패키지 (Text Preprocessing Tools for Korean Text)
▶ PyKoSpacing
- 띄어쓰기가 되어있지 않은 문장을 띄어쓰기를 한 문장으로 변환해주는 패키지
- 대용량 코퍼스를 학습하여 만들어진 띄어쓰기 딥 러닝 모델로 준수한 성능
- https://github.com/haven-jeon/PyKoSpacing
▶ Py-Hansepll
- 네이버 한글 맞춤법 검사기를 바탕으로 만들어진 패키지
- PyKoSpacing과 비슷하지만 결과가 조금은 다름
- https://github.com/ssut/py-hanspell
▶ SOYNLP를 이용한 단어 토큰화
- 품사 태깅, 단어 토큰화 등을 지원하는 단어 토크나이저
- 비지도 학습으로 단어 토큰화를 진행, 데이터에 자주 등장하는 단어 분석
- 토크나이저 내부적으로 단어 점수 표 동작
- 응집 확률(cohesion probability)과 브랜칭 엔트로피(branching entropy) 활용
@ 응집 확률 : 내부 문자열이 얼마나 응집하여 자주 등장하는지를 판단하는 척도
ㄴ 하나의 단어에 가까울수록 값은 커짐 (반포한강공원 >> 반포한강공)
@ 브랜칭 엔트로피 : 주어진 문자열에서 얼마나 다음 문자가 등장할 수 있는지를 판단하는 척도
ㄴ 나올 단어가 다양하다면 값이 커짐 (디스 >> 디스플)
- 기존에는 신조어, 형태소 분석기에 등록되지 않은 단어는 제대로 구분하지 못하는 단점 존재
@ L tokenizer : 띄어쓰기 단위로 나눈 어절 토큰과 같이 L 토큰 + R 토큰 형식을 가지는 토크나이저
ㄴ 공원에 -> 공원(L토큰) + 에(R토큰), 공부하는 -> 공부(L토큰), 하는(R토큰)
@ 최대 점수 토크나이저 : 띄어쓰기가 되지 않는 문장에서 점수가 높은 글자 시퀀스를 순차적으로 찾아냄
▶ SOYNLP를 이용한 반복되는 문자 정제
- ㅋㅋ, ㅎㅎ 등의 이모티콘의 경우 불필요하게 연속되는 경우가 많음
- 모두 서로 다른 단어로 처리하는 것은 불필요하므로, 반복되는 것은 하나로 정규화
▶ Customized KoNLPy
- 사용자 사전을 추가하는 방법은 형태소 분석기마다 다른데, 생각보다 복잡한 경우들이 많음
- cutomized_konlpy 형태소 분석기를 활용하여 특정 단어를 사전에 추가
ㄴ add_dictonary('특정단어', 'Noun') -> 하나의 토큰으로 인식
'기타 > AI' 카테고리의 다른 글
[딥 러닝을 이용한 자연어 처리 입문] 2. 텍스트 전처리(2) (0) 2022.09.18 [딥 러닝을 이용한 자연어 처리 입문] 2. 텍스트 전처리(1) (1) 2022.09.18 [딥 러닝을 이용한 자연어 처리 입문] 1. 자연어 처리 (0) 2022.09.18