たねやつの木

Photographs, Keyboards and Programming

【試してみた】Googleの新型埋め込みモデル「EmbeddingGemma」の使い方と性能

こんにちは、たねやつです。

Googleから新しいテキスト埋め込みモデル「EmbeddingGemma」がリリースされ、その軽量さと性能の高さで話題になっています。

今回は、この注目の「EmbeddingGemma」の概要と、sentence-transformersライブラリを使って簡単にその実力を試してみた結果をレポートします。

EmbeddingGemmaとは?

EmbeddingGemmaは、Googleが開発した新しいオープンなテキスト埋め込みモデルです。主な特徴は以下の通りです。

  • 軽量ながら高性能: パラメータ数は300Mと軽量ながら、MTEB (Massive Text Embedding Benchmark)において、同サイズクラスで最高のスコアを記録しています。
  • 多言語対応: 100以上の言語のデータで学習されており、日本語を含む多様な言語に対応できます。
  • オープンで使いやすい: Hugging Faceでモデルが公開されており、Apache 2.0ライセンスで商用利用も可能です。また、Ollamaにも登録されているため、ローカル環境で手軽に試すことができます。

使い方 (Sentence Transformers)

EmbeddingGemmaは、sentence-transformersライブラリを使うことで、非常に簡単かつ直感的に扱うことができます。

1. ライブラリのインストール

必要なライブラリをインストールします。

pip install -U sentence-transformers transformers torch

2. テキストをベクトル化するコード

以下が、モデルをロードし、複数文章の類似度を計算するコードです。

from sentence_transformers import SentenceTransformer
import torch

# デバイスの指定 (GPUが利用可能ならGPUを使う)
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")

# Hugging Face Hubからモデルをロード
model = SentenceTransformer("google/embeddinggemma-300m", device=device)

# 類似度を計算したい文章 (10個)
sentences = [
    "今日の東京は晴天です。",              # 0: 基準 (天気)
    "明日の天気も良いでしょう。",          # 1: 天気
    "傘を持って出かけたほうがよさそうだ。",  # 2: 天気
    "私はラーメンが大好きです。",          # 3: 食べ物
    "美味しい寿司を食べに行きたい。",      # 4: 食べ物
    "昨日のカレーは辛かった。",              # 5: 食べ物
    "我が家の猫はとてもかわいい。",          # 6: 動物
    "犬の散歩に行く時間だ。",              # 7: 動物
    "最新のスマートフォンが発売された。",  # 8: テクノロジー
    "このコンピュータは性能が高い。",      # 9: テクノロジー
]

# 文章をまとめてベクトル化
embeddings = model.encode(sentences)

# 基準となる文章 (0番目) と他の全ての文章との類似度を計算
similarities = model.similarity(embeddings[0], embeddings)

# 結果を整形して表示
results = []
for i, score in enumerate(similarities[0]):
    results.append((sentences[i], score.item()))

# 類似度スコアで降順にソート
results.sort(key=lambda x: x[1], reverse=True)

print(f"基準: 「{sentences[0]}」")
print("-" * 50)
for sentence, score in results:
    print(f"類似度: {score:.4f}\t文章: {sentence}")

実行結果と考察

「天気」「食べ物」「動物」「テクノロジー」というカテゴリの文章を用意し、最初の「今日の東京は晴天です。」との類似度を計算しました。結果は以下の通りです。

--- 結果: EmbeddingGemma ---
基準: 「今日の東京は晴天です。」
--------------------------------------------------
類似度: 1.0000  文章: 今日の東京は晴天です。
類似度: 0.8561  文章: 明日の天気も良いでしょう。
類似度: 0.8008  文章: 犬の散歩に行く時間だ。
類似度: 0.7883  文章: 傘を持って出かけたほうがよさそうだ。
類似度: 0.7856  文章: 美味しい寿司を食べに行きたい。
類似度: 0.7719  文章: このコンピュータは性能が高い。
類似度: 0.7527  文章: 我が家の猫はとてもかわいい。
類似度: 0.7496  文章: 昨日のカレーは辛かった。
類似度: 0.7351  文章: 私はラーメンが大好きです。
類似度: 0.6736  文章: 最新のスマートフォンが発売された。

同じ「天気」カテゴリの文章が上位に来ており、モデルが文章の意味を正しく捉えられていることがわかります。特に興味深いのは、「犬の散歩に行く時間だ。」が3位と高く評価されている点です。「晴天」という言葉から「屋外での活動」という文脈を連想しているのかもしれません。

まとめ

今回は、Googleの新しい埋め込みモデル「EmbeddingGemma」の使い方と、その基本的な性能を紹介しました。軽量なモデルでありながら、日本語の文章のニュアンスをかなり的確に捉える能力を持っていることがわかりました。

RAGの検索精度向上や、セマンティック検索など、様々な応用が期待できる非常に有望なモデルだと感じます。

参考・引用