ハッカソン参加時の備忘録 ～ 第８回：【Python】生成AIについて、学んでみよう ～

こんにちは。ITエンジニアのきゅうです。

ハッカソンに参加して思うことは、生成AIを利用したアプリを創るチームがかなり多いということ。
当方もこれまで４回ハッカソンに参加したが、その内２回生成AIを活用したアプリを作成しました。

ということで、サクッとハッカソンで生成AIを使えるように備忘録に残しておきたいと思います。
ただ、生成AIはかなり奥が深く、関りがなければ本当に全く聞いたことがない知識ばかりとなる為、備忘録の前に、今回は簡単な生成AIのナレッジ記事としたいと思います。
（ですので、事前に生成AIのナレッジをお持ちの方は、本記事はスキップしていただければと思います。）

# １．概要
2023年にChat-GPTが普及して一躍脚光を浴び続けている生成AIですが、生成AIの中でも注目を浴びているのが『大規模言語モデル（LLM）』を活用したものです。
一般的にはOpenAI社が発表している『Chat-GPT（GPT-3.5）』やその上位互換である『Chat-GPT Plus（GPT-4.0）』が有名ですが、Microsoftが出資しているだけあって、AWSでも連携はできますが、MicrosoftのクラウドであるAzureの方が使ってみた感じ『親和性』は高いかもしれません。

では、AWSにはLLMを用いた生成AIはないのでしょうか。
勿論あります！！
それが今回扱う『Bedrock』になります。

当方が以前参加したハッカソンで、AWSの日本法人の社員さんがテクニカルサポートに入っていたので、その時に聞いてみたのですが、基本的にはChat-GPTで出来ることはBedrockでもできるし、2020年頃のデータで学習したChat-GPTよりも学習データは新しいそうです。
それはそうでしょう！！
Bedrockは2023年4月に発表されたのですから！！

# ２．生成AIについて
上記でも簡単に記載させて頂きましたが、生成AIには学習データ期間というものがあります。
学習データ期間というのはその名の通り、AIが学習している期間であって、生成AIそれぞれの学習データ期間は以下となります。
* Chat-GPT（GPT-3.5）：2021年9月まで
* Chat-GPT Plus（GPT-4.0）：2023年4月まで
* Amazon Bedrock　：　2023年4月まで

Chat-GPT（GPT-3.5）だけが2021年9月までのデータしか学習できておりません。
ということは、皆さまも若干忘れかけているかもしれないですが、久保選手や堂安選手が躍動したサッカー・ワールドカップ2022のデータは学習していないため、それを踏まえた回答は出来ないのです。
※ちなみにWBC2023は2023年3月に開催されている為、本来であれば学習対象に入っているはずですが、入っていないかもしれず、入っていなくても誤差の範囲と言えましょう。。。

ということで、最新の時事ネタを学習した生成AIを使いたいのであれば『Chat-GPT Plus（GPT-4.0）』か『Amazon Bedrock』となりますが、『Chat-GPT Plus（GPT-4.0）』は有料となりますので、ハッカソンでは『Amazon Bedrock』を使うことをオススメしております。
※また、OpenAI社が新しいGPTシリーズを作ると思いますので、そうなった場合事情が変わることをご了承ください。

## ２．１．Amazon Bedrockの基盤モデルについて
『Amazon Bedrock』は大手AI企業の様々な基盤モデルと連携することが出来、使用用途に併せ、またお手軽に基盤モデルを変更することができます。
2024年3月現在使用できる基盤モデルについて、紹介します。
* Amazon社の『Titan』
* Meta社の『Llama 2』
* Anthropic(アンスロピック)社の『Claude(クロード)』
* AI21 Labs社の『Jurassic-2』
* Stability AI社の『Stable Diffusion』
* Cohere社の『Command and Embed』

それでは簡単に各基盤モデルを見ていきましょう。

## ２．２．Amazon社の『Titan』
<table>
  <thead>
  <tr>
    <th>カテゴリ</th> <th>詳細説明</th>
  </tr>
  </thead>
  <tr>
    <td> ユースケース </td> 
    <td>・テキスト生成、<br>・要約、<br>・セマンティック検索、<br>・画像生成、<br>・検索用拡張生成 (RAG)</td>
  </tr>
  <tr>
    <td> 最大トークン </td> <td> 8K </td>
  </tr>
  <tr>
    <td> 日本語対応 </td> <td> あり </td>
  </tr>
</table>

## ２．３．Meta社の『Llama 2』
<table>
  <thead>
  <tr>
    <th>カテゴリ</th> <th>詳細説明</th>
  </tr>
  </thead>
  <tr>
    <td> ユースケース </td> 
    <td>・対話</td>
  </tr>
  <tr>
    <td> 最大トークン </td> <td> 4K </td>
  </tr>
  <tr>
    <td> 日本語対応 </td> <td> なし </td>
  </tr>
</table>

