🎃

AI基礎2【LLM(大規模言語モデル)】

2025/02/09に公開

前回の記事に引き続きAI理論の解説を行います!
https://zenn.dev/utokyo_aido/articles/619eba012b2660
今回は理論よりも実践がメインになるかもしれません。

LLMとは?

LLM(Large Language Model、大規模言語モデル)とは、膨大なテキストデータを使って学習し、人間のように自然な文章を理解し生成するAIモデルのことです。これらのモデルは深層学習を基盤として構築され、特に「自然言語処理(NLP)」という分野において、革命的な成果を上げています。

LLMの特徴的な能力は次の通り:

  • 文脈を考慮した文章理解と生成
    過去の文脈を踏まえた適切な応答や予測が可能。
  • 多用途な活用
    質問応答、文章生成、翻訳、要約など幅広いタスクをこなせる。
  • 高い汎用性
    特定の用途に特化せず、様々な分野に応用可能。

LLMの位置づけと発展の背景

LLMはAI全体の中で、次のような流れを経て登場しています。

  1. AI(人工知能)
    「人間の知能を模倣する」技術の総称。
    初期のAIでは、ルールベースの手法(条件分岐のような明示的なルール)に依存。
  2. 機械学習(Machine Learning)
    データを使ってコンピュータがルールを自動的に学習する技術。
    自然言語処理では、単語の頻度や単純なパターン認識に基づくアルゴリズムが用いられていた。
  3. 深層学習(Deep Learning)
    ニューラルネットワークを多層化し、大量のデータと計算力で複雑なパターンを学習する手法。
    自然言語処理においても、従来の方法(SVM、決定木など)を超える精度を発揮するように。
  4. LLM
    深層学習の一部であり、特に自然言語処理を高度化するための技術。
    Transformerアーキテクチャの登場により、大規模データを活用した高性能モデルが実現。

初期の自然言語処理

  • ルールベース(1950~1980年代):
    言語の構文規則をプログラムに埋め込む方法が主流で、文法を厳密に扱う一方で柔軟性に欠けた。
  • 機械学習の台頭(1990年代~2000年代):
    手作業で特徴を設計し、アルゴリズムに学習させる方法(例えば、サポートベクトルマシンや決定木)が使われた。

深層学習の導入(2010年代初頭)

  • RNN(再帰型ニューラルネットワーク):
    時系列データや文章を扱うために適したモデル。単語間の順序を学習するが、長い文脈を処理するのが苦手だった。
  • LSTMやGRU:
    長期的な依存関係を捉えるための改良モデルとして登場。翻訳や要約などの精度が向上。

Transformerの登場(2017年)

Googleが発表した「Attention Is All You Need」という論文で提案された「Transformer」モデルが、LLMの基盤となった。

  • 特徴:並列処理が可能で、長い文脈を効率的に学習できる「自己注意機構」を採用。
  • これにより、計算効率と精度が飛躍的に向上し、LLMの実現が可能になった。

OpenAIのLLMを使って開発してみよう!

ここでは、OpenAI の LLM である "gpt-4o-mini" を使ってターミナル上で LLM と会話できるようにしてみましょう!API使用料に関しては以下を参照してください。
https://openai.com/ja-JP/api/pricing/

まずは仮想環境を有効にします。ターミナル上で以下のコマンドを実行します。

python3 -m venv venv # 仮想環境作成
source venv/bin/activate  # 仮想環境activate

次にはAPI keyの設定が必要です。使用する LLM のAPI keyを取得して以下をターミナルで実行します。

export "取得したAPI keyを入力" # 環境変数にする

ターミナルで以下のコマンドを実行してインストールします。

pip install openai

以下のようにコードを書いてみます。

openai.py
from openai import OpenAI

# OpenAIクライアントを作成
client = OpenAI()

print("AIとの会話を開始します(終了するには 'quit' と入力してください)")

# 会話の履歴を保持
messages = [
    {"role": "system", "content": "あなたは親切なアシスタントです。"}
]

while True:
    user_input = input("ユーザー: ") # ユーザーの入力を受け取る
    if user_input.lower() == "quit":
        break
    # ユーザーの入力を履歴に追加
    messages.append({"role": "user", "content": user_input})

    # ユーザーの入力をLLMに投げる
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )

    print(f"AI: {response.choices[0].message.content}") # 応答を表示

    # 応答を履歴に追加
    messages.append({"role": "assistant", "content": response.choices[0].message.content})

これを実行すると以下のようにターミナル上で会話ができるようになります。

AIとの会話を開始します(終了するには 'quit' と入力してください)

ユーザー: こんにちは

AI: こんにちは!今日はどのようなことをお手伝いできますか?

ユーザー: ぼくはミセスグリーンアップルが大好きです!

AI: ミセスグリーンアップルが好きなんですね!彼らのどの曲が特にお気に入りですか?また、好きなアルバムや歌詞についても教えてください!

Anthropic の Claude と会話してみよう!

Anthropic の Claude を使いたい場合以下の流れで進めます。
Claude の使用量は以下を参照してください。
https://www.anthropic.com/pricing#anthropic-api
ターミナルで以下のコマンドを実行してインストールします。

pip install anthropic

以下のようにコードを書きます。

anthropic.py
import anthropic

client = anthropic.Anthropic()

print("AIとの会話を開始します(終了するには 'quit' と入力してください)")

# システムメッセージを別パラメータとして設定
system_message = "あなたは親切なアシスタントです。"
messages = []  # 会話履歴の初期化

while True:
    user_input = input("ユーザー: ") # ユーザーの入力を受け取る
    if user_input.lower() == 'quit':
        print("会話を終了します。")
        break
    
    # メッセージを追加
    messages.append({"role": "user", "content": user_input})
    
    # システムメッセージを別パラメータとして渡す
    response = client.messages.create(
        model="claude-3-haiku-20240307",
        max_tokens=1024,
        system=system_message,  # システムメッセージをここで指定
        messages=messages
    )

    # TextBlockから実際のテキスト内容を取得
    ai_response = response.content[0].text
    print(f"AI: {ai_response}")
    messages.append({"role": "assistant", "content": ai_response})

OpenAIと少し違うので気をつけましょう。

まとめ

二つの記事にわたってAIの基礎を解説してきました。
あまり理論を解説してこなかったのですが、数式的なものは他にたくさん記事があると思いますのでそちらを参照してください。

担当:生駒

Discussion