サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
note.com/kan_hatakeyama
はじめに最近、大規模言語モデルの開発が終わり、少し余裕が出てきたので、noteの投稿をちょくちょく再開していくかもしれません。 第一弾は、2024/8/13に公開されて話題になった、「AIサイエンティスト」の読解記録です。 こちらは、気にはなっていたのですが、手つかずの論文でした。 そろそろ締切の科研費の申請書の参考になりそうなのと、某件で解説を頼まれたので、読むことにしました。 本記事は、ただのメモ書きです。体系的・学術的に正確に論文を読み解くものではないのでご了承ください。 論文の読み方の参考になるかもしれないと思ったので、時系列に書いていきます。 読む前の疑問など(8/22, 11:40頃) 論文を読む前に思った疑問を、つらつらと書いておきます。 基本的には、厳しめの視点で読んでいきます。 今のオープンな最先端モデルに、どこまで科学研究ができるか? GPT4o, Claude3.5-
はじめに最近は大規模言語モデルのファインチューニングにハマっています。 10bクラスの言語モデルが、どのようなメカニズムを通してユーザーの質問に回答できるようになるかについて、調べています。 最近の検討で生じた仮説は、「10bクラスのモデルは、実は質問文を殆ど理解できていない」というものです。 本記事ではどのようなデータを学習したときに、llm-jp-evalという評価セットに含まれるJCommonsenseQAというタスクを解けるようになるか、果たして、10bクラスのモデルは何を「理解」している/いないのか、そして、指示を理解できるようになるための必要な訓練量について、調べて行きたいと思います。 コードはこちら ※ これは正確な学術的検証ではありませんので、ご了承ください。きちっとやってくれる方や、良い参考文献をご存知の方がいたら、教えていただけると、大変助かります。 今回のタスクJCo
(以下、時間の都合上、まだきちんと校正できておりません。ご了承ください) 4/1追記: こちらの記事の方が、きちっとした検証がなされています。 はじめに大規模言語モデルは大きく、1)事前学習、2)ファインチューニングの二段階によって訓練されます。2)ファインチューニングは、ざっくり言えば、「人間と対話するための訓練」です。すなわち、人間の指示を理解し、期待される回答をするための練習をする作業に相当します。GPT-4やClaude 3などはモデルサイズも大きく、非常に注意深くファインチューニングされている(との噂の)ため、様々なタスクをこなすことが可能です。 これに対し、数ー数十b程度のサイズを持つオープンな「ローカルモデル」については、「どのような」データを、「どの程度」学習させることによって、対話能力を獲得できるようになるかが、十分にはわかっていない模様です※。 ※もちろん、種々の研究は
はじめに大規模言語の事前学習には、Webデータを片っ端からダウンロードしたサイト(CommonCrawl, CC)が大活躍します。 普通はCCを使いやすい形で加工したコーパスを用いるのですが、今回は生データにアクセスして解析してみました。 ファイルをダウンロードする兎にも角にも、ファイルをダウンロードすることから作業が始まります。 URLリストを取得するまずは上記CCのサイトにアクセスし、どの年のデータをダウンロードしたいか選択します。 次に、warc.path.gzをダウンロードします。 こちらには各データへのURL一覧が格納されています。 備考: WARC,WAT,WETとは?「warc」、「wat」、「wet」という用語は、Common Crawlのコンテキストで使用されるファイル形式を指します。Common Crawlは、インターネットの広範囲にわたるウェブページをクロールし、その
要点大規模言語モデル(10-50b)の開発に関わることになりました。 オープンソースの短期集中プロジェクト(24年3-8月)です。 データセットやコードなどを随時オープンに開発し、共有する予定です。 こちらのプロジェクトのチームリーダの一人をつとめます。下記URLに記載のSlackから、誰でも参加できます(オープンな部分の開発、助言、コメント、情報収集など)。 プロジェクトのslackにも誰でも参加できます。見るだけの参加もOKです。 (参加方法はページの末尾を参照) 24/3/4追記 オープンな日本語の指示データセットを作っています。 誰でも投稿・利用できるフォームと、作り方のコツなどが記されています。 経緯: どうしてそうなったのか? (読み飛ばしOK)(細かな話なので、読み飛ばしても支障のないセクションです) 筆者の本業は一応、化学者(大学教員 in 2024)なのですが、ITや機械
はじめに以下のオープンなプロジェクトの一環で、大規模言語モデルをフルスクラッチで作る練習をします。24年3月現在、協力者も募集中です。 リポジトリ当該プロジェクトの標準コードが公開※されたので、それを走らせてみます。 ※24/3/5時点で、まだレポジトリ内に、工事中の箇所が多々、あります。 このリポ上では、事前学習ー事後学習ー評価まで、一気通貫(?)したパイプラインが提供されています※。 0. 環境構築プロジェクトの本番環境はクラウドですが、今回は手持ちのubuntuを使います。 Dockerはお手軽な一方で、スパコン上で使うと、どうやら速度が落ちるらしいとの噂を聞いたので、condaで作ります(とはいえ、pipしか使わないので、pyenvでもいけると思います)。 必要なマシン適当なlinux: 例えばUbuntu 22.04.3 LTS GPU: 20 GBくらいは欲しいかも? ディスク
これは二段構えの構成を持っています。この二段構えを正確に検出し、テキストを理解することが望ましいです。 Unstructuredを使うPythonのライブラリであるUnstructuredを試してみましょう。 参考記事 導入は非常に簡単です。 pip install 'unstructured[pdf]' 実装も簡単です。 解析コード: from unstructured.partition.pdf import partition_pdf pdf_elements = partition_pdf("pdf/7_71_5.pdf") 表示コード: for structure in pdf_elements: print(structure) 結果: 残念ながら、2段組のカラムを正確に検出することはできませんでした。 Grobidを使うGrobidは、peS2oというオープンアクセス論文のコ
はじめに日本語データセットが含まれるものをまとめています。 情報があったら教えてください。 llm-jpの厳選リストも要参照 データセットのレビューなど
はじめに英語の論文をGPT4に執筆させた際の手順を記します。 普段からChatGPTを使っている人にとっては、当たり前のやり取りしかしていないのですが、意外と使えていない方がnon-AI分野では多いので、丁寧にプロンプトを示していきます。 (ワークショップで解説する必要が出てきたので、そのためのメモ書きです) GPT-4に論文は書けるのか?ゼロから書かせるのは難しいですが、日本語の下書きを英訳するのは得意で、少なくとも筆者が満足する品質のテキストが得られます。 GPTを使って執筆をするメリットDeepLやGoogle翻訳と違い、英文のスタイル(e.g., 論文調)を明示的に指示できるので、翻訳のクオリティが高い 日本語ネイティブにとっては、日本語で書いた方が圧倒的に楽※ スペルミスや文法ミスを犯さないので、校正の手間も減る。※ 基本的に翻訳タスクしか行っていないので、GPTが過去の類似文章
更に早い規格(Thunderbolt™4: 40Gbps)も存在するようですが、用いるマシンの端子が対応しているか不明だったので、こちらの品にしました。 GPUなどに比べ、圧倒的にSSDの転送速度が遅い点に注意が必要です。GPU(や最先端のCPUメモリ)だとテラバイトレベルの帯域があります。 なので、今回の構成では、読み込み・書き込み速度が1/1000程度に落ちる可能性があります。 実装スワップメモリの確保nvme対応のSSDであれば、単純にdeepspeedのjson設定を"nvme"に変更するだけでOKです(リンク)。 今回のデバイスはnvme対応ではなかったので、cpuメモリにオフロードしつつ、不足部分をlinuxのスワッピング機能で補う戦略を取ります。 SSDをフォーマットします。(今回のケースでは、SSDは/dev/sdb2で認識されました) sudo mkfs.ext4 /de
理論: LoRAとフルパラメータファインチューニングではどこが異なるのか?LoRAはどこを更新するか?例えばtransformersのpeftライブラリの場合、llamaにおいてはattention 層のquery (q), value (v)のみをデフォルト設定で更新しているようです。 しかし、llama2-7bには300近い層(named_parameters)が存在します。 次のコマンドで、層を確認してみます。 from transformers import pipeline from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig import torch #モデル読み込み model_name = "meta-llama/
背景と目的大きめのサイズ(>数b)の大規模言語(LLM)をファインチューニングします。 ファインチューニングにはLoRAやQLoRAと呼ばれる手法が良く使われ、一般家庭レベル(?)のGPUでも動かせるようになってきています。 しかし、LoRAで学習させられる知識や情報には、制約があるのでは、とも囁かれています。 そこで、本記事は、loraではないフルパラメータのファインチューニングを、限られたGPUメモリで行います。 deepspeedというライブラリを使います。 deepspeedにはモデルの動作に必要なメモリをCPUメモリに移す機能などがあるようで、それを使います(キーワード: offload, ZeRO)。 7bモデルは20GB程度のVRAMで学習できました。 以下の公式チュートリアルをもとに進めたいところですが、情報が断片的で、自分にはあまり理解できなかったので、webサイトを適当
概要23年8月時点におけるオープンソース大規模言語モデルの筆頭とも言えるLlama2を使い、専門テキストをファインチューニングした際のメモです。 言語モデルに知識を追加するのは、意外と難しいということがわかりました。 前提となるコード類は以下の記事などを参照 学習データ筆者が所属している学会の一つである、高分子学会の年次大会(2023年)の予稿集を学習させてみることにしました。 (学会の参加者のみが入手可能な、クローズドなデータです) pdfは単体で500 MBほどあります。ここから、テキストだけを抜き出しました。 処理後の平文のテキストは約150万文字(3.7 MB)でした。 参考: pdf to textのコード本筋ではありませんが、解析コードを張っておきます。 pdfの分割 #pdfの分割 import os from PyPDF2 import PdfReader, PdfWrit
概要話題のLLama2をQLoraでファインチューニング なにか新規情報を学習させたときに、モデルがどの程度、何を学んでいるかを確かめます 試しに、「富士山といえばなすび」というテキストでモデルを洗脳した結果を見てみます QLoRA詳細は以下の記事を参照 学習データ [ { "input": "", "output": "### Human: 富士山といえば?### Assistant: なすび" }, { "input": "", "output": "### Human: 明日の天気は?### Assistant: 雪" }, { "input": "", "output": "### Human: 東京といえば?### Assistant: 神田川" }, { "input": "", "output": "### Human: AIといえば?### Assistant: Llama
話題のモデルのセットアップ Llama2とは商用利用が可能(諸説あり)で、GPT3並の性能を持つ、オープンソースモデルの本命です(2023/7/19時点) 利用方法いくつかあります 手段1 Metaの公式モデルを使う 登録必要 あまり使いやすくない印象です 13b以上は、GPU並列利用が基本(?) 手段2 Hugging faceの公式連携モデルを使う 登録必要 便利です 手段3 野良モデルを使う 登録不要 これが一番簡単です 手段1 Metaの公式モデルを使う利用申請(必須)やや特殊なライセンス形態なので、Metaに申請する必要があります。 申請には1-2日ほどかかるようです。 → 5分で返事がきました。 モデルのダウンロード ※注意 メールにurlが載ってますが、クリックしてもダウンロードできません(access deniedとなるだけです)。 指示のとおりに、ダウンロードする必要があ
2023/11/13追記以下の記事は、Llama2が公開されて数日後に書いた内容です。 公開から数ヶ月経った23年11月時点では、諸々の洗練された方法が出てきていますので、そちらも参照されることをおすすめします。 (以下、元記事です) 話題のLamma2をファインチューニングします。 QLoRAライブラリを使うパターンと、公式推奨の2つを試しました。前者が個人的にはオススメです。 前提Hugging faceで配布されている公式のモデルが必要です。以下を参考に、ダウンロードしておきます。 データセット作成 (7/20 15:20追記 設定ミスってたので修正しました) test.jsonを適当に作ります。 [ { "input": "", "output": "### Human: 富士山といえば?### Assistant: なすび" }, { "input": "", "output":
最近は、GPTのpromptにオリジナル文書を載せて回答させるchatbotが流行ってます。 文章検索は、GPTのembedベクトル計算機能を使うのが一般的で、llammaindex などのライブラリにも内蔵されています 個人的には、SBERTやローカルLLMでも、大丈夫だと思っています しかし、実際に運用してみると、思ったように動かないという問題に直面します ベクトル検索の利点 https://qdrant.tech/articles/hybrid-search/キーワード検索の利点 https://qdrant.tech/articles/hybrid-search/ベクトル検索は、意味にフォーカスした検索が可能で、従来のキーワード検索は、単語を拾うのが得意、という感じです。 ベクトル検索で個人的に困った点ベクトル検索では、目的の文書になかなか辿り着けないという問題に直面しました。特に
背景 背景はこちらの記事と同じです 最近は、GPTが流行ってます しかしGPT-3.5以降はfine tuningが執筆時点でできません なので、オリジナルデータを学習させるには、少し工夫が必要です 要するに、文章のembedding vectorを計算する必要があります しかし、GPTのAPIは地味に値段が高いため、pdfが100個くらいあったりすると、破産する恐れが出てきます 目的 最終的な推論はGPT-3.5 or 4にやらせるとして、embedding vectorの計算は、もう少しローコスト・低性能なLLMで良いのではないかと、誰しも考えるはずです 或いは、google検索のような、index検索を使うのも手です ただしこの場合は、言語を跨いだ検索などが難しそうです そこで、一般のご家庭のPCでも動き、日々タケノコの如く報告されるLLMの中でも、群を抜いていると評判のvicuna
概要背景 最近は、GPTが流行ってます しかしGPT-3.5以降はfine tuningが執筆時点でできません なので、オリジナルデータを学習させるには、少し工夫が必要です 要するに、文章のembedding vectorを計算する必要があります しかし、GPTのAPIは地味に値段が高いため、pdfが100個くらいあったりすると、破産する恐れが出てきます 目的 最終的な推論はGPT-3.5 or 4にやらせるとして、embedding vectorの計算は、もう少しローコスト・低性能なLLMで良いのではないかと、誰しも考えるはずです 或いは、google検索のような、index検索を使うのも手です ただしこの場合は、言語を跨いだ検索などが難しそうです そこで、RNNでTransformer並みの動きをすると話題のRWKVで、embedding vector的なものを計算してみようと考えまし
このページを最初にブックマークしてみませんか?
『Kan Hatakeyama|note』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く