5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

最近、ChatGPTやClaudeの話を耳にしない日はないくらい、AIが身近になってきました。その中核となっているのが「LLM(Large Language Model)」という技術です。

今更ではありますが、エンジニアの視点からLLMの基本を理解し、実際に使えるようになることを目指して書いてみました。

LLMってどんなもの?

AIの世界での位置づけ

LLMは「Large Language Model(大規模言語モデル)」の略で、膨大な量のテキストデータを学習することで、人間のような自然な文章の理解や生成ができるようになったAIモデルです。

従来の機械学習モデルと比べて、以下のような特徴があります。

  • タスクごとの個別学習が不要
  • 柔軟な文章理解と生成が可能
  • プロンプト(指示)による多様なタスクへの対応
  • 文脈を考慮した応答が可能

なぜ今注目されているの?

  1. 性能の飛躍的な向上:GPT-3以降、モデルの大規模化により実用的な性能を実現
  2. 使いやすいAPI:OpenAIなどが提供する使いやすいAPIの登場
  3. 実用的なアプリケーション:ChatGPTに代表される便利なサービスの普及
  4. オープンソース化の進展:LLaMAなどのオープンモデルの登場

LLMの中身をのぞいてみよう

基本的な仕組み

LLMの核となる技術は「Transformer」というアーキテクチャです。これは、文章の前後関係(文脈)を効率的に処理できる仕組みを持っています。

簡単に言うと・・

  1. 入力された文章をトークン(単語や文字の単位)に分割
  2. 各トークンの関係性を計算
  3. 文脈を考慮して次のトークンを予測
  4. この予測を繰り返して文章を生成

主なLLMの種類

モデル名 提供元 特徴
GPT-4 OpenAI 最も高性能な商用モデル
Claude Anthropic 長文処理が得意
LLaMA Meta オープンソースの代表格
PaLM Google Googleの主力モデル

どうやって動いているの?

Transformerの基本構造

Transformerは「Self-Attention」という仕組みを使って、文章中の単語同士の関係性を学習します。

python
# 簡略化したSelf-Attentionの例
def self_attention(query, key, value):
    attention_weights = softmax(query @ key.transpose())
    return attention_weights @ value

トークン化の仕組み

LLMは文章を「トークン」という単位に分割して処理します。

python
from transformers import GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
text = "Hello, World!"
tokens = tokenizer.encode(text)
print(tokens)  # [15496, 11, 995, 0]

実際に使ってみよう

OpenAI APIの基本

python
import openai

openai.api_key = 'your-api-key'

def get_completion(prompt):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content

# 使用例
prompt = "Pythonでバブルソートを実装してください。"
result = get_completion(prompt)
print(result)

効果的なプロンプトの書き方

良いプロンプトの特徴:

  • 具体的な指示
  • 期待する出力形式の明示
  • 必要な制約条件の提示
  • コンテキストの提供

例:

以下の条件でPythonコードを生成してください:
- 機能:CSVファイルの読み込みと集計
- 入力:sales.csv(列:date, amount, category)
- 出力:カテゴリごとの合計金額
- エラー処理を含める
- コメントを日本語で書く

コードを書いてみよう

基本的なチャットボットの実装

python
import openai
from typing import List, Dict

class SimpleBot:
    def __init__(self, api_key: str):
        openai.api_key = api_key
        self.messages: List[Dict[str, str]] = []
    
    def chat(self, user_input: str) -> str:
        # メッセージ履歴に追加
        self.messages.append({"role": "user", "content": user_input})
        
        try:
            # APIリクエスト
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=self.messages
            )
            
            # 応答を取得
            bot_response = response.choices[0].message.content
            
            # 応答をメッセージ履歴に追加
            self.messages.append({"role": "assistant", "content": bot_response})
            
            return bot_response
            
        except Exception as e:
            return f"エラーが発生しました: {str(e)}"

気をつけるポイント

セキュリティと料金

  1. APIキーの管理

    • 環境変数として設定
    • Gitにコミットしない
    • 定期的な更新
  2. コスト管理

    • トークン数の監視
    • レートリミットの確認
    • 予算の設定

エラー処理とレートリミット

python
import time
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def call_api_with_retry(prompt: str) -> str:
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": prompt}]
        )
        return response.choices[0].message.content
    except openai.error.RateLimitError:
        time.sleep(20)  # レートリミットの場合は待機
        raise
    except Exception as e:
        print(f"エラー発生: {str(e)}")
        raise

これからどうなる?

最新トレンド

  1. モデルの小型化

    • 効率的な学習手法の開発
    • エッジデバイスでの実行
  2. マルチモーダル化

    • テキスト以外の情報処理
    • 画像・音声との統合
  3. ファインチューニングの発展

    • 特定タスクへの最適化
    • 個別ニーズへの対応

学習リソース

  1. 公式ドキュメント

  2. チュートリアル

まとめ

LLMは急速に発展している技術分野で、基本を押さえておくことで様々な可能性が広がります。この記事で紹介した内容を起点に、実際に手を動かしながら理解を深めていってください。

また、この分野は日々進化していますので、常に最新の情報をキャッチアップすることをお勧めします。

参考文献

  1. "Attention Is All You Need" (Transformer論文)
  2. OpenAI GPT-4 Technical Report
  3. "Language Models are Few-Shot Learners" (GPT-3論文)
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?