Skip to content

トップ10のオープンソースChatGPTの代替品:会話型AI領域をつなぐ

チャットボットはビジネスが顧客とのやり取りを革新しました。OpenAIが開発した最新のGPT-4は、この分野の主要なプレイヤーです。しかし、オープンソースではないため、開発者が結果を再現したり、GPT-4に似たチャットボットを開発することが制限されます。

この空白を埋めるために、オープンソースコミュニティは、GPT-4にほぼ同等のパフォーマンスと機能を提供しながら、より少ない計算能力を必要とする代替品を提供し始めています。この記事では、次のAIプロジェクトで利用できるトップ10のオープンソースChatGPTの代替品を紹介することを目的としています。

1. ColossalChat

HPC AI Tech (opens in a new tab)が開発したColossalChatは、LLaMaモデルとPyTorch AIフレームワークに基づいたChatGPTライクなモデルを再現するオープンソースプロジェクトです。これは、完全な強化学習プロセス「Reinforcement Learning from Human Feedback (RLHF)」を含む最初の実用的なオープンソースプロジェクトであり、ChatGPTの技術的なルートに最も近いプロジェクトです。

ColossalChatは、PyTorchの柔軟で効率的なディープラーニングフレームワークを利用し、迅速なプロトタイピング、他のライブラリとのシームレスな統合、ハイパフォーマンスでユーザーフレンドリーな会話型AI体験を提供します。

ColossalChatの主な機能の1つは、英語と中国語の両方の約10万個のQ&Aペアからなるバイリンガルデータセットです。このデータセットは、ソーシャルメディアプラットフォーム上の実生活の質問シナリオから収集、クリーン化されたもので、シードデータセットとして機能します。自己指導技術を使用して拡張されたこの高品質のデータにより、ColossalChatはより良い対話インタラクションを実現し、中国語もサポートします。

ColossalChatは、3段階のRLHFアルゴリズム再現プロセスに従います。最初の段階は、監視指導微調整を行います。第2段階は報酬モデルのトレーニング、第3段階は強化学習アルゴリズムを使用します。この再生プロセスにより、生成されたコンテンツと人間の価値観が一致するようになります。

このプロジェクトは、AI大規模モデル開発システムのColossal-AIによってサポートされており、デフォルトのPyTorch機能に基づいてAI大規模モデルトレーニングとインファレンスを効率的に迅速に展開できます。このインフラストラクチャは基盤的なサポートを提供し、トレーニングスピードを大幅に向上させます。

以下は、各RLHFステージでColossalChatをトレーニングする方法の例です。

# 4-GPUサーバーでのトレーニング
colossalai run — nproc_per_node=4 train_sft.py \
— pretrain “/path/to/LLaMa-7B/\
— model ‘llama’ \
— strategy colossalai_zero2 \
— log_interval 10 \
— save_path /path/to/Coati-7B \
— dataset /path/to/data.json \
— batch_size 4 \
— accimulation_steps 8 \
— lr 2e-5
 
# 4-GPUサーバーでのトレーニング
colossalai run — nproc_per_node=4 train_reward_model.py \
— pretrain “/path/to/LLaMa-7B/\
— model ‘llama’ \
— strategy colossalai_zero2 \
— dataset /path/to/datasets
 
# 8-GPUサーバーでのトレーニング
colossalai run — nproc_per_node
 
=8 train_prompts.py prompts.csv \
— strategy colossalai_zero2 \
— pretrain “/path/to/Coati-7B” \
— model ‘llama’ \
— pretrain_dataset /path/to/dataset

完全なコードは、LLaMaモデルに基づいてChatGPTを複製するためのオープンソースであり、開発者と研究者の両方がアクセスできます。

2. Alpaca-LoRA

Alpaca-LoRA (opens in a new tab)は、LoRA(低ランク適応)技術を使用することで、LLaMaなどの言語モデルを微調整するための非常に効率的なツールのようです。

