자연어 처리 공부를 위해 해당 책을 선정하였으며, 책을 메인으로 공부하며 구글링과 함께 정리를 한 게시글입니다.
코퍼스란?
'말뭉치'라고도 불리며 보통 여러 단어들로 이루어진 문장을 코퍼스(corpus)라고 합니다.
- 단일 언어 코퍼스(monolingual corpus) : 한 가지 언어로 구성된 코퍼스
- 이중 언어 코퍼스(bilingual corpus) : 두 가지 언어로 구성된 코퍼스
- 다중 언어 코퍼스(multilingual corpus) : 세 가지 이상의 언어로 구성된 코퍼스
- 병렬 코퍼스(parallel corpus) : 언어 간에 쌍으로 구성된 코퍼스 (언어 간의 번역, 대조 분석에 활용)
NLP 모델을 학습을 하기 위해서는 훈련 데이터가 필요하게 되는데, 이때 많은 양의 코퍼스가 필요하게 됩니다.
코퍼스가 많고 오류가 적을수록 NLP 모델은 더 정교해지고 정확도가 높아지게 됩니다.
전처리 과정 개요
전처리 과정은 목적에 따라 조금씩 변화하기 마련이지만 대체로 아래와 같은 과정으로 진행됩니다.
- 코퍼스 수집
- 정제
- 문장 단위 분절
- 분절
- 병렬 코퍼스 정렬(생략 가능)
- 서브 워드 분절
코퍼스 수집
코퍼스 수집에는 다양한 방법이 존재합니다.
- 공개된 데이터 사용 (가공된 데이터, 원하는 방향의 데이터 탐색 가능), (양이 매우 한정적)
- 데이터 구매 (가공된 데이터, 원하는 방향의 데이터 구매 가능), (많은 비용)
- 크롤링 (목적에 따른 다양하고 많은 양의 데이터 수집 가능), (가공되지 않은 데이터)
크롤링을 할 때 주의할 점
- (데이터 편향) 특정 분야를 타깃으로 잡는 것이 아니라면, 다양한 분야의 코퍼스를 수집하는 것이 중요합니다.
- (법적인 문제) 저작권 문제 또는 불필요한 트래픽이 웹 서버에 가중되는 과정에서 문제가 발생할 수 있습니다. 해당 웹사이트의 크롤링 허용 여부는 사이트의 robots.txt를 통해 확인할 수 있습니다.
크롤링을 희망하는 사이트 도메인 뒤에 /robots.txt를 입력하면 확인이 가능합니다.
ex) https://www.naver.com/robots.txt, https://www.google.com/robots.txt
단일 언어 코퍼스 수집
단일 언어 코퍼스의 경우 가장 손쉽게 구할 수 있습니다.
왜냐하면 인터넷에 있는 일반적인 코퍼스들 모두 단일 언어 코퍼스로 이루어져 있기 때문입니다.
하지만 무턱대고 수집하지 않고 목적에 맞는 코퍼스를 수집하여야 하며 사용할 수 있는 형태로 가공 과정도 필요합니다.
다중 언어 코퍼스 수집
자동 기계번역을 위한 병렬 코퍼스를 구하기란 상당히 어렵습니다.
왜냐하면 자막은 저작권이 있는 경우가 많기 때문에 저작권 관련 정보를 잘 확인하는 것이 중요합니다.
또한 번역 품질의 저하 문제와 영어에는 존댓말이 없기 때문에 사용에 주의를 하여야 합니다.
정제
정제는 텍스트를 사용하기에 가장 필수적인 전처리 과정입니다.
희망하는 분야나 업무에 따라 정제의 수준이나 깊이가 변하게 됩니다.
예를 들어 음성의 경우 특수문자나 괄호 등을 모두 제거해줘야 하며, 민감한 정보들은 제거하여 모델링할 수도 있습니다.
따라서 필요한 형태를 얻기 위해 경우에 맞는 효과적인 정제 방법을 사용해야 합니다.
- 전각 문자 제거
일부 문서들에서는 전각 문자와 반각 문자가 혼용되는 경우가 존재합니다.
혼용되는 경우를 방지해주기 위해 모두 반각 문자로 변경하는 작업이 필요합니다.
전각/반각 : 한중일의 인쇄문화에서 사용되는 용어 전각 문자 : 정사각형 크기에 들어가는 문자 반각 문자 : 정사각형 절반에 들어가는 문자 표현 단위가 다르기 때문에 정제 과정에서 같은 문자로 취급되지 않는다.
- 대소문자 통일
일부 영어 코퍼스에서는 대소문자 표현이 통일되지 않을 때가 존재합니다.
예를 들어 New York City를 NYC, nyc, N.Y.C. 등과 같이 하나의 의미를 지닌 여러 단어를 표현할 수 있습니다.
이런 단어들을 하나의 형태로 통일하여 희소성을 줄이는 효과를 기대할 수 있습니다. 하지만 워드 임베딩의 발전으로 비슷한 단어들을 비슷한 벡터로 나타내는 효율적 표현이 가능해져 대소문자를 통일할 필요성이 점차 줄어들게 되었습니다. - 정규표현식을 사용한 정제
크롤링을 통해 얻어낸 코퍼스들은 노이즈가 섞이거나 일정한 패턴을 지니는 경우가 있습니다.
이러한 노이즈를 효율적으로 감지하고 제거하려면 인덱스의 사용은 필수입니다.
기호 뜻 사용 예시 사용 뜻 [] or [2345] 2 or 3 or 4 or 5 - 연속된 숫자를 표현 [2-5c-e] 2 ~ 5 or c ~ e ^ Not을 표현 [^2-5c-e] not (2 ~ 5 or c ~ e) () 그룹을 표현 [(^2-5)(c-e)] (not 2~5) or (c-e) | or (x|y) x or y ? 빈도가 1 이하 x? x가 한 번만 나오거나 없거나 + 빈도가 1 이상 x+ x가 한번 이상 나오는 경우 * 빈도가 랜덤 x* x가 ?, + 가 합쳐진 경우(랜덤) {n} 빈도가 n번 x{4} x가 정확히 4번 {n, } 빈도가 n번 이상 x{4, } x가 4번 이상 {n, m} 빈도가 n 이상 m 이하 x{4, 10} x가 4번 이상 10번 이하 . 모든 글자 포함 . 모든 문자 가능 ^, $ ^ : 라인의 시작
$ : 라인의 끝^x$ 라인이 x로 시작하는 동시에 끝 지정문자 설명 \s 공백 문자 \S 공백 문자를 제외한 모든 문자 \w alphanumeric(알파벳 + 숫자) + '_' \W (alhanumeric + '_')을 제외한 모든 문자 \d 숫자 \D 숫자를 제외한 모든 문자
'[NLP] 자연어 처리 > [NLP] 전처리' 카테고리의 다른 글
[NLP] NLTK, NLTK data 설치 (0) | 2021.02.01 |
---|---|
[NLP] 정규 표현식 - 실습(python) (0) | 2021.02.01 |