GPT-4oに危険物取扱者試験(甲種試験)を解かせてみる-その2: RAG用のテーブルデータの取得と読解-


はじめに

こちらの記事の続きです。

前回は、GPT-4oに、日本特有の専門データとして、危険物取扱者試験を解かせてみました。わりと高得点でしたが、残念ながら、日本の法令や化学・物理化学の問題で躓いてしまったため、惜しくも不合格レベルなことがわかりました。

本記事では、RAGを想定して、法令データを読み込みながら回答するシステムが動くかを調べていきます。

今回解きたい問題

以下の問題を解きます。

法令上、危険物とその消火に適応する消火器との組合せについて、次のうち誤っているものはどれか。
"1: 二酸化炭素(第4類危険物に適応)",
"2: 強化液(霧状)(第4類、第5類、第6類危険物に適応)",
"3: 水(棒状)(第5類、第6類危険物に適応)",
"4: 泡(第4類、第5類、第6類危険物に適応)",
"5: 粉末(りん酸塩類等)(第4類、第5類危険物に適応)"

https://www.shoubo-shiken.or.jp/exercise/index.html の過去問より引用 (表はテキストに変換)

正解は5なのですが、GPT-4o, OpenAI-o1-preview, Gemini-1.5-flash, Claude-3.5-sonnet全てで、誤答でした。日本の法令に関するきちんとした知識が無いことが原因と思われます。

RAGのためのデータ準備をする

上記の問題に回答するためには、消化器がどの危険物に使えるかについての知識が必要です。この情報は、法令に記載されているようです。

以下のような表を読み解くことで、回答が可能になります。
粉末(りん酸塩類等)は第五類に使えないことが読み取れるので、選択式5が誤りだったことがわかります。

https://laws.e-gov.go.jp/law/334CO0000000306 を元に作成

課題: モデルは表の読み取りがまだ苦手

はじめは、Webページ上の表をそのままコピペしたり、当該領域のhtmlコードを貼り付けた上で、上記の問題を解かせてみたのですが、どのモデルも、適切に回答することが出来ませんでした。
フロンティアモデルといえども、情報処理の正確性には課題が残ることが良くわかりました。

表を変換する

この表の最大の問題点は、行・列の見出しで、不規則な形でセル結合がなされていることです。人間は視覚的に情報を処理するのが得意なので、セルの読み取りがそこまで難しくありませんが、文字列しか読み取れないLLMにとっては、混乱の原因になります。

LLMを使い、当該情報をもとに、もう少し整理された表を再作成しようとしてみました。
が、変換ミスだらけなことがわかりました。

そこで今回は、仕方がないので、htmlタグをpythonで解析しながら、半自動で表データを作りました。
(beautifulsoupで読み出し→ pandasで読み込み→excelに出力→人間が微修正)

細々とした処理を加えることで、行・列の見出しが、それぞれ一つだけになるシンプルな表が得られました。

こちらのシンプル化された表をコピペして与えてやりながら、GPT-4oやOpenAI-o1などに問題を解かせてみました。
が、残念ながら、誤答しか得られませんでした。
表の読み取りが苦手なようです。

表をテキストに変換する

大規模言語モデルは表の読み取りが必ずしも得意ではないことがわかってきたので、次は以下のようなコードで、表をテキストに変換してみました。

modif_df=pd.read_csv("table_modif.csv")

shokaki_dict=modif_df.to_dict(orient='records')

shokaki_list=[]

for d in shokaki_dict:
    text=""
    for key in d:
        if key=="消火設備の区分-消火設備の区分-消火設備の区分":
            text+=d[key]+":"
        else:
            if d[key]==d[key]:  
                text+=key+","
    if text[-1]==",":
        text=text[:-1].strip()
    shokaki_list.append(text)

shokaki_list