LoRAは、消費者ハードウェアと互換性があり、より高速で少ないメモリ消費量を提供し、ギガバイトではなくメガバイトの出力サイズが小さいため、他の微調整方法よりも多くの利点があります。さらに、実行時に複数の微調整モデルを組み合わせることができます。

PEFT(Python Easy Fine-Tuning)ライブラリを実装するAlpaca-LoRAは、LoRAを使用してトランスフォーマーベースの言語モデルを微調整できるようにします。これにより、効率的かつ安価にモデルを微調整することができ、可能性のある合成出力を実現します。

Alpaca-LoRAを使用してLLaMaを微調整するステップは次のとおりです。

前提条件

開始する前に、GPUマシンにアクセスできることを確認してください。 LoRAの効率性のため、NVIDIA T4などの低スペックGPUまたは4090などのコンシューマGPUでも適しています。また、LLaMaの重みはまだ公開されていないため、Meta Researchフォームからアクセスを申請する必要があります。

ステップ1:Alpaca-LoRAリポジトリのクローン

マシン学習モデルをコンテナにパッケージ化するために使用されるツールであるCogのサポートが含まれるAlpaca-LoRAリポジトリをクローンしてください。 次のコマンドを使用します。

git clone https://github.com/daanelson/alpaca-lora
cd alpaca-lora

ステップ2:Cogのインストール

次に、次のコマンドでCogをインストールします。

sudo curl -o /usr/local/bin/cog -L "https://github.com/replicate/cog/releases/latest/download/cog_$(uname -s)_$(uname -m)"
sudo chmod +x /usr/local/bin/cog

ステップ3:LLaMaの重みを取得する

ダウンロードした重みを「unconverted-weights」という名前のフォルダに配置してください。ディレクトリ構造は次のようになります。

unconverted-weights
├── 7B
│   ├── checklist.chk
│   ├── consolidated.00.pth
│   └── params.json
├── tokenizer.model
└── tokenizer_checklist.chk

次のコマンドを使用して、PyTorchチェックポイントからトランスフォーマー互換形式に重みを変換してください。

cog run python -m transformers.models.llama.convert_llama_weights_to_hf \
  --input_dir unconverted-weights \
  --model_size 7B \
  --output_dir weights

最終的なディレクトリ構造は以下のようになります。

weights
├── llama-7b### ステップ 4:モデルの微調整
より大きなメモリを持つGPUがある場合は、「finetune.py」で `MICRO_BATCH_SIZE` を 32 または 64 に増やすことができます。また、自分自身の命令調整データセットがある場合は、「finetune.py」の `DATA_PATH` を編集して、自分自身のデータセットを指すようにしてください。それが `alpaca_data_cleaned.json` と同じ形式であることを確認してください。

微調整スクリプトを実行します。

```bash
cog run python finetune.py

ファインチューニングには、40GBのA100 GPUでは約3.5時間かかる場合があります。処理能力の低いGPUでは、より長時間かかる場合があります。

ステップ5:Cogを使用してモデルを実行する

最後に、Cogを使用してモデルを実行できます。例えば:

$ cog predict -i prompt="Tell me something about alpacas."

応答は、あなたのLLaMaモデルの正常な微調整を示すアルパカに関する情報提供です。

3. Vicuna-13B

FastChatの一部であるVicunaは、GPTモデルに似たトランスフォーマーをベースとしたアーキテクチャを利用し、ShareGPT.comの会話用データセットでファインチューニングされています。ChatGPTのパフォーマンスの約90%を提供し、アクセス可能でコスト効果の高い代替案を提供します。パフォーマンスが低いにもかかわらず、Vicunaは優れたカスタマイズ性と幅広いタスクへの適応性によって際立っています。

詳細については、「Vicuna-13B」の詳細記事を参照してください。

4. GPT4ALL

Nomic AIチームのGPT4ALLは、ワード問題、コード、ストーリー、イラスト、およびマルチターンダイアログなどの幅広いキュレーションされたデータを使用して構築されたチャットボットを提供しています。GPT-4のように低レイテンシのMLアクセラレーションにLLaMaを利用しますが、GPT4ALLの強みは、多様なデータセットと様々なタスクへの適応性です。

GPT4ALLの例:

詳細については、「GPT4ALL」の詳細記事を参照してください。

5. Raven RWKV

RWKV (opens in a new tab)(Raven RWKV) は、私が認識する限り、2021年9月の私の知識のカットオフ時点で、比較的新しいモデルです。ただし、提供された情報に基づいて、使用方法とコードスニペットの一般的なステップバイステップガイドを以下に示します。

まず、必要なパッケージをインストールする必要があります。RWKVパッケージはPyPIにホストされており、pipを使用してインストールすることができます。

pip install rwkv

次に、パッケージからモデルをインポートする必要があります。

from rwkv.model import RWKV

次に、モデルをインスタンス化します。これには、モデルパスと使用するストラテジーを指定する必要があります。

model = RWKV(model='/path/to/your/model', strategy='cuda fp16')
```これは、推論に使用できるモデルのインスタンスを生成します。
 
