はじめに
Hugging FaceにあるLINE社の日本語言語モデルの実行例では、四国の県名をたずねるシンプルな受け答えのみなので、凝ったことができるか試してみた。結果、前提知識をもとに回答できることがわかった。
実験
準備
LINE社の日本語言語モデルを、GPTNeoXClientを利用して叩く。言語モデルの取得・変換、GPTNeoXClientのインストールは、以下の記事を参考にしてください。
比較実験
土方歳三の誕生日と職業を聞いてみる。
require 'gpt_neox_client' client = GPTNeoXClient.new(path: '/path/to/ggml-model-f16.bin', seed: 123_456_789, n_threads: 8) puts client.completions( 'ユーザー:土方歳三の誕生日と職業を教えてください。<0x0A>システム:', top_p: 0.8, top_k: 5, temperature: 0.7, repeat_penalty: 1.1 ).gsub('<0x0A>', "\n").gsub('</s>', '')
これを実行すると...
1850年2月6日 彼は、新選組の創設者である沖田総司の兄である土方歳三です。
パラメータでまた変わってくると思うが見事にデタラメだ。沖田総司の兄ではない...この問題を解決するため、プロンプトで、Wikipediaにある情報を前提知識として与えてみる。
require 'gpt_neox_client' client = GPTNeoXClient.new(path: '/path/to/ggml-model-f16.bin', seed: 123_456_789, n_threads: 8) prompt = <<~PROMPT コンテキスト情報は以下の通りです。 --------------------- 土方歳三は、1835年5月31日に生まれ、1869年6月20日に死去しました。幕末期の幕臣で、新選組副長を務めました。家紋は左三つ巴です。 --------------------- 元々の知識はなく、コンテキスト情報のみを与えられた状態で、以下の質問に答えてください: ユーザー:土方歳三の誕生日と職業を教えてください。 システム: PROMPT .chomp.gsub("\n", '<0x0A>') puts client.completions( prompt, top_p: 0.8, top_k: 5, temperature: 0.7, repeat_penalty: 1.1 ).gsub('<0x0A>', "\n").gsub('</s>', '')
これを実行すると...
土方歳三は、1835年5月31日に生まれ、新選組副長として活躍しました。
与えた前提知識をもとに回答してくれた。事実を回答させたい場合は、これでイケる。
おわりに
LINE社の日本語言語モデルでも、いわゆるプロンプトエンジニアリングと呼ばれることができそうだ。ローカルで好き勝手遊べる言語モデルは楽しいですね。