토큰화 작업 전, 후에는 텍스트 데이터를 용도에 맞게
정제(cleaning) 및 정규화(normalization)하는 일이 함께한다
정제
- 갖고 있는 코퍼스로부터 노이즈 데이터를 제거
- 토큰화 작업 전,후에 모두 이뤄질 수 있다
- 완벽한 정제는 어려운 편이라, 합의점을 찾기도함
노이즈 데이터
- 분석 목적에 맞지 않는 불필요한 단어들
- 제거 방법
- 불용어 제거
- 등장 빈도가 적은 단어 제거 ex)스팸메일 분류에서 100000개의 데이터 중 5번 등장한 단어는 도움이 안됨
- 길이가 짧은 단어 제거 - 영어권에서는 길이가 짧은 단어들은 대부분 불용어, 하지만 한국어는 아님
- 노이즈 데이터의 특징을 잡아낼 수 있다면 정규표현식으로 제거 ex) re.sub
02-05 정규 표현식(Regular Expression)
텍스트 전처리에서 정규 표현식은 아주 유용한 도구입니다. 이번에는 파이썬에서 지원하고 있는 정규 표현식 모듈 re의 사용 방법과 NLTK를 통한 정규 표현식을 이용한 토큰화에 대…
wikidocs.net
불용어(Stopword)
- 자주 등장하지만 분석에는 도움 안되는 단어들
- 직접 정의할 수도 있다
NLTK가 정의한 영어 불용어 리스트가 있음
stopwords.words('english')
불용어를 따로 정의해서 공백을 기준으로 리스트 생성
한국어 불용어 삭제
정규화
- 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만들어줌
- 같은 의미를 갖고 있는 표기가 다른 단어들을 하나의 단어로 정규화
- 표기가 다른 단어들을 통합하는 방법 : 어간 추출, 표제어 추출
표제어 추출(Lemmatization)
- 단어들이 형태가 달라도, 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단
- 표제어 : 기본 사전형 단어
- 형태소 : 의미를 가진 가장 작은 단위. 어간, 접사.
- 어간 : 단어의 의미를 담고 있는 단어의 핵심 부분
- 접사 : 단어에 추가적인 의미를 주는 부분
NLTK 표제어 추출
의미 알 수 없는 단어들 출력하기도 함.
표제어 추출기가 본래 단어의 품사 정보를 알아야만 정확한 결과 얻을 수 있음
어간 추출(Stemming)
- 정해진 규칙만 보고 단어의 어미를 자르는 어림짐작의 작업
- 표제어 추출보다 일반적으로 빠름
- 알고리즘이 여러가지가 있는데 어떤 알고리즘이 해당 코퍼스에 적합한지 판단 후 사용해야함
대, 소문자 통합
- 영어권 언어에서 단어의 개수를 줄일 수 있는 정규화 방법
- 대부분 대문자를 소문자로 변환하는 작업
- 하지만 무작정 통합해서는 안됨. ex)회사이름, 사람 이름
- 여러가지를 고려하여 소문자 변환을 언제 사용할지 결정해야함
한국어에서 표제어 추출과 어간 추출이 필수일까?
- 코퍼스가 부족하다면 표제어 추출과 어간 추출이 같은 문장에 대해 같은 샘플로 취급하여 희소성 문제에서 어느정도 타협을 볼 수 있다
- 딥러닝시대에서 성공적인 차원 축소를 수행할 수 있게 되면서 희소성 관련 문제는 더 이상 큰 장애물이 아니다
- 일단 위의 작업들을 하지 않고 텍스트 분류 문제 해결을 시도해보자
- 코퍼스 양의 부족이 성능 저하의 원인이라고 판단되면 그 때 추가로 실험해보자
'Python > NLP' 카테고리의 다른 글
펄플렉서티(Perplexity, PPL) (0) | 2023.03.14 |
---|---|
N-gram 언어 모델 (0) | 2023.03.14 |
언어 모델 - 통계적 언어 모델 (0) | 2023.03.14 |
konlpy 사용 시 오류 (0) | 2023.02.18 |
토큰화(Tokenization) (0) | 2023.02.17 |