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
Tweet

More Decks by Masahiro Nishimi

Other Decks in Programming

Transcript

  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 プロンプトは基本的に英語で 具体的にどのようなデータを 抽出して欲しいか書く