PaLM APIが日本語に対応：機能、精度、利用方法の評価

#  はじめに

こんにちは、京セラコミュニケーションシステム 森田 (@kccs_kai-morita）です。
現在世界中が大生成AI時代に突入し、各企業が競い合っている戦国時代のような状況です。その中でも、Googleでは「PaLM2」という大規模言語モデルが発表されています。残念ながら、長らく日本語には対応していませんでしたが、先日、日本語対応が実施されたとの発表がありました[^1]。そこで、早速その機能を試してみました。

:::note info

本記事は2023年8月頃に作成されました。
筆者はすべての大規模言語モデル（LLM）に触れたわけではないため、比較検証は行っていません。

:::

## PaLM APIの概要と利用方法
PaLM2はGPT-4と同様、自然な言語生成などを可能にする言語モデルです。
PaLM2はGoogle Cloudを通してPaLM APIにより使用すことができ、RESTやPythonなどのプログラム言語を使って利用することが可能です。

手軽に試したい場合は、Google Cloudのコンソールから「Generative AI Studio」を通じて簡単に使用できます。
Google Cloud「コンソール」>「Vertex AI」>「言語」>「テキストプロンプト」と選択します。プロンプト（AIモデルに与える命令文）を入力し、送信することで回答が得られます。

このコンソール画面右上の「コード表示」を押下することでPythonによるコードが表示されます。Python初学者でもコピー＆ペーストにより簡単に実行できるので便利ですね。私はVertex AIの別サービスであるVertex WorkbenchのマネージドノートブックにてAPIを試していましたが、事前準備なしでそのまま実行できました。

<img width="300" alt="PaLM パラメーター" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780555/919c9aea-6519-8ee3-a0b2-c391999e5bb6.png"><font color="DarkGray">_PaLM パラメーター_</font>

さらにPaLM APIでは他の生成モデルと同様に、モデルのパラメーターを設定できます。
「温度」「topK」「topP」これらを調節することでランダム性の高い出力や一貫性の高い出力を得られます。私は基本温度パラメーターのみを調節して、課題に応じて生成テキストの厳密性を上げたり自由性を増したりで検証しています。
「トークンの制限」パラメーターは1つの生成されたテキストの最大数を制御できます。最初勘違いしていましたが、これはあくまで表示されるテキスト数を制限するのであり、指定した数に収まるような生成をしてくれるわけではありません。課金や表示するスペースに合わせて、制限をかける場合に利用するイメージです。

## 検証してみた感覚と注意点
### 簡単な確認
PaLM APIについて本人に聞いてみました。

![コンソールからのPaLM APIの実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780555/029fa012-ecf6-14bf-ecb4-c9b757083119.png)<font color="DarkGray">_コンソールからのPaLM APIの実行_</font>


:::note info
PaLM APIについて概要を簡単に説明してください。

PaLM APIは、Googleの大規模な言語モデルであるPathways Language Model（PaLM）へのアクセスを提供するAPIです。PaLMは、自然言語処理（NLP）タスクで人間のレベルのパフォーマンスを達成できる、非常に大規模で強力なモデルです。PaLM APIを使用すると、開発者は、質問に答える、テキストを生成、要約、翻訳する、コードを記述するなどのタスクを実行するために、PaLMの機能を利用できます。
PaLM APIは、現在ベータ版で、Google Cloud Platformで利用できます。
:::

生成された感覚としては、GPT-4より最新の情報（2023年2月まで[^2]）を取得できているようですが、「、」が多いなど自然さがあまりなく生成精度は低い印象です。
ところがコンソールをよく見ると最新版のモデルが選択できるようになっているようでしたので、試してみました。

![コンソールからのPaLM APIの実行(最新モデル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780555/26d83a3b-0a60-1735-a8cd-e1835620b057.png)<font color="DarkGray">_コンソールからのPaLM APIの実行(最新モデル)_</font>


:::note info
PaLM APIについて概要を簡単に説明してください。

PaLM APIは、Google AIの大規模言語モデルであるPathways Language Model（PaLM）にアクセスするためのAPIです。PaLM APIは、テキスト生成、言語翻訳、質問応答、要約、分類など、さまざまな自然言語処理タスクを実行するために使用できます。PaLM APIは、Google Cloud Platform（GCP）で利用できます。
:::
こちらの方がプロンプトに沿って簡潔に説明されており、理解しやすい文章が返ってきている印象です。ただ、おそらくベータ版のモデルのようですので、コードなどでは使用できないようです。

### 英語回答との比較
日本語対応前、つまり英語プロンプトとの生成精度を確認するため、特定の文章を与えてそれについての回答を得る、というプロンプトをAPI経由でバッチ処理として約150問、プロンプトを少しずつ変えて5回ずつ実施しました。具体的な内容は伏せますが、以下のような回答が得られました。なお、省略しますが、回答の根拠となる文章も一緒に送信しており、英語版の回答は翻訳しています。

:::note info
質問: 次の文章には〇〇に関連する規約はありますか？
英語版の回答：はい。〇〇に関連する規約を制定しています。
日本語版の回答：□□社では〇〇に関連する規程は以下のとおりです。1.~...
:::

与えた文章には□□社についての言及はなく、学習時のデータから回答したと思われました。

また、日本語のプロンプトを投げているのに英語で返答があったものが約150問中3問ありました。そのプロンプトに日本語で回答してほしい一文を加えて検証すると、2問英語で返答がありこの返答を得られた質問は前回の英語で返ってきたものとは異なりました。

日本語版は全体的に正解精度が低い印象はありましたが、細かい日本語としてのニュアンスを理解してくれる印象がありました。生成言語全般に言えることですが、世の中には日本語よりは英語の文章が多いため、英語の方が精度が高いと言われています。しかし、今回のプロンプトのように日本語の文章を与える場合、翻訳するというプロセスを挟むことにより元の情報が失われるデメリットがあります。また、日本語を扱う我々としては、細かいニュアンスを含めてプロンプトを作成できます。どちらもメリット・デメリットがありますので、両方比較してみるのが良いと考えます。または、両方の結果を取得してその結果をアンサンブルするという手法も有効です。

### 日本語対応状況
プレスリリース[^1]にもある通り他にコード生成モデルであるCodeyも日本後対応しており、実際簡単に動作確認しました。
しかし、検証を通してテキストの埋め込み（ベクトル化）の挙動がおかしいことがわかり、サポートに問い合わせたところ、テキスト埋め込みモデル「textembedding-gecko」は日本語未対応とのことでした（2023年8月28日時点）。後述の別記事でも触れているようなベクトル類似度検索により意味を理解した文章検索などは、英語等に翻訳して対応する必要がありそうです。

(2023/9/29追記)
2023年8月29日に更新があり、新しい埋め込みモデルとして「textembedding-gecko-multilingual」がリリースされました。説明によると英語以外の幅広い言語でトレーニングされているらしく、日本語対応してそう。

## おわりに
PaLM APIに限った話ではありませんが、単純に検索的に知識を得るために使用することは推奨されていないとされています。（弊社の創業者について聞くと本当は鹿児島大学なのに京都大学になっていたり・・・。）よって文章の要など情報をこちらから与えた上でのアクションが有用と考えられます。活用例の1つとして、[PaLM APIや他のGoogle Cloudサービスを組み合わせてエンタープライズサーチライクな構成を考えてみた記事](https://qiita.com/kccs_kai-morita/items/86aa4f80ced001548087)を執筆していますので、興味があればぜひご一読ください。

[^1]: <https://cloud.google.com/blog/ja/products/ai-machine-learning/began-offering-a-generative-ai-service-for-japanese-companies/?hl=ja>

[^2]: <https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models>