Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChatGPTによるデータ変換がもたらすインパクト

 ChatGPTによるデータ変換がもたらすインパクト

2023/03/23 ChatGPT選手権!エンジニアリングに組み込んでみたらこうなりました LT大会
https://findy.connpass.com/event/276736/

Masahiro Nishimi

March 22, 2023

Transcript

13 slides
  1. @mah_lab / Masahiro Nishimi • 山梨でIT会社を営むプログラマ • 2年前に東京から山梨に移住 • 大自然の中、リモートワークでひきこもり中

    • Ruby on Railsで日々Webアプリを開発 • ChatGPTがないと仕事にならない 移住先で庭いじりする様子
  2. 構造化データ to 構造化データ https://note.com/mahlab/n/n0c116e38a5b5 ノーコードツールである kintoneのデータ定義(JSON)をコンテキストとして与えた 上で、機能要件に従ってアプリのデータ定義を生成してもらう。 汎用データ定義 フォームのフィールドの種別が以下の JSONのように定義されてい

    る。 【ここにkintoneのデータ定義 JSONを貼り付ける】 例えば「文字列 __1行_」キーの示す情報は以下である。 - 項目の名前: 文字列__1行_ - 項目の型: SINGLE_LINE_TEXT この定義を利用し、以下の項目を備える採用管理アプリケーション のデータ構造を表すような JSONを作成せよ。また codeはプログラ ムコードからの利用がしやすいよう、英数文字で表現せよ。 - 名前(テキスト、名字と名前を分けること) - 性別(選択式) - 誕生日(日付) - 電話番号(テキスト、構造化する) - 学歴(テーブル式で複数行登録できるように) - 職歴(テーブル式で複数行登録できるように) - 資格取得歴(テーブル式で複数行登録できるように) - 志望動機(テキスト) - 自己PR(テキスト) アプリのデータ定義 プロンプト この発想を元にノーコード ツールにおける自動アプリ生 成は可能だと考えられる
  3. 非構造化データ to 構造化データ https://note.com/mahlab/n/n998d8601cfab PDF内の文字列をテキストデータに変換した上で、指定のフォーマットに大規模 言語モデル(GPT)を用いて変換する。 区分 年 実 数

    対前回増減率(%) 平成3年=100 実 数 (人) 対前回増減率(%) 平成3年=100 実 数 (万円) 対 前回増減率(%) 平成3年=100 平成3年 1,147 △1.8 100.0 5,194 5.9 100.0 15,930,427 15.9 100.0 6 1,077 △ 6.1 93.9 5,000 △ 3.7 96.3 14,540,481 △ 8.7 91.3 9 1,016 △ 5.7 88.6 5,124 2.5 98.7 13,940,972 △ 4.1 87.5 11 993 △ 2.3 86.6 5,162 0.7 99.4 13,264,532 △ 4.9 83.3 14 930 △ 6.3 81.1 4,964 △ 3.8 95.6 11,430,624 △ 13.8 71.8 16 868 △ 6.7 75.7 4,885 △ 1.6 94.1 11,687,119 2.2 73.4 19 807 △ 7.0 70.4 4,516 △ 7.6 86.9 10,663,723 △ 8.8 66.9 24 618 △ 23.4 40.2 3,565 △ 21.1 △ 32.1 8,660,500 △ 18.0 △ 19.8 26 609 △ 24.5 53.1 3,323 △ 26.4 64.0 8,578,315 △ 19.6 53.8 28 724 18.9 67.2 4,368 31.4 87.4 9,108,900 6.2 62.6 商 店 数 従 業 者 数 年 間 販 売 額 \n\n注:平成21年商業統計調査は中止\n\n資料:商業 統計調査 [ { "年": "平成3年", "商店数": { "実数": 1147, "対前回増減率_%": -1.8, "平成3年=100": 100.0 }, "従業者数": { "実数": 5194, "対前回増減率_%": 5.9, "平成3年=100": 100.0 }, "年間販売額": { "実数": 15930427, "対前回増減率_%": 15.9, "平成3年=100": 100.0 } }, … ] 行政文章 Unstructuredなどを用いテキスト化 GPTによるJSON化 アドホック データ 標準化 データ 秩序がある カオス 気分次第 コード化 領域 分析コスト次 第 基本的に 目でコピペ
  4. データ量が多い場合はプロンプトの工夫が必要 GPT-4がカジュアルに利用可能になれば解決されるが、GPT3.5を利用する場合はトークン数制限に気を配る必要がある(制限:リク エスト + レスポンスが4096トークン以内) 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) 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_prompt2.forma t(columns=columns, requirements=requirements, data=compressed_text))]) print(result.content) age,male,female,total 0,149,143,292 1,133,148,281 2,148,163,311 3,175,171,346 4,177,159,336 5,176,164,340 6,177,158,335 7,186,187,373 8,176,160,336 9,197,193,390 10,197,173,370 11,171,180,351 12,200,194,394 13,197,198,395 14,215,199,414 15,220,197,417 ... 105,0,1,1 106,0,0,0 107,0,1,1 108,0,1,1 プロンプトは基本的に英語で 具体的にどのようなデータを 抽出して欲しいか書く

More Decks by Masahiro Nishimi

Other Decks in Programming