Leverages データ戦略ブログ

インハウスデータ組織のあたまのなか

画像キャプショニングを使ったSEO対策

目的

画像キャプショニングを使って、ブログ等に貼られている画像とブログの文章の一致度をみることで、記事を作成する際にページのトピックに関連した画像を探しやすくならないか、あるいは、画像が関連の高い文の近くに配置されているかを検出できないかを検討しました。うまくいけば、SEO対策などで使うことができるのではないかと考えています。

概要

画像キャプショニングとは、画像をインプットすると、その内容を説明する文を生成することです。 今回は画像キャプショニングの事前学習モデルを使って、画像から文書を生成し、それを日本語訳しました。その文書に対してTF-IDFを適用することによって、画像から生成された文と最も類似しているサイト内の文を見つけて、画像との位置関係を見ていきます。

やったこと

画像キャプショニングは、色々なやり方が考えられますが、おおまかな流れとしては、Convolutional Neural Network(CNN)などで画像の特徴量を抽出することになります。さらにLSTMなどに単語列を入力して、画像の特徴量と併せて次の単語を予測していくことになります。 今回使った事前学習モデルはCPTRという、Transformerだけでキャプショニングを行うモデルを使いました。

試しに、弊社のサービスである、ナースときどき女子のこのページについて適用してみました。使用した画像は下のような画像です。

f:id:DataStrategyOffice:20211222214336j:plain
クリスマス

この画像から生成された文は、
「A group of women sitting next to a christmas tree.」
となり、これをPython用のGoogle Translate APIを使って日本語に翻訳すると、
「クリスマスツリーの隣に座っている女性のグループ。」

となります。真ん中の人が女性じゃなさそう、かつ座ってもいなさそうですが、大きくは外していないと思いました。右端の子供の足が座っているような位置にあるので座っていると判断されたのかもしれません。

この文とページ内の各文とのTF-IDFからcos類似度を計算してみると、最も近い文は、ページの中央部にある、
「そんなブログから、クリスマスにぴったりなアイデアとして、部屋のスペースを取らずにツリーを楽しめるタペストリーツリーが紹介されている《【クリスマス準備】タペストリーツリーにニトリのオーナメントを飾りつけ》という記事に注目してみました。」
になりました。

生成された文と検出された文の類似度は0.18となり、それほど高くない値になり、また、画像と文の位置もやや離れているようですが、このページの1文目は画像の内容をよく説明していると思われるので、 「子ども」や「大人」が区別されるように追加で学習するなどできれば、より精度の高い判定ができるようになりそうです。

スクリプト

画像キャプショニングを実行するコマンドです。githubをクローンして、学習済みモデルを使うにはpredict.py を実行します。./hoge.jpg に入力画像へのパスを書きます。

$ git clone https://github.com/saahiluppal/catr
$ python3 predict.py --path ./hoge.jpg --v v2

こちらは、googletransを使って日本語に翻訳する関数です。ただし、リクエスト数に上限があるようです。

from googletrans import Translator
def translate(text):
  translator = Translator()
  text_ja = translator.translate(text, dest='ja').text
  return text_ja

まとめ

・画像キャプショニングにより、画像から短い説明文を生成することができ、画像の内容をだいたい説明できるような文が生成されることがわかりました。
・最適な画像を探したり、画像を挿入する位置をサジェストしたり、SEO対策などに使うなど色々な用途に使えそうな技術だと思いました。