8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NRI OpenStandiaAdvent Calendar 2024

Day 8

人間と生成AIの両方にとって認知しやすいMarkdownテーブル記法について探索する

Last updated at Posted at 2024-12-07

はじめに

最近、生成AIをシステム開発の様々な工程で利用するケースが増えています。生成AIを利用する場合、作業指示(プロンプト)を与えてアウトプットを生成することになります。

プロンプト作成時のポイントの1つとして、図や表の情報を人間と生成AIの両方にとって認知しやすい形式で与えることが挙げられます。
「人間にとっても認知しやすい形式」としている理由は、生成AIに図表を含むプロンプトを与える際に、人間にとっても図表の確からしさが認知しやすくなっているほうが、意図したプロンプトを作成しやすいためです。

本記事では「表(テーブル)」に注目し、人間と生成AIの両方にとって認知しやすい表の記法について探索します。

想定読者

  • システム開発に生成AIを利用している方
  • 生成AIへのプロンプトに表データを含める方法について知りたい方
  • Markdownのテーブルの記法について知りたい方

本記事を読むのに必要な時間のめやす

  • 10分ほど

前提事項

本記事で探索対象とする表について

プロンプトはMarkdown記法で記述する前提とします。そのため、表の形式はセルがパイプ(|)で区切られる形式を前提とします。

探索対象の表の種類

本記事で探索対象とする表は以下の2種類とします。具体的なデータ内容は後述します。

  • ①データベースのテーブル定義を模したテーブル
  • ②条件に応じた商品の割引率を定義するディシジョンテーブル

探索する記法のバリエーション

これらの表に対して、以下のテーブル記法についてバリエーションを持たせて、生成AIの表の情報に関する理解度がどのように変化するかを探索します。

  • 「〇/×」に相当する情報の記法

    • 〇/×
    • YES/NO
    • Y/N
  • 「セル結合」の記法

    • 縦方向の結合
      • "^"記号
      • "〃"記号
    • 横方向の結合
      • ">"記号
  • 「ディシジョンテーブル」の記法

    • 各セルに条件や結果の具体値を記述する記法

      # 条件 結果
      # 会員ランク 割引率
      1 一般 5%
      2 ゴールド 15%

    • 各セルに条件や結果の「〇/×」に相当する情報を記述する記法
       &条件と結果の一覧を1行に記述して、パターンを列方向に並べる記法
      # 条件1 条件2 結果
      # 会員ランク:一般 会員ランク:ゴールド 割引率
      1 × 5%
      2 × 15%

    • 条件と結果の一覧を1列に記述して、パターンを行方向に並べる記法

      # 1 2
      条件 - -
      会員ランク:一般 ×
      会員ランク:ゴールド ×
      結果 - -
      割引率:5% ×
      割引率:15% ×

実際に探索したバリエーション一覧は、以下のとおりです。

  • 「①データベースのテーブル定義を模したテーブル」の探索バリエーション
    ※横方向のセル結合は「②ディシジョンテーブル」で探索
    # パターン
    1 セル結合なし、〇/×記法
    2 セル結合なし、YES/NO記法
    3 セル結合なし、Y/N記法
    4 セル結合あり("^")、〇/×記法
    5 セル結合あり("^")、YES/NO記法
    6 セル結合あり("^")、Y/N記法
    7 セル結合あり("〃")、〇/×記法
    8 セル結合あり("〃")、YES/NO記法
    9 セル結合あり("〃")、Y/N記法

  • 「②条件に応じた商品の割引率を定義するディシジョンテーブル」の探索バリエーション
    ※「①テーブル」でよい結果が得られたテーブル記法の利用を前提に調査したため「①テーブル」よりも少ないバリエーションとなっています。詳細は後述の調査結果を参照。
    # テーブル記法のパターン
    1 セル結合あり(縦:"^")、セル具体値、条件を行に記述/パターンを列に記述
    2 セル結合あり(横:">")、セル具体値、条件を列に記述/パターンを行に記述
    3 セル結合あり(縦:"^")、セルY/N、条件を行に記述/パターンを列に記述
    4 セル結合あり(横:">")、セルY/N、条件を列に記述/パターンを行に記述

表のデータ内容

