見出し画像

気がつくと色々新しい/Open_AI:gpt-4o,Google:gemini1.5pro,gemini1.5flash



こんにちはmakokonです。すっかり投稿もご無沙汰でした。
しばらく、オープンなLLMを触っていたのですが、気がつくとOpenAI、Googleが相次いで新しいモデルを発表したようですね。
関連記事がすでに大量に出ていて驚きました。
2024/5/13にOpenAIから"Hello GPT-4o"が、翌日5/14にGoogleから、"Gemini 1.5 Pro updates, 1.5 Flash debut and 2 new Gemma models"が発表されています。
それぞれ簡単に紹介したあと早速使ってみます。




Hello GPT-4o

記事の概要

GPT-4oは、より自然な人間とコンピュータの対話を実現するための技術です。このモデルは、以下の特長を持っています。

  1. 多様な入力形式を受け付ける: テキスト、音声、画像、動画のいずれも入力可能です。

  2. 多様な出力形式を生成: テキスト、音声、画像を出力できます。

  3. 高速な応答時間: 音声入力に対して232ミリ秒で応答し、平均応答時間は320ミリ秒です。これは人間の会話の応答時間に近いです。

  4. GPT-4 Turboと同等の性能: 英語のテキストとコードにおいて同等の性能を持ち、非英語テキストでの性能が向上しています。

  5. 高速かつコスト削減: 既存のモデルよりも高速で、APIの利用コストが50%削減されています。

  6. 視覚と音声の理解力向上: 既存のモデルよりも視覚と音声の理解が優れています。

これにより、GPT-4oはより自然で迅速な対話を実現し、さまざまな応用が期待されます。

なお、すべての機能がすぐに使えるわけではないようです。

  1. 広範な利用可能性: GPT-4oの機能は段階的に展開され、今日からRed Teamによるアクセスが開始されています。

  2. ChatGPTでの展開: 今日から、テキストと画像の機能がChatGPTで利用可能になります。また、無料利用枠とPlusユーザーには、メッセージ制限が5倍になります。

  3. Voice Modeの展開予定: 数週間以内に、ChatGPT Plusで音声モードのα版が展開される予定です。

  4. APIでの利用: 開発者は、テキストとビジョンモデルとしてGPT-4oをAPIで利用できます。GPT-4 Turboよりも2倍速く、コストが半減し、レート制限が5倍になります。

  5. 音声と動画機能の展開予定: 数週間以内に、信頼できるパートナーに対して音声と動画機能が提供される予定です。

とりあえず、テキストとビジョンモデルがAPIで利用可能であり、gpt-4-turboと比べて、品質は少なくとも同じで、2倍早く、コスト半減なら使わない手はなさそうです。

model"gpt-4o"APIの実装

早速試してみます。今回の実装の目的は従来モデルと互換性のある使い方ができることの確認と最小限の品質確認です。

準備

$ pip install -U openai
$ pip freeze |grep openai
openai==1.30.1 #export  OPENAI_API_KEY="your api key"

openaiライブラリをアップデートします。
今回は環境変数OPENAI_API_KEYを設定しておきます。

コード


openaiのサンプルプログラムを変形して、3モデル(gpt-3.5-turbo,gpt-4-turbo-preview,gpt-40)が同じように使えるか確認します。

from openai import OpenAI
client = OpenAI()

models = ["gpt-3.5-turbo","gpt-4-turbo-preview","gpt-4o"]
for model in models:

  response = client.chat.completions.create(
    model=model,
    messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Who won the world series in 2020?"},
      {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
      {"role": "user", "content": "Where was it played?"}
    ]
  )
  
  print(f"current mode ={model}")

  print(response.choices[0].message.content)

実行結果

