7.15.15. language_model_vectorize#

Added in version 14.1.0.

注釈

これは実験的な機能です。現時点ではまだ安定しきっていません。

7.15.15.1. 概要#

language_model_vectorizeは指定されたテキストの正規化されたエンべディングを返します。

言語モデルの準備方法は言語モデルを参照してください。

エンべディングを自動生成するために生成カラムを使うことができます。

この関数を有効にするには次のコマンドでfunctions/language_modelプラグインを有効にしてください。

plugin_register functions/vector

7.15.15.2. 構文#

language_model_vectorizeには必須の引数が2つあります。

language_model_vectorize(model_name, text)

mode_nameは使用する言語モデルの名前です。この名前はファイル名と紐付いています。もし${PREFIX}/share/groonga/language_models/mistral-7b-v0.1.Q4_K_M.ggufが存在している場合、この言語モデルはmistral-7b-v0.1.Q4_K_Mという名前で参照できます。この名前はディレクトリー部分と.gguf拡張子を削除することで計算できます。

textは入力テキストです。

7.15.15.3. 必要条件#

llama.cppを有効にしたGroongaが必要です。公式パッケージでは有効になっています。

この機能を使うには十分なCPU・メモリーリソースが必要です。言語モデル関連の機能は他の機能よりも多くのリソースを必要とします。

将来的にはGPUも使えるようになります。

7.15.15.4. 使い方#

最初にfunctions/language_modelプラグインを登録する必要があります。

実行例:

plugin_register functions/language_model
# [[0,1337566253.89858,0.000355720520019531],true]

スキーマ定義とサンプルデータは次のとおりです。

サンプルスキーマ:

実行例:

table_create --name Memos --flags TABLE_NO_KEY
# [[0,1337566253.89858,0.000355720520019531],true]
column_create \
  --table Memos \
  --name content \
  --flags COLUMN_SCALAR \
  --type ShortText
# [[0,1337566253.89858,0.000355720520019531],true]

サンプルデータ:

実行例:

load --table Memos
[
{"content": "Groonga is fast and embeddable full text search engine."},
{"content": "PGroonga is a PostgreSQL extension that uses Groonga."},
{"content": "PostgreSQL is a RDBMS."}
]
# [[0,1337566253.89858,0.000355720520019531],3]

Memos.contentのエンべディングを自動生成する生成カラムの定義は次のとおりです。

実行例:

column_create \
  --table Memos \
  --name content_embedding \
  --flags COLUMN_VECTOR \
  --type Float32 \
  --source content \
  --generator 'language_model_vectorize("mistral-7b-v0.1.Q4_K_M", content)'
# [[0,1337566253.89858,0.000355720520019531],true]

language_model_vectorize()は正規化されたエンべディングを返すので、distance_cosine()ではなくdistance_inner_product()を使ってマッチしたレコードを類似度で並び替えることができます。以下の例ではわかりやすさのために絞り込まれたレコードではなくすべてのレコードを対象にしています。

実行例:

select \
  --table Memos \
  --columns[similarity].stage filtered \
  --columns[similarity].flags COLUMN_SCALAR \
  --columns[similarity].types Float32 \
  --columns[similarity].value 'distance_inner_product(content_embedding, language_model_vectorize("mistral-7b-v0.1.Q4_K_M", "high performance FTS"))' \
  --output_columns content,similarity \
  --sort_keys -similarity
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         3
#       ],
#       [
#         [
#           "content",
#           "ShortText"
#         ],
#         [
#           "similarity",
#           "Text"
#         ]
#       ],
#       [
#         "Groonga is fast and embeddable full text search engine.",
#         "0.6581704020500183"
#       ],
#       [
#         "PGroonga is a PostgreSQL extension that uses Groonga.",
#         "0.6540993452072144"
#       ],
#       [
#         "PostgreSQL is a RDBMS.",
#         "0.6449499130249023"
#       ]
#     ]
#   ]
# ]

7.15.15.5. 引数#

必須の引数が2つあります。

7.15.15.5.1. model_name#

mode_nameは使用する言語モデルの名前です。この名前はファイル名と紐付いています。もし${PREFIX}/share/groonga/language_models/mistral-7b-v0.1.Q4_K_M.ggufが存在している場合、この言語モデルはmistral-7b-v0.1.Q4_K_Mという名前で参照できます。この名前はディレクトリー部分と.gguf拡張子を削除することで計算できます。

7.15.15.5.2. text#

textは入力テキストです。

7.15.15.6. 戻り値#

language_model_vectorizeFloat32のベクターとして正規化されたエンべディングを返します。