次に、モデルの `forward` メソッドを使用して推論を行います。このメソッドには、入力トークンと状態の2つのパラメータが必要です。初回実行では、状態を `None` に設定できます。
 
```python
out, state = model.forward([187, 510, 1563, 310, 247], None)

次に、モデルの出力を印刷できます。

print(out.detach().cpu().numpy())

その後、次の実行では、前回の実行から状態を提供できます。

out, state = model.forward([187, 510], None)
out, state = model.forward([1563], state)
out, state = model.forward([310, 247], state)
print(out.detach().cpu().numpy())

このステップバイステップのガイドは、推論のためのRWKVモデルの基本的な使用方法を示しています。タスク、使用されている特定のモデルの重み、および他の要因によって、特定のステップは異なる場合があることに注意してください。最も正確な情報については、公式ドキュメントを参照してください。

また、このモデルは比較的新しいため、2021年9月の私の知識限界以降、さらなる開発や改善が行われている可能性があります。最新かつ関連性のある文献やコードベースを参照して、最新かつ正確な情報を確認してください。

6. OpenChatKit

OpenChatKit (opens in a new tab)は、オープンソースのChatGPTの代替として位置付けられ、チャットボットアプリケーション開発の完全なツールキットを提供します。構造面でGPTモデルに似ていますが、OpenChatKitは、指示に基づく大規模言語モデルのトレーニングを可能にし、ボットの応答の拡張可能な検索システムを提供することでカスタマイズ性を高めています。

###手順1:セットアップ

必要なシステム要件と依存関係があることを確認してください。Git LFS、Miniconda、PyTorchなどが必要です。提供された environment.yml ファイルに必要な環境の仕様が記載されています。

まず、Git LFSとMinicondaをインストールし、次のように環境を設定します。

git lfs install
conda install mamba -n base -c conda-forge
mamba env create -f environment.yml 
conda activate OpenChatKit

###手順2:Pythia-Chat-Base-7Bでチャット

モデルと対話するには、inference ディレクトリにある bot.py スクリプトを使用できます。

python inference/bot.py --model togethercomputer/Pythia-Chat-Base-7B

その後、提供されたコマンドラインプロンプトにテキストを入力することで、モデルとチャットすることができます。

###手順3:Pythia-Chat-Base-7Bの再現

自分でモデルをトレーニングする場合は、トレーニングデータとベースモデルをダウンロードする必要があります。```bash python data/OIG/prepare.py python pretrained/Pythia-6.9B-deduped/prepare.py


その後、提供されたシェルスクリプトを使用してモデルをファインチューニングできます。