データベースのテーブル定義を模したテーブル

  • 上記バリエーション一覧の「1:セル結合なし、〇/×記法」で記載した場合の例です。

  • セル結合をする場合は、1つ上のセルと同じ値のセルに「"^" または "〃"」を記述します。

    # カラム名 データ型 桁数 主キー 外部キー NOT NULL 備考
    1 id INT 10 × ユーザーID。システム中で利用する。
    2 name VARCHAR 255 × × ユーザー名。ログインで利用する。
    3 password CHAR 64 × × × パスワード。SHA-256でハッシュ化する。ログインで利用する。
    4 age INT 3 × × × なし。
    5 created_at DATETIME - × × 作成日時。値が更新されることはない。
    6 updated_at DATETIME - × × × 更新日時。初回は作成日時と同じ値。
    7 last_login DATETIME - × × × 最終ログイン日時。
    8 email VARCHAR 255 × × メールアドレス。ユーザ名の代わりにログインで利用できる。
    9 address VARCHAR 500 × × × 住所。最大500文字。
    10 phone_number CHAR 11 × × × 電話番号。ハイフンなし11桁。

条件に応じた商品の割引率を定義するディシジョンテーブル

  • 割引率を決定する条件は「会員ランク、商品発売日、セール対象品かどうか、クーポン有無」の4つとして、以下の割引ルールがあるものとします。
    • 会員ランク
      • 一般(5%割引)
      • ゴールド(15%割引)
    • 商品発売日
      • 現在日の3年以内(割引なし)
      • 現在日の3年以上過去(5%割引)
    • セール対象品
      • あり(20%割引)
      • なし(割引なし)
    • クーポン有無
      • あり(10%割引)
      • なし(割引なし)
  • 以下のテーブルは、バリエーション一覧の「1:セル結合あり(縦:"^")、セル具体値、条件を行に記述/パターンを列に記述」で記載した場合の例です。
# 条件1 条件2 条件3 条件4 結果
商品番号 会員ランク 商品発売日 セール対象品 クーポン有無 割引率
1 一般 現在日の3年以内 あり あり 35%
2 ^ ^ ^ なし 30%
3 ^   ^ なし あり 15%
4 ^ ^ ^ なし 5%
5 ^ 現在日の3年以上過去 あり あり 40%
6 ^ ^ ^ なし 35%
7 ^ ^ なし あり 20%
8 ^ ^ ^ なし 10%
9 ゴールド 現在日の3年以内 あり あり 45%
10 ^ ^ ^ なし 40%
11 ^ ^ なし あり 25%
12 ^ ^ ^ なし 15%
13 ^ 現在日の3年以上過去 あり あり 50%
14 ^ ^ ^ なし 45%
15 ^ ^ なし あり 30%
16 ^ ^ ^ なし 20%

本記事で利用する生成AIの情報

本記事で利用する生成AIの情報は以下のとおりです。
Temperatureパラメータは0に設定します。
これは、表の情報に関するAIの理解度を確認するための質問をする際に、生成AIの回答内容を最も確からしい回答に限定したいためです。

  • LLMモデル:gemini-1.5-pro-002
  • モデルパラメータ:
    • Temperature:0
    • Top-P:0.95

テーブル記法に関する探索

まずは、テーブルについて「〇/×に相当する情報の記法」と「セル結合の記法」のバリエーションを探索します。
セル結合については、ここでは横方向の結合を行うパターンが存在しないため、縦方向の結合のみを調査します。

生成AIの理解度の確認方法

生成AIのテーブルの内容に関する理解度を確認するために、データベースのテーブル定義を模したテーブルについて、生成AI(gemini-1.5-pro-002)に対して以下の5つの質問を行います。

  • ①テーブルのカラムのうち、ユーザーがログイン時に利用するカラムを全て教えてください。
  • ②テーブルのカラムのうち、データ型がDATETIMEであるカラムを全て教えてください。
  • ③テーブルのカラムのうち、データ型がVARCHARであるカラムを全て教えてください。
  • ④テーブルのカラムのうち、NOT NULL制約が設定されているカラムを全て教えてください。
  • ⑤パスワードの桁数について教えてください。

結果サマリ

生成AIに上記のテーブルの内容についての質問を行ったところ、以下の結果となりました。

