大規模言語モデル(LLM) LLaVAでお城の紹介文を書かせてみた #1

# 概要
昨今注目されている大規模言語モデル(LLM)の一種であるLLaVAを用いてお城の紹介文を書かせてみました。今回はZero-ShotのプロンプトとZero-Shotのプロンプトに画像の被写体(お城)についての説明を加えたプロンプトを与えるという2種類の方法でLLaVAを実行してみたいと思います。そして、実際に生成される結果に変化が有るか検証してみようと思います。

# LLaVAとは？
マルチモーダルな生成モデルで、いわゆる大規模言語モデル(LLM)です。Metaが開発したLlama2をベースに開発されました。モデルの詳細な後日解説は別の記事で取り上げたいと思います。

* 参考

https://github.com/haotian-liu/LLaVA

https://llava-vl.github.io/

# プロンプトエンジニアリング
LLMはプロンプトによって出力(の質、内容)が変化します。プロンプトを工夫することで、所望の出力を得られることが知られています。プロンプトエンジニアリングは以下の参考資料にも記載されている様に、非常に奥の深い分野です。よって、今回以降数回に渡って記事で取り上げようと思います。

* 参考

https://www.promptingguide.ai/jp

# お城の写真
以下のお城の写真を利用します。このお城は愛媛県宇和島市にある宇和島城というお城です。いわゆる現存12天守のうちの一城で、重要文化財に指定されています。また、宇和島伊達家300年の歴史の舞台でもあります。

![uwajimajo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/2ebcc2ff-6194-57d5-ec73-8149dc105e82.jpeg)

# 実際に宇和島城の紹介文を書かせてみた
LLaVAは日本語には対応していないため、プロンプト、生成されるテキストを含めて英語でやり取りします。英語で短い紹介文を書かせてみることにします。プロンプトは先述の様に、Zero-Shotプロンプトと(改良)Zero-Shotプロンプトを用います。

## Zero-Shotプロンプト
まずはZero-Shotプロンプトを与えてみます。そのものズバリ「短い紹介文」の生成をお願いしてみます。

> Write a brief introduction to this castle.

### 生成結果
見た所、宇和島城を紹介する紹介文と言うよりは、画像に写っている被写体がどういう物かという文章が生成されています。いきなり画像を見て宇和島城とはLLaVAは分からなかった様です。

> The image features a large stone castle with a moat, situated on top of a hill. The castle is surrounded by a lush green field, and there is a small house nearby. The castle's architecture and the presence of a moat suggest that it may have been a fortified structure in the past, providing protection and security for its inhabitants. The surrounding landscape adds to the overall beauty and historical significance of the castle.

## (改良)Zero-Shotプロンプト
今度はプロンプトに宇和島城の説明を加えてみます。(現存12天守の英訳は筆者の独自解釈の訳となります。)<font color=RED>赤文字</font>の部分は冠詞の`the`のスペルミスですが、敢えてそのままにしています。

> This is Uwajima Castle, one of Japan's most historical 12 castles. This is the setting for <font color=RED>te</font> 300-year history of the Uwajima Date clan and is a must-see for castle lovers. Write a brief introduction to this castle.

### 生成結果
今度は宇和島城の解説らしい英文が生成されました。LLaVAはWikipediaの英語の記事のテキストを学習データとして学習しています。よって、プロンプトで与えた情報とWikipediaの情報を組み合わせて英文を生成していると考えられます。その根拠として、<font color=ORANGE>オレンジ色</font>の部分はプロンプトで与えられた情報からは分からない情報です。LLaVAが自らの知識？とプロンプト内の情報を組み合わせて英文を生成しているのでしょう。また、<font color=RED>赤文字</font>のスペルミスは正しく修正されて反映されています。ただし、<font color=BLUE>青文字</font>の部分が、良くも悪くも生成AIの現状を反映していると言えます。この部分は、実は誤っています。まず、宇和島城は巨大な石垣(large stone wall)を特徴とするお城ではありません。これは推察ですが、写真で石垣が天守閣よりも強調されたアングルなのでこの様な説明を生成したのかな？と考察しています。加えて、moat(堀)が特徴という記述ですが、確かに江戸時代の宇和島城には特徴的な形の堀が存在したと記録に残っています。実際に宇和島城の解説などでも取り上げられます。ただし、その堀は現在存在しません。明治時代に埋め立てられてしまいました。よって、過去形の文章であれば正しいと言えますが、この文章は現在形で書かれています。しかし、Zero-Shotと比較して格段に生成された解説文が良くなりました。間違っている部分は人間が修正すれば、ほぼそのまま使える文章と言えるでしょう。改めて生成AI、LLM技術の進展に驚かされる結果となりました。

> Uwajima Castle, also known as Uwajima-jo, is one of Japan's most historical 12 castles, located <font color=ORANGE>in Ehime Prefecture</font>. It was <font color=ORANGE>built in the 16th century and is a significant landmark in the region</font>, showcasing <font color=RED>the</font> 300-year history of the Uwajima Date clan. <font color=BLUE>The castle features a large stone wall and a moat</font>, which provide a glimpse into the architectural and defensive strategies of the time. Visitors can explore the castle grounds, admire the impressive stonework, and learn about the rich history of the Uwajima Date clan. This castle is a must-see for anyone interested in Japanese history and architecture.

# まとめ
LLaVAを用いてお城(宇和島城)の紹介文を生成させてみました。予想以上の性能を示すことが、生成されたテキストから分かりました。この結果を受けて、他のプロンプティング・テクニックを用いたプロンプトを使っての検証もやってみたいと思います。その結果については別の機会の記事で取り上げようと思います。

# (参考) 各種パラメータ

|パラメータ名|値|備考|
|:---:|:---:|---|
|モデル名|liuhaotian/llava-v1.5-7b|より大規模な13bも公開されている|
|データ型|FP32|FP16, TF32にも対応|
|乱数seed|240119||
|temperature|0.1|0 < temperature < 1 <br> 0に近い程、決定論的な動作 <br> 1に近づくとバラツキが発生|
|Beam数|1|推論の並列数|