$ python note240516-0.py
current mode =gpt-3.5-turbo
The 2020 World Series was played at Globe Life Field in Arlington, Texas.
current mode =gpt-4-turbo-preview
The 2020 World Series was played at Globe Life Field in Arlington, Texas. This was the first time in modern history that the World Series was held at a neutral site, a change necessitated by the COVID-19 pandemic.
current mode =gpt-4o
The 2020 World Series was played at Globe Life Field in Arlington, Texas. This marked the first time in modern history that the World Series was played at a neutral site, due to the COVID-19 pandemic.

実行結果

言い回しは若干異なりますが、普通に使えていますね。
念の為ちょっと複雑な質問を日本語でしてみます。

日本語と論理力の確認

messages=[
      {"role": "system", "content": "日本語でわかりやすく説明してください"},
      {"role": "user", "content": "次の2つの命題A、命題Bが同時に真となるように◯◯、△△に当てはまる言葉の組み合わせを考えて、少なくとも2つ示してください。また、その命題が同時にしんになることを説明をしてください。\n命題A:◯◯は△△である。\n命題B:〇〇は△△ではない。\n制限事項:文脈や状況によって、「真になりうる」というような例は認めません。命題A、命題Bに使われる〇〇、△△は共通の言葉です。\nヒント:この問いには、日本語の特徴を利用することによって、正解があります"}
    ]

人にとっては、簡単な論理パズルですが、LLMにとっては難しいようです。それでも、3つのモデルでは、日本語の理解力に大きな差があることがわかります。そして、明らかに個性があるように見える。利用の仕方に工夫がいるかも知れないですね。gpt-4oの回答もまずまずではあります。
それはともかく実行結果です。

実行結果


$ python note240516-0.py
current mode =gpt-3.5-turbo
命題A:犬は動物である。
命題B:犬は動物ではない。

説明:この場合、◯◯と△△には「犬」という共通の言葉が使われています。命題Aでは「犬は動物である」と述べられており、これは真であると言えます。命題Bでは「犬は動物ではない」と述べられており、これは偽であると言えます。したがって、命題Aと命題Bは同時に真になることはありません。



current mode =gpt-4-turbo-preview
この問いは、日本語における多義性や曖昧性を利用することで答えを導くことができます。日本語には同じ漢字や言葉でも、文脈によって異なる意味を持つものがあります。この特性を利用することで、命題Aと命題Bが同時に真となるような言葉の組み合わせを見つけ出すことができます。

### 例1
- 命題A:光は波である。
- 命題B:光は「波(は)」ではない。

この場合、「波」には二つの読み方があります。「波(なみ)」としての意味では、光は電磁波の一種であるため、「光は波である」という命題Aは真です。一方で、「波(は)」として捉えた場合、これは「刃(は)」と同じ読みで、光が刀やナイフのような「刃」という意味ではないため、命題Bも真となります。このように、読み方の違いを利用して、両命題が同時に真となるように構成することができます。

### 例2
- 命題A:シャツは上である。
- 命題B:シャツは「上(うえ)」ではない。

この例では、「上」には「位置(うえ)」という意味と「服装としての上半身を覆うもの(じょう)」という意味があります。通常、「シャツは上である」は服装の文脈で解釈され、「上半身を覆うもの」という意味で真です。一方、「シャツは「上(うえ)」ではない」は「位置」という意味で解釈され、「空間的な上部に存在する」という意味ではないため、これも真となります。

このように、日本語の同一語における異なる意味を上手く利用することで、命題Aと命題Bが共に真となるような事例を作ることが可能です。



current mode =gpt-4o
了解しました。この問題の解決策として、言葉遊びや日本語の特徴を利用することがヒントとなります。以下の例を考えてみましょう。

例1:
- 命題A:うそは本当である。
- 命題B:うそは本当ではない。

命題Aにおいて「うそ(嘘)」を「本当」と言っているのは「うそ」の意味を持たせるための言葉遊びの一種です。そして、命題Bで「うそ」は本来の意味で「本当(事実)」ではないと言っています。この場合、日本語の言葉遊びを利用して両方の命題が同時に真であると解釈できます。

例2:
- 命題A:暗号は秘密である。
- 命題B:暗号は秘密ではない。

命題Aにおいて「暗号」は「秘密(情報)」として使われていますが、命題Bにおいて「暗号」は既に公表されているか、解読されているため「秘密」ではなくなっています。これも日本語の使い方によって同時に成り立つ例です。

このように、ある言葉が文脈によって異なる意味を持つことを利用することで、命題Aと命題Bが同時に真になる言葉の組み合わせを見つけることができます。


まあ、今回はLLMの読解力、構成力を尋ねる問題ではないので勘弁してあげましょう。一応こんな感じの答えを期待していました。
命題A:「この文の最後」は「ある。」である。
命題B:「この文の最後」は「ある。」ではない。
命題A:「コミケ」は「ビッグサイト」である。
命題B:「コミケ」は「ビッグサイト」ではない。

Gemini 1.5 Pro updates, 1.5 Flash debut

記事の概要

Gemini 1.5 proに関する概要です。

  1. Gemini 1.5 Pro: 今年2月に、1ミリオン(100万)トークンのコンテキストウィンドウを持つ初のモデルであるGemini 1.5 Proをリリースしました。

  2. 新機能の追加: 先月、ネイティブ音声理解、システム指示、JSONモードなどの新機能をGemini 1.5 Proに追加しました。

  3. 最新のアップデート: 今日、Gemini 1.5 Proを更新し、新しい1.5 Flashを導入し、新しい開発者機能を展開し、さらに新しい2つのGemmaモデルを追加しました。

Gemini 1.5 Proと新しい1.5 Flashモデルに関する情報を以下に解説します。

  1. Gemini 1.5 Proの改善点:

    • 翻訳、コーディング、推論などの主要なユースケースで品質が向上しました。

    • 今日からこれらの改善がモデルに反映されます。

    • これにより、より広範で複雑なタスクに対応できるようになりました。

  2. 新しい1.5 Flashモデル:

    • このモデルは、特定の狭い範囲や高頻度のタスク向けに最適化されています。

    • モデルの応答速度が最も重要な場面で効果を発揮します。

  3. 利用可能性:

    • Gemini 1.5 Proと1.5 Flashの両モデルは、今日から200以上の国と地域でプレビュー版が利用可能です。

    • 6月には一般公開される予定です。

  4. マルチモーダル対応と長いコンテキスト:

    • Gemini 1.5 Proと1.5 Flashの両モデルは、1ミリオン(100万)トークンのコンテキストウィンドウを持っています。

    • テキスト、画像、音声、動画を入力として交互に使用できます。

    • 2ミリオン(200万)トークンのコンテキストウィンドウを持つ1.5 Proにアクセスするには、Google AI StudioまたはVertex AIでウェイトリストに参加する必要があります。

これにより、Gemini 1.5 Proと1.5 Flashは様々なユースケースに対応でき、より高速で効率的なタスク処理が可能となります。

APIに関する情報にも言及があります。

  1. 新しい開発者向け機能:

    • ビデオフレーム抽出: 動画からフレームを抽出する新しい機能を導入します。

    • 並列関数呼び出し: 一度に複数の関数呼び出しを返すことができる機能を追加します。

    • コンテキストキャッシング(6月追加予定): プロンプトの一部(大きなファイルを含む)を一度だけモデルに送信する機能を追加します。これにより、長いコンテキストがより有用かつ経済的になります。

  2. 価格オプション:

    • 無料アクセス: 対象地域でGoogle AI Studioを通じてGemini APIに無料でアクセスできます。

    • 新しい従量課金サービス: サポートされるレート制限が増加します。

    • 最新価格の確認: Google AI StudioとVertex AIの最新価格を確認してください。

これにより、開発者はより多機能で効率的なAPIを利用でき、価格オプションも柔軟に選択できるようになります。

