Slide 1

Slide 1 text

ChatGPTによる データ変換がもたらすインパクト 2023/03/23 ChatGPT選手権!エンジニアリングに組み込んでみたらこうなりました LT大会 @mah_lab / Masahiro Nishimi Edged Edge

Slide 2

Slide 2 text

@mah_lab / Masahiro Nishimi ● 山梨でIT会社を営むプログラマ ● 2年前に東京から山梨に移住 ● 大自然の中、リモートワークでひきこもり中 ● Ruby on Railsで日々Webアプリを開発 ● ChatGPTがないと仕事にならない 移住先で庭いじりする様子

Slide 3

Slide 3 text

日々いろいろ検証中...

Slide 4

Slide 4 text

本日お伝えしたいこと ● Data Transformerとしての大規模言語モデルの可能性 ● 構造化データ to 構造化データの例 ● 非構造化データ to 構造化データの例

Slide 5

Slide 5 text

Data Transformerとしての大規模言語モデルの可能性 ● 「データを生み出している」というよりは、プロンプトを入力として「データを 変換している」と考えられないか? ● プロンプトという非定型なデータから意図したデータを生成できているので あれば、あらゆるデータ変換に活用できるのではないか? ● 例えば非構造化データから構造化データへの変換も可能ではないか? ● と、いうようなことをLangChainなどといったライブラリを利用して検証してき ました。

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

非構造化データ 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化 アドホック データ 標準化 データ 秩序がある カオス 気分次第 コード化 領域 分析コスト次 第 基本的に 目でコピペ

Slide 8

Slide 8 text

プチバズったので中の人に感想を聞いてみたところ 人口世帯数のデータを Excelで扱えると嬉しいな

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

まとめ ● 大規模言語モデルを活用したデータ変換により、これまで活用されて来な かったデータも活用対象になりうる ● 大規模言語モデルは与えられたデータに対するパターン分析に優れてい る。人間では見分けがつかないようなパターンにも気がつき、即座に処理 を行ってくれる。この性質は有効に利用できる ● 現時点ではトークン数の制限がキツいが、これは時間が解決してくれると 思われる(Hyenaなど)

Slide 11

Slide 11 text

【告知】もくもくLangChainやります ● 初回は3/29(水)20:00〜22:00に開催 ● AIDD(AI駆動開発)さんのDiscord上でやります ● connpassで参加登録をお願いします! https://langchain-jp.connpass.com/event/278841 お申し込みはこちら ↓

Slide 12

Slide 12 text

note書いてます、ぜひフォローしてね https://note.com/mahlab/

Slide 13

Slide 13 text

ご清聴ありがとうございました