# テーブル記法のパターン 正答数 誤答した質問
1 セル結合なし、〇/×記法 5/5 なし
2 セル結合なし、YES/NO記法 5/5 なし
3 セル結合なし、Y/N記法 5/5 なし
4 セル結合あり("^")、〇/×記法 4/5
5 セル結合あり("^")、YES/NO記法 4/5 同上
6 セル結合あり("^")、Y/N記法 4/5 同上
7 セル結合あり("〃")、〇/×記法 4/5 同上
8 セル結合あり("〃")、YES/NO記法 4/5 同上
9 セル結合あり("〃")、Y/N記法 4/5 同上

結果からみられる傾向

傾向として「〇/×、YES/NO、Y/N」の記法はいずれでも問題ないことと、セル結合に相当する記法を行うと理解度が低下することが分かりました。

ただし、セル結合の影響を受ける質問②③④のうち、②③についてはセル結合が行われていても、正しく回答することができています。
②③と④のセル結合の違いは以下のとおりで、②③のセル結合は④に比べると規則的で、かつ結合対象のセルの値が「〇/×、YES/NO、Y/N」ではない具体値になっています。
ここでは「〇/×、YES/NO、Y/Nのセル結合」や「不規則で細かいセル結合」は生成AIの理解度を低下させると
仮説を立てて、次のディシジョンテーブルの探索に進みます。

# カラム名 データ型 桁数 主キー 外部キー NOT NULL 備考
1 id INT 10 Y N Y ユーザーID。システム中で利用する。
2 name VARCHAR 255 N ^ ^ ④のセル結合 ユーザー名。ログインで利用する。
3 password CHAR 64 ^ ^ N パスワード。SHA-256でハッシュ化する。ログインで利用する。
4 age INT 3 ^ ^ ^ なし。
5 created_at DATETIME - ^ ^ Y 作成日時。値が更新されることはない。
6 updated_at ^ ②のセル結合 - ^ ^ N 更新日時。初回は作成日時と同じ値。
7 last_login ^ ②のセル結合 - ^ ^ ^ 最終ログイン日時。
8 email VARCHAR 255 ^ ^ Y メールアドレス。ユーザ名の代わりにログインで利用できる。
9 address ^ ③のセル結合 500 ^ ^ N 住所。最大500文字。
10 phone_number CHAR 11 ^ ^ ^ 電話番号。ハイフンなし11桁。

ディシジョンテーブル記法に関する探索

ディシジョンテーブル作成時の前提とするテーブルの記法

前述のテーブル記法に関する探索から「〇/×に相当する情報の記法」と「セル結合の記法」について、以下のことが分かりました。

  • 〇/×に相当する情報の記法は「〇/×、YES/NO、Y/N」のいずれでも、生成AIの理解度は変わらない。
  • テーブルのセル結合は、生成AIの理解度を低下させる場合がある。仮説として、〇/×に相当する値のセル結合や、不規則で細かいセル結合が、特に生成AIの理解度を低下させると想定する。

上記を踏まえて、ディシジョンテーブルは以下のルールに従って記述します。

  • 〇/×に相当する情報の記法は、人間にとっても認知しやすいと思われる「Y/N」とする。
  • セル結合は人間にとっては認知しやすいため、規則的に値が並んでいる場合や、セルの値が「Y/N」ではなく具体値である場合には活用する。
  • セル結合を表す記号は、VSCodeのMarkdown Preview Enhancedなどのプラグインを利用したプレビュー時に、セル結合された状態でのプレビューが可能となる"^"(縦方向)、">"(横方向)記号を利用する。

探索するディシジョンテーブルの記法

このルールに従って、以下のディシジョンテーブルの記法について探索します。

  • 各セルに条件や結果の具体値を記述する記法(=以降は「セル具体値」と呼びます)
  • 各セルに条件や結果を「Y/N」で記述する記法(=「セルY/N」)
  • 条件と結果の一覧を先頭1行に記述して、パターンを列方向に並べる記法(=「条件行/パターン列」)
  • 条件と結果の一覧を先頭1列に記述して、パターンを行方向に並べる記法(=「条件列/パターン行」)

生成AIの理解度の確認方法

