LoginSignup
3
2

[watsonx.ai] 100億前後のパラメータを持つLLMのプロンプトエンジニアリング: ② 抽出タスク+JSONフォーマット出力

Last updated at Posted at 2024-04-10

1. 背景

前回の記事に引き続きプロンプトエンジニアリングについて実験していきます。
今回の対象とするのは抽出タスクで、与えられたテキストから特定の情報を識別し取り出す作業を指します。
LLMはIBMのgranite-8b-japaneseという80億パラメーターのものを利用します。

2. タスク設定

今回はこちらの記事のフォーマットを参考にして、新たなテキストを準備してみました。
これをベースに抽出を実施したいと思います。

パッセージのテキスト
保険請求文書:
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。
理想の出力
{
  "車両タイプ": "コンパクトSUV",
  "車種": "マツダCX-5",
  "日付": "2024年5月20日",
  "時間帯": "午前11時",
  "場所": "東京都渋谷区の繁華街"
}

上記の記事ではFew-shot Learningと呼ばれる手法によって理想とするJSON出力を得ています。
そこで、同じような結果を0-shotで実現できないかを実験してみます。

3. プロンプトエンジニアリング

試行錯誤しながら理想の出力に辿り着きたいと思います。

トライアル1

まずは単純に、指示文と情報を与えます。

入力
以下の保険請求文書に対して、車両タイプ、車種、時間帯、場所をJSONフォーマットで抽出してください。

保険請求文書:
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。
出力
この事故による怪我はありません。
この事故は、対物賠償責任保険と車両保険の対象となります。

このように想定とまったく違う出力になってしまいました。
その原因としてはLLM側が指示への回答ではなく、文章の続きを生成してしまったためと思われます。

トライアル2

トライアル1の結果は、LLMのプロンプトフォーマットを利用しなかったことがひとつの原因と考えられます。
プロンプトフォーマットについてはこちらの記事を参照ください。
granite-8b-japaneseのプロンプトフォーマットに当てはめて、プロンプトを作成します。

入力
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
以下の保険請求文書に対して、車両タイプ、車種、時間帯、場所をJSONフォーマットで抽出してください。

### 入力:
保険請求文書:
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。

### 応答:
出力
{
   "車両タイプ": "コンパクトSUV",
   "車種": "マツダCX-5",
   "色": "白",
   "年式": "2024年",
   "ナンバープレート": "渋谷333 は 24",
   "損傷の程度": "中程度",
   "損傷部位": "左フロントバンパー、左側ヘッドライト",
   "事故時間": "2024年5月20日 11:00",
   "事故場所": "渋谷区の繁華街",
   "事故状況": "左折時に自転車と接触"
}

JSONフォーマットにて出力されましたが、書いていない情報も出力されてしまいました。

トライアル3

そこでさらにプロンプトエンジニアリングをしていきます。
工夫した点は以下になります。

  • 出力してほしいJSONフォーマットを明示的に指定する。
  • フォーマットの指定の指示を最初ではなく最後で記述することで、指示の効力を強めます。
  • 末尾に「```json」を入れることにより、次にjsonフォーマットの出力をしやすいように誘導します。
  • また、設定でstop sequenceを「```」とすることで、ちょうどjsonの部分のみを出力させるようにしています。
  • テキストの塊の前後を「"""」で囲むことで、各種範囲を明示的に指定する。
入力
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
以下の保険請求文書に対して、車両タイプ、車種、時間帯、場所をJSONフォーマットで抽出してください。

### 入力:
保険請求文書:
"""
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。
"""

以下のJSONフォーマットで出力してください。
"""
{
   "車両タイプ": "◯◯◯", 
   "車種": "◯◯◯", 
   "日付": "◯年◯月◯◯日", 
   "時間帯": "◯◯◯",
   "場所": "◯◯◯"
}
"""
### 応答:
```json
出力
{
   "車両タイプ": "コンパクトSUV", 
   "車種": "マツダCX-5", 
   "日付": "2024年5月20日", 
   "時間帯": "午前11時",
   "場所": "東京都渋谷区の繁華街"
}

このように当初想定した出力フォーマットを0-shotで実現することができました。
みなさんもぜひ試してみてください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2