新しい従量課金サービスがどうなるのかちょっと不気味ですが、今までの例から考えても、そんなに高額にはならないでしょう。APIも浸かるようなのでとりあえず試してみましょう。

Gemini 1.5pro,Gemini 1.5Flashの実装

準備

$ pip install -U google-generativeai
$ pip freeze |grep google-generativeai
google-generativeai==0.5.3

$export GEMINI_API_KEY="your API key"

google-generativeaiのアップデートをします。
今回は環境変数GEMINI_API_KEYを設定しておきます。

利用できるモデル名の確認

最初に利用できるモデルの名前の確認をしておきましょう。

import os

import google.generativeai as genai

GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)

print("サポートしているモデル")
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

(実行結果)
$ python check_gemini.py              
サポートしているモデル
models/gemini-1.0-pro
models/gemini-1.0-pro-001
models/gemini-1.0-pro-latest
models/gemini-1.0-pro-vision-latest
models/gemini-1.5-flash-latest
models/gemini-1.5-pro-latest
models/gemini-pro
models/gemini-pro-vision

しばらく見ないとずいぶんモデル名が増えていますね。テキスト生成に関して言うと、models/gemini-1.0-pro-latest,models/gemini-1.5-flash-latest,models/gemini-1.5-pro-latest の3つのモデルを試せば今回の確認はOKでしょう。

コード

3つのモデルを全く同じ形式で呼び出して互換性を確認するとともに、flashモデルは早いらしいので時間計測もします。

import os
import time

import google.generativeai as genai

GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)

models = ["gemini-1.0-pro-latest","gemini-1.5-flash-latest","gemini-1.5-pro-latest"]

for modelname in models:
  model = genai.GenerativeModel(modelname)
  prompt="簡潔に自己紹介してください"
  st_time=time.time()
  response = model.generate_content(prompt)
  el_time=time.time()-st_time
  lap="{:.2f}s".format(el_time)
  print(f"current mode={modelname} 処理時間={lap}sec")
  print(response.text)

実行結果

$ python note240516-2.py
current mode=gemini-1.0-pro-latest 処理時間=1.62ssec
私は、知識と情報を提供することに特化した、高度な言語モデルです。
current mode=gemini-1.5-flash-latest 処理時間=0.52ssec
私はGoogleによって訓練された、大規模言語モデルです。
current mode=gemini-1.5-pro-latest 処理時間=1.14ssec
私はGoogleによってトレーニングされた、大規模言語モデルです。

実行結果

API呼び出しについては全く問題がないですね。flashモデルは、なかなかに早そうですが、これだけ短い応答だとLLM以外の要因で変動しそうです。

論理力の確認

OpenAIのときと同様に、論理パズルを与えてみましょう。多少個性が見えてくるかも
promptだけを変更します。

prompt="次の2つの命題A、命題Bが同時に真となるように◯◯、△△に当てはまる言葉の組み合わせを考えて、少なくとも2つ示してください。また、その命題が同時にしんになることを説明をしてください。\n命題A:◯◯は△△である。\n命題B:〇〇は△△ではない。\n制限事項:文脈や状況によって、「真になりうる」というような例は認めません。命題A、命題Bに使われる〇〇、△△は共通の言葉です。\nヒント:この問いには、日本語の特徴を利用することによって、正解があります"

実行結果

実行結果を示します。1.0は全然だけど、1.5flashは、苦しいながらも受け入れらないことはなく、1.5proは2面性等を利用した良いアプローチです。想像より遥かにいい。またこれだけ長いとflashの高速応答性能も実感できます。1.0よりは若干遅いですが、応答品質と合わせると素晴らしい性能でしょう。ちゃんと配慮して使えば強力なツールになってくれると感じます。

$ python note240516-2.py
current mode=gemini-1.0-pro-latest 処理時間=2.76ssec
**組み合わせ 1**
* ◯◯: 音
* △△: 無音

**説明:** 「音は無音である」という命題 A は偽ですが、「音は無音ではない」という命題 B は真です。

