해당 내용은 김기현의 자연어 처리 딥러닝 캠프 파이토치편을 읽으며 발췌 및 정리한 내용입니다.
이전 개요에 대해서는 아래 링크 참조
2021.05.10 - [Study/NLP] - [NLP/자연어처리] 자연어처리와 딥러닝의 역사, 발전과정
오늘은 자연어 처리의 전처리 과정에 대해서 용어랑 개요를 정리할 예정이다.
0. 코퍼스(copus)란?
코퍼스(copus)는 여러 단어들로 이루어진 문장을 이야기한다. 자연어 처리 분야의 머신러닝을 수행하려면 훈련데이터가 필요한데, 다수의 문장으로 구성된 코퍼스가 필요하다.
- 단일 언어 코퍼스(monolingual copus) : 한 가지 언어로 구성된 코퍼스
- 이중 언어 코퍼스(dilingual copus) : 두 개의 언어로 구성된 코퍼스
- 다중 언어 코퍼스(multilingual copus) : 세개 이상의 언어로 구성된 코퍼스
- 병렬 코퍼스(parallel copus) : 언어 간에 쌍으로 구성되는 코퍼스
이러한 코퍼스가 많고 오류가 없을수록 자연어처리 머신러닝의 모델은 더 정교해지고 정확도가 높아진다. 마치 정련된 훈련 데이터가 많을수록 학습 후 모델의 정확도가 높아지는 것과 같이 말이다. 해당 책에서는 이러한 전처리 과정을 다룬다.
1. 코퍼스 수집
2. 정제
3. 문장 단위 분절
4. 분절
보통 자연어처리를 진행할 때의 순서와 동일하다고 하는데, 천천히 따라가면서 정리할 예정이다. 또한 필요에 따라 생략하거나 추가해서 정리할 예정이다.
본인은 현업에서 데이터 분석을 하는데, 보통 고객사(분석하는 회사)의 내부 데이터를 사요하는 경우가 대부분이다. 그러므로 데이터를 불러오는 것을 공부하기 보다. 마련되어 있는 데이터를 어떻게 전처리하고 정제하는지에 대해서 정리할 생각이다.
1. 코퍼스 수집(생략)
2. 정제
정제는 수집된 텍스트를 사용하기 전 필수적인 사항이다. 원하는 분석에 따라 필요한 정제의 수준이나 깊이가 다를 수 있는데, 전화번호, 이메일, 신용카드 번호나 비밀번호같은 개인정보나 민감한 정보들은 제거하거나 변조해서 모델링 해야할 뿐 아니라 단순 메모 데이터의 경우 괄호 또는 별표같은 특수문제들은 제거해야한다. 다음으로는 정제하는 방법들에 대해 소개한다.
2.1 전각문자 제거
처음에 나도 전각문자에 대한 명확한 정의를 몰라서 검색해보니 아래 링크와 같다.
한마디로 유니코드 상에서 숫자 또는 문자가 전각일 경우에는 제대로 인식을 못할 가능성이 크다. '1'이라는 숫자가 전각일 경우에는 숫자가 아닌 일반 문자로 인식할 수 있기 때문이다. 그렇기 때문에 반각/전각 문자로 혼용되는 특수문자 또는 영문, 숫자 등은 반각문자로 바꾸어주는 작업이 필요하다.
2.2 대소문자 통일
약어를 사용하는 경우 일부 영어 코퍼스에서 약어에 대한 통일이 이루어지지 않을 때가 종종 있다. New York City 같은 경우, NYC, nyc, N.Y.C 와같이 다양하게 표기를 해놓는다. 이에 대한 통일이 이루어지면 단어 희소성을 줄일수 있는 이점이 있지만, 최근에는 단어임베딩이 가능해지면서 비슷한 단어들을 비슷한 값의 벡터로 나타낼 수 있게 되어 문제를 해결할 필요성이 줄어들었다.
2.3 정규표현식을 사용한 정제
보통 텍스트 정제가 필요한 경우, 특수문자나 숫자 등의 노이즈를 제거해야하는 경우가 발생한다, 또는 크롤링을 한 경우 일정한 패턴을 가진 텍스트를 제거하거나 변환하고 싶은 경우가 있는데, 그 때 정규표현식을 사용한다. 정규표현식의 문법과 같은 예제는 아래 링크를 참조할 수 있다.
P.S. 파이썬에서 정규표현식을 사용하는 방법
파이썬에서는 re라는 패키지를 사용해서 정규표현식을 이용한 문자열 치환 또는 제거를 사용한다.
# 문자열 내에서 숫자 제거하기
import re
regex = r'[0-9]' # 정규표현식
x = '한글 12자연어' # 들어갈 문자열
re.sub(regex, '', x) # 정규표현식을 아래 변환자로 치환
위와 같이 데이터를 정제하는 과정에 대해서 간략하게 알아보았다. 이후에는 분절에 대해 소개할 예정이다.
'Study > NLP' 카테고리의 다른 글
[NLP/자연어처리] 자연어처리 전처리(4) - 토치텍스트(TorchText) (0) | 2021.05.13 |
---|---|
[NLP/자연어처리] 자연어 처리 전처리(3) - 단어집합(Vocabulary), 패딩 (4) | 2021.05.12 |
[NLP/자연어처리 ]자연어 처리 전처리(2) - 분절(토큰화) 라이브러리 소개 (0) | 2021.05.11 |
[NLP/자연어처리] 자연어처리와 딥러닝의 역사, 발전과정 (0) | 2021.05.10 |
[NLP/자연어처리] 자연어처리 관련 자료 모음 (1) | 2021.05.07 |