## ２．４．Anthropic(アンスロピック)社の『Claude(クロード)』
<table>
  <thead>
  <tr>
    <th>カテゴリ</th> <th>詳細説明</th>
  </tr>
  </thead>
  <tr>
    <td> ユースケース </td> 
    <td>・対話、<br>・要約＆分類、<br>・コーディング</td>
  </tr>
  <tr>
    <td> 最大トークン </td> <td> 200K </td>
  </tr>
  <tr>
    <td> 日本語対応 </td> <td> 未定 </td>
  </tr>
</table>

## ２．５．AI21 Labs社の『Jurassic-2』
<table>
  <thead>
  <tr>
    <th>カテゴリ</th> <th>詳細説明</th>
  </tr>
  </thead>
  <tr>
    <td> ユースケース </td> 
    <td>・テキスト生成、<br>・質疑応答、<br>・要約</td>
  </tr>
  <tr>
    <td> 最大トークン </td> <td> 8,192 </td>
  </tr>
  <tr>
    <td> 日本語対応 </td> <td> なし </td>
  </tr>
</table>

## ２．６．Stability AI社の『Stable Diffusion』
<table>
  <thead>
  <tr>
    <th>カテゴリ</th> <th>詳細説明</th>
  </tr>
  </thead>
  <tr>
    <td> ユースケース </td> 
    <td>・画像生成</td>
  </tr>
  <tr>
    <td> 最大トークン </td> <td> 77 </td>
  </tr>
  <tr>
    <td> 日本語対応 </td> <td> なし </td>
  </tr>
</table>

## ２．７．Cohere社の『Command and Embed』
<table>
  <thead>
  <tr>
    <th>カテゴリ</th> <th>詳細説明</th>
  </tr>
  </thead>
  <tr>
    <td> ユースケース </td> 
    <td>・テキスト生成、<br>・要約、<br>・検索、<br>・クラスタリング、<br>・分類、<br>・検索用拡張生成 (RAG)</td>
  </tr>
  <tr>
    <td> 最大トークン </td> <td> 4K </td>
  </tr>
  <tr>
    <td> 日本語対応 </td> <td> 英語 </td>
  </tr>
</table>


# ３．生成AIに追加データを学習させる方法
ちなみに生成AIは、上記の学習データ期間までのインターネットの情報を基に学習しているので、学習データ期間を過ぎた情報や、個人や企業が独自に保有する情報は学習対象に入っておりません。ですので、それらを考慮した回答は生成AIから返ってくることはありません。

では、学習データ期間以降のデータや、企業独自のデータを生成AIに学習させることはできないのでしょうか？
勿論できます！！
しかも、大きく３つのやり方があります！！
ということで、ハッカソンではそれらの違いを理解して、サクッと独自学習の生成AIアプリを創っちゃいましょう！！

以下が、その３つのやり方です。

* ファインチューニング
* 継続的な事前学習
* RAG（Retrieval-Augmented Generation：検索拡張生成）

ここからは、上記三つの内容について、詳しく見ていきましょう！

## ３．１．ファインチューニング
Chat-GPTやBedrockのように事前学習済みのモデルに対して、追加で学習させることをファインチューニングと言います。
ただ、今回は『継続的な事前学習』と区別するために、ラベルありの学習データを使ってLLMをさらにトレーニングすることとしたいと思います。

対応している基盤モデルは、Meta社の『Llama 2』、Cohere社の『Command and Embed』、Amazon社の『Titan』の３つ。


# ３．２．継続的な事前学習
こちらも『ファインチューニング』と同じく、事前学習済みのモデルに対して追加で学習ことを指すのですが、ラベルなしの学習データを使ってLLMをトレーニングすることになります。

対応している基盤モデルは、Amazon社の『Titan』のみ。


## ３．３．RAG（Retrieval-Augmented Generation：検索拡張生成）
そして、最後RAGですが、英語で書くと「Retrieval-Augmented Generation」。日本語で書くと『検索拡張生成』というだけあって、LLMが回答を⽣成する際に、ユーザーの質問⽂に応じた知識情報を参照する仕組みのことを言います。
なので、エンベディングやLangChain、ベクターストアを使って、ユーザ固有の情報を格納し、回答生成する際にそれらの情報も考慮して回答を生成するという意味では、こちらが一番やりやすいかもしれない。

対応しているモデルはAmazon社の『Titan』、Cohere社の『Command and Embed』の2つになります。


# ４．まとめ
はい、ということで、生成AIについて、簡単にナレッジを紹介してきましたが、ここでまとめさせていただきます！！

* Chat-GPTに出来ることは、『Amazon Bedrock』にも出来る
* 『Amazon Bedrock』はChat-GPT Plusと同じく2023年4月までのデータを学習している
* 『Amazon Bedrock』には様々なAI大手会社の基盤モデルと簡単に連携できる
* その中でもAmazon社の『Titan』の基盤モデルは、AIで行いたいユースケースの大抵のことが出来る
* 『Titan』だけは３つ全ての追加学習に対応している

これだけ見ると、『Amazon Bedrock』の『Titan』を使うのが一番スマートのような気がしますね！！
ということで、次回はLambdaからBedrock（Titan）を呼び出して表示するような備忘録としたいと思います。

はい、ということで、今回の備忘録はここまで！！
最後までお読みいただきありがとうございました。