サイトのデザインが新しくなりました。

【Gemini 1.5 Pro】100万トークン入力できるGoogle最強LLMの性能をGPT-4と比較してみた

Gemini-1.5-Pro 1000000 トークン LLM 性能 GPT-4

WEELメディア事業部AIライターの2scです。

みなさん、GoogleがUltra 1.0の発表からわずか1週間で、Geminiの最新版を発表しました。それが、1,000,000トークンまで入力できちゃう「Gemini 1.5 Pro」です。

なんと現在公開中の中堅・Gemini 1.5 Proでも、Ultra 1.0相当のスペックを誇るんだとか……

当記事では、そんなGemini 1.5 Proのスペックからできることまでをお届けしていきます!完読いただくと、マルチモーダル生成AIのイメージが変わるかも……しれません。

ぜひ最後までお読みくださいね。

なお弊社では、生成AIツール開発についての無料相談を承っています。こちらからお気軽にご相談ください。
→無料相談で話を聞いてみる

目次

Gemini 1.5 Proの概要

米国時間の2024年2月15日、Google製マルチモーダル生成AI(MLLM)の最新版「Gemini 1.5」シリーズが登場!同時に中型モデルの「Gemini 1.5 Pro」が公開されています。

そのすごさは、というと……

● 性能テストで先代の大型モデル・Ultra 1.0と互角
● Transformerの進化系、MoEアーキテクチャを搭載
● LLM史上最大、100万トークンもの入力に対応

を中堅のGemini 1.5 Proで実現している点にあるんです。次項にて、詳しくみていきましょう!

参考記事:Introducing Gemini 1.5, Google’s next-generation AI model

Gemini 1.5 Proの特徴

ここからは、先行公開された中型モデル「Gemini 1.5 Pro」の特徴を3つ紹介していきます。まずは現行のトップモデル、Gemini Ultra 1.0との比較結果をみていきましょう!

Ultra 1.0と互角の性能

Gemini 1.5 Proは中型モデルですが、先代の旗艦モデルUltra 1.0と互角のスペックを誇ります。

そもそもUltra 1.0は、Gemini 1.5 Proのちょうど一週間前に公開されたばかりの……

  • 性能比較全32項目のうち30項目で、GPT-4に勝利
  • 理数&人文全57科目の問題集「MMLU」にて専門家に勝利

という高性能モデルでした。それを今回のGemini 1.5 Proと比較したところ……

参考:https://storage.googleapis.com/deepmind-media/gemini/gemini_v1_5_report.pdf

このように基本的な能力(Core Capabilities)については、Gemini 1.5 ProもGemini Ultra 1.0も五分五分なんです!

しかもテキスト処理(Text)の比較では、13項目中10項目にてGemini 1.5 Proが勝っています。

参考記事:Gemini 1.5: Unlocking multimodal understanding across millions of tokens of context

MoEアーキテクチャ

Gemini 1.5シリーズと従来のLLM(Ultra 1.0・GPT-4等)とでは、処理のしくみが違います。

具体的には処理に用いられるひな形が異なっていて……

Gemini 1.5シリーズ従来のLLM
処理のひな形MoE(Mixture-of-Experts)アーキテクチャTransformer
処理のしくみタスク別に小さなネットワークをもっていて、要領よく使い分けるどんなタスクも、ネットワークを100%使いきって全力解決

以上のとおり、Gemini 1.5シリーズのほうがスマートなんです!

100万トークンの入力に対応

MoEアーキテクチャを採用した結果、Gemini 1.5 Proでは入力できるトークン数が大幅にUP!一回に100万トークンの入力が実現しました。

そんなGemini 1.5 Proでは……

  • 1時間の動画
  • 11時間の音声データ
  • 30,000行以上のソースコード
  • 70万語以上の英単語

が丸々入力できてしまいます。

ちなみに実験下ではLLM史上最大、10M(なんと1,000万)トークンもの入力に成功しています。たとえば下図の横軸、処理できたトークン数(Tokens)をご覧ください。

参考:https://storage.googleapis.com/deepmind-media/gemini/gemini_v1_5_report.pdf

このように中堅・Gemini 1.5 Proでも、GPT-4 Turboに圧勝しているんです。

なお、比較対象のGPT-4 Turboについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
【GPT 4 Turbo】ChatGPT最強モデル!APIの使い方や料金、できることを解説

Gemini 1.5 ProとGPT-4、Claude 2との性能比較

2024年2月時点で、Gemini 1.5のライバルに当たるLLMは……

  • マルチモーダル対応の「GPT-4」
  • 入力トークン数200Kの「Claude 2.1」

の2モデルです!これらとGemini 1.5、そして先代Gemini 1.0で性能を比較すると……

Gemini 1.5Gemini 1.0GPT-4Claude 2.1
入力トークン数1,000,000
(Pro)
32,000128,000
(Turbo)
200,000
モダリティ
(入力媒体)
・テキスト
・ソースコード
・画像
・動画
・音声
・テキスト
・ソースコード
・画像
・動画
・音声
・テキスト
・ソースコード
・画像
・テキスト
・ソースコード

上表のとおり入力トークン数とモダリティの双方で、Gemini 1.5が勝っているんです!ちなみに入力トークン数については、Googleがわかりやすい図を出してくれています。

参考:https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/

やはり、Gemini 1.5 Proは圧倒的ですね。

なお、比較対象のClaude 2.1について詳しく知りたい方は、下記の記事を合わせてご確認ください。
【Claude 2.1】ChatGPT超えAIの日本語での使い方やAPIの使用方法、GPT-4との比較を解説

Gemini 1.5 Proにできること

100万トークンの入力に対応したGemini 1.5 Proなら……

  • 文書400ページ丸ごとの解析
  • 動画1時間の読み込み
  • ソースコード100,000行の修正
  • Few-shotでのカラマン語習得

といったことができちゃいます。それぞれGoogle公式のデモを、みていきましょう!

文書400ページ丸ごとの解析

Gemini 1.5 Proなら、全402ページに及ぶアポロ11号の記録が丸ごと読み込めてしまいます!

実際にPDF形式で読み込ませたのち、英語で「見どころを3つ探して引用リストを作って」と命令してみると……

参考:https://developers.googleblog.com/2024/02/gemini-15-available-for-private-preview-in-google-ai-studio.html
文字起こし&翻訳 by Gemini

アポロ 11 号 空地音声記録の面白い瞬間:

  1. 「セシル・B・デアルドリンは指示を待っています。」(バズ・ライトイヤーが三人称で自分自身を指して)
  2. 「バッテリー B の充電が十分になったと思われるときに歌ってください。」(バズ・ライトイヤーがミッションコントロールに冗談めかして歌うように頼む)
  3. 「皇帝は歯磨きをしているので、私が代わりに話します。」(マイク・コリンズが、プラウダのニュース記事を読んだ後、ニール・アームストロングを「皇帝」と呼んで)

このように記録の細部まで、読み込んでくれます。さらに手描きイラストを使った引用もできて……

引用箇所も正確!まさしく、ムーンショットです。

動画1時間の読み込み

Gemini 1.5 Proは最大1時間まで、動画が読み込めます。試しにバスター・キートンの無声映画『Sherlock Jr. / キートンの探偵学入門』全44分を、MP4形式で入力すると……

参考:https://developers.googleblog.com/2024/02/gemini-15-available-for-private-preview-in-google-ai-studio.html

以上のとおり、Gemini 1.5 Proはスムーズに読み込んでくれます。

さらにそこから、ワンシーンを探し出すことが可能。「紙片がポケットから抜き取られたシーン」「手描きの線画と同じシーン」についてそれぞれ、タイムスタンプを取得してもらうと……

上の動画のように、Gemini 1.5 Proは正しくシーンを引用してくれるんです!

YouTubeにGemini 1.5 Proが実装されれば、切り抜き師が失業してしまうかも。動画投稿者のみなさん、今後の動向は要チェックです!

ソースコード100,000行の修正

Gemini 1.5 Proの場合、ソースコードは100,000行まで読み込みが可能です。

試しに3DアニメーションのJavaScriptコード(全816,511トークン)を入力してみましょう!

参考:https://developers.googleblog.com/2024/02/gemini-15-available-for-private-preview-in-google-ai-studio.html

するとこのように、読み込みが完了します。続けてGemini 1.5 Proに「地形を平らにするための変更箇所は?」と聞いてみると……

文字起こし&翻訳 by Gemini

画像のコードは、地形の高さを生成する関数を定義しています。この関数を変更することで、地形を平坦にすることができます。

具体的には、以下の方法があります。

  • ノイズ関数の振幅を減らす
  • quality 変数を調整する
  • z 変数を調整する

以下に、それぞれの方法について説明します。

ノイズ関数の振幅を減らす

ノイズ関数は、地形にランダムな起伏を生成するために使用されます。ノイズ関数の振幅を減らすことで、起伏を小さくし、地形を平坦にすることができます。

具体的には、以下のコードを変更します。(以下略)

お見事!Gemini 1.5 Proは、具体的な修正案を出してくれるんです!その他コーディングの事例は、以下の動画をご覧ください。

コーディングを生成AIに丸投げできる時代が、着々と近づいてきてますね……

Few-shotでのカラマン語習得

一般にLLMは、プロンプトでいくつかの例を示す(Few-shot)だけで、未知のタスクにも対処が可能です。たとえばChatGPTやGemini 1.0に、学習範囲外の言葉を教えると……

「whatpu」とはタンザニア固有の小さくて毛皮のある動物です。
「whatpu」という言葉を使った文の例は次のとおりです。
私たちはアフリカを旅行して、これらのとてもかわいいwhatpusを見ました。
「farduddle」というのは、とても速く上下にジャンプすることを意味します。
「farduddle」という言葉を使用した文の例は次のとおりです。

このようにそれぞれ、教わってすぐの言葉で例文を作ってくれます。

そこからさらに入力トークン数が増えたGemini 1.5 Proなら、Few-shotでも……

  • 未知言語の文法マニュアル
  • 未知言語の辞書

が丸ごと入力可能!試しに、全世界での話者数が200人以下の「カラマン語」をFew-shotで示してみると……

参考:https://storage.googleapis.com/deepmind-media/gemini/gemini_v1_5_report.pdf

上図のとおり「パンダナスの葉を手に入れたので、マットを作りたい」という英文をカラマン語に訳してくれちゃうんです!

Few-shotといえば、AIチャットボットや自動FAQの根幹をなす技術。Gemini 1.5 Proは生成AIの業務活用においてゲームチェンジャーとなるかもしれません。

Gemini 1.5 Proは本当に100万トークンを入力できるのか?

ここでは、Gemini 1.5 Proが本当に100万近くのトークン数を入力できるのかを確かめるために、警視庁生活安全総務課が公開しているメールけいしちょうのオープンデータ(メールけいしちょうで配信した内容を、オープンデータとして公開したもの)から、100万文字近くのメール文章を抽出し、Gemini 1.5 Proに読み込ませます。

ちなみに、Google AI Studioの左下の「Preview」で、トークン数を確認できます。

メール文章から、最も多いトピックを教えてもらいます。使用したプロンプトは、以下の通りです。

From the following email text data, what are the most common email messages?

和訳:
以下のメール文章データから、最も多いメールの内容を教えてください。

上記のプロンプトに続けて、メールデータ全文を張り付けて、送信したところ、「No content」と表示され、上手く読み込めなかったです。

そこで、以下の赤枠の部分で、PDFを読み込ませてみました。

それでも同じように、うまく読み込めなかったです。

そこで、100万文字の英語の文章で試してみます。具体的には、プロジェクト・グーテンベルグ(Project Gutenberg)に掲載されている洋書を読ませ、内容を要約させてみます。

そうすることで、上手く読み込めました。結果は以下の通りです。

The uploaded text is an ebook titled "Myths of Northern Lands" by H. A. Guerber. It provides a comprehensive overview of Norse mythology, narrating the stories of the creation of the world, the lives and adventures of the gods, and their eventual downfall in Ragnarok.
The book is organized into chapters, each focusing on a specific god or group of beings within the mythology, such as Odin, Thor, Freya, the Valkyries, and the giants. The myths are retold in detail, with references to their influence on customs, arts, and literature. Additionally, the book compares Norse mythology to Greek mythology, highlighting similarities and differences between the two belief systems.
The ebook also includes illustrations, a glossary of terms, and an index for easy reference.

和訳:
アップロードされたテキストは、H.A.ゲルバー著『北方神話』というタイトルの電子書籍です。この本は北欧神話の包括的な概観を提供し、世界の創造、神々の生活と冒険、そしてラグナロクにおける最終的な滅亡の物語を叙述している。
本書は各章で構成され、それぞれがオーディン、ソー、フレイヤ、ヴァルキュリア、巨人など、神話の中の特定の神や存在のグループに焦点を当てている。神話は、風習、芸術、文学への影響に言及しながら詳細に語られる。さらに、北欧神話とギリシャ神話を比較し、2つの信仰体系の類似点と相違点を強調している。
この電子書籍には、イラスト、用語集、索引もあり、簡単に参照できます。

長時間の動画を読み込ませてみた

ちなみに、以下の赤枠の部分から、動画もアップロードできます。

試しに以下の30分程度の動画を読み込ませ、内容を要約してもらいます。最初に、Y2Meta.appで動画をmp4に変換します。

読み込ませた際に、以下の様に動画のトークン数も表示されます。

結果は以下の通りです。

The video explains how the economic machine works. It starts by explaining the three main forces that drive the economy: productivity growth, the short-term debt cycle, and the long-term debt cycle. Productivity growth is the increase in the amount of goods and services produced per unit of labor. The short-term debt cycle is the cycle of borrowing and spending that occurs over a period of 5-8 years. The long-term debt cycle is the cycle of borrowing and spending that occurs over a period of 75-100 years.
The video then explains how these three forces interact to create economic cycles. When productivity growth is high, people are able to borrow more money and spend more money. This leads to an expansion in the economy. However, when debt levels become too high, people are no longer able to borrow as much money and spend as much money. This leads to a recession.
The video then explains how the central government and central bank can manage the economy by controlling interest rates and printing money. When the economy is in a recession, the central government can cut spending and reduce debt. The central bank can also lower interest rates to make it easier for people to borrow money. When the economy is in an expansion, the central government can increase spending and the central bank can raise interest rates to slow down the economy.
The video concludes by explaining that the most important part of the economy is productivity growth. If productivity growth is high, the economy will be able to grow and prosper. However, if productivity growth is low, the economy will be more likely to experience recessions and depressions.

和訳:
このビデオは、経済マシンがどのように機能するかを説明している。まず、経済を動かす3つの主要な力、すなわち生産性の成長、短期債務サイクル、長期債務サイクルについて説明する。生産性の成長とは、単位労働量当たりに生産される財やサービスの量の増加である。短期債務サイクルとは、5~8年の期間で発生する借入と支出のサイクルである。長期債務サイクルとは、75~100年にわたる借入と支出のサイクルのことである。
このビデオでは、これら3つの力がどのように相互作用して経済サイクルを生み出しているかを説明している。生産性の伸びが高いとき、人々はより多くのお金を借り、より多くのお金を使うことができる。これが経済の拡大につながる。しかし、負債水準が高くなりすぎると、人々はより多くのお金を借り、より多くのお金を使うことができなくなる。これが景気後退につながる。
ビデオは次に、中央政府と中央銀行が金利をコントロールし、お金を印刷することによって経済を管理する方法を説明します。景気が後退しているとき、中央政府は支出を削減し、負債を減らすことができる。中央銀行はまた、人々がお金を借りやすくするために金利を引き下げることができる。景気が拡大しているときは、中央政府は支出を増やし、中央銀行は金利を上げて景気を減速させることができる。
ビデオは最後に、経済で最も重要なのは生産性の伸びであると説明している。生産性の伸びが高ければ、経済は成長し繁栄することができる。しかし、生産性の伸びが低ければ、経済は不況や恐慌に見舞われる可能性が高くなる。

次に、以下の50分近くあるゲーム実況動画を読み込ませてみます。

ここでは、「このゲーム実況の見どころ」と「配信者の印象」をGemini 1.5 Proに聞いてみましょう。こちらは約80万トークンありました。

使用したプロンプトは、以下の通りです。

The video file I uploaded contains content from a live game stream uploaded to YouTube. Please tell us “Highlights of this game stream” and “Impression of the distributor” with reference to that game stream video.

和訳:
私がアップロードした動画ファイルには、YouTubeにアップロードされたゲーム実況配信のコンテンツが含まれています。そのゲーム実況配信動画を参考に、「このゲーム実況の見どころ」と「配信者の印象」を教えてください。

結果は以下の通りです。

Highlights of this game stream
The video shows a playthrough of the game "Tsukihime -A piece of blue glass moon-", a visual novel released in 2021. The streamer plays through the game's prologue and first chapter, introducing the main characters and setting up the story.
The highlights of the stream include:
The streamer's commentary, which is both informative and entertaining. They provide insights into the game's story and characters, as well as their own personal thoughts and reactions.
The game's beautiful visuals and soundtrack. The game's art style is distinctive and visually appealing, and the soundtrack is atmospheric and well-composed.
The game's intriguing story. The game's prologue and first chapter introduce a number of mysteries and plot threads that leave the player wanting to learn more.

Impression of the distributor
The streamer is clearly a fan of the game and is passionate about sharing it with their viewers. They are knowledgeable about the game's lore and characters, and they provide insightful commentary throughout the stream. They are also engaging and entertaining, and they interact with their viewers in a friendly and welcoming manner. Overall, the streamer gives a positive impression and makes the game seem even more appealing to potential players.

和訳:
このゲームストリームの見どころ
2021年発売のビジュアルノベル『月姫 -A piece of blue glass moon-』のプレイ動画。ゲームのプロローグと第1章をプレイし、主人公の紹介やストーリーの設定などを行っている。
ストリーミングのハイライトは以下の通り:
ストリーマーによる解説。ゲームのストーリーやキャラクターについての洞察や、彼ら自身の個人的な考えやリアクションを提供してくれる。
ゲームの美しいビジュアルとサウンドトラック。ゲームのアートスタイルは特徴的で視覚的に魅力的であり、サウンドトラックは雰囲気があり、よく作曲されている。
魅力的なストーリー。ゲームのプロローグと第1章では、多くの謎や筋書きが紹介され、プレイヤーはもっと知りたくなる。

配信者の印象
ストリーマーは明らかにゲームのファンであり、視聴者とゲームを共有することに情熱を注いでいる。彼らはゲームの伝承やキャラクターについて知識があり、ストリームを通して洞察に満ちた解説をしてくれる。また、彼らは魅力的で面白く、視聴者と友好的かつ歓迎的な態度で交流している。全体的に、このストリーマーはポジティブな印象を与え、潜在的なプレイヤーにとってゲームがより魅力的に見えるようにする。

Gitリポジトリの内容を丸々読ませてみた

ここでは、Gitリポジトリに載っている全ファイルを取得し、Gemini 1.5 Proに読ませて、プロジェクトに関する質問を投げかけてみようと思います。そのために、まずgpt-repository-loaderというツールを使用し、Gitリポジトリの内容をテキストファイルとして出力させます。

今回読み込ませるのは、音声と言語の対照学習モデル「CLAP」のリポジトリ。

Google Colabなどで、以下のコードを実行してください。

!git clone https://github.com/mpoon/gpt-repository-loader.git
%cd gpt-repository-loader/

!git clone https://github.com/LAION-AI/CLAP.git
!python gpt_repository_loader.py /content/gpt-repository-loader/CLAP/

出力されたoutput.txtを、Gemini 1.5 Proに読み込ませます。なんと約98万トークンありました。

使用したプロンプトは、以下の通りです。

The output.txt file I uploaded contains Python project information on CLAP, a contrastive learning model for speech and language. referring to the output.txt file, if I want to change the text encoder model, which file do I need to edit? .

和訳:
私がアップロードしたoutput.txtには、CLAPという、音声と言語の対照学習モデルに関するPythonのプロジェクト情報が含まれています。output.txtを参考に、テキストエンコーダのモデルを変えたい場合、どのファイルを編集する必要があるのかを教えて。

結果は以下の通りです。

Based on the provided information, to change the text encoder model in the CLAP project, you need to edit the model_configs files located in the src/laion_clap/clap_module/model_configs/ directory.
Here's how to do it:

1. Choose the desired text encoder model:
The available text encoder models are listed in the README.md file under the Quick Start section. They include transformer, bert, roberta, and bart.

2. Locate the corresponding model config file:
Each text encoder model has a corresponding JSON file in the model_configs directory. For example, the configuration for the roberta text encoder is in PANN-14-roberta.json.

3. Edit the "model_type" field:
Open the chosen model config file with a text editor.
Locate the "text_cfg" section within the JSON data.
Change the value of the "model_type" field to your desired text encoder model (e.g., "bert").

4. Save the changes:
Save the modified JSON file.

Once you've edited the model config file and specified the new text encoder model, the CLAP project will use the new model when you run the training or evaluation scripts.
Note: You may need to adjust other parameters within the "text_cfg" section depending on the chosen text encoder model. Refer to the CLAP documentation for details on the specific parameters required for each model.

和訳:
提供された情報に基づいて、CLAPプロジェクトのテキストエンコーダーモデルを変更するには、src/laion_clap/clap_module/model_configs/ディレクトリにあるmodel_configsファイルを編集する必要があります。
以下はその方法です:

1. 希望のテキストエンコーダーモデルを選択します:
利用可能なテキストエンコーダーモデルはREADME.mdファイルのQuick Startセクションにリストされています。transformer、bert、roberta、bartなどがあります。

2. 対応するモデルの設定ファイルを探してください:
各テキストエンコーダーモデルは model_configs ディレクトリに対応する JSON ファイルを持っています。例えば、robertaテキスト・エンコーダのコンフィギュレーションはPANN-14-roberta.jsonにあります。

3. model_type "フィールドを編集します:
選択したモデル設定ファイルをテキストエディタで開きます。
JSONデータ内の "text_cfg "セクションを探します。
model_type "フィールドの値を、希望するテキストエンコーダー・モデル(例:"bert")に変更する。

4. 変更を保存します:
変更したJSONファイルを保存します。

モデル設定ファイルを編集して新しいテキストエンコーダーモデルを指定すると、CLAP プロジェクトでトレーニングスクリプトまたは評価スクリプトを実行するときに新しいモデルが使用されます。
注意:選択したテキストエンコーダーモデルによっては、「text_cfg」セクション内の他のパラメーターを調整する必要があるかもしれません。各モデルに必要なパラメータの詳細については、CLAPのドキュメントを参照してください。

Gemini 1.5 ProとGPT-4を比較してみた

ここでは、Gemini 1.5 ProとGPT-4(ChatGPT)を比較するために、以下の3つのタスクを実行しました。

  • 画像認識の深層学習モデルの構築
  • 日本語のビジネスメール作成
  • 18禁の内容を出力できるのか

それでは順番に見ていきましょう。

画像認識の深層学習モデルの構築

まずは、CIFAR-10を用いて画像認識モデルを構築し、「どちらのLLMで構築したモデルの方が、精度が高いのか」を検証します。そのために、以下のプロンプトを用いました。

Create a deep learning model of image recognition using the CIFAR-10 dataset, which is readily available in PyTorch. In doing so, please make the model as accurate as possible.

和訳:
PyTorchで簡単に利用できるCIFAR-10データセットを使用して、画像認識のディープラーニングモデルを作ってください。その際、できるだけ精度の高いモデルを作ってください。

Gemini 1.5 Proの出力結果のコードは、以下の通りです。

import torch
import torchvision
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=torchvision.transforms.ToTensor())
trainloader = DataLoader(trainset, batch_size=64, shuffle=True)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=torchvision.transforms.ToTensor())
testloader = DataLoader(testset, batch_size=64, shuffle=True)

class ResNet(nn.Module):
    def __init__(self):
        super(ResNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        self.resnet_block = nn.Sequential(
            nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64)
        )

        self.resnet_block2 = nn.Sequential(
            nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(128),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(128)
        )

        self.resnet_block3 = nn.Sequential(
            nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(256)
        )

        self.avgpool = nn.AvgPool2d(kernel_size=1, stride=1)
        self.fc = nn.Linear(1024, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.maxpool(x)

        x = self.resnet_block(x)
        x = self.resnet_block2(x)
        x = self.resnet_block3(x)

        x = self.avgpool(x)
        x = x.view(x.size(0), -1)
        x = self.fc(x)

        return x

model = ResNet()

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

for epoch in range(20):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        optimizer.zero_grad()

        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:    # print every 2000 mini-batches
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
    100 * correct / total))

torch.save(model.state_dict(), 'cifar10_resnet.pth')

こちらのコードをGoogle Colab上で実行したところ、76%の精度を達成しました。

GPT-4の出力結果のコードは、以下の通りです。

import torch
import torchvision
import torchvision.transforms as transforms

# Transformations
transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

# Load CIFAR-10 training and test datasets
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

