ChatGPT にコンテキストに沿った代替テキストを生成してもらった

こんにちは、たじまん ( @schktjm) です。

この記事は、 ZOZO Advent Calendar 2023 の 4 日目の記事です。

はじめに

タイトルの通り、この記事では ChatGPT に代替テキストを生成してもらった話を書きます。 そして、最終確認をしようとした今、1日の上限に引っかかってしまい、もしかしたら何もできていないかもしれないです。

ChatGPT-4 では、テキストだけではなく画像やインターネット通信を含んだプロンプトを入力できるため、画像を渡すだけですぐ画像の説明をしてもらうことができます。しかし、代替テキストとなると話は別物になります。

アクセシビリティ文脈における代替テキストとは、技術支援ユーザーや直接画面を見ることができないユーザーに対して、画像の内容を伝えるためのテキストです。代替テキストは、画像の内容を伝えるためのものであるため、画像の内容を説明するだけではなく、コンテキストに沿った画像の意味や目的を伝えることも重要です。

例えば、以下のような画像があったとします。

検索窓の画像 プレースホルダーに検索すると書いてあり、検索窓の右側に虫眼鏡アイコンが設置されている
検索窓

この場合の虫眼鏡アイコンの代替テキストは、 虫眼鏡アイコン ではなく、空文字列にするべきです。なぜならこのアイコンは装飾目的であり、意味を伝える物ではないからです。

また、以下のような画像があったとします。

ZOZOTOWN のキャプチャ ハートのボタンに紫色の枠線*1

このハートアイコンをクリックすると、お気に入り一覧画面に遷移します。そのため、このハートアイコンの代替テキストは ハート ではなく、 お気に入り一覧お気に入りを見る を設定します。そうすると読み上げツールは「リンク お気に入りを見る」と読み上げるため、支援技術ユーザーに対してこのハートをクリックすればお気に入り一覧を見ることができると伝えることができます。

このように、代替テキストには画像を説明するテキストそのものではなく、コンテキストに沿ったテキストが重要になります。

つくったもの

今回は、 GPT Builder を使って、代替テキストを生成する bot を作成しました。

Alt Text Designer

Alt Text Designer

この bot のテキスト欄に、画面のキャプチャとどの画像の代替テキストを出力させるかを入力すると、代替テキストを生成してくれます。と言いたいところだったんですが、試そうとしたところで 1 日の制限に引っかかってしまいました 🥲

そのため、試そうとしていたチャットのキャプチャを貼ります。

私「それではこの画像の右上の紫の枠で囲ってるアイコンの代替テキストを教えてください」(画像添付) GPT「紫の枠で囲まれたアイコンがどのような機能を持っているか、説明していただけますか?その機能に応じて適切な代替テキストを提案させていただきます。」私「このアイコンをクリックすると、お知らせ一覧のページに遷移します」GPT「 この場合、アイコンに適切な代替テキストは「お知らせ一覧ページへ遷移」となります。このテキストは、アイコンがお知らせ一覧ページへのリンクであることを正確に伝えるものです。」
ChatGPT のチャット画像*2

このような感じで、コンテキストによって代替テキストを生成してくれるはずです。(きっと)

プロンプト (実装方法)

あまり自分がプロンプトエンジニアリングに詳しくないため、テンプレートに落とし込めませんでしたが、以下の方法で実装しました。

  1. プロの web デザイナーとして、 web デザイン中の画像の代替テキストを考えさせる。
  2. コンテキスト別の画像を用意し、その場合の代替テキストの役割を教えながら答えに辿り着かせる。
    1. 装飾の意味で使われている場合の画像の代替テキストの例
    2. インタラクション後に何が起こるかを説明する代替テキストが良い例
    3. 配置されている位置によって全てを説明する必要がない代替テキストの例
  3. 今までの学習をもとに代替テキストを出力させる。

a, b, c の画像はそれぞれ以下のような画像を用意しました。

検索ボックスの画像、検索ボックスの右に配置してある虫眼鏡に紫色の枠線がある
a. 装飾の意味で使われている場合の画像の代替テキストの例

ZOZOTOWN トップページのキャプチャ、ヘッダーのハートアイコンに紫色の枠線がかかっている
b. インタラクション後に何が起こるかを説明する代替テキストが良い例*3

ZOZOTOWN トップのキャプチャ、カルーセルバナーの現在地を移動するボタンに紫色の枠線が書いてある
c. 配置されている位置によって全てを説明する必要がない代替テキストの例*4

チャットの内容も出力しようとしたところ、ローディングが終わらないため後日追記しておきます 🙇

まとめ

今回は、 ChatGPT にコンテキストに沿った代替テキストを生成してもらった話を書きました。

まだ場合によっては以前の会話を全部無視された出力がされるのでもう少しプロンプトを工夫する必要がありそうですが、代替テキストの自動生成は簡単にできそうです。

また、今回は画像から指定したものの代替テキストを生成させる、という手法をとったため、 figma プラグイン化や Chrome 拡張化などの応用ができそうだなと考えています。次回作にご期待ください。

最後まで読んでいただき、ありがとうございました。

裏話

このアドベントカレンダーの話題はわりと早く決まっていたのですが、2 日前に用意しようとしたところ ChatGPT Pro プランの加入が自由ではなく wishlist になっていたのを知り絶望をした時のツイートがこちらです。

そこで、もともと考えていた figmaプラグイン作成にしようかどうか悩んだですが、今欲しいプラグインが思い浮かばず途方に暮れていたところ、課金ユーザーから招待コードをもらい、get the ことなきでした。

やはり前もって準備をしておくことは重要ですね、これからアドベントカレンダー書く方はぜひ参考にしてください。

*1:画像の一部をマスクしています

*2:画像の一部をマスクしています

*3:画像の一部をマスクしています

*4:画像の一部をマスクしています