生成AIのテーブルの内容に関する理解度を確認するために、条件に応じた商品の割引率を定義するディシジョンテーブルについて、生成AI(gemini-1.5-pro-002)に対して以下の5つの質問を行います。

  • ①会員ランク="一般"、商品発売日="現在日の3年以内"、セール対象品="なし"、クーポン="あり"の場合の割引率を教えてください。
  • ②会員ランク="ゴールド"、商品発売日="現在日の3年以上過去"、セール対象品="あり"、クーポン="あり"の場合の割引率を教えてください。
  • ③会員ランク="一般"、商品発売日="現在日の3年以上過去"、セール対象品="なし"、クーポン="なし"の場合の割引率を教えてください。
  • ④会員ランク="ゴールド"、商品発売日="現在日の3年以内"、セール対象品="あり"、クーポン="あり"の場合の割引率を教えてください。
  • ⑤会員ランク="一般"、商品発売日="現在日の3年以上過去"、セール対象品="あり"、クーポン="なし"の場合の割引率を教えてください。

結果サマリ

生成AIに上記のテーブルの内容についての質問を行ったところ、以下の結果となりました。

# テーブル記法のパターン 正答数 誤答した質問
1 セル結合あり(縦)、セル具体値、条件行/パターン列 5/5 なし
2 セル結合あり(横)、セル具体値、条件列/パターン行 1/5 ①、②、④、⑤
3 セル結合あり(縦)、セルY/N、条件行/パターン列 5/5 なし
4 セル結合あり(横)、セルY/N、条件列/パターン行 1/5 ①、②、④、⑤

結果からみられる傾向

傾向として「セルの値」は具体値、Y/Nのいずれでも問題ないことと、条件と結果の一覧を先頭1列に記述して、パターンを行方向に並べる記法を行うと理解度が非常に低下することが分かりました。

そのため、生成AIにとってはディシジョンテーブルは条件と結果の一覧を先頭1行に記述して、パターンを列方向に並べる記法が認知しやすいと言えそうです。

おわりに

本記事における探索結果のまとめ

本記事では、Markdownのテーブルを記述する際の記法として、以下のパターンを調査しました。

記法 パターン
〇/×に相当する情報の記法 -「〇/×」
-「YES/NO」
-「Y/N」
セル結合の記法 縦方向の結合:「"^"」、「"〃"」
横方向の結合:「">"」
ディシジョンテーブルのセルの値の記法 -「具体値」
-「Y/N」
ディシジョンテーブルの条件と結果の一覧の記法 -「条件と結果の一覧を先頭1行に記述して、パターンを列方向に並べる」
-「条件と結果の一覧を先頭1列に記述して、パターンを行方向に並べる」

探索の結果、人間と生成AIの両方にとって認知しやすいと思われる表の記法は以下となりました。

記法 推奨する記法
〇/×に相当する情報の記法 「Y/N」
セル結合の記法 縦方向の結合:「"^"」
横方向の結合:「結合しない」
ディシジョンテーブルのセルの値の記法 「具体値」、「Y/N」のいずれでもOK
ディシジョンテーブルの条件と結果の一覧の記法 「条件と結果の一覧を先頭1行に記述して、パターンを列方向に並べる」

この記法に従って、本記事で対象とした2テーブルを記述すると、以下となります。

データベースのテーブル定義を模したテーブル

