<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>LLM on Data Visualization Japan</title>
        <link>https://data-visualization.jp/tags/llm/</link>
        <description>Recent content in LLM on Data Visualization Japan</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja-jp</language>
        <lastBuildDate>Fri, 29 Dec 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://data-visualization.jp/tags/llm/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>LT：藤井 政登／LLMに学習指導要領をファインチューニングしてみた</title>
        <link>https://data-visualization.jp/lt-llm-finetuning/</link>
        <pubDate>Fri, 29 Dec 2023 00:00:00 +0000</pubDate>
        
        <guid>https://data-visualization.jp/lt-llm-finetuning/</guid>
        <description>&lt;p&gt;Data Visualization Japan Meetup 2023（2023年12月29・30日開催）における、藤井 政登さんのLTです。大学院生として取り組んでいる、LLM へのドメイン知識の追加学習について、研究途中の報告をします。&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/0tX5THAXyws&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;藤井です。62歳で、今は大学院の M2 です。今日は院生としての立場で、自分の研究について話をさせていただこうと思います。&lt;/p&gt;
&lt;p&gt;大規模言語モデル（LLM）が出てきて、これをファインチューニングしてドメイン知識を勉強させようと。私の年だと84歳にシンギュラリティが来る予定だったので、&lt;strong&gt;その前に人工知能を扱える&lt;/strong&gt;ということで、もう毎日これで遊んでいるという状態になっています。&lt;/p&gt;
&lt;h2 id=&#34;llm-はすでに強力なグラフィックツール&#34;&gt;LLM はすでに強力なグラフィックツール
&lt;/h2&gt;&lt;p&gt;今の LLM は、すでに強力なグラフィックツールです。&lt;/p&gt;
&lt;p&gt;プロンプトで「日本の GDP を中国と比較するグラフを書いて」と書くと、ChatGPT-4 が勝手にグラフを書いてくれます。CSV ファイルをパッと渡して「グラフ化して」と言えばグラフ化してくれる。しかも賢くて、&lt;strong&gt;箱ひげ図に適したデータについてはちゃんと箱ひげ図を使って&lt;/strong&gt;書いてくれるんですね。本当に賢いんです。&lt;/p&gt;
&lt;p&gt;ただ、ここまではできるわけですが、皆さんもお気づきのように、&lt;strong&gt;あるドメイン知識をきちんと加えて LLM に追加学習ができるのか。それによってデータを解析する能力を持たせられるのか&lt;/strong&gt;——これが問題になってきます。&lt;/p&gt;
&lt;h2 id=&#34;何を学習させるか--学習指導要領のコード&#34;&gt;何を学習させるか ― 学習指導要領のコード
&lt;/h2&gt;&lt;p&gt;そこで、&lt;strong&gt;大規模言語モデルがあまり知らなさそうなこと&lt;/strong&gt;を探してみました。&lt;/p&gt;
&lt;p&gt;すると3年前に、文科省が学習指導要領のすべてに対してコードを振っていることが見つかりました。このコードを追加学習させればいいのではないか、と。&lt;/p&gt;
&lt;p&gt;実際、OpenAI のドキュメントを読むと、学習者の属性を与えるとそれに合わせて「こういうところを学習すればいいよ」という学習の問題や解説を出してくれる。&lt;strong&gt;そこに学習指導要領の ID コードを付け加えられればいいのではないか&lt;/strong&gt;——これが今の私の研究です。&lt;/p&gt;
&lt;h2 id=&#34;llm-の3回の学習&#34;&gt;LLM の3回の学習
&lt;/h2&gt;&lt;p&gt;LLM は3回学習しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;① 事前学習（Pre-training）&lt;/strong&gt;：ChatGPT や Google の Gemini 以外にも、Meta 社の Llama、Alpaca、Falcon など、いろいろなエンジンが実際に提供されています。そのほとんどは商用目的は禁止ですが、&lt;strong&gt;学術目的に限定すれば自由に使っていい&lt;/strong&gt;という形で公開されています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;② ファインチューニング&lt;/strong&gt;：ドメイン知識を4000行ほど入れるとそこそこ賢くなる、という論文があります。こうしてあるドメインのデータについて追加学習ができると言われています。OpenAI の API は今年8月、GPT-3.5 Turbo のバージョンからこの機能をリリースしました。値段は結構高いですが、API を叩くことで学習させることが可能です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;③ RLHF（人間のフィードバックによる強化学習）&lt;/strong&gt;：言ってはいけないことを言わせないために、強化学習で学習させるものです。&lt;/p&gt;
&lt;h3 id=&#34;事前学習はほぼ不可能&#34;&gt;事前学習はほぼ不可能
&lt;/h3&gt;&lt;p&gt;このうち&lt;strong&gt;事前学習はほぼ不可能&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;東大の松尾研で聞いた話ですが、ChatGPT-4 は&lt;strong&gt;1億3000万冊の本ほどの情報量&lt;/strong&gt;を学習している。その学習にかかる時間は、NVIDIA A100 ボード（1枚400万円ほど）を &lt;strong&gt;2万5000機使って100日間&lt;/strong&gt;計算させるとこの事前学習済みエンジンができる、という規模です。&lt;/p&gt;
&lt;p&gt;日本の国会図書館の蔵書が4700万冊、A100 ボードが1枚125万円……という規模感なので、事前学習は基本的にできません。だから&lt;strong&gt;ファインチューニングが主な追加学習のやり方&lt;/strong&gt;になります。&lt;/p&gt;
&lt;h2 id=&#34;何が学習されているかを確認する&#34;&gt;何が学習されているかを確認する
&lt;/h2&gt;&lt;p&gt;では、追加学習する土台にどんなデータが入っているのか。&lt;/p&gt;
&lt;p&gt;OpenAI は ChatGPT-4 にどんなデータを学習させているかを公開していません。これでは大学院で論文を書くために使えない。そこで探したところ、&lt;strong&gt;Meta 社の Llama / Llama 2 は学習データを公開してくれています&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Common Crawl のデータ（圧倒的に多い）&lt;/li&gt;
&lt;li&gt;GitHub、Wikipedia&lt;/li&gt;
&lt;li&gt;書籍の情報、論文の情報&lt;/li&gt;
&lt;li&gt;技術系の FAQ や機械の使い方など&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Llama の C4（en バージョン）は 2.3TB ほどありますが、ダウンロードして中身を調査したところ、&lt;strong&gt;文科省の学習指導要領コードは入っていない&lt;/strong&gt;ことが分かりました。それを確認した上で、Llama 2 の 7B モデルを使って学習させています。&lt;/p&gt;
&lt;p&gt;（なお、ニューヨーク・タイムズやオープンアクセスでない論文など、著作権上問題のあるものはデータに入っていません。）&lt;/p&gt;
&lt;h2 id=&#34;エンジンとモデルの探し方&#34;&gt;エンジンとモデルの探し方
&lt;/h2&gt;&lt;p&gt;今、公開されているエンジンはたくさんあります。いろいろ探せば、皆さんも自分の目的にぴったりのエンジンを見つけられるのではないかと思います。&lt;/p&gt;
&lt;p&gt;エンジンを探すときは &lt;strong&gt;Hugging Face Hub&lt;/strong&gt; です。GitLab のようなもので、AI 関係のモデル、データセット、コードがすべてここに集約されています。まずは Hugging Face でいろいろ探してみるのがいいと思います。&lt;/p&gt;
&lt;p&gt;私もここからコードやモデルを落としてきて、Google Colaboratory 上で計算してファインチューニングを行う、ということをこの3か月ずっとやっていました。&lt;/p&gt;
&lt;h3 id=&#34;具体的なやり方は東大-松尾研の教材で&#34;&gt;具体的なやり方は東大 松尾研の教材で
&lt;/h3&gt;&lt;p&gt;詳しいやり方はここではとても説明できませんが、東大の松尾研で今年（8月後半から9月いっぱい）&lt;strong&gt;LLM のサマーセミナー&lt;/strong&gt;がありました。私もこの授業を受けたのですが、ちょうど2日前にそのスライドが公開されました。&lt;strong&gt;5日目のスライドでファインチューニングのやり方が公開されています&lt;/strong&gt;ので、普段 Jupyter Notebook をお使いの方ならこれを読めばファインチューニングできると思います。&lt;/p&gt;
&lt;p&gt;一点、&lt;strong&gt;メモリがかなり必要&lt;/strong&gt;です。Google Colab でやっていると結構メモリ不足で落ちます。データを16ビットから4ビットへ&lt;strong&gt;量子化&lt;/strong&gt;してメモリ使用量を減らすといった工夫が必要になってきます。&lt;/p&gt;
&lt;h2 id=&#34;結果--ほぼうまくいっていません&#34;&gt;結果 ― ほぼうまくいっていません
&lt;/h2&gt;&lt;p&gt;そうして実際にやったのですが、&lt;strong&gt;ほぼうまくいっていません&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;本当にいろいろな人が今やっているのですが、「ファインチューニングがやはりうまくいかないのではないか」「コールセンターのデータを入れても全然ダメだよ」といった話の方が多いです。&lt;/p&gt;
&lt;h2 id=&#34;次の手--rag&#34;&gt;次の手 ― RAG
&lt;/h2&gt;&lt;p&gt;もう1つの方法として &lt;strong&gt;RAG&lt;/strong&gt; があります。これは LLM にデータベースや計算機を使わせてしまおうというもので、&lt;strong&gt;LLM が SQL を吐いてデータベースを検索してくれる&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;この RAG のシステムを使って学習指導要領をうまく検索できないか——これがこのお正月にこれからやろうとしているものです。&lt;/p&gt;
&lt;h2 id=&#34;可視化ツールとして--weights--biases&#34;&gt;可視化ツールとして ― Weights &amp;amp; Biases
&lt;/h2&gt;&lt;p&gt;最後に可視化の話です。&lt;/p&gt;
&lt;p&gt;Jupyter Notebook 上のデータやプロンプトを比較検討しなければいけないので、私は &lt;strong&gt;Weights &amp;amp; Biases（W&amp;amp;B）&lt;/strong&gt; というシステムをよく使っています。&lt;/p&gt;
&lt;p&gt;プロンプトをゼロショット、フューショットなどいろいろ変えて順列組み合わせしたときに、どれくらいの結果が出たのかを突き合わせてくれて、それをグラフで可視化してくれるところまで全部やってくれる、すごく便利なツールです。皆さんも W&amp;amp;B などを使って Jupyter Notebook 上で可視化をしてみるのが、1ついい方法ではないかと思っています。&lt;/p&gt;
&lt;p&gt;今日はまだ研究途中ということで、ここまでで終わらせていただきます。どうもありがとうございました。&lt;/p&gt;</description>
        </item>
        
    </channel>
</rss>