元の表を使う場合、「消化器を探す → 適用できる危険物の種類を、「◯」を見ながら探す → 危険物XXに適用できると読み取る」という読み取りプロセスが必要でした。
一方、生成したテキストは、一連の作業をルールベースで行いました。
どの消化器がどの危険物に適用可能なのかが、明示的に書き出されています。

例えば、
第一種-屋内消火栓設備又は屋外消火栓設備-屋内消火栓設備又は屋外消火栓設備」というジャンルの消化器が、
建築物その他の工作物,第一類の危険物 その他の第一類の危険物,第二類の危険物 引火性固体,第二類の危険物 その他の第二類の危険物,第三類の危険物 その他の第三類の危険物,第五類の危険物 ,第六類の危険物
という用途で使える、といった旨のテキストが生成されています。

テキスト化された法律データを元に回答させる

当該問題 + テキスト化された法律データを与えて問題を回答させた結果、以下の結果となりました。

  • OpenAI-o1: 正解

  • GPT-4o: 不正解

  • Claude-3.5-sonnet: 正解

  • Gemini-1.5-pro: 不正解


いずれのモデルも、参考テキストを与えないと、「水(棒状)」が間違いだと回答する傾向にありました。GPT4o, Geminiの場合、当該テキストを与えても、この信念は変わらず、誤答を続けました。以下は、GPT-4oの回答です。

この問題は、危険物と適応する消火器の組み合わせに関するもので、誤った組み合わせを選ぶ必要があります。

選択肢の中で誤っているものは以下です:水(棒状)(第5類、第6類危険物に適応)


この選択肢が誤りです。
理由: 棒状の水は電気を通しやすいため、燃焼しやすい液体や油、電気設備などには使用できません。第5類(自己反応性物質)や第6類(酸化性液体)に対しては適さないため、この選択肢が誤りです。

他の選択肢は適切な組み合わせです。

これに対し、Claudeなどは、与えられた文章を読み解きながら、回答することができました。文章を読解することで、モデル自身の信念が変わったと言えそうです。

この問題を解くために、各選択肢を順番に検討し、危険物の分類と適切な消火器の組み合わせが正しいかどうかを確認します。

1. "二酸化炭素(第4類危険物に適応)"
正しい。二酸化炭素消火器は第4類危険物(引火性液体)に適しています。

2. "強化液(霧状)(第4類、第5類、第6類危険物に適応)"
正しい。霧状の強化液消火器は第4類、第5類、第6類危険物に適しています。

3. "水(棒状)(第5類、第6類危険物に適応)"
正しい。棒状の水消火器は第5類、第6類危険物に適しています。

4. "泡(第4類、第5類、第6類危険物に適応)"
正しい。泡消火器は第4類、第5類、第6類危険物に適しています。

5. "粉末(りん酸塩類等)(第4類、第5類危険物に適応)"
誤り。粉末消火器(りん酸塩類等)は実際には第4類、第6類危険物に適していますが、第5類危険物には適していません。

したがって、誤っているのは5番目の選択肢です:
"粉末(りん酸塩類等)(第4類、第5類危険物に適応)"

正しくは、粉末消火器(りん酸塩類等)は第4類、第6類危険物に適応します。

まとめ

本記事では、各種フロンティアモデルが、「与えられた情報をもとに回答する能力があるか(読解力があるか)」 (RAGをする素質があるか)をチェックしました。

その結果、Claude-3.5-sonnet, OpenAI-o1-previewで、期待した回答が得られました(GPT-4o, gemini-proでは誤答)。

一方、いずれのモデルにおいても、表形式のデータは、一旦、半手動でテキストに変換してあげるなどの前処理を加えてやる必要がありました。

大規模言語モデルは高性能、との評判は多くありますが、実際に使ってみると、今回のように、実は出来ない作業が多いことがよくわかります。
一つ一つのユースケースについて、能力の限界や補助作業の必要性を見極めていく必要がありそうです。

今後は、検索システムと連動したRAGの可能性について検証予定です。

この記事が気に入ったらサポートをしてみませんか?