【好きな技術】生成AIのハルシネーション問題について
2025-04-07
azblob://2025/04/04/eyecatch/2025-04-05-on-the-hallucination-problem-of-generative-ai-000.png

自己紹介

はじめまして!この記事を開いていただきありがとうございます!

村山と申します!専門学校卒でゲーム開発をしていました!

3Dモデリング、C#,C++でのゲーム開発やコードの軽量化、VR開発などをやっていました!


本記事では、私の好きなIT技術の中でも特に好きな技術を紹介したいと思います!

生成AIの課題

生成AIは便利ですが "正しい使い方" をしないと正確ではない情報を出力することがあります。  
これを、ハルシネーション(幻覚)といいます。  
ハルシネーションとは、人工知能(AI)が事実に基づかない情報を生成する現象のことです。
まるでAIが幻覚(=ハルシネーション)を見ているかのように、もっともらしい嘘(事実とは異なる内容)を出力するため
このように呼ばれています。  
 

AIは本当に嘘をつくのでしょうか?
と思われると思いますがそうではありません。

AIというのは与えられた情報を基に回答をします。  
与えられた情報というのは文章による質問で  
これを "プロンプト"と呼びます。

生成AIを上手く使う上でプロンプトの書き方はとても大切です。  
何が言いたいかと申しますと、プロンプトの書き方次第で "ハルネーション"  
は防げるということです!

ハルシネーションを防ぐ方法

方法は大きく分けて2つあります。

1.マルチモーダルAIを使用する

マルチモーダルとは異なる種類の情報をまとめて扱うAIのことです。
(例) 文章×画像
  文章×音楽

これは生成AIを作る側が実装するかしないかなので今回は触れません。

2.多くの情報を参照する

単純に多くの条件を追加して質問するということです。
正しくは、正しい回答をするように仕向けるということです。
今回は2を実験してみたものをまとめました。

生成AI X(仮)を用いて実験 #1

では、実験を始めましょう!  
まずは、生成AI : X(仮)を使用して「村山の戦い」について質問します。  
これは実際に存在するものではなく、私がてきとうに考えたものです。


Xの回答  
村山の戦い(むらやまのたたかい)は、日本の歴史における戦国時代に起きた戦いの一つです。この戦いは、戦国時代の戦国大名である武田信玄と上杉謙信の間で行われました。


※著作権的に心配で文面のみとさせていただくことをご了承下さい。

プロンプトの書き方

上記に結果の通り、存在しない嘘をさもあるかのように  
述べています。これでは、信じてしまいそうです。  
では、今度はプロンプトの書き方を工夫しましょう。  
その書き方とは、  
#命令書  #制約条件  #思考回路  #入力文   
の4つに分けて詳しく条件を書くというものです。  
これは、下の方の書き方を参考にしました。リンクからご覧ください

命令書には、人物を作り上げるような文章を書きます。  
これは、私たちは質問者であなたは回答者です。  
という状況を認識させるための物です。  
こうすることで、より正確な回答が返ってきます。

生成AI X(仮)を用いて実験 #2(改良)

では、これを基にもう一度生成してみましょう!

#命令書 :  
あなたは、素晴らしい歴史学者です。以下の制約条件と入力文をもとに、 最高の要約を出力してください。このタスクで最高の結果を出すために、追加の情報が必要な場合は、質問をしてください。  

#制約条件 :  
・文字数は500文字程度。  
・私の入力文の内容が架空の言葉であるか、検索してもない場合は教えてください  
・数値を必ず用いる。  
・重要なキーワードを取り残さない。  
・文章を簡潔に。  
・入力文の内容と一語一句同じでない情報を基に回答しないでください  
#思考回路 :  
・できるだけデータ(数値)を表示しながら文章を作成する。  
・可能な限り表を作成する。  
・出力文を作成したらアンケートを実施して出力文を作成するプロセスを改善する。  

#入力文 :村山の戦いについて教えてください


X :回答  
村山の戦いは、応安元年(1368年)に起きた武州平一揆に参加した村山党が敗れた戦闘です。この戦いにより、村山党は衰退しました。村山党は武蔵七党の一つであり、平頼任を祖とする武士団です。彼らは板東平氏の一門であり、平安時代末期から源氏を棟梁としており、源頼朝や新田義貞の挙兵にも参戦していました。しかし、南北朝の争乱の後、関東管領上杉氏によって勢力を削がれ、村山党は衰退していくこととなりました。村山党の当主である村山土佐守義光は、戦国時代に活躍しましたが、天文15年(1546年)の河越城の戦いで北条氏康の勝利により、北条氏に鞍替えしました。村山郷の領主として村山城を築いたものの、天正18年(1590年)に北条氏が滅亡し、村山氏は帰農することとなりました。  
 



思ったような結果が得られませんでした。なぜでしょうか?

理由は、Xは与えられた情報だけを基に回答をするからです。  
では、どうしろというのだ!!   
おそらく、他にもいくつか対策があると思われますが、  
私が考えた対策を1つお教えします!

本題

  異なる生成AIを試してみる! というものです。
「え?生成AIってそんなにいっぱいあるの!?」  
と驚くかもしれませんがあります。

その中でも、プロンプトの内容からだけでなく"検索エンジン"の  
情報も基に回答してくれる生成AI: Y(仮)を使用しました。

解決策の結論から述べますと、  
検索エンジンで全く同じ内容の物がなかったら  
生成AI : 「そんなものはない!」  
というプロンプトを書いてしまおう! 

という事です。

では、下のようにテーマは同じで  
プロンプトを工夫してみました。

#命令書 :  
あなたは、素晴らしい歴史学者です。以下の制約条件と入力文をもとに、 最高の要約を出力してください。このタスクで最高の結果を出すために、追加の情報が必要な場合は、質問をしてください。

#制約条件 :  
・文字数は500文字程度。  
・私の入力文の内容が架空の言葉であるか、検索してもない場合は教えてください  
・数値を必ず用いる。  
・重要なキーワードを取り残さない。  
・文章を簡潔に。  
・入力文の" "の中の内容と一語一句同じでない情報を基に回答しないでください  
・具体的な情報がない場合は存在しない用語とし存在しませんと回答してください


#思考回路 :  
・できるだけデータ(数値)を表示しながら文章を作成する。  
・可能な限り表を作成する。  
・出力文を作成したらアンケートを実施して出力文を作成するプロセスを改善する。

#入力文 :"村山の戦い"について教えてください

 何が変わったかというと、

 制約条件に  
・入力文の" "の中の内容と一語一句同じでない情報を基に回答しないでください  
・具体的な情報がない場合は存在しない用語とし存在しませんと回答してください  
という条件を加えて検索エンジンをフルに活用しました

すると….  
 


Y : 回答  
「村山の戦い」という用語について、架空の言葉や検索結果はありません。

 したがって、この用語に関する具体的な情報は存在しないと言えます。


最後に

ハルネーションの回避に成功しました!  
このように、多くの情報を参照することで、  
間違いが減るという事です!

今回はAIの問題であるハルネーションを回避する方法の  
研究結果をまとめました!  
これを読んだ人が正しくかつ楽しく生成AIを  
使用してくださると嬉しいです!

では、よい生成AIライフを!