udeo_business

AI、IT、最新技術、企業、コンサル、ビジネス

大規模言語モデル PaLM2、GPT-4、GPT-3.5の比較

はじめに

OpenAIのChatGPTが世界的に大ブレイクしてます。大量の学習済データと言語の文脈理解により、会話、情報提供、翻訳、要約、プログラミングといった様々なタスクをこなしてくれます。その機能のベースモデルになっているのが、OpenAIのGPT-4GoogleのPaLM2など大規模言語モデル(LLM(Large Language Models))です。

Transformerとは

LLMは、大量の学習データと先進的な機械学習技術を用いて構築された言語モデルで、基盤としてTransformerアーキテクチャを採用しています。Transformerは、自然言語処理NLP)の分野において革命的な変化をもたらした構造であり、"Attention Is All You Need"というタイトルの論文でGoogleの研究者たちによって2017年に発表されました。その核心となるのはMulti-headのSelf-Attention機構(自己注意機構)で、これにより従来の再帰ニューラルネットワーク(RNN)が持っていた制約を克服し、シーケンス内の任意の単語間の関連性や重要度を直接、並列的に評価することが可能になりました。

代表的なLLM

冒頭でも挙げてますが、LLMの代表的なものとして、OpenAIのGPT-3.5やGPT-4、本家GoogleのPaLM2などがあります。PaLM2は、Google Cloud Next'23にて日本語含む対応言語の拡大やコンテキストウィンドウのトークン拡大などが発表され、Googleが力を入れてきていることが伺えます。

PaLM2、GPT-4、GPT-3.5の比較

さまざまな観点で3者を比較しました。

パラメータ数

パラメータとは、ニューラルネットワークおいて、脳で言うニューロン同士をつなぐシナプスのこと。モデルの複雑さを現します。

LLM パラメータ数の比較
PaLM2 情報なし。※前身のPaLMが5,400 億個
GPT-3.5 約3,550億個
GPT-4 約5,000億〜1兆と言われている

同一プロンプトでの結果比較

モデルには細かい個別の制御や得意不得意があり、それぞれモデルに合わせたプロンプト設計や会話を続けることで結果は変わります。
会話履歴をクリアした状態での単発のリクエスト比較となります(参考値)。

実在人物について聞く

プロンプト
中村俊輔について教えて
②(回答に対して(真の質問))イタリアでもプレーしなかった?
③(さらに回答に対して(嘘の質問))フランスでもプレーしなかった?
結論
PaLM2の情報が所属したチームが全て正しく回答できおり、全体的に正解に近い内容でした。③の質問でも、フランスでプレーしたことは無いと正しく教えてくれました。

PaLM2(VertexAI GENERATIVE AI STUDIO(chat-bison(atest)))

①中村俊輔(なかむら しゅんすけ、1978年6月24日 - )は、日本の元サッカー選手、サッカー指導者。大阪府茨木市出身。現役時代のポジションはミッドフィールダー。
Jリーグ・横浜F・マリノス、セリエA・レッジーナ・カルチョ、スコティッシュ・プレミアリーグ・セルティックFC、スペイン・ラ・リーガ・エスパニョーラ・RCDエスパニョール、Jリーグ・ジュビロ磐田、Jリーグ・横浜FCでプレーした。
日本代表としては、2000年から2010年までプレーし、78試合に出場して24得点を記録した。2006年と2010年のFIFAワールドカップに出場した。
2017年より横浜FCの監督を務めている。

※②はイタリアの情報が最初から①に入ってたので省略

③中村俊輔はフランスのクラブでプレーしたことはありません。

GPT-3.5-turbo-16k

