画像説明するアプリ「ViLT-GPT」でLLMと他のTransferモデルの組み合わせ方を学ぶ
面白そうなサンプルアプリをGitHubで見つけたので遊んでみました。
README.md の日本語訳
ViLT-GPTは、会話型AI ChatGPTに「見る」機能を与える革新的なアプリケーションです。OpenAIの言語モデル(LLM)とLangChainをVision-and-Languageモデルと統合することで、このアプリは画像の内容に基づいて質問に答えることができます。これで、画像と対話したり、質問をしたり、有益な回答を得たりすることができます。
とにかく試してみます
面白そう! とにかく動かしてみます。READMEに沿ってリポジトリをローカルにコピーしてライブラリをインストールしてから、.envにOPENAI_API_KEYを書き込んで、以下で一発起動します。
streamlit run app.py
どれどれ、試食してみます。
Describe this image
なかなかいい感じですね。
ソースを覗いてみる
実装方法に興味が湧いたので、少しソースを眺めてみました。複雑なアルゴリズムなどを想像していたのですが、とても簡単なロジックで実現されていました。
アップロードした画像を、Hugging Faceで公開されている画像内容をテキストで返す、Vision-and-Language Transformer (ViLT)に入力する。https://huggingface.co/dandelin/vilt-b32-finetuned-vqa
ViLTから帰ってきたラベルをLangChainでChatOpenAIのgpt-3.5-tureboに投げる。以上おしまい。ザッツ、シンプル。
def process_query(image, query):
model, processor = load_model()
encoding = processor(image, query, return_tensors="pt")
outputs = model(**encoding)
logits = outputs.logits
idx = logits.argmax(-1).item()
chain = LLMChain(llm=llm, prompt=prompt)
response = chain.run(question=query, elements=model.config.id2label[idx])
return response
prompt = PromptTemplate(
input_variables=["question", "elements"],
template="""You are a helpful assistant that can answer question related to an image. You have the ability to see the image and answer questions about it.
I will give you a question and element about the image and you will answer the question.
\n\n
#Question: {question}
#Elements: {elements}
\n\n
Your structured response:""",
)
また、画像と同様に、実装方法がほぼ同じで、グラフの画像データをテキストに変換するモデル Deplot https://huggingface.co/google/deplot を利用したグラフの内容をLLMで処理させる例も紹介されていました。グラフ画像のpngファイルを読み込むといい感じに数字を読み取ってグラフの性質を説明してくれました。
まとめ・感想
今まで自分はLLM単体での応用ばかりを考えていたのですが、テキストデータを入出力に使うことでLLMを中心にして、LLM以外のモデルも利用して様々な問題解決に利用できる大きな可能性を感じました。改めてLLMの汎用性に驚いています。
お読みいただき、ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?