見出し画像

【3/23登壇】「ChatGPTによるデータ変換がもたらすインパクト」資料解説

「ChatGPT選手権!エンジニアリングに組み込んでみたらこうなりました LT大会」のLTでお話しする機会を頂きました。

最終的に1761名の方が参加登録されるという凄まじいイベントになり、Twitterでの盛り上がりもIT勉強会らしい盛り上がり方でとても良い雰囲気でした。素晴らしい運営をしてくださったFindyのみなさま、貴重な機会を下さり、ありがとうございました。

登壇資料の解説

お話しした資料はこちらです。

基本的には以前noteに書いた非構造データ→構造データの話がベースなのですが、

資料では人口世帯数のPDFデータパースの解説も新しく説明に加えました。

https://www.city.fujiyoshida.yamanashi.jp/info/228

LTなのでさらっと「できちゃいますよ」ぐらいしか話せていなかったのですが、このように1枚のPDFに複数の情報が掲載されている資料は厄介です。

テキストデータに落としてみると2種類のデータがごちゃごちゃに入り混じっていることがわかります。

入り混じるデータたち

途中経過のプロンプトは既に消失してしまい、残念ながら失敗の途中経過をお見せすることはできないのですが、取り組んでいる最中は以下のような問題が度々発生し、なかなかパースが上手くいきませんでした。
(GPT-3.5 APIで実施)

  • 0歳から59歳のデータを出力して止まる

  • 10歳から急に70歳に飛ぶ

  • 年齢に「上暮地」といった地名が入り出す

  • などなど・・・

ちなみにChatGPTの画面経由でGPT-4から取り組んでもらったところ、サクッと満足の行くCSVを返してくれました。GPT-4が一般にも使えるようになれば、何も問題はなくなるのかも知れません。
(なかなかウェイティングリストからお呼びがかからない)

優秀なGPT-4

最終的にたどり着いたのが以下のようなシンプルなプロンプトです。

from langchain.prompts.prompt import PromptTemplate
template = """
Given the data, convert the population by age into a CSV format with the following columns:

{columns}

# requirements:
{requirements}

# data:
{data}
"""
data_to_csv_prompt = PromptTemplate(input_variables=["columns", "requirements", "data"], template=template)

プロンプトの構造は以下の通りです。

  • 与えられたデータから年齢別人口データをCSVに変換して欲しい:

  • (CSVにして欲しいデータ列を指定)

  • 要求:(変数で与える)

  • データ:(変数で与える)

このプロンプトテンプレートを利用して、以下のようにAPIを叩くことで0歳から108歳までのCSVデータを得ることができました。

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    HumanMessage,
)
chat = ChatOpenAI(temperature=0)

columns = """
- age
- male
- female
- total
"""
requirements = """
Output data from 0 to 108 years old
"""
result = chat([HumanMessage(content=data_to_csv_prompt.format(columns=columns, requirements=requirements, data=compressed_text))])
print(result.content)
  • 「年齢、男、女、合計」を列とすること

  • 0歳から108歳までのデータを出力すること

無事に108歳まで出力された

資料の形式毎にコードを書くほどには工数はかからないですが、同一ページ内に複数の情報がレイアウトされている場合はデータ量が多くなることでトークン数制限がきつくなるのと、そもそものレイアウト読み取り自体がいくら大規模言語モデルでも困難となることがあるので、パースに特化したプロンプト作成のノウハウが問われることになりそうです。

とはいえGPT-4が一般に使えれば画像からそのままパースできるようにもなると思うので、そうなると小賢しいプロンプト作成ノウハウも一気にいらなくなる可能性もあります。

このあたりが過渡期のツライところですねー。
あるべき論で言えば、小賢しいプロンプト作成ノウハウなしに扱える方が望ましい姿であることは確かです。

「もくもくLangChain」へのお誘い

そんな話とあわせて告知させて頂いたのが「もくもくLangChain」の初回イベントです。3月29日の20時からもくもくやります。

LT会でもチラホラLangChainを扱った事例が出てきていましたが、あまりにも急速にバージョンアップが進んでいるライブラリであることと、ぶっちゃけOpenAIのAPIしか叩かないのであれば素で呼び出し部分を書いた方が読みやすかったりして使う意義がそもそもあるの?みたいな話もあったりして、賛否が分かれているライブラリでもあるなーと感じています。

とはいえ界隈のニーズにあわせて急速に成長しているライブラリであることを踏まえると、このライブラリを深く知ることで世界的にどんな方向で取り組みが進められているのかを掴むことができる、ということでもあるかなと思っています。

スピードの速い世界でもあるだけに、一人で探求を続けるにも限界があり、孤独に取り組んでいる仲間同士で知見が共有できると良いなーと思っています。「もくもく会」とは言いつつ、ワイワイ話しながら盛り上がれると良いかなと思っていますので、ぜひ気軽な気持ちで参加頂ければと思います。

初回以降は隔週ペースで会を開いていくようなイメージで考えています。

また、この会の開催にあたって、AIDDというコミュニティのDiscordを間借りさせて頂けることになりました。主催のサガワフミヤさん、ありがとうございます!AIDDの詳しい説明については以下のnoteをご覧下さい。

「ChatGPT」の今後について思うこと

正直今はバズワード的にChatGPTが神輿に上がっている状況なので、何でもChatGPTと入れれば注目が集まるボーナスゲームのような状態になっているかと思います。

そんなボーナスゲームの期間中にとりあえず「ChatGPT」というキーワード付きのプレスリリースを出したいがために開発が加速しているという背景もあるので、ユーザー目線無視のAIアシスタント機能が続々リリースされていくんだろうなーと思います。

必要なのはこんな狂想曲に真面目に追いついていこうとすることではなく、地味な問題に対しても一つ一つ適用実験と検証を繰り返していくことでAIによって確実に世界が変わっていくという実感を得ながら進んでいくことであって、そのためにも息が長く、静かで熱いコミュニティが形成されることを期待しています。

現場からは以上です。

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