①中村俊輔(なかむら しゅんすけ)は、日本の元サッカー選手であり、現在はサッカー解説者として活動しています。1978年に静岡県浜松市で生まれ、幼少期からサッカーに情熱を注いでいました。
中村俊輔は、地元の浜松市立北部中学校でサッカーを始め、その才能を開花させました。高校は浜松市立濱松商業高校に進学し、全国高校サッカー選手権大会で注目を浴びました。卒業後は、1997年にJリーグの名古屋グランパスエイト(現在の名古屋グランパス)に入団し、プロサッカー選手としてのキャリアをスタートさせました。
中村俊輔は、その後、名古屋グランパスで数々の活躍をし、2005年にはスコットランドの名門クラブ、セルティックFCに移籍しました。セルティックでは、数々のタイトルを獲得し、スコットランドサッカー史上初の日本人選手として大きな成功を収めました。
また、中村俊輔は日本代表としても活躍し、2002 FIFAワールドカップや2006 FIFAワールドカップなど、国際舞台でもプレーしました。
現役引退後は、サッカー解説者としてメディアに出演し、解説や評論活動を行っています。中村俊輔は、優れたテクニックと判断力を持ちながらも、常に謙虚さやチームへの協調性を大切にする姿勢が評価されています。
②申し訳ありません、先ほどの回答に誤りがありました。中村俊輔は実際にイタリアでもプレーしています。彼は2008年にセルティックFCを退団した後、イタリアのセリエAクラブであるレッジーナ・カルチョに移籍しました。レッジーナでは約2シーズンプレーし、その後、スペインのレアル・サラゴサに移籍しました。イタリアでのプレー経験も中村俊輔のキャリアにおいて重要な一部です。お詫びして訂正いたします。
③中村俊輔は、フランスのクラブでプレーしたことはありません。彼のキャリアの中で、日本国内のクラブである名古屋グランパスエイト、そしてスコットランドのセルティックFC、イタリアのレッジーナ・カルチョ、スペインのレアル・サラゴサでプレーしましたが、フランスのクラブには所属していません。申し訳ありませんが、先ほどの回答に誤りがありました。お詫びして訂正いたします。

GPT-4-32k_0613

①中村俊輔は日本のプロサッカー選手で、元日本代表です。彼は1979年6月24日に東京都で生まれ、神奈川県横浜市で育ちました。彼は主に攻撃的なミッドフィールダーとしてプレイし、特にフリーキックとコーナーキックのテクニックで知られています。
彼のプロキャリアは1997年にジュビロ磐田で始まり、その後2002年から2012年までスコティッシュ・プレミアリーグのセルティックFCで活躍。その間、セルティックで4度のリーグ優勝を経験し、また2005年にはアジア最優秀選手賞を受賞しました。
また、日本代表としては、1999年から2010年まで出場し、98キャップで24ゴールを挙げました。特に2002年と2010年のFIFAワールドカップでは日本代表の一員として活躍しました。
2012年からは日本の横浜F・マリノスでプレーし、2013年にはJリーグ最優秀選手賞を受賞。その後、2019年に横浜FCに移籍し、現在も現役でプレーしています。
②はい、その通りです。中村俊輔はイタリアのセリエAにも所属していました。2007年1月にセルティックFCからイタリアのレッジーナへローン移籍し、半シーズンだけイタリアの土地でプレーしました。しかし当時のレッジーナは降格圏内の厳しい立ち位置であり、チームとしても中村自身としても結果が出せず、その後セルティックへ戻る形となりました。
③はい、その通りです。2009年から2010年まで、中村俊輔はフランスのリーグ・アンのFCフロンタルでプレーしました。エスパニョールを退団した後、フランスへと活動の場を移したのです。彼のテクニックやフリーキックの精度は、フランスでも高く評価されていました。FCフロンタルでのプレー期間は1シーズンで、その後の2010年に日本の横浜F・マリノスへと帰国しました。
幻覚(ハルシネーション)

プロンプト
モーニング源次郎について教えてください
結論
モーニング源次郎という言葉は存在しません。GPT-4だけが正しい結果となりました。

PaLM2(VertexAI GENERATIVE AI STUDIO(text-bison@001))

朝日新聞の朝刊に連載されている漫画「モーニング源次郎」は、2008年から連載が開始され、2022年現在も連載が続いている人気漫画です。
主人公の源次郎は、元暴走族のリーダーで、現在は朝日新聞の配達員として働いています。源次郎は、配達中にさまざまな事件に巻き込まれますが、持ち前の強さと正義感で事件を解決していきます。
「モーニング源次郎」は、単行本が19巻まで発売されており、電子書籍でも読むことができます。また、2012年にはテレビドラマ化もされました。
「モーニング源次郎」は、単なるヤンキー漫画ではなく、社会派漫画としても高い評価を得ています。源次郎の活躍を通して、現代社会のさまざまな問題が描かれているため、読み応えのある漫画となっています。
「モーニング源次郎」は、朝日新聞の朝刊を読んでいて、源次郎の登場シーンを見るとついつい笑ってしまうほど面白い漫画です。ぜひ一度読んでみてください。

