코드 몇 줄로 간단히 텍스트 감정분석하기: BERT 활용법

BERT를 사용한 텍스트 감정분석의 기본 원리와 코드 예제를 확인해보세요.

감정분석은 텍스트 데이터의 감정이나 의견을 자동으로 분석하는 자연어처리의 중요한 분야 중 하나입니다. 최근 몇 년 동안, BERT(Bidirectional Encoder Representations from Transformers)라는 딥러닝 모델이 자연어처리 작업에서 높은 성능을 보여주며 감정분석에도 큰 역할을 하고 있습니다. 이 블로그에서는 BERT를 사용하여 간단하게 감정분석을 수행하는 방법을 알아보겠습니다.
 
 

1. 자연어처리(NLP)와 감정분석(Sentiment Analysis =감성분석)

자연어처리는 인간의 언어를 기계가 이해하고 처리할 수 있도록 하는 분야로, 텍스트 데이터에 대한 이해와 처리를 포함합니다. 감정분석은 자연어처리의 중요한 하위 분야로, 주어진 텍스트가 긍정적, 부정적 또는 중립적인 감정을 가지고 있는지 판별하는 작업을 의미합니다. 감정분석은 다양한 분야에서 활용되는데 그 예로 비즈니스에서 제품 평판을 관리하고 고객 의견을 파악하여 전략을 조정하는데 사용될 수 있습니다. 또한, 금융 분야에서 시장 감정을 예측하여 투자 결정을 내리거나 고객 서비스에서 피드백을 분석하여 서비스 품질을 개선하기 위해서도 감정분석을 활용할 수 있습니다.
 
 

2. BERT란?

BERT는 Google에서 개발한 트랜스포머(Transformer) 아키텍처를 기반으로 하는 언어 모델로, 문장 내의 단어 및 문맥을 이해하고 텍스트 데이터를 효과적으로 처리할 수 있습니다. BERT는 사전 훈련된 모델로, 대규모 텍스트 데이터에서 훈련된 후 다양한 자연어처리 작업에 성공적으로 적용됩니다. BERT를 사용하여 간단하게 텍스트 감정분석을 수행하는 코드를 살펴보겠습니다.
 
 

3. BERT로 감정분석하기

3.1. 라이브러리 설치

먼저, pip 명령어를 사용하여 Transformers 라이브러리를 설치합니다.
!pip install transformers
다음으로 필요한 라이브러리를 import합니다.
import torch from transformers import BertTokenizer, BertForSequenceClassification import torch.nn.functional as F
현재 사용할 "kykim/bert-kor-base" 모델은 한국어 BERT 모델로, 한국어 자연어 처리 연구를 위해 한국어로 학습된 최신 언어모델입니다. ‘BertForSequenceClassification’은 BERT 모델을 텍스트 시퀀스 분류 작업에 맞게 미세 조정하기 위한 모델 클래스입니다.

3.2. tokenizer 지정

다음으로 tokenizer를 지정해줍니다. 대부분의 transformer 모델들은 텍스트를 바로 입력으로 받을 수 없고 텍스트를 tokenize한 결과값을 입력으로 받게 됩니다. BertTokenizer.from_pretrained 함수를 사용하면 각 모델별로 필요한 tokenizer를 자동으로 제공받을 수 있습니다.
model_name = "kykim/bert-kor-base" model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2) tokenizer = BertTokenizer.from_pretrained(model_name)

3.3. 함수로 클래스(감정) 수행하기

다음으로 텍스트 데이터를 입력으로 받아 감정 분석을 수행하는 ‘classify_emotion’ 함수를 정의합니다. 입력된 텍스트를 위에서 지정한 tokenizer를 통해 토큰화한 뒤, 모델을 사용하여 예측을 수행합니다. 그 후, 예측 결과를 softmax 함수를 사용하여 확률로 변환하면 각 클래스(감정)에 대한 확률 값을 얻을 수 있으며, argmax 함수를 통해 결과로 반환된 확률 중 가장 높은 확률을 가지는 클래스(감정)을 선택하여 출력합니다.
def classify_emotion(text): # 텍스트 토큰화 및 패딩 tokens = tokenizer(text, padding=True, truncation=True, return_tensors="pt") # 예측 수행 with torch.no_grad(): prediction = model(**tokens) # 예측 결과를 바탕으로 감정 출력 prediction = F.softmax(prediction.logits, dim=1) output = prediction.argmax(dim=1).item() labels = ["부정적", "긍정적"] print(f'[{labels[output]}]\\n')

3.4. 감정분석 결과 출력하기

마지막으로 ‘predict_sentence’ 함수를 통해 사용자로부터 문장을 입력받은 뒤 classify_emotion 함수를 호출하여 감정 분석을 수행한 결과를 출력합니다.
def predict_sentence(): input_sentence = input('문장을 입력해 주세요: ') classify_emotion(input_sentence) predict_sentence()
위의 코드를 실행하면 다음과 같이 감정 분석을 수행할 수 있습니다.
 
notion image
 
 

4. 마무리

이와 같이 기본 BERT 모델을 사용하여 감정 분석을 수행하면 간단하고 빠르게 결과를 얻을 수 있습니다. 하지만 이 모델에는 정확성에 제한이 있다는 한계가 있습니다. 이러한 한계를 극복하기 위해 기본 모델을 특정 작업에 맞게 미세 조정하는 Fine-Tuning을 사용할 수 있습니다. Fine-Tuning은 모델이 특정 도메인 또는 작업에 적합하도록 가중치를 조정하여 정확성을 높이는 프로세스입니다. 예를 들어, 감정 분석을 수행하기 위해서 감정 관련 데이터셋으로 BERT 모델을 학습시켜 더욱 정확한 결과를 얻을 수 있습니다. 따라서, 더욱 높은 정확성을 원한다면 Fine-Tuning을 적용하는 것을 권장합니다.