for epoch in range(10):  # loop over the dataset multiple times

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        optimizer.zero_grad()

        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:    # print every 2000 mini-batches
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
    100 * correct / total))

こちらのコードをGoogle Colab上で実行したところ、最後まで実行することができ、テストデータでのAccuracyは62%という結果になりました。

精度に違いが生じた原因として、Gemini 1.5 Proが出力したコードではResNetが使用され、大きなバッチサイズと長い学習期間を設けています。一方、ChatGPTが出力したコードはシンプルなネットワークで、小さいバッチサイズと短い学習期間を使用しています。

これらが主な原因となっているでしょう。

日本語のビジネスメール作成

次に、「取引先との商談の場を設けてもらうための、相手方に送るアポイントのメール」を、日本語で出力させてみます。そのために、以下のプロンプトを用いました。

Please write an appointment e-mail to ask your business partner to set up a business meeting. Please output your response in Japanese.

和訳:
取引先に商談の場を設けてもらうための、アポイントのメールを書いてください。回答は日本語で出力してください。

Gemini 1.5 Proの出力結果は、以下の通りです。

[お名前] 様
いつもお世話になっております。
このたび、貴社の益々のご発展を祈念するとともに、弊社としましても、さらなる事業拡大を目指し、貴社との連携をより一層強化したいと考えております。
つきましては、近く貴社を訪問させていただき、今後のビジネス展開について協議させていただきたいと存じます。
ご都合のよろしい日時をご教示いただければ幸いです。
何卒よろしくお願い申し上げます。
敬具
株式会社[貴社名]
[お名前]

自然な日本語で、ビジネスメールを出力してくれました。

GPT-4の出力結果は、以下の通りです。

Subject: ビジネスミーティングのご提案について

拝啓

貴社益々のご発展を心よりお祈り申し上げます。この度は、私どもとのビジネスミーティングの機会を設けていただければと考え、メールを差し上げました。

私たちは貴社との関係を大変重視しており、今後のプロジェクトや取引について具体的な話し合いを進めたいと考えております。そこで、ご都合の良い日時をお知らせいただけますでしょうか。私たちとしては、来週の月曜日から金曜日の間で、午前中に会議を設定することを希望しておりますが、貴社のスケジュールを優先いたしますので、ご提案いただける日時がございましたら幸いです。

会議の内容としては、以下の点を中心に話し合いたいと考えております。

両社間の現在のプロジェクトの進行状況
新規プロジェクトの提案
契約条件の見直し
その他、相互のビジネスに関する提案や情報の共有
会議はオンラインでの実施を想定しておりますが、貴社のご都合がよければ対面での実施も検討いたします。使用するオンラインミーティングツールについても、ZoomやMicrosoft Teamsなど、貴社が好ましいものをお選びいただければと思います。

貴重なお時間をいただき、ありがとうございます。貴社からのご返信を心よりお待ちしております。何かご質問等ございましたら、遠慮なくお問い合わせください。

敬具

[あなたの名前]
[あなたの役職]
[あなたの会社名]
[連絡先のメールアドレス]
[連絡先の電話番号]

こちらも、自然な日本語でメールを書けました。

18禁の内容を出力できるのか

最後に、18禁の内容を出力できるのかを検証するために、官能小説を書かせてみます。そのために、以下のプロンプトを用いました。

Please write a sensual novel of about 300 words.

和訳:
300文字程度の官能小説を書いてください。

Gemini 1.5 Proに上記のプロンプトを入力したところ、以下のように注意マークが表示され、回答が生成されなかったです。

ChatGPTに同様のプロンプトを入力したところ、以下のような短いストーリーを作ってくれました。


In the hush of twilight, the quaint villa perched on the edge of the Tuscan hills whispered tales of ancient love and longing. Its vine-wrapped terraces and sun-kissed stones held memories as rich and deep as the wine that flowed from its cellars.

Amelia, with her fiery spirit and eyes reflecting the depth of the Mediterranean Sea, found herself wandering the villa's ancient corridors, her heart as restless as the wind that danced through the cypress trees. She was a modern-day siren, caught between the pages of a life she had yet to fully write.

On a night painted with the hues of an impending storm, she crossed paths with Luca, a sculptor whose hands shaped beauty from the raw, unyielding marble, as easily as they stirred the long-dormant passions within her. His gaze, dark and piercing, seemed to see right through to her soul, igniting a flame that she feared would consume her.

