윤제로의 제로베이스

파이토치를 이용한 텍스트 분류(Text classification using Pytorch) 본문

Background/Pytorch 기초

파이토치를 이용한 텍스트 분류(Text classification using Pytorch)

윤_제로 2022. 1. 26. 22:03

https://wikidocs.net/66115

 

01. 파이토치를 이용한 텍스트 분류(Text classification using PyTorch)

이번 챕터에서는 파이토치(PyTorch)로 인공 신경망을 이용한 텍스트 분류를 실습합니다. 실습에 앞서 딥 러닝을 이용해서 텍스트 분류가 수행될 때, 어떤 작업과 구성으로 ...

wikidocs.net

1. 훈련 데이터에 대한 이해

지도 학습의 훈련 데이터는 레이블이라는 이름의 정답이 미리 적혀있는 데이터로 구성되어 있다.

쉽게 비유하자면, 기계는 정답이 적혀져 있는 문제지를 열심히 공부하고, 향후에 정답이 없는 문제에 대해서도 정답을 예측해서 대답하게 되는 메커니즘이다.

2. 훈련 데이터와 테스트 데이터

3. 단어에 대한 인덱스 부여

파이토치의 nn.Embedding()은 단어 각각에 대해 정수가 맵핑된 입력에 대해서 임베딩 작업을 수행할 수 있게 해준다.

 

단어 각각에 숫자 맵핑, 인덱스를 부여하는 방법으로는 단어를 빈도수 순으로 정렬하고 순차적으로 인덱스를 부여하는 방법이 있다.

이때의 장점은 등장 빈도수가 적은 단어의 제거이다. 

4. RNN으로 분류하기

# 실제 RNN 은닉층을 추가하는 코드.
nn.RNN(input_size, hidden_size, batch_first=True)

텍스트 분류 관점에서 앞서 배운 RNN 코드의 timesteps와 input_dim, 그리고 hidden_size를 해석해보면 다음과 같다.

 

hidden_size = 출력의 크기(output_dim)

timesteps = 시점의 수 = 각 문서의 단어 수

input_size = 입력의 크기 = 각 단어의 벡터 표현의 차원 수

5. RNN의 다-대-일(Many-to-One) 문제

텍스트 분류는 RNN의 다-대-일 문제에 속한다.

즉, 텍스트 분류는 모든 시점(time step)에 대해서 입력을 받지만 최종 시점의 RNN 셀만이 은닉 상태를 출력하고, 이것이 출력층올 가서 활성화 함수를 통해 정답을 고르는 문제가 된다.

 

이때 두개의 선택지 중에서 정답을 고르는 이진 분류(Binary Classification) 문제라고 하며, 세 개 이상의 선택지 중에서 정답을 고르는 다중 클래스 분류(Multi class Classification) 문제라고 한다.

이 두 문제에서는 각각 문제에 맞는 다른 활성화 함수와 손실 함수를 사용할 것이다.

 

이진 분류 문제의 경우 출력층의 활성화 함수로 시그모이드 함수를, 다중 클래스 문제라면 출력층의 활성화 함수로 소프트맥스 함수를 사용할 수 있다.

또한, 다중 클래스 분류 문제의 경우에는 클래스가 N개라면 출력층에 해당되는 밀집층의 크기는 N으로 한다.

즉, 출력층의 뉴런의 수는 N개이다.

(하지만 소프트맥스 함수로 이진 분류를 할 수도 있다. 출력층의 뉴런을 2개로 하면 된다)