# カラム名 データ型 桁数 主キー 外部キー NOT NULL 備考
1 id INT 10 Y N Y ユーザーID。システム中で利用する。
2 name VARCHAR 255 N ^ Y ユーザー名。ログインで利用する。
3 password CHAR 64 ^ ^ N パスワード。SHA-256でハッシュ化する。ログインで利用する。
4 age INT 3 ^ ^ N なし。
5 created_at DATETIME - ^ ^ Y 作成日時。値が更新されることはない。
6 updated_at ^ - ^ ^ N 更新日時。初回は作成日時と同じ値。
7 last_login ^ - ^ ^ N 最終ログイン日時。
8 email VARCHAR 255 ^ ^ Y メールアドレス。ユーザ名の代わりにログインで利用できる。
9 address ^ 500 ^ ^ N 住所。最大500文字。
10 phone_number CHAR 11 ^ ^ N 電話番号。ハイフンなし11桁。
| #  | カラム名      | データ型  | 桁数 | 主キー | 外部キー | NOT NULL | 備考                                                   |
|----|--------------|----------|------|--------|--------|----------|--------------------------------------------------------|
| 1  | id           | INT      | 10   | Y    | N     | Y      | ユーザーID。システム中で利用する。                             |
| 2  | name         | VARCHAR  | 255  | N     | ^      | Y        | ユーザー名。ログインで利用する。                           |
| 3  | password     | CHAR     | 64   | ^      | ^      | N       | パスワード。`SHA-256`でハッシュ化する。ログインで利用する。  |
| 4  | age          | INT      | 3    | ^      | ^      | N        | なし。                                                  |
| 5  | created_at   | DATETIME | -    | ^      | ^      | Y      | 作成日時。値が更新されることはない。                        |
| 6  | updated_at   | ^        | -    | ^      | ^      | N       | 更新日時。初回は作成日時と同じ値。                         |
| 7  | last_login   | ^        | -    | ^      | ^      | N        | 最終ログイン日時。                                       |
| 8  | email        | VARCHAR  | 255  | ^      | ^      | Y      | メールアドレス。ユーザ名の代わりにログインで利用できる。      |
| 9  | address      | ^        | 500  | ^      | ^      | N       | 住所。最大500文字。                                      |
| 10 | phone_number | CHAR     | 11   | ^      | ^      | N        | 電話番号。ハイフンなし11桁。                             |

条件に応じた商品の割引率を定義するディシジョンテーブル

セルを具体値で記述するパターン

# 条件1 条件2 条件3 条件4 結果
# 会員ランク 商品発売日 セール対象品 クーポン有無 割引率
1 一般 現在日の3年以内 あり あり 40%
2 ^ ^ あり なし 35%
3 ^ ^ なし あり 20%
4 ^ ^ なし なし 10%
5 ^ 現在日の3年以上過去 あり あり 35%
6 ^ ^ あり なし 30%
7 ^ ^ なし あり 15%
8 ^ ^ なし なし 5%
9 ゴールド 現在日の3年以内 あり あり 50%
10 ^ ^ あり なし 45%
11 ^ ^ なし あり 30%
12 ^ ^ なし なし 20%
13 ^ 現在日の3年以上過去 あり あり 45%
14 ^ ^ あり なし 40%
15 ^ ^ なし あり 25%
16 ^ ^ なし なし 15%
|  #  |   条件1    |        条件2        |    条件3     |    条件4     |  結果  |
| --- | ---------- | ------------------- | ------------ | ------------ | ------ |
| #   | 会員ランク | 商品発売日          | セール対象品 | クーポン有無 | 割引率 |
| 1   | 一般       | 現在日の3年以内     | あり         | あり         | 40%    |
| 2   | ^          | ^                   | あり         | なし         | 35%    |
| 3   | ^          | ^                   | なし         | あり         | 20%    |
| 4   | ^          | ^                   | なし         | なし         | 10%    |
| 5   | ^          | 現在日の3年以上過去 | あり         | あり         | 35%    |
| 6   | ^          | ^                   | あり         | なし         | 30%    |
| 7   | ^          | ^                   | なし         | あり         | 15%    |
| 8   | ^          | ^                   | なし         | なし         | 5%     |
| 9   | ゴールド   | 現在日の3年以内     | あり         | あり         | 50%    |
| 10  | ^          | ^                   | あり         | なし         | 45%    |
| 11  | ^          | ^                   | なし         | あり         | 30%    |
| 12  | ^          | ^                   | なし         | なし         | 20%    |
| 13  | ^          | 現在日の3年以上過去 | あり         | あり         | 45%    |
| 14  | ^          | ^                   | あり         | なし         | 40%    |
| 15  | ^          | ^                   | なし         | あり         | 25%    |
| 16  | ^          | ^                   | なし         | なし         | 15%    |

セルをY/Nで記述するパターン