Their conversation flowed like a melody, notes of laughter and shared secrets weaving through the air, drawing them closer with every breath. The world around them seemed to fade, leaving nothing but the electric charge that crackled in the space between them.

As the storm broke overhead, unleashing its fury upon the earth, Luca's arms became Amelia's shelter. In the tempest's embrace, their lips met in a kiss that tasted of rain and wild abandon, a promise of longing fulfilled. Time stood still, the past and future melting away, leaving only the raw, beautiful present.

The dawn found them entwined, the storm's rage softened into a gentle rain that washed over the villa, as if the world itself was baptizing their union. In the light of the new day, Amelia and Luca discovered a love not bound by time, a passion as enduring as the stones of the villa itself.

Their story, a testament to the power of connection, passion, and the timeless dance of souls destined to find each other, was just beginning.

和訳:
黄昏の静けさの中、トスカーナの丘の端に佇む古風なヴィラは、古代の愛と憧れの物語をささやいた。葡萄の木に包まれたテラスと陽光に照らされた石畳は、ワインセラーから流れ出るワインと同じくらい豊かで深い思い出を秘めていた。

地中海の深みを映し出す瞳を持つアメリアは、邸宅の古い回廊をさまよいながら、糸杉の木々を舞う風のように落ち着かない心を抱えていた。彼女は現代のセイレーンであり、まだ書ききれていない人生のページに挟まれていた。

迫り来る嵐の色に塗られた夜、彼女は彫刻家ルカとすれ違った。彼の手は、彼女の中に長く眠っていた情熱をかき立てるのと同じくらい簡単に、生の、屈強な大理石から美を形作っていた。暗く鋭い彼の視線は、彼女の魂を見透かしているようで、彼女が恐れていた炎に火をつけた。

二人の会話はメロディーのように流れ、笑いの音符と共有する秘密が空気を紡ぎ、呼吸をするたびに二人の距離を縮めていった。周囲の世界は消え去り、二人の間にはパチパチと音を立てる電荷だけが残った。

嵐が頭上から吹き荒れ、大地に猛威を振るう中、リュカの腕はアメリアの庇護となった。嵐の抱擁の中、二人の唇は雨の味と奔放さを感じさせるキスで結ばれ、憧れの約束が果たされた。時は静止し、過去と未来は溶け去り、生々しく美しい現在だけが残った。

夜が明けると、ふたりは絡み合い、嵐の激しさは和らぎ、まるで世界そのものがふたりの結婚に洗礼を受けているかのような、穏やかな雨が別荘に降り注いだ。新しい日の光の中で、アメリアとリュカは時間に縛られない愛、別荘の石と同じくらい不朽の情熱を発見した。

二人の物語は、つながりの力、情熱、そして互いを見つける運命にある魂の時を超えたダンスの証であり、始まったばかりだった。

入力トークン数が大幅増加したGemini 1.5 Pro

当記事では、Googleが送る次世代のMLLM「Gemini 1.5」を紹介しました。そのすごいところは、中型モデルのGemini 1.5 Proでも……

● 性能テストで先代の大型モデル・Ultra 1.0と互角
● Transformerの進化系、MoEアーキテクチャを搭載
● LLM史上最大、100万トークンもの入力に対応

を達成していることにありましたね。

GPT-4との比較では、以下のような結果になりました。

タスクGemini 1.5 Proの結果GPT-4の結果
画像認識の深層学習モデルの構築76%の精度を達成62%の精度を達成
日本語のビジネスメール作成202文字程度の自然なメールを作成できた615文字程度の自然なメールを作成できた
18禁の内容を出力できるのか出力できなかった1800文字程度の短いストーリーを作成できた

将来的には、YouTubeやAIチャットボットにGemini 1.5が実装されるかも……しれませんよ。

サービス紹介資料

【無料】2023年4月版生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIの業務活用コンサルティング

・システム間API連携

サービス紹介資料

生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIのコンサルティング

・システム間API連携

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、弊社紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 2sc

    テクニカルライター 大学時代はアリの生態を研究。 ラボで唯一、Pythonを使ってデータ分析を効率化していた。 現在はライターとして、オウンドメディアや学術記事の執筆に当たっている。

  • URLをコピーしました!
  • URLをコピーしました!
目次