お疲れ様です。
Googleから新しいオープンモデル、EmbeddingGemmaが公開されたので試してみました。 こちらは埋め込みモデル(Embedding Model)、文書をベクトル化するためのモデルになります。
上記HuggingFaceの公式ページにあるデモコードを試してみます。
実際に使用したソースコード全体は以下(GitHub)に残しています。 ローカル環境で使用するために多少カスタマイズしています。
事前準備
EmbeddingGemmaを使うためにはHuggingFaceのユーザ登録とトークン作成が必要になります。
作成方法は以下をご参考ください。
参考:
https://highreso.jp/edgehub/machinelearning/huggingfacetoken.html
プログラム側では下記のように記載してログイン処理をします。
作成したトークンを環境変数HUGGINGFACE_TOKENに格納(.envに記載)することで使用します。
from huggingface_hub import login from dotenv import load_dotenv load_dotenv() login(token=os.environ["HUGGINGFACE_TOKEN"])
ログインが成功していればPythonコマンドで実行したときに以下のようにEmbeddingGemmaのモデルのダウンロードが走ります。

結果の確認
実際にデモ用コードを動かしてみました。
ちなみに入力する文書データは日本語のデータを作成して置き換えています。
処理としてはqueryの文書とdocumentsの文書のベクトル化をした後、類似度スコアをqueryとdocumentsを比較してそれぞれで類似度を算出するというものです。
query = "日本で桜の名所として有名な場所はどこですか?" documents = [ "京都の清水寺は、紅葉や歴史的建造物で人気の観光地です。", "奈良公園は鹿と触れ合える場所として有名です。", "弘前公園は春になると桜が満開になり、日本有数の花見スポットとして知られています。", "富士山は日本を代表する山で、世界文化遺産にも登録されています。" ]
結果は以下のようになりました。 queryが桜の名所について聞いた内容なので、documentsの3個目の桜や花見といったワードのある文書がスコアが高くなっていると考えられます。
- EmbeddingGemmaでの結果
[0.5168, 0.5249, 0.6428, 0.5567]
別の埋め込みモデルと比較してみます。
比較対象はplamo-embedding-1bです。
fallpoke-tech.hatenadiary.jp
結果は以下のようになりました。 EmbeddingGemmaと傾向は同じですが、スコアが全体的に高くなっています。 この結果だけでは一概には言えませんが、日本語性能は特化モデルの方がさすがに良いのかな…。
- plamo-embedding-1b
[0.6847, 0.6709, 0.7335, 0.6305]
実行時間の比較
EmbeddingGemmaの特徴としてモバイル端末でも動作するレベルで軽いことが挙げられます。
先ほどのplamo-embedding-1bと実際の実行時間を比較してみました。
使用したプログラムは以下。 RAGのベクトルDBを作成するプログラムの埋め込みモデルの指定を変更したのみです。
※EmbeddingGemmaのベクトル作成コードはうまく動かないことがあります。原因は調査中です…。 計測した実行時間も参考程度にお願いします。
結果は以下のようになりました。 EmbeddingGemmaの方がplamo-embedding-1bと比べて約5倍速いという結果でした。
- google/embeddinggemma-300m
5.99秒
- pfnet/plamo-embedding-1b
31.17秒