**組み合わせ 2**
* ◯◯: 空白
* △△: 空白

**説明:** 「空白は空白である」という命題 A は真ですが、「空白は空白ではない」という命題 B も真です。これは、「空白」という言葉が二重に否定されており、結局のところその意味は元に戻っているためです。



current mode=gemini-1.5-flash-latest 処理時間=3.15ssec
## 命題Aと命題Bが同時に真となる例

日本語の特徴を利用することで、命題Aと命題Bが同時に真となる例はいくつか考えられます。

**例1**

* **命題A:** 「**私**は**あなた**である。」
* **命題B:** 「**私**は**あなた**ではない。」

**説明:**

この場合、「私」は話者自身、「あなた」は聞き手を指します。話者と聞き手が同一人物であれば、命題Aは真となります。しかし、通常、話者と聞き手は別の人物であるため、命題Bも真となります。

**例2**

* **命題A:** 「**太陽**は**星**である。」
* **命題B:** 「**太陽**は**星**ではない。」

**説明:**

これは、言葉の定義による解釈の違いを利用した例です。太陽は恒星の一種であり、星の一種であると定義できます。そのため、命題Aは真となります。しかし、太陽は他の星とは異なり、中心に位置し、惑星系を支配していることから、太陽は星ではないと考えることもできます。そのため、命題Bも真となります。

## まとめ

日本語の特徴を利用し、言葉の定義や解釈の曖昧さを利用することで、命題Aと命題Bが同時に真となる例を作ることができます。これらの例は、一見矛盾しているように見えますが、言葉の多義性や解釈の違いによって、同時に真となりうることを示しています。

current mode=gemini-1.5-pro-latest 処理時間=7.90ssec
## 命題Aと命題Bが同時に真となる組み合わせ

日本語の特性を利用した、命題Aと命題Bが同時に真となる言葉の組み合わせを2つ示します。

### 組み合わせ1

* 〇〇:**ゴム**
* △△:**伸びる**

**説明**

* 命題A:ゴムは伸びる。
* 命題B:ゴムは伸びるではない。(ゴムは縮む)

「伸びる」の反対語は「縮む」であり、「伸びるではない」は「縮む」という意味になります。ゴムは伸びる性質と縮む性質を両方持っているため、命題Aと命題Bは同時に真となります。

### 組み合わせ2

* 〇〇:**光**
* △△:**波**

**説明**

* 命題A:光は波である。
* 命題B:光は波ではない。(光は粒子である)

光は波動性と粒子性の両方の性質を持つことが知られており、これを光の二重性と呼びます。命題Bの「光は波ではない」は、「光は粒子である」と言い換えることができ、命題Aと命題Bは同時に真となります。

## まとめ

上記の例のように、日本語では一つの単語が複数の意味を持つ場合や、反対語が複数存在する場合があります。このような日本語の特性を利用することで、一見矛盾する命題Aと命題Bが同時に真となる組み合わせを見つけることができます。

まとめ

以上、OpenAIとGoogleの新しい生成AIモデルの、テキスト生成に関して実際にAPIを用いて試してみました。
いずれも、従来のモデルと利用形態において完全に互換性があり、応答品質については大幅に向上が確認できました。また、品質の向上の割に、応答時間はなかなかに早く、新しいモデルに切り替えるのに少なくとも趣味や、軽いアドバイス用途ではためらう理由がないようにおもいます。
互換性のない大幅に向上した機能も今後段階的に利用可能になるでしょうから、今後も良いパートナーとして使い続けることになるでしょう。
マルチモーダル関係の検証はおいおいやっていきます。どこかで紹介できるでしょう。
では、また今度 会いましょう。

#生成AI #OpenAI #Google #gpt -4o #gemini1 .5pro #gemini1 .5flash #LLM #API #互換性 #性能向上 #高速応答

この記事が気に入ったらサポートをしてみませんか?