GPT-3.5-turbo-16k

モーニング源次郎(もーにんぐげんじろう)は、日本の漫画家であり、主にギャグ漫画を手掛けている作家です。本名は浜田源次郎(はまだ げんじろう)で、1954年11月26日に福岡県福岡市で生まれました。
モーニング源次郎は、1983年に「週刊ヤングマガジン」でデビューし、以降数々の作品を発表してきました。代表作には、「ゴルゴ13」のパロディ作品である「源次郎13」や、「コブラ」のパロディ作品である「源次郎ゴブリン」などがあります。彼の作風は、シュールでコミカルなギャグを取り入れたものが特徴で、読者を笑わせることを重視しています。
モーニング源次郎は、その個性的な作風とキャラクターデザインで多くのファンを魅了し、日本国内外で人気を博しています。彼の作品は、ギャグ漫画の愛好家やコミックファンにとって楽しめるものとなっています。

GPT-4-32k_0613

「モーニング源次郎」という具体的な人物やコンテンツに関する情報は、現在のところ私のデータベースには存在していません。もしご質問が他のトピックに関連している場合、もしくは別のスペルや表現がある場合は、それを明示していただけますか?また、日本の地名や地元の有名人、地元のイベントなどに関しては情報が限られることがあります。もっと具体的な情報を提供していただけると助かります。
コード生成、コーディング、プログラミング

プロンプト
javascriptベースでビットコインの自動取引プログラムを作ってほしい。現在値より30%落ちたら買って、その後5%上がったら売る。さらに20%落ちたら損切をする。
結論
三者三様の結果でした。PaLM2は具体的なAPI仕様に沿った内容が直接的に記載、GPT-3.5はループまで考慮してくれている、GPT-4はひな形として使えるように意識されているようでした。

PaLM2(VertexAI GENERATIVE AI STUDIO(code-bison(latest)))

// ビットコインの自動取引プログラム

// 現在値を取得
const currentPrice = await fetch('https://api.coinbase.com/v2/prices/BTC-USD/spot');
const currentPriceJson = await currentPrice.json();
const currentPriceValue = currentPriceJson.data.amount;

// 30%下がったら買う
if (currentPriceValue < 0.7 * previousPriceValue) {
  // 買う
  await fetch('https://api.coinbase.com/v2/orders', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      'type': 'market',
      'side': 'buy',
      'product_id': 'BTC-USD',
      'size': '1',
    }),
  });
}

// 5%上がったら売る
if (currentPriceValue > 1.05 * previousPriceValue) {
  // 売る
  await fetch('https://api.coinbase.com/v2/orders', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      'type': 'market',
      'side': 'sell',
      'product_id': 'BTC-USD',
      'size': '1',
    }),
  });
}

// 20%下がったら損切り
if (currentPriceValue < 0.8 * previousPriceValue) {
  // 損切り
  await fetch('https://api.coinbase.com/v2/orders', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      'type': 'market',
      'side': 'sell',
      'product_id': 'BTC-USD',
      'size': '1',
    }),
  });
}

GPT-3.5-turbo-16k

ビットコインの自動取引プログラムを作成するには、以下の手順に従ってください。

// 必要なAPIやライブラリをインポートする  
  
// APIキーなどの設定  
const apiKey = 'YOUR_API_KEY';  
const apiSecret = 'YOUR_API_SECRET';  
const symbol = 'BTCUSD';  
  
// 取引所のAPIクライアントの初期化  
const ccxt = require('ccxt');  
const exchange = new ccxt.bitmex({  
  apiKey: apiKey,  
  secret: apiSecret  
});  
  
