テックブログ vol.2 -「キャッチコピー感性評価」を行うBERTの多次元回帰モデル構築-
はじめに
感性AIでエンジニアをしている本村です。
弊社の「感性AIアナリティクス」というツールでは「キャッチコピー感性評価」という機能があり、キャッチコピーに対して定量的に印象評価を行うことが可能になっております。
このキャッチコピーからの定量的な印象評価を実現するために用いられているのが、BERT(Bidirectional Encoder Representations from Transformers)という言語モデルになっています。
この記事ではBERTによるキャッチコピーの印象評価の予測を目的とした、Pythonによる学習モデルの実装について、実際に弊社が独自に収集しているアンケートデータの一部を用いて説明していきます。
なお、実際のサービス上では、この記事で作成したモデルが動作しているわけではなく、別途調整されたモデルが動作しております。
印象評価尺度の予測について
「感性AIアナリティクス」では印象評価尺度として43個の尺度を使用しています(例:「明るい - 暗い」「冷たい - 温かい」など)。キャッチコピーを入力するとそれらの43尺度についての印象評価値を予測するモデルが必要です。そのため、今回使用するモデルのタイプとしては多次元の回帰モデルということになります。
学習データ
弊社が開発したアンケート収集ツールにより収集した、キャッチコピーに対する印象評価値を答えてもらうアンケート、単語に対する印象評価値を答えてもらうアンケートの2種類のデータを用います。今回は、キャッチコピー50個に対して111名、単語100個に対して294名の回答を参考に説明していきます。データは継続的に収集していっているので、今回はその一部でのご紹介です。
キャッチコピーに対する印象評価値を答えてもらうアンケートのデータの一部
単語に対する印象評価値を答えてもらうアンケートのデータの一部
(一部の)尺度ごとの分布を可視化すると以下のようになります。
多次元の尺度を一度に学習するにあたり尺度ごとに分散が異なっていると、分散の大きな尺度におけるロスに大きく学習が左右されるという懸念点があります。そのため、すべての尺度の分散が1になるように調整し、その値を学習することにします。
これをキャッチコピーと単語のアンケートの両方で行うことで、機械学習の入力となるキャッチコピー・単語のテキストと、出力となる感性尺度のベクトルが出来上がります。
今回はキャッチコピーを予測するモデルを作るため、キャッチコピーのデータのうち一部をテストデータとして用い、それ以外のキャッチコピーと単語のデータを訓練データとして割り当てます。
BERTのファインチューニング
大規模データによる事前学習済みモデルを、手持ちのデータで分類器・予測器として学習させることをファインチューニングと呼びます。BERTを用いた学習モデル構築の一般的な手法になります。
Hugging Face社のtransformerというライブラリ(執筆時のバージョンは4.25.1)を使用します。BertForSequenceClassificationというクラスを利用することで、分類や回帰のためのファインチューニングが簡単に実装できるようになっています。
今回は43尺度の回帰予測であるため、以下のようにモデルを初期化して使用します。
なお、BERTの学習済みモデルとしてcl-tohoku/bert-base-japanese-whole-word-maskingを使用しています。
from transformers import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained(
"cl-tohoku/bert-base-japanese-whole-word-masking",
num_labels=43,
problem_type="regression"
)
学習は以下のようにTrainerとTrainingArgumentsを利用すると簡潔に書くことができます。
from transformers import Trainer, TrainingArguments
from transformers import EarlyStoppingCallback
training_args = TrainingArguments(
output_dir=output_dir,
num_train_epochs=epochs,
learning_rate=lr,
per_device_train_batch_size=batch_size,
per_device_eval_batch_size=batch_size,
save_total_limit=1,
load_best_model_at_end=True,
metric_for_best_model=metric,
greater_is_better=False,
save_strategy="epoch",
evaluation_strategy="epoch",
logging_strategy="epoch",
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset, # torch.utils.data.Datasetオブジェクト
eval_dataset=val_dataset, # torch.utils.data.Datasetオブジェクト
compute_metrics=compute_metrics,
callbacks=[EarlyStoppingCallback(early_stopping_patience=early_stopping_patience)]
)
Trainerオブジェクトを用意すれば、
trainer.train()
で、学習が始まります。
検証データのロスが下がらなくなったところで学習をストップ(Early Stopping)。
このモデルの予測性能を確かめるために、テストデータ全体を予測した際の正解の値と予測の値の相関係数を計算します。
今回は相関係数が0.67ということになりました。
最後にテストデータ1件だけを取り出して、そのキャッチコピーを入力した時のモデルの予測と、アンケートにおける印象評価の結果の違いを尺度ごとに可視化してみます。
このようにして新たなキャッチコピーに対しても自動で印象評価が可能なモデルが構築できました。
おわりに
以上、BERTを用いた「キャッチコピー感性評価」モデルの構築の取り組みを紹介いたしました。
実際のサービス上では性年代別に異なる評価や、キャッチコピーに関連した連想語マップを表示、評価結果のレポート生成などの機能もご利用いただけます。
感性AIではこのような技術を元に、HAPPINESSを実感できる社会を目指しております。
Comentarios