[딥러닝 스터디] 자연어 전처리 실습
자연어 처리 라이브러리인 토치텍스트를 활용해 이전 포스트의 전처리 이론을 실제로 구현해보자.
토치텍스트
: 텍스트에 대한 여러 추상화 기능을 제공하는 자연어 처리 라이브러리
토치텍스트 제공 기능
- 파일 로드하기(File Loading) : 다양한 포맷의
코퍼스를 로드
한다. 토큰화
(Tokenization) : 문장을 단어 단위로 분리한다.단어 집합 생성
(Vocab) : 단어 집합을 만든다.정수 인코딩
(Integer encoding) : 전체 코퍼스의 단어들을 각각의 고유한 정수로 맵핑한다.- 단어 벡터(Word Vector) : 단어 집합의 단어들에 고유한
임베딩
벡터를 만들어줍니다. 랜덤값으로 초기화한 값일 수도 있고, 사전 훈련된 임베딩 벡터들을 로드할 수도 있습니다. 배치
화(Batching) : 훈련 샘플들의 배치를 만들어줍니다. 이 과정에서 패딩 작업(Padding)도 이루어집니다.
실습 1. IMDB 리뷰데이터 분류하기(영어)
데이터 다운 및 용도에 따른 분류 진행(훈련/테스트)
- 데이터는 text(리뷰데이터)와 sentiment(리뷰의 긍정:1/부정:0 여부)
1 | # 토치텍스트 설치 |
필드 정의하기(torchtext.data)
torchtext.data 의 Field함수를 활용해 진행할 자연어 전처리를 정의할 수 있다.
- sequential : 순차적인 데이터 여부. (True가 기본값) LABEL은 긍정/부정의 단순한 클래스를 나타내는 숫자값이지 순차적 데이터가 아니므로 False이다.
use_vocab
: 단어 집합을 만들 것인지 여부. (True가 기본값)tokenize
: 어떤 토큰화 함수를 사용할 것인지 지정. (string.split이 기본값)- lower : 영어 데이터를 전부 소문자화한다. (False가 기본값)
batch_first
: 신경망에 입력되는 텐서의 첫번째 차원값이 batch_size가 되도록 한다. (False가 기본값)- is_target : 레이블 데이터 여부. (False가 기본값)
fix_length
: 최대 허용 길이. 이 길이에 맞춰서 패딩 작업(Padding)이 진행된다.
1 | from torchtext.data import TabularDataset |
1 | [결과] |
단어집합을 생성한다.
- 전체 리뷰의 단어들 내에서 중복을 제거한 단어집합을 생성한다.
- 각 단어에 고유한 정수를 부여한다(정수 인코딩)
- 정의한 필드 객체의
.build_vocab()
함수를 활용해 단어집합을 생성할 수 있다.
- 정의한 필드 객체의
1 | # 리뷰 데이터의 단어집합을 만든다. |
1 | [결과] |
- 이때 단어집합의 크기는 기존에 정의한 10000이 아닌 10002임을 알 수 있다. 더해진 두개는 토치텍스트가 자동으로 추가한 특별토큰 unk\와 pad\이다.
- unk는 0, pad는 1의 정수가 부여된다.
(+) 데이터로더 만들기 : 특정 배치크기로 데이터를 로드하도록 하는 데이터 로더를 만든다. torchtext.data의 Iterator를 사용해 만들 수 있다.
1 | from torchtext.data import Iterator |
1 | [결과] |
실습 2. 네이버 영화데이터 분류하기(한국어)
: 이전 IMDB데이터를 토치텍스트로 전처리 한 것과 마찬가지의 과정으로 진행한다.
- 네이버 영화리뷰데이터 다운
- 훈련데이터/테스트 데이터로 분류
- 필드 정의하기(전처리 방식 지정)
- 데이터셋 제작하기(전처리 수행)
- 단어집합 생성/정수인코딩 수행
1 | # 한국어 형태소 분석기 Mecab 설치 |
1 | [결과] |
1 | # 5.단어집합을 생성한다(정수인코딩 수행) |
1 | [결과] |