감정분석은 텍스트 데이터의 감정이나 의견을 자동으로 분석하는 자연어처리의 중요한 분야 중 하나입니다. 최근 몇 년 동안, 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()
上記のコードを実行すると、次のように感情分析を行うことができます。
4. 結び
このように基本的なBERTモデルを使用して感情分析を行うと、簡単かつ迅速に結果を得ることができます。ただし、このモデルには精度に制限があるという限界があります。
このような限界を克服するために、基本モデルを特定のタスクに適合させるFine-Tuningを使用することができます。Fine-Tuningは、モデルが特定のドメインやタスクに適合するように重みを調整して精度を向上させるプロセスです。
例えば、感情分析を行うために感情関連のデータセットでBERTモデルを学習させることで、より正確な結果を得ることができます。
したがって、より高い精度を求める場合はFine-Tuningを適用することをお勧めします。
この記事も一緒に読んでみてください:
データ収集、今度は自動化
コーディングなしで5分でスタート・5,000以上のウェブサイトをクロールした経験