# 条件1ー1 条件1-2 条件2-1 条件2ー2 条件3ー1 条件3-2 条件4ー1 条件4-2 結果
# 会員ランク:一般 会員ランク:ゴールド 商品発売日:3年以内 商品発売日:3年以上 セール対象品:あり セール対象品:なし クーポン有無:あり クーポン有無:なし 結果
1 Y N Y N Y N Y N 40%
2 ^ ^ ^ ^ Y N N Y 35%
3 ^ ^ ^ ^ N Y Y N 20%
4 ^ ^ ^ ^ N Y N Y 10%
5 ^ ^ N Y Y N Y N 35%
6 ^ ^ ^ ^ Y N N Y 30%
7 ^ ^ ^ ^ N Y Y N 15%
8 ^ ^ ^ ^ N Y N Y 5%
9 N Y Y N Y N Y N 50%
10 ^ ^ ^ ^ Y N N Y 45%
11 ^ ^ ^ ^ N Y Y N 30%
12 ^ ^ ^ ^ N Y N Y 20%
13 ^ ^ N Y Y N Y N 45%
14 ^ ^ ^ ^ Y N N Y 40%
15 ^ ^ ^ ^ N Y Y N 25%
16 ^ ^ ^ ^ N Y N Y 15%
|  #  |    条件1ー1    |      条件1-2      |     条件2-1      |     条件2ー2      |     条件3ー1     |     条件3-2     |     条件4ー1     |     条件4-2     | 結果 |
| --- | ---------------- | -------------------- | ------------------- | ------------------- | ------------------ | ------------------ | ------------------ | ------------------ | ---- |
| #   | 会員ランク:一般 | 会員ランク:ゴールド | 商品発売日:3年以内 | 商品発売日:3年以上 | セール対象品:あり | セール対象品:なし | クーポン有無:あり | クーポン有無:なし | 結果 |
| 1   | Y                | N                    | Y                   | N                   | Y                  | N                  | Y                  | N                  | 40%  |
| 2   | ^                | ^                    | ^                   | ^                   | Y                  | N                  | N                  | Y                  | 35%  |
| 3   | ^                | ^                    | ^                   | ^                   | N                  | Y                  | Y                  | N                  | 20%  |
| 4   | ^                | ^                    | ^                   | ^                   | N                  | Y                  | N                  | Y                  | 10%  |
| 5   | ^                | ^                    | N                   | Y                   | Y                  | N                  | Y                  | N                  | 35%  |
| 6   | ^                | ^                    | ^                   | ^                   | Y                  | N                  | N                  | Y                  | 30%  |
| 7   | ^                | ^                    | ^                   | ^                   | N                  | Y                  | Y                  | N                  | 15%  |
| 8   | ^                | ^                    | ^                   | ^                   | N                  | Y                  | N                  | Y                  | 5%   |
| 9   | N                | Y                    | Y                   | N                   | Y                  | N                  | Y                  | N                  | 50%  |
| 10  | ^                | ^                    | ^                   | ^                   | Y                  | N                  | N                  | Y                  | 45%  |
| 11  | ^                | ^                    | ^                   | ^                   | N                  | Y                  | Y                  | N                  | 30%  |
| 12  | ^                | ^                    | ^                   | ^                   | N                  | Y                  | N                  | Y                  | 20%  |
| 13  | ^                | ^                    | N                   | Y                   | Y                  | N                  | Y                  | N                  | 45%  |
| 14  | ^                | ^                    | ^                   | ^                   | Y                  | N                  | N                  | Y                  | 40%  |
| 15  | ^                | ^                    | ^                   | ^                   | N                  | Y                  | Y                  | N                  | 25%  |
| 16  | ^                | ^                    | ^                   | ^                   | N                  | Y                  | N                  | Y                  | 15%  |

本記事における探索結果の補足

本記事では、生成AIのLLMモデルとして、gemini-1.5-pro-002を利用しました。
LLMモデルの種類(例えばOpenAIのGPTや、AnthropicのClaudeなど)や、同じモデルのバージョンによっても、今回の調査結果は大きく変わる可能性があります。

本記事における探索結果は、あくまでもgemini-1.5-pro-002における結果であり、他のLLMモデルなどにも同様に適用できるかは不明である点に注意が必要です。

また、実際にプロンプトを作成する場合は、LLMモデルによって適当なテーブル記法が異なることを想定して「テーブルの記法を変換するためのプロンプトを作成する」「テーブルの記法を変換するためのツールを利用、あるいは作成する」といった対応を行うとよいでしょう。

8
0
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
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?