🗞️

今週の生成AI情報まとめ(8/5~8/11)

2024/08/24に公開

こんにちは、ナウキャストでLLMエンジニアをしているRyotaroです。
8/5~8/11で収集した生成AIに関連する情報をまとめています。

※注意事項

内容としては自分が前の週に収集した生成AIの記事やXでの投稿・論文が中心になるのと、自分のアンテナに引っかかった順なので、多少古い日付のものを紹介する場合があります

それでは行きましょう

欧州AI規制「EU AI Act」

PwC Japanグループは7月31日、欧州連合(EU)によるAI規制法案「EU AI Act」の対応支援サービスを開始した。規制を受けるかの判断や実際の対応など、法的リスク回避を支援するという。

EU AI Actとは

EUのAI Act(AI規制法)は、人工知能(AI)の開発と利用に関する包括的な規制を定めた法律で、2023年6月に欧州議会で採択された。 「基本的権利に対する明らかなリスク」をもたらすAIアプリは禁止される。たとえば、生体認証データの処理を伴う一部のアプリは禁止される。こうしたツールやLLMの開発者は、モデルのトレーニングに使っているデータについて透明性を確保し、EU著作権法に準拠する必要がある。

欧州域内市場担当委員ティエリー・ブルトン氏は、Xに「欧州は今やAIの世界標準設定者となった」とポストしたらしい。徐々にAIから人権を守る活動が本格化してきてる。日本はAIに対する方が緩い方だからこそ発展してるところがあるが、EUや中国などは厳しくて、中国ではOpenAIへのアクセスが禁止されて国内LLMの開発が逆に活発になっているみたいなことも起きている。

⁠参考資料

The Power of Noise: Redefining Retrieval for RAG Systems

論文紹介:[2401.14887] The Power of Noise: Redefining Retrieval for RAG Systems

この論文は2024/01/26のもので、ちょっと古いけど内容が面白くて、LLMに対するプロンプトで「無関係な」文書を混ぜたほうが出力精度が上がる可能性がRAGシステムの検証で示唆されたそう。

通常RAGシステムではRetrieverによってタスクに関係する文書を取り出してLLMにコンテキストとして与えるのが一般的だが、実験では、あえて無関係な文書も「ノイズ」として乗せる実験を行なっている。

⁠研究の目的

  1. リトリバーモジュールのパラメータ(文書の位置やタイプ、数など)がLLMの生成結果に与える影響を分析する
  2. RAGシステムにおけるリトリバーモジュールの重要性全体を検証する

⁠使ったモデル

  • Llama2:70億パラメーター、4096トークンのコンテキストウィンドウ、マルチクエリアテンション
  • Falcon:70億パラメーター、2048トークンのコンテキスト長、マルチクエリアテンション
  • Phi-2:27億パラメーター、2048トークンのコンテキストウィンドウ
  • MPT:70億パラメーター、2048トークンのコンテキスト長、ALiBiアテンション

⁠実験結果

コンテキストに含まれる関連文書の数が”増える”につれて、テストされた全てのLLMで精度が徐々に”劣化する”ことが明確にわかった。場合によっては精度が67%以上悪化していて、さらに、関連文書をたった1つ加えるだけで精度が急激に低下してしまう。

関連文書が増えることで、関連情報と関連情報を区別することにモデルが苦労してしまうという考察がある。

また、ゴールド文書(正解を含む文章)がクエリの近くにあるときは精度が高く、ゴールド文書が最も遠いときは低く、ゴールド文書がコンテキストの中央に置かれているときは最も低くなることも検証された。入力されるテキスト内におけるコンテキスト文書の位置も敏感に影響してしまうらしい。

これにたいしては、リランキングとかで対処するのがよいのか……試したい

もうひとつノイズを入れるとどうなるかの実験が行われた。その結果ランダムな無関係文書がコンテキストに導入されたときに、パフォーマンスがどう変化するかという内容です。

モデルによって挙動は細かく異なるが、予想に反して、ノイズによって精度が悪化することはなく、むしろ良くなってしまう現象が確認された。

Llama2とPhi-2は、ノイズがクエリから最も遠い位置に導入されたときにパフォーマンス向上を示したが、ノイズが中間地点にあるとき、パフォーマンスは低下しました。つまり、Llama2とPhi-2がクエリから遠いノイズを効果的に処理できるものの、ノイズが近づくにつれて無関係な情報をふるいにかける能力が減少することを示唆している。

MPTモデルは独特の反応を示し、ノイズの位置によらずパフォーマンスが向上した。

Falconモデルは特殊で、ノイズの位置がクエリよりも遠いよりむしろ近い(中間地点にある)ほうが精度が良いという結果が出た。

⁠結論は以下の通り

  • 関連情報は、クエリの近くに配置されるべき。
  • ただし関連文書を無闇に追加していくことはRAGシステムにとってはパフォーマスが下がることにつながる。
  • 無関係でノイズの多い文書は、適切に配置さレることが重要。

参考資料