```bash
bash training/finetune_Pythia-Chat-Base-7B.sh

トレーニング後、変換ツールを使用してモデルをHuggingface形式に変換します。

mkdir huggingface_models
python tools/convert_to_hf_gptneox.py \
   --config-name EleutherAI/pythia-6.9b-deduped \
   --ckpt-path model_ckpts/Pythia-Chat-Base-7B/checkpoint_100 \
   --save-path huggingface_models/Pythia-Chat-Base-7B \
   --n-stages 4 \
   --n-layer-per-stage 8 \
   --fp16

model_ckpts/Pythia-Chat-Base-7B/checkpoint_100を自分のモデルチェックポイントのパスに置き換えます。

ステップ4:新しいモデルのテスト:

モデルをファインチューニングした後は、 bot.pyスクリプトを使用してチャットできます。

python inference/bot.py --model ./huggingface_models/Pythia-Chat-Base-7B

ステップ5。監視:

トレーニングの監視には、OpenChatKitはloguruおよびWeights&Biasesの両方をサポートしています。

ステップ6. 実験:検索増強モデル

OpenChatKitには、検索増強モデルの実験的機能もあります。これは、WikipediaのFaissインデックスをクエリすることによって実装されます。次のように実行できます。

python data/wikipedia-3sentence-level-retrieval-index/prepare.py
python inference/bot.py --retrieval

詳細で正確な情報については、公式のOpenChatKitドキュメントを参照してください。これらのステップは、提供された情報に基づいています。

7. OPT

OPT (opens in a new tab) (Open Pre-trained Transformer)言語モデルは、ゼロショット学習、一部の学習、ステレオタイプバイアス分析において優れた能力を示していますが、ChatGPTの品質には匹敵しません。これらのモデルは、GPTモデルのアプローチと同様に、左から右にテキストを自己回帰的に生成するデコーダーのみのトランスフォーマーです。

各タスクでOPTモデルを使用する方法の詳細なステップバイステップの説明を以下に示します。

ステップ1:テキスト生成

テキスト生成にOPTモデルを使用するには、まず、パイプラインにロードする必要があります。以下は、Hugging Faceのtransformersライブラリを使用した例です:

from transformers import pipeline
 
generator = pipeline('text-generation', model="facebook/opt-350m")
 
# パイプラインを設定したら、以下のようにテキストを生成できます
print(generator("こんにちは、私は", max_length=50)[0]['generated_text'])
 
# 「こんにちは、私は」と始まる、最大50トークンまでのテキストを生成し、それを印刷する

ステップ 2: ゼロショット学習

ゼロショット学習は、特定のトレーニングを受けたタスクに適用することなく、モデルを適用することを指します。たとえば、さらなるトレーニングを必要とせずに、テキスト分類に使用できます

classifier = pipeline("text-classification", model="facebook/opt-350m")
print(classifier("晴れた日が好きです。", ["天気", "感情"]))

晴れた日が好きです。」という文を、「天気」と「感情」の観点で分類して、確率を出力する

ステップ 3: 少数ショットの学習

フィューショット学習は、少数の例を提供して、モデルがタスクを理解するのを支援することを指します。例えば、英語からフランス語への翻訳をモデルで行う場合、いくつかの例の翻訳が提供されます。

translator = pipeline('translation', model="facebook/opt-350m")
 
examples = [
    {"English": "こんにちは", "French": "Bonjour"},
    {"English": "さようなら", "French": "Au revoir"},
]
 
translator.set_examples(examples)
 
print(translator("おはようございます"))

例は簡略化されていますので、実際の使用では多少複雑になり、より洗練された設定が必要になる可能性があることに注意してください。

ステップ 4: 固定観念の分析

OPTモデルを使用して、モデルが生成したテキストのステレオタイプなバイアスを分析することができます。下記は例です。

from transformers import pipeline
 
generator = pipeline('text-generation', model="facebook/opt-350m")
 
female_prompt = "The woman worked as a"
male_prompt = "The man worked as a"
 
female_output = generator(female_prompt, num_return_sequences=5)
male_output = generator(male_prompt, num_return_sequences=5)
 
print("Female prompt outputs:")
for output in female_output:
    print(output['generated_text'])
 
print("Male prompt outputs:")
for output in male_output:
    print(output['generated_text'])

このコードは、女性のプロンプトに対して生成されたシーケンスを5つ、男性のプロンプトに対して生成されたシーケンスを5つプリントし、潜在的な偏りを分析するためのものです。ただし、このような分析は複雑なタスクであり、高度な自然言語処理(NLP)技術が必要な場合があります。

覚えておいてください。Hugging Face Model Hubに特化したOPTモデルによっては、モデル名を調整する必要がある場合があります。また、2021年9月の私の知識レベルによると、translators.set_examples(examples)のような関数はTransformersライブラリに存在しない場合があります。これは概念的な例を示すために与えられました。

8. Flan-T5-XXL

Flan-T5-XXL (opens in a new tab) は、膨大なチュートリアルのデータセットを集積してトレーニングされたファインチューニングされたT5モデルのコレクションです。これらのモデルは、GPTモデルのようなtransformerアーキテクチャに基づくわけではありませんが、PaLM、T5、およびU-PaLMといったさまざまなモデルクラスで著しく改良されたパフォーマンスを発揮します。

Flan-T5-XXLを使用するには、以下のサンプル使用方法に従うことができます。

# 適切なデータフローを確保するために、Flan-T5-XXLリポジトリをクローンし、必要なインストールを済ませた前提です。
 
from flan_t5_xx1 import FlanT5XXL
 
# Flan-T5-XXLモデルを初期化する
model = FlanT5XXL()
 
# 使い方例: タスクに対する指示を生成する
task_input = "How to bake a cake"
instructions = model.generate_instructions(task_input)
print(instructions)

この例では、Flan-T5-XXLモデルを使用して、与えられたタスクに対する指示を生成する方法を示しています。 task_input 変数にはタスクの説明が含まれ、 generate_instructions() メソッドが対応する指示を生成します。

上記のコード・スニペットは、Flan-T5-XXLリポジトリがすでにクローンされ、必要な依存関係が設定されていることを前提としています。

Flan-T5-XXLは、言語タスクに焦点を当てたシーケンスモデルのトレーニングと評価を実施するための、モジュラーやコンポジションフレームワークを提供します。JAXとFlaxで実装され、T5コードベースに基づくものです。Flan-T5-XXLは、高い構成可能性とセルフサービス機能を提供し、研究者が異なるスケールでシーケンスモデルをトレーニングおよび評価できるようにします。

利用可能な機能とそれらを効果的に使用する方法の包括的な理解のために、Flan-T5-XXLが提供する公式ドキュメントと例を参照することが重要です。

Flan-T5-XXLの使用例は、次のようになります。

from flan import FlanT5
 
# モデルを初期化する
flan_model = FlanT5()
 
# 応答を生成する
response = flan_model.generate("Translate this text to French.")
print(response)

9. Baize

Baize (opens in a new tab)は、LoRAでトレーニングされたオープンソースのチャットモデルです。ChatGPTからの10万個の自己生成ダイアログを組み込み、Alpacaのデータを利用してパフォーマンスを向上させています。7B、13B、30Bなどの異なるサイズのモデルもリリースされています。

FastchatのCLIおよびAPIを使用してBaizeと対話するには、以下の手順に従ってください。

  1. Fastchatをインストールします。
pip install git+https://github.com/huggingface/peft.git
pip install git+https://github.com/lm-sys/FastChat.git
  1. BaizeのLoRAウェイトをマージします(V1モデルのみ)。
python3 -m fastchat.model.apply_lora --base huggyllama/llama-7b --target ./model_weights/baize-7b --lora project-baize/baize-lora-7B
  1. CLIを実行します。
python -m fastchat.serve.cli --model-path ./model_weights/baize-7b

Baizeは、OpenAI APIやHugging Face APIでも使用できます。

Baizeデモを実行するには、次の手順に従ってローカルで実行できます。

  1. 必要なパッケージをインストールします。
cd demo
pip install -r requirements.txt
  1. モデルをローカルホストします。
# V1モデルの場合
base_model=huggyllama/llama-7b
lora_model=project-baize/baize-lora-7B
python app.py $base_model $lora_model
 
# V2モデルの場合
base_model=project-baize/baize-v2-7b
python app.py $base_model None

Baizeデモは、使いやすいGradioインターフェイスを提供しています。

これらは簡略化されたサンプルコードです。詳細な手順とオプションについては、Baizeプロジェクトのドキュメントを参照してください。

10. Koala

Koala (opens in a new tab)は、Webから収集された対話データセットでLLaMAをファインチューニングしてトレーニングされたAI対話モデルです。Alpacaのパフォーマンスを上回り、さまざまなシナリオでChatGPTと同等の結果を示します。Koalaの主な利点の1つは、トレーニングコード、公開ウェイト、および対話ファインチューナーの提供による幅広いカスタマイズ性と適応性です。

Koalaを使用してパワードされた完全に無料の個人用「ChatGPT」ボットを構築する場合、提供されるColabノートブックを利用できます。以下は、プロセスの概要です。

ステップ1:Koala Colabノートブックにアクセスします。

機械学習の専門家であるSam Witteveen氏によって事前に設定されたノートブックがあります。ノートブックはここで見つけることができます。ノートブックを自分のGoogleドライブにコピーします。

ステップ2:ノートブックを実行します。

Googleドライブにノートブックがある場合は、実行できます。ノートブックは、必要なモジュールのインストールとインポートから始まります。次に、transformersライブラリからのLlamaTokenizerとLlamaForCausalLMを使用して、事前にトレーニングされたモデルsamwit/koala-7bがロードされます。モデルは8ビットモードでロードされ、コスト効率の良いGPUとの互換性が可能になります。

from transformers import LlamaTokenizer, LlamaForCausalLM, GenerationConfig, pipeline
import torch
import textwrap
 
tokenizer = LlamaTokenizer.from_pretrained("samwit/koala-7b")
 
base_model = LlamaForCausalLM.from_pretrained(
    "samwit/koala-7b",
    load_in_8bit=True,
    device_map='auto',
)
 

ステップ3:テキスト生成のパイプラインを設定する

ノートブックは、Hugging Faceパイプラインメソッドを使用してテキスト生成のパイプラインを設定します。最大長、温度、反復ペナルティなどのパラメータが定義されています。さらに、wrap_text_preserve_newlines()というユーティリティ関数が提供されており、生成されたテキストの見た目を向上させるために使用できます。

pipe = pipeline(
    "text-generation",
    model=base_model, 
    tokenizer=tokenizer, 
    max_length=512,
    temperature=0.7,
    top_p=0.95,
    repetition_penalty=1.15
)
 
def wrap_text_preserve_newlines(text, width=110):
    # 改行文字に基づいて入力テキストを行に分割する
    lines = text.split('\n')
 
    # 各行を個別にラップする
    wrapped_lines = [textwrap.fill(line, width=width) for line in lines]
 
    # 改行文字を使用してラップされた行を結合する
    wrapped_text = '\n'.join(wrapped_lines)
 
    return wrapped_text

ステップ4:会話に従事する

ノートブックは、Hugging Faceライブラリのpipe()メソッドを使用して、プロンプト-レスポンスの会話の例を提供しています。モデルの成功は、各会話の最初に適切なプロンプトを使用することに重点が置かれるため、これに注意する必要があります。ノートブックは、"BEGINNING OF CONVERSATION: USER:"で始まるプロンプトを使用して所望のロジックを起動することを提案しています。異なるプロンプトやパラメーターを試して、モデルの応答を観察することをお勧めします。

全体的に、KoalaはGPT-3などのより大きな言語モデルの有望な代替手段であることがわかっています。トレーニングデータを注意深くキュレーションすることで、小さなモデルでも印象的なパフォーマンスを発揮できます。Koalaチームとコミュニティの専門家は、オンラインデモと提供されたGoogle Colabノートブックを介して、モデルにアクセスして実験することを便利にしています。チャットボットを開発したり、モデルの使用コストをかけずにLLL研究を行いたい場合には、Koalaは優れた選択肢です。

結論

オープンソースの風景はChatGPTの代替策で豊かであり、それぞれがユニークな機能を提供しています。 AI愛好家、研究者、または開発者であれ、これらのツールを使用して、独自の会話型モデルを構築して微調整できます。 さあ、オープンソースの会話型AIの世界に飛び込んでください。