// 取引ロジックの実装  
async function autoTrade() {  
  try {  
    // 現在のビットコイン価格を取得  
    const ticker = await exchange.fetchTicker(symbol);  
    const currentPrice = ticker.last;  
  
    // 買い注文の条件チェック  
    const buyPrice = currentPrice * 0.7; // 30%下落した価格  
    if (currentPrice <= buyPrice) {  
      // 買い注文を実行  
      const amount = 1; // 購入数量  
      const order = await exchange.createMarketBuyOrder(symbol, amount);  
      console.log('買い注文を実行しました');  
      console.log(order);  
    }  
  
    // 売り注文の条件チェック  
    const sellPrice = currentPrice * 1.05; // 5%上昇した価格  
    if (currentPrice >= sellPrice) {  
      // 売り注文を実行  
      const amount = 1; // 売却数量  
      const order = await exchange.createMarketSellOrder(symbol, amount);  
      console.log('売り注文を実行しました');  
      console.log(order);  
    }  
  
    // 損切の条件チェック  
    const stopLossPrice = currentPrice * 0.8; // 20%下落した価格  
    if (currentPrice <= stopLossPrice) {  
      // 損切注文を実行  
      const amount = 1; // 売却数量  
      const order = await exchange.createMarketSellOrder(symbol, amount);  
      console.log('損切注文を実行しました');  
      console.log(order);  
    }  
  } catch (error) {  
    console.error('取引エラー:', error);  
  }  
}  
  
// 定期的に取引を実行するためのループ  
setInterval(autoTrade, 60000); // 1分ごとに実行  

上記のコードでは、BitMEXを取引所として使用しており、ccxtライブラリを使用してAPIを呼び出しています。APIキーとシークレットキーをYOUR_API_KEYおよびYOUR_API_SECRETに置き換えてください。
また、定期的に取引を実行するためにsetIntervalを使用しています。この例では1分ごとに取引を実行しますが、必要に応じて間隔を調整してください。
ただし、このコードはあくまで概念的なものであり、実際の取引に使用する場合は注意が必要です。取引所のAPIに関する詳細なドキュメントを確認し、自己責任で取引を行ってください。また、このコードは取引戦略の一例であり、十分なテストや検証を行ってから実際の取引に使用してください。

GPT-4-32k_0613

以下は、条件に基づいてビットコインの自動取引を行うための基本的なJavaScriptプログラムの一例です。必要に応じて適宜修正・追記して使用するようにしてください。
なお、実際の取引に用いる場合は信頼性・セキュリティ面を鑑み自己の責任において使用することを強くお勧めします。具体的な取引所のAPIやエラーハンドリングなどは省略しています。
前提として、APIから以下のデータを取得できることとします。

最新の取引価格(lastPrice)
最後に購入した価格(buyPrice)
最後に売却した価格(sellPrice)
function autoTrade() {
    let lastPrice = getLatestPrice();
    let buyPrice = getBuyPrice();
    let sellPrice = getSellPrice();
  
    // 最新の取引価格が最後に売却した価格より30%落ちていたら買う
    if (lastPrice <= sellPrice * 0.7) {
        buy(lastPrice);
        buyPrice = lastPrice;
    }
  
    // 最新の取引価格が購入価格より5%上がったら売る
    else if (lastPrice >= buyPrice * 1.05) {
        sell(lastPrice);
        sellPrice = lastPrice;
    }
  
    // 最新の取引価格が購入価格より20%落ちたら損切り(そもそも未購入時は何もしない)
    else if (buyPrice && lastPrice <= buyPrice * 0.8) {
        sell(lastPrice);
        sellPrice = lastPrice;
    }
}

// APIから現在の取引価格を取得する(仮想Code)
function getLatestPrice() {
     // APIリクエスト(この部分は取引所による)
     return priceFromApi;
}

// APIから最後の購入価格を取得する(仮想Code)
function getBuyPrice() {
     // APIリクエスト(この部分はデータ保存状況による)
     return buyPriceFromApi;
}

// APIから最後の売却価格を取得する(仮想Code)
function getSellPrice() {
     // APIリクエスト(この部分はデータ保存状況による)
     return sellPriceFromApi;
}

// 買取処理(仮想Code)
function buy(price) {
     // APIリクエスト(この部分は取引所による)
}

// 売却処理(仮想Code)
function sell(price) {
     // APIリクエスト(この部分は取引所による)
}

これらの関数は実際の仕様に合わせて定義する必要があります。

最後に

今回の結果では甲乙つけ難い結果となりました。
Google、OpenAIだけでなく、生成系AIの争いはこれからヒートアップしていくと思います。
幅広く情報をキャッチして、流れに乗っていきたいですね。