OpenAI Structured OutputsをAPIに導入(8/6)

OpenAIが「Jsonモード」より強力に構造化データを出力されるようにする「Structured Outputs」を導入した。

これにより従来のjsonモードだと出力が完全に保証されるものではなかったが、「Structured Outputs」を備えた新しいモデル「gpt-4o-2024-08-06」は完璧な100%のスコアを叩き出すことに成功。

⁠使い方

使い方は簡単で2通りある。

1つ目はtool経由の「Structured Outputs」は、function定義内で strict: true を設定すること。この機能は、 「gpt-4-0613」「gpt-3.5-turbo-0613」以降のツールをサポートするすべてのモデルで動作する。

2つ目はresponse formatにpydanticのクラスを指定する方法。こっちの方が実用的な気がする

from pydantic import BaseModel

from openai import OpenAI


class Step(BaseModel):
    explanation: str
    output: str


class MathResponse(BaseModel):
    steps: list[Step]
    final_answer: str


client = OpenAI()

completion = client.beta.chat.completions.parse(
    model="gpt-4o-2024-08-06",
    messages=[
        {"role": "system", "content": "You are a helpful math tutor."},
        {"role": "user", "content": "solve 8x + 31 = 2"},
    ],
    response_format=MathResponse,
)

message = completion.choices[0].message
if message.parsed:
    print(message.parsed.steps)
    print(message.parsed.final_answer)
else:
    print(message.refusal)

参考資料

AIで漫画が描ける

FramePlannerというツールを使って、コマ割りの中に漫画の絵を生成できる。しかもプロンプトや各種パラメータなどを設定できるので結構柔軟に変えられる。絵のタッチとか向きとかも。これすごい

⁠このツール自体は

⁠参考資料

RAGの精度改善手法

とてもよくまとまっている記事だったので引用。

⁠参考資料

⁠プロンプトテクニック

1. メタ認知プロンプト

  • 「メタ認知的に考えて・第三者視点で考えて」

一般的にメタ認知プロンプト=MPと呼ばれるらしい客観的な意見を得られるため、冷静な判断ができるようになる。これは結構紹介されているのを見る。

さらに、普段のプロンプトに上の「メタ認知的に考えて」と入れるだけでも出力が良くなるが、もっと具体的にメタ認知のフェーズを書くことで良い洞察が得られる。

{input_text} = [ここにテーマやトピックを入力する]

## メタ認知プロンプトのステップ

1. **テキストの解釈**
   - モデルは与えられたテキスト`{input_text}`を解釈します。

2. **初期の判断の形成**
   - `{input_text}`をもとに、モデルは初期の判断を形成します。

3. **深い内省**
   - モデルはその答えの背後にある理由を深く探求します。

4. **最終的な判断の確認**
   - モデルは最終的な判断を確認し、その理由を提供します。

5. **自己評価**
   - モデルは自身の応答に対する自信を評価します。

⁠使い道

  1. 複雑な問題解決
    例:技術的な問題、ビジネスの課題、社会的な問題など、多角的な視点や深い考察が必要な場面。
  2. 意思決定のサポート
    例:選択肢が多く、それぞれの選択肢のメリット・デメリットを考慮する必要がある場面。
  3. クリエイティブなアイディアの生成
    例:新しいプロジェクトのアイディア出しや、既存のアイディアの改善提案など。

2. クリティカルシンキングプロンプト

  • 「クリティカルシンキングの視点から考えて」

批判的な意見を得るために使えるテクニック。具体的には自分の意見や仮説が正しいかを判別するために使う感じ。

物事の批判的な面を指摘してくれるため、主観的には思いつかない「何がダメなのか?」がわかる。

私は転職者向け求人情報サイトの運営者です。
会員登録機能を刷新する上で下記の仮説を立てています。

■仮説
「求人情報サイトに会員登録する場合、なるべく入力が必要な項目が少ない方が良い」

この仮説に対して、クリティカルシンキングの要領で下記の観点から批判的な指摘をしてください。
・そもそもの課題は合っているか?
・他の可能性が検討できているか?
・事実と意見を混同していないか?
・曖昧になっている部分がないか?
・十分に考え抜けているか?

また、指摘を踏まえたより良い仮説を提案してください。

3. 未来志向プロンプト

  • 「未来志向で考えて」

将来の可能性を含めた回答を得ることができる。自身が想像できていなかったことを提案してくれるためおすすめ。

4. 中立思考プロンプト

  • 「中立的な立場から考えて」

自分の意見を中立的な立場から修正してくれる。

5. 水平思考プロンプト

  • 「水平思考で考えて」

通常とは異なる創造的なアイディアを引き出すことができる。

6. 抽象→具体プロンプト

  • 「抽象的に考えて」「〇〇について具体的に考えて」

抽象の視点から洗い出した論点を具体化していくことで、出力内容が具体的で鮮明になる。

このテクニックは結構上級者が使うやつで、プロンプトを作る時とか、他のケースに応用したい時に使う。

⁠参考資料

Discussion