「写真を撮ったら、あとはお任せ !」
Amazon Bedrock と Claude でインスタ投稿自動化に挑戦
~ F.F.B.株式会社による生成 AI 実装解説
Author : 宅万 勇太 (F.F.B.株式会社)
弊社では、ショップスタッフや企業 SNS 担当者などのプロフェッショナル向けに、撮影・加工アプリ「UUULA」を提供しております。その中に試験提供中の機能「Instagram キャプション自動生成機能」があります。
近年、 Instagram をはじめとする SNS の普及により、個人や企業にとって写真や動画を投稿することが重要な情報発信手段となっています。しかし、魅力的な投稿を作成するには、適切なキャプション (投稿文) やハッシュタグの選定など、一定の時間と労力が必要です。特に、企業の SNS アカウントを運用する場合、大量の投稿を定期的に行う必要があるため、この作業が担当者の大きな負担となっていました。こうした問題を解決するため、弊社では、Amazon Bedrock と Claude 3 を用いて Instagram 投稿のキャプション作成の自動化の機能を開発いたしました。
この機能を使うと、ユーザーが写真を撮影するだけで、生成 AI によって画像をもとに最適なキャプションとハッシュタグを生成してくれます。これにより、投稿作成にかかる時間と手間を大幅に削減することができます。本記事では、まず Amazon Bedrock と Claude 3 の概要を説明し、それらを使ったインスタ投稿自動化の実装方法を具体的な使用例を示しながら解説していきます。
Amazon Bedrock とは
Amazon Bedrock は、主要な生成 AI の基盤モデルを AWS 上で利用することができるフルマネージド型のサービスです。直接生成 AI のモデル提供会社と契約し、基盤モデルを利用する場合、それぞれのモデルのドキュメントを読み込み、API を利用する必要がありますが、Amazon Bedrock を利用することで、同一の API で様々な基盤モデルをお手軽に切り替えて比較検討することができます。 また、AWS の他のサービスとの連携が容易であることや、プライバシーやセキュリティを確保できる点も大きなメリットです。
Amazon Bedrock から利用できる基盤モデルは多岐にわたりますが、今回は、キャプションの作成という日本語力が求められるタスクを実行するため、Anthropic 社の Claude 3 を利用しました。Claude 3 の大きな特徴は、日本語の処理に優れている点です。日本語特有の言い回しや文脈を理解し、自然な日本語の文章を生成することが検証でわかりました。また、入力にはテキストだけではなく、画像を含めることもできるため、「この画像には何が写っているのか解説して」といったようなタスクを処理することもできます。
Instagram キャプション自動生成機能の実装
それでは、弊社の「Instagram キャプション自動生成機能」をどのように実装しているか、全体的な処理フローを解説していきます。精度の高い生成を可能とするために、一度の推論でキャプションやハッシュタグを生成させるのではなく、Claude 3 に処理させるタスクを細かく分割し、生成された内容を再度インプットに利用する形で複数回 API を呼び出しています。以下が全体の処理の流れです。
- ユーザーの過去の投稿データを Claude 3 に入力し、ユーザーの好みや文体の特徴を分析する
- 投稿する画像を解析し、画像に写っている物体やシーンを説明する文章を生成する
- キャプション (投稿文) とハッシュタグを生成する
順番に解説していきます。
1. ユーザーの過去の投稿データを Claude 3 に入力し、ユーザーの好みや文体の特徴を分析する
キャプションを生成する際に重要となってくるのが、いわゆる「本人っぽい」文章を生成する、という点です。そこで、ユーザーの過去の投稿のキャプションに近づけるため、まずは投稿主がどういったユーザーなのかを分析します。
例として、過去投稿から Instagram アカウントの説明文を生成し利用するために、実在の私の Instagram アカウント @takuugle を利用して分析した結果は以下の通りです。
■ Instagram アカウントの分析
この Instagram アカウントは、ストリートスニーカーやスニーカーカルチャーにフォーカスしており、新作スニーカーの発売情報や入手方法、自身のスニーカーコレクションを投稿しています。スニーカーへの愛着と情熱が溢れる内容となっており、よく使う言葉や絵文字も多数見受けられます。新作を手に入れた喜びや、スニーカーを履いた時の感想など、詳しい説明や詳細な印象が述べられています。
このように、過去の投稿から私が普段どのような投稿をしているのか、どのような文体で投稿しているのかを分析させることができました。生成した分析結果は DB に保存しておくことで、次回以降の投稿時の際このステップを省略することができます。
2. 投稿する画像を解析し、画像に写っている物体やシーンを説明する文章を生成する
次に、投稿する画像の説明文を生成します。以下のふたつの情報を Claude 3 のインプットとして渡し、投稿される画像に何が写っているのか、どのような写真なのかを分析させます。
■ 投稿する写真
■ 写真に対する付加情報
初下ろしの KITH x ASICS GEL-2016 を履いたけど、めちゃくちゃ履き心地が良くて、一日歩いても全然疲れない。トレンドのシルバーカラーも好み。GEL-2016 は初めて履いたけど、 GEL-KAYANO 14 に負けない履き心地。
付加情報は、画像からは伝わらない背景や状況などの情報を補完するために必要です。例えば、写真が撮影された場所や時期、撮影者の感情や意図などを付加情報として伝えることで、Claude 3 がより適切なキャプションを生成することができます。
3. キャプション (投稿文) とハッシュタグを生成する
次は、キャプションの生成です。 1. で生成したユーザーの好みや文体の情報と、2. で生成した投稿画像の分析結果を元に、キャプションの生成を行います。以下は、キャプション生成時のフォーマットを指定する際に利用しているプロンプトです。以下のようなプロンプトを与えることで、システムが扱いやすい JSON 形式で回答を生成させることが可能です。
生成した原稿のアウトプットは JSON フォーマットで<出力形式></出力形式>内に記載したフォーマットに必ず従ってください。それ以外の情報や「```json」のようなコードブロックも出力してはいけません。
<出力形式></出力形式>のテキストは絶対にアウトプットに含めないでください。例外はありません。
もちろん挨拶や説明を前後に入れてはいけません。例外はありません。
原稿内で改行する場合は、 \\n を出力してください。
<出力形式>
{
"caption": " Instagram の投稿の原稿"
}
</出力形式>
上記のプロンプトではXML タグを利用していますが、Claude は XML タグを利用してプロンプトの構造を明確化することで、出力の正確性を向上させることが可能です。詳しくは Anthropic のプロンプトエンジニアリングガイド をご参照ください。
また、プロンプトの中で JSON フォーマットでの出力を指定していますが、稀に 「はい、わかりました。JSONで出力します。」など、JSON 以外の文字が出力されてしまうことがあります。それを回避するには、API 実行時の messages の assistant の content に { を指定することで、出力文字を { から始めることを強制することができます。
{role: 'assistant', content: [{type: 'text', text: '{'}]}
また、もう一つ工夫した点がハッシュタグの生成です。単純に「ハッシュタグを 10 個生成してください」とプロンプトを書いた場合、生成される数にばらつきがでることがあります。例えば、8 個しか生成されなかったり、反対に 13 個生成されてしまったり、安定しません。この傾向は、指定する数が大きくなればなるほど顕著です。
そこで、何個目かを示す number のパラメータも付与した JSON 形式で出力するようにプロンプトを下記のように修正したところ、高い確率で指定した個数のハッシュタグが生成されるようになりました。最終的に、出力された JSON をパースしてハッシュタグのみを抽出しています。
ハッシュタグには、ハッシュタグのtextと何個目かのハッシュタグかを示す number パラメータを記載してください。例外はありません。
<出力形式>
{
"hashtags": [
{
"text": "#ハッシュタグ1",
"number": 1
},
{
"text": "#ハッシュタグ2",
"number": 2
},
{
"text": "#ハッシュタグ3",
"number": 3
}
]
}
</出力形式>
このような工夫を行い、最終的に Claude 3 が生成したキャプションとハッシュタグは以下のとおりです。
■ 投稿する写真
■ 生成されたキャプション
待ちに待ったKITH x ASICS GEL-2016の初履きだ🤤✨初期ロットでめっちゃ嬉しい☺️シルバーカラーにキマってるし、一日中履いてても疲れない履き心地すげえ🔥気に入ったから、他のカラーも欲しくなってきたGEL-KAYANO 14に並ぶ足入れ感で、アシックスさすが最高です💪
■ 生成されたハッシュタグ
#アシックス #GEL2016 #キス #スニーカー #シルバー #履き心地 #GELKAYANO14 #ファッション #スニーカーヘッズ #初履き #キマってる #足入れ感 #sneakers #fashion #streetwear #kicks #asics #kith #silver #comfy #sneakerhead #hypebeast #スニーカー好き #ストリートファッション #アパレル #トレンド #靴 #シューズ #アスリートスニーカー #ランニングシューズ
いかがでしょうか ? Claude 3 を利用することで、写真に写っている物体を認識し、アカウントの説明文や、付加情報を踏まえたキャプションとハッシュタグを生成することができました。私の過去の投稿の文体なども良く真似ることができています。
最後に、ユーザーに投稿前の最終確認をしてもらいます。ユーザーは、生成された文章やハッシュタグを必要に応じて修正したうえで Instagram に投稿することができます。
応用の可能性と留意点
Amazon Bedrock と Claude 3 を使ったインスタ投稿のキャプション作成自動化は、他の SNS にも応用可能です。例えば、X や Facebook でも同様の手法を使って、画像付きの投稿を自動的に作成することができるでしょう。また、生成されたテキストをユーザーが編集・調整した際に、修正内容をフィードバックとして次回の生成時に利用することで、更にユーザーの好みに合った文章を生成することもできそうです。さらに、将来的には多言語対応への利用も期待されます。現在は、主に日本語での文章生成に利用していますが、Claude 3 は多言語への翻訳も得意としています。これにより、グローバルな SNS アカウントの運用にも活用できるのではないかと検討を進めています。
一方で、留意点もあります。AI による文章生成は、利便性と効率性に優れる一方で、生成された文章が常に適切とは限りません。人間にとっては違和感がある文章が生成されたり、うまく画像認識ができずに写っていないはずの物体をキャプションに含めてしまうこともあります。そのため、投稿前には必ずユーザーが内容を確認する必要があります。少なくとも現時点においては、生成 AI の出力は完璧ではない、ということを念頭においたサービスの設計が重要になる、ということはぜひ認識していただきたいです。
まとめ
本記事では、弊社アプリ「UUULA」実装にあたって、Amazon Bedrock を使って Instagram への投稿を自動化する方法を紹介しました。生成 AI に単純な文書生成をさせるのではなく、過去の投稿データや画像、付加情報など様々なインプットを与えることで品質の高いテキストを生成することができています。従来このような処理を実装するためには、高度な自然言語処理の知識や複雑な実装が必要でした。ですが、生成 AI を利用し、プロンプトを工夫することでスピーディーにこのような機能を実装することができました。これからも AWS と Amazon Bedrock を活用し、ユーザーにとって嬉しい機能を作っていきたいと思います。
筆者プロフィール
宅万 勇太
F.F.B.株式会社 CTO
2013 年から f.f.b. Inc. にジョインし、インフラ、Web サービス、iOS アプリなど開発全般を担当。現在は CTO として、SNS 向けクリエイティブ制作アプリ「UUULA」、SNS 解析ツール「UUULA ANALYTICS」の両サービスの開発全般を担当。
AWS を無料でお試しいただけます