[新機能]SnowflakeでMistral AI・LLaMA 2・Gemmaを用いたLLMが関数一つで簡単に使用可能に!Snowflake Cortex LLM Functionsを試してみた

2024.03.06

さがらです。

日本時間2024年3月5日の夜に、Mistral AI・LLaMA 2・Gemmaを用いたLLMが関数一つで簡単に使用可能となるSnowflake Cortex LLM Functionsがパブリックプレビューとなりました!

2024年3月6日6時の時点ではまだリリースノートに記載もありませんが、下記のMistral AI社とのパートナーシップのプレスリリースと併せて機能がリリースされたのだと思います。(本記事内にMistral AI’s models are now available to customers in public preview as a part of Snowflake Cortex,と書いてあったので私も「あれ、これリリースノートにないけどパブリックプレビューなったのでは…?」と気づきました。)

ということで、Snowflake Cortex LLM Functionsを試してみたので本記事でまとめてみます。

Snowflake Cortex LLM Functionsとは

改めて、Snowflake Cortex LLM Functionsについて出来ることや仕様について簡単にまとめます。

使用できるFunctions

2024年3月6日時点では、以下のFunctionsが使用可能です。

  • COMPLETE
    • プロンプトが与えられると、選択した言語モデルを使用して回答を生成する
  • EXTRACT_ANSWER
    • 与えられた質問に対する答えをテキストから抽出する(プレーンな英語のドキュメントであっても、半構造化(JSON)データオブジェクトの文字列表現であっても対応可能)
  • SENTIMENT
    • 与えられた英語の入力テキストの感情を-1~1のスコアで返します(-1 が最も否定的、1 が最も肯定的で、0 付近が中立)
  • SUMMARIZE
    • 与えられた英文の要約を返す
  • TRANSLATE
    • 指定したソース言語からターゲット言語へテキストを翻訳する

使用できるリージョン

以下は公式Docからの引用ですが、2024年3月6日時点では一部のリージョンのみで使用可能です。

文字数・レコード数の制限

以下は公式Docからの引用ですが、各関数についてtoken(文字数)とレコード数の制限もあります。レコード数については挙動を確認できていないですが、少なくとも制限値の文字数を超えると各関数はエラーとなるのでご注意ください。

コスト

Snowflake Cortex LLM FunctionsはLLMのセットアップが何もいらずに出来るので非常に便利ですが、使用するウェアハウスのコストとは別にコストがかかります。

以下は公式Docからの引用ですが、token(文字数)に応じてコストがかかる仕様となっています。

検証環境

この後各関数を試した内容をまとめますが、以下のSnowflakeアカウントで行いました。

  • リージョン:US East (N. Virginia)
  • エディション:Enterprise

COMPLETE関数を試してみた

プロンプトが与えられると、選択した言語モデルを使用して回答を生成するCOMPLETE関数を試してみます。

下記のように、1つ目の引数に使用するLLMのModel、2つ目の引数に実際のプロンプト(テキスト)を入れてあげると結果が返ってきます。

SELECT SNOWFLAKE.CORTEX.COMPLETE('mistral-large', 'What are large language models?');

また、下記のようなクエリの書き方をすることで、指定したテーブルのカラムの値をプロンプトに入れつつ、結果を得ることもできます。

SELECT
    N_NAME,
    SNOWFLAKE.CORTEX.COMPLETE(
        'mistral-large',
        CONCAT('Give me a 100-word summary of what', N_NAME , 'is about.'))
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION LIMIT 10;

EXTRACT_ANSWER関数を試してみた

与えられた質問に対する答えをテキストから抽出するEXTRACT_ANSWER関数を試してみます。

下記のように、第1引数に回答元としてほしいテキスト、第2引数に質問を入れることで、回答を得ることができます。(以下の例では、SnowflakeのLoad sample data with SQL from S3 bucketのワークシートで構築できるテーブルを使用しています。)

※上手い例がすぐに浮かばなかったので、取り急ぎ以下の例で失礼します…

SELECT
    MENU_TYPE,
    SNOWFLAKE.CORTEX.EXTRACT_ANSWER(MENU_TYPE,
    'Is this a main dish?')
FROM tasty_bytes_sample_data.raw_pos.menu;

SENTIMENT関数を試してみた

与えられた英語の入力テキストの感情を-1~1のスコアで返すSENTIMENT関数を試してみます。

下記のように引数に感情分析をしたいテキストを入れてあげることで、そのテキストがポジティブかネガティブかを得ることができます。

SELECT
    O_COMMENT,
    SNOWFLAKE.CORTEX.SENTIMENT(O_COMMENT)
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS LIMIT 100;

ちなみに、日本語を直接SENTIMENT関数にかけても、あまり良い結果は得られませんでした…

SUMMARIZE関数を試してみた

与えられた英文の要約を返すSUMMARIZE関数を試してみます。

以下のように、引数に要約したい英文テキストを入れてあげることで、要約された結果を得ることができます。(テキストはMistral AIとのパートナシップのプレスリリースから引用)

TRANSLATE関数を試してみた

指定したソース言語からターゲット言語へテキストを翻訳するTRANSLATE関数を試してみます。

以下のように、第1引数に翻訳対象のテキスト、第2引数に翻訳対象のテキストの言語コード、第3引数に翻訳先の言語コードを指定してあげると、翻訳された結果を得ることができます。

SELECT
    SNOWFLAKE.CORTEX.TRANSLATE('このお店は最高でした', 'ja', 'en') as positive_comment,
    SNOWFLAKE.CORTEX.TRANSLATE('私はこのお店にがっかりしています', 'ja', 'en') as negative_comment;

おまけ:SENTIMENT関数とTRANSLATE関数を一緒に使ってみた

Snowflake Cortex LLM Functionsは基本的に英文のデータには精度が高く対応しています。そこで、TRANSLATE関数で日本語のテキストを英語に翻訳した後、SENTIMENT関数を使って感情分析をしてみたいと思います。

実際には下記のように2つの関数を組み合わせることが可能です。先程日本語では上手くいかなかったSENTIMENT関数ですが、正しく感情分析ができていることがわかります!

SELECT
    SNOWFLAKE.CORTEX.SENTIMENT(SNOWFLAKE.CORTEX.TRANSLATE('このお店は最高でした', 'ja', 'en')) as positive_comment,
    SNOWFLAKE.CORTEX.SENTIMENT(SNOWFLAKE.CORTEX.TRANSLATE('私はこのお店にがっかりしています', 'ja', 'en')) as negative_comment;

最後に

SnowflakeでMistral AI・LLaMA 2・Gemmaを用いたLLMが関数一つで簡単に使用可能となる、Snowflake Cortex LLM Functionsを試してみました。

個人的にも早くリリースしてほしい機能だったので、やっと試せて嬉しかったです!このブログの通りすぐに使うことができますので、ぜひ精度を確認の上お試しください。