【Claude 3.5 Sonnet】ついにOpus・GPT-4oよりも高性能なモデル現る!
WEELメディア事業部LLMリサーチャーの中田です。
6月21日、Claude 3 Sonnetの進化版であるLLM「Claude 3.5 Sonnet」を、Anthropicが公開しました。
新機能の「Artifacts」が導入されたり、これまで以上にコード生成・画像認識の性能が上がったりなど、盛りだくさんの内容です!
Anthropic公式のXアカウントでの投稿のいいね数は、半日ですでに5000を超えており、世界中で物凄く注目されていることが分かります。
この記事ではClaude 3.5 Sonnetの使い方や、有効性の検証まで行います。本記事を熟読することで、Claude 3.5 Sonnetの凄さを理解し、Opusには戻れなくなるでしょう。
ぜひ、最後までご覧ください。
Claude 3.5 Sonnetの概要
Claude 3.5 Sonnetは、Anthropicが開発した大規模言語モデル「Claude 3 Sonnet」の最新版です。Claude 3 Sonnetよりも格段にレベルアップしており、もはやOpusよりも凄いとのこと!
SonnetはClaude 3シリーズの中位モデルに位置づけられていますが、「Claude 3.5 Sonnet」に関しては、上位モデルのClaude 3 Opusを上回る性能を発揮し、OpenAIのGPT-4oやGoogleのGemini 1.5 Proなど他社の最新モデルと同等かそれ以上の能力を示しています。
Claude 3.5 Sonnetの特徴は、以下の通りです。
- Claude 3 Opusと比べて2倍の速度で動作
- Opusの5分の1の低コストで利用可能
- コーディングや画像系テストでOpusを上回る高い性能
- 画像からのテキスト抽出が可能
- これまで以上に「人間らしい自然な文章」を生成可能に
特に、画像認識やコード生成の性能が格段にアップしており、これまでのLLMとは比べ物にならない、、、
Claude 3.5 Sonnetは、Anthropicの公式Webアプリやモバイルアプリ、API、AWS(Amazon Bedrock)、Google Cloud(Vertex AI)など様々な方法で利用可能です。今後は、Claude 3.5シリーズの他モデル(HaikuとOpus)のリリースや、様々なアプリとの統合などが予定されています!
新機能「Artifacts」が導入
また、Claude.aiのWebアプリでは、新機能「Artifacts」が導入され、Claudeに生成を依頼したコンテンツをリアルタイムで表示・編集できるようになりました。
本当に、AIとリアルタイムで会話しながらイラストを作っていますね、、、
他にも、フローチャートを作成したり、ハイクオリティな動的Webページを秒速で作ったりなどが可能に!Claude 3がこれまで以上に使いやすくなっております。
これは実務でも大活躍の予感です!
なお、Claude 3について詳しく知りたい方は、下記の記事を合わせてご確認ください。
Claude 3.5 Sonnetの料金
公式ページによると、アプリ版を利用すれば、無料ユーザーでもClaude 3.5 Sonnetを利用できるそうです。
API利用料の方は、以下の通りです。
確かに、Claude 3.5 Sonnetのコスト($3)は、Opus($15)の5分の1に抑えられていますね。
Claude 3.5 Sonnetの使い方
Webアプリ版を利用する場合、Claude 3のWebアプリにアクセスするだけで利用できます。
Artifactsの設定方法は、以下の通りです。
ArtifactsおよびClaude 3.5 Sonnetの利用方法は、以下の通りです。
なお、Claude 3の中の最速モデル「Haiku」について詳しく知りたい方は、下記の記事を合わせてご確認ください。
Claude 3.5 Sonnetの新機能を試してみた
Claude 3.5 Sonnetの目玉機能である、以下の3つを試してみました。
- 画像認識とテキスト抽出
- 画像認識の深層学習モデルの構築
- Artifacts
画像認識とテキスト抽出
まずは、試しに以下の名刺を画像として読み込ませ、名刺の形式に沿って文字起こしをさせようと思います。
使用するプロンプトは、以下の通りです。
プロンプトはこちら
この名刺をすべて文字起こしし、形式や文字の配置も合わせてコードブロックとして出力してください。
結果は、以下の通りです。
Claude 3 Opusで同様の検証をしてみると、以下のような結果になりました。
両者の比較です。
Opusと比べると、Claude 3 Sonnetの方が、アイコンまで再現してくれています!
また、どちらもモデルも「画像からのテキスト抽出」を高精度で行えているのが分かります。
画像認識の深層学習モデルの構築
次に、コード生成をさせてみます。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データセットを使用して、画像認識のディープラーニングモデルを作ってください。その際、できるだけ精度の高いモデルを作ってください。
結果は以下の通りです。
生成されたPythonコードはこちら
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
# Set random seed for reproducibility
torch.manual_seed(42)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
# Check if CUDA is available
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# Define transforms
transform_train = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
transform_test = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
# Load CIFAR-10 dataset
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform_train)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform_test)
testloader = torch.utils.data.DataLoader(testset, batch_size=100, shuffle=False, num_workers=2)
# Define the CNN architecture
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 64, 3, padding=1)
self.conv2 = nn.Conv2d(64, 128, 3, padding=1)
self.conv3 = nn.Conv2d(128, 256, 3, padding=1)
self.conv4 = nn.Conv2d(256, 512, 3, padding=1)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(512 * 2 * 2, 1024)
self.fc2 = nn.Linear(1024, 512)
self.fc3 = nn.Linear(512, 10)
self.dropout = nn.Dropout(0.2)
self.batchnorm1 = nn.BatchNorm2d(64)
self.batchnorm2 = nn.BatchNorm2d(128)
self.batchnorm3 = nn.BatchNorm2d(256)
self.batchnorm4 = nn.BatchNorm2d(512)
def forward(self, x):
x = self.pool(torch.relu(self.batchnorm1(self.conv1(x))))
x = self.pool(torch.relu(self.batchnorm2(self.conv2(x))))
x = self.pool(torch.relu(self.batchnorm3(self.conv3(x))))
x = self.pool(torch.relu(self.batchnorm4(self.conv4(x))))
x = x.view(-1, 512 * 2 * 2)
x = self.dropout(torch.relu(self.fc1(x)))
x = self.dropout(torch.relu(self.fc2(x)))
x = self.fc3(x)
return x
# Initialize the model, loss function, and optimizer
net = Net().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', patience=3, factor=0.1)
# Training loop
def train_model(epochs):
for epoch in range(epochs):
net.train()
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data[0].to(device), data[1].to(device)
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
# Evaluate on validation set (using test set as validation)
net.eval()
val_loss = 0.0
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data[0].to(device), data[1].to(device)
outputs = net(images)
loss = criterion(outputs, labels)
val_loss += loss.item()
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
val_loss /= len(testloader)
accuracy = 100 * correct / total
print(f'Epoch {epoch + 1}, Training Loss: {running_loss / len(trainloader):.3f}, '
f'Validation Loss: {val_loss:.3f}, Accuracy: {accuracy:.2f}%')
scheduler.step(val_loss)
# Train the model
train_model(50)
# Evaluate the model
def evaluate_model():
net.eval()
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data[0].to(device), data[1].to(device)
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy on test images: {100 * correct / total:.2f}%')
evaluate_model()
コードをGoogle Colabで実行した際の、テストセットの結果は88.18%でした。ちなみに、まったく同様の処理をGPT-4にやらせてみたところ、61%の精度でしたので、かなり良い結果と言えるでしょう。
たった1行プロンプトを入力するだけで、Sonnetが全自動で全プログラムを書いてくれるので便利です。ついでに、かなり精度の高いAIモデルも自動で構築してくれるので、AI開発にも十分利用できそうです!
Artifacts
最後は、今回の目玉機能である「Artifacts」を使って、以下の3つを生成してみました。
- TransformerのAttention機構の解説アニメーション
- インベーダーゲーム
- 株価表示ツール
TransformerのAttention機構の解説アニメーション
初心者でもTransformerのAttention機構をイメージできるように、解説アニメーションを作成させてみました。
ボタン1つで単語間の関係性も、視覚的に分かりやすくなっているので、たたき台としてはかなり良い感じです!
社内研修などでアニメーションを簡単に生成したい場合は、かなり有効なんじゃないでしょうか。
インベーダーゲーム
画面上の操作で遊べる「インベーダーゲーム」を作成させてみました。
当たり判定が少し厳しめですが、かなりリアルで、ゲームとして成り立っているのが凄い!笑
ゲーム作成にも十分使えそうですね。
株価表示ツール
最後に、銘柄を指定するだけで現在の株価を表示させてくれるUIを作成させてみました。
シンプルでありながら、かなり有用なツールが出来上がりました。
こちらの機能をよりリッチにするには、Claude 3.5 Sonnetと会話形式で追加指示を加えるだけ!様々な機能を、直感的に追加できます。
なお、Claude 3のプロンプトテクニックについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
迷ったらOpusでなくClaude 3.5 Sonnetを使おう!
本記事では、Claude 3 Sonnetの進化版である「Claude 3.5 Sonnet」を解説しました。
これまで最強と言われてきた「Opus」や「GPT-4o」よりも、高性能なLLMということで、世界でも大注目の的となっています。
ちなみに、Xでは「GPT-4oよりもスゴイ」などの意見が目立っている模様、、、
また、今回の目玉機能とも言える「Artifacts」の使いやすさや性能の高さには、界隈でも大盛り上がりの様子です。
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。