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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    基本的に
    目でコピペ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide