サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
blog.shikoan.com
2.3k{icon} {views} 複数のLLM(GPT/Claude3)とArxivの検索APIをRAGで統合し、論文サーベイの自動生成を作りました。検索結果の前処理や、サーベイ特有のプロンプトエンジニアリングやソートが重要で、最適化手法として古くからある巡回セールスマン問題(TSP)が有効に機能しました。また、生成部分ではGPTよりClaude3の明確な有効性を確認できました。 できたもの Arxivの検索APIを使って検索拡張生成(RAG)したらサーベイを自動生成できた やっていること Arxivの検索ワードをGPT-4-Turboで生成 ArxivのAPIを叩いてヒューリスティックでフィルタリング OpenAIのEmbedding APIを叩く Embeddingに対して巡回セールスマン問題(TSP)を解いてソートをかける 論文の要旨をGPT-3.5-Turboで要約 ソートした
結構意外な結果が返ってきました。BLEUだけを見ると、 翻訳APIが強い。Amazon Translateが一番良い Anthropicはボロボロ。Claude v2.1はInstantより悪い(この理由は後述) OpenAIのモデルは蒸留で劣化しているなど言われているが、純粋な定量評価だけ見たら順当に進化している。最新のGPT-4はDeepLより定量評価が上。 originalよりsimplifiedのほうが低いのは、simplifiedが意訳なため 定性評価 Anthropicがボロボロなわけ Claude v2.1が最新モデルで一番高いのでそこそこいい文章が出てくると期待していたのですが、これは大きくハズレました。この理由はちゃんとInstructionを聞いていないためです。 { "ID": "Ab_1", "original_ja": "あなたのご都合の良い時にその仕事をして下さ
PyTorchで1枚の画像を複数の小さい画像(パッチ)に切り出す方法を紹介します。TensorFlowだとtf.image.extract_patchesにあたる処理です。 torch.Tensor.unfold torch.Tensor.unfoldという関数を使います。 unfold(dimension, size, step) → Tensor という形式で、順番にパッチを切り出す次元、パッチサイズ、パッチを切り出す間隔ですね。次元は縦と横で取ればいいので画像の4階テンソルなら2,3で取れば良いでしょう。 コード この画像を「cat.jpg」とします。 128px × 128pxのパッチで、64px間隔に取り出すものとします。 import torch import torchvision from PIL import Image import numpy as np # テンソル
LLaMA.cppのスループットをローカルで検証してみました。OpenLLaMA 7B/13Bをベースに、CPU/GPUのそれぞれの生成速度(token per second)と量子化の関係を実験的に調査します。 はじめに LLaMA.cppを使うとモデルを高速に軽量に実行できますが、量子化とスループットの関係、デバイスごとの関係がよくわからなかったので検証しました。 環境 LLaMA.cpp https://github.com/ggerganov/llama.cpp 最新版は変換後のモデルがggufフォーマットだが、旧版のggmlのフォーマットを使用(元の利用想定が、MiniGPT4.cppで旧版に統一する必要があったため) コミットIDはdadbed9になるように、git cloneしたあとcheckoutする ビルドはcuBLASを使ってビルド。実行時のみGPUを使うかどうかを切り
タイトル:GRiT: A Generative Region-to-text Transformer for Object Understanding 著者:Jialian Wu, Jianfeng Wang, Zhengyuan Yang, Zhe Gan, Zicheng Liu, Junsong Yuan, Lijuan Wang(所属:ニューヨーク州立大学バッファロー校、Microsoft) 論文:https://arxiv.org/abs/2212.00280 コード:https://github.com/JialianW/GRiT ざっくりいうと 物体検出にImage Captioningを導入した「Dense Captioning」の研究 検出とテキスト生成の2段階からなり、画像特徴と、テキストトークンの特徴をText Decoderに入れてキャプション生成 クローズドセット
GPT-4/ChatGPTと画像生成(Stable Diffusion)の組み合わせを試したら、とんでもないクォリティのイラストができたので記事にしました。GPT-4に情景描写をさせてプロンプトに変換するものですが、あまりにGPTの描写能力が強いです。もう人間が1からプロンプトを作る時代は終わったのではないでしょうか。 はじめに あまりにやばい画像ができたので公開するかどうか迷っていたのですが、そのうち誰か公開しそうだったので公開します。 GPTを使って画像生成のプロンプトを生成するのは誰でも思いつきそうなものなのですが、特に最近出たGPT-4では得意な内容がある程度明らかになってきました。 エンジニア兼SF作家がGPT-4執筆支援を実戦投入できないか実験してわかったこと これを見ると、 文章構成 情景描写や人物描写 どこかに当てはまる言葉を探索したい このへんが強いそうですね。あれ、ちょ
前回に引き続き、Stable DiffusionのControlNetで遊んでみます。ControlNetとは画像主に空間方向の強い条件付が可能です。LoRAと組み合わせて動画レンダリングのようなこともできつつあるので、使いこなすとかなり強力な武器になりそうです。 はじめに 前回はLoRAで遊んでみましたが、今回はこちらもよく話題にのぼるControlNetで遊んでみました。ControlNetもDiffusersで対応しており、簡単に使うことができます。 ControlNetとは 解説が結構多いので今更感はありますが、2023年2月に発表された論文です。 従来のStable Diffusionは「この人をこういうポーズで配置してほしい」や「ここにこれをおいてほしい」や「輪郭線はこうしてほしい」のような、なにか制約条件をおいた上で生成するということが難しいという課題がありました。実践的には
Stable DiffusionでのLoRAをdiffusersで試してみます。3Dモデルに対して、Unityで透過スクショを撮りLoRAで学習させるというよくあるやり方ですが、LoRAにおけるData Augmentationの有効性など興味深い点が確認できました。 はじめに 前々から気になっていたStable DiffusionのLoRAを使ってみました。3DモデルからスクショをとってLoRAで学習させるという「何番煎じだお前」って手法ですが、なかなかおもしろい結果になりました。 公式ドキュメント:https://huggingface.co/docs/diffusers/training/lora LoRAとは LoRAってよく使われる割には原著論文がそこまで解説されない気はします笑 (自分はNLPの専門家ではないので、この論文はさーっとしか読んでいませんが、 )原著論文はこちらで、
Attentionはこれまでの研究から多く有用性は報告されていたのですが、ネットワークの内側で使われることが多く、わかりやすく差を体感できる例を自分は知りませんでした。今回はCLIPのAdapterという点から、Attentionの有無による精度比較を行ってみます。 はじめに Adapterとは 最近研究でよく見られるようになりました。基盤モデルのような大きな事前訓練済みモデルに対し、小さなネットワークを差し込み、その部分のみ訓練することで任意の訓練データに対して適用させるものです。ファインチューニングとの違いは以下の通りです。 Adapter 追加小さなネットワークのみ訓練、元モデルは訓練しない 訓練速度が速い 元モデルはそのままなので、破滅的忘却に悩まされるリスクが減る ファインチューニング モデルの全体ないし、末尾の特定層のみ訓練 特に元モデルが大きくなると、訓練速度がAdapter
CoCaとBLIP2の訓練済みモデルで遊んでみました。「ImageNet 1Kのゼロショット精度」と「キャプション生成」の2点について検証してみました。 きっかけ ほぼ同時期にBLIP2とCoCaと訓練済みモデルが公開されました。 https://twitter.com/LiJunnan0409/status/1621649677543440384 CoCaは以前から公開されていましたが、LAIONデータセットで訓練されたモデルがOpenCLIPに統合されたものとして公開されました。 Training Contrastive Captioners BLIP2とCoCaについて 一言でいうと、BLIP2もCoCaもキャプション生成が可能なモデルです。 以前こちらの記事に書いたのですが、BLIP2は固定の画像エンコーダーと固定の大規模言語モデルを、学習可能なQ-Formerでつなげて、画像を起
タイトル:Large Language Models are Zero-Shot Reasoners 著者:Takeshi Kojima, Shixiang Shane Gu, Machel Reid, Yutaka Matsuo, Yusuke Iwasawa 所属:東京大学、Google Research カンファ:NeurIPS 2022 論文URL:https://arxiv.org/abs/2205.11916 コード:https://github.com/kojima-takeshi188/zero_shot_cot ざっくりいうと 大規模言語モデル(LLM)で算術問題などを解くための連鎖的なプロンプト「Zero-shot-CoT」を提唱 GPT-3に「ステップバイステップで考えよう」を追加するだけで、MultiArithのゼロショット精度が17.7%→78.7%でSoTA L
タイトル:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 著者:Junnan Li, Dongxu Li, Silvio Savarese, Steven Hoi(Saleforce Research) 論文URL:https://arxiv.org/abs/2301.12597 コード:https://github.com/salesforce/LAVIS/tree/main/projects/blip2 HuggingFace:https://huggingface.co/spaces/taesiri/BLIP-2 ざっくりいうと 視覚言語(V&L)モデルにおいて、事前学習コストを減らしつつ精度を出すための研究 事前訓練済みの画像
自然言語処理モデルT5を使って文章単位の埋め込み量(Sentence Embedding)を取得することを考えます。T5のEmbeddingはトークン単位ですが、平均を取ることで、簡単に文章単位に変換できます。Sentence T5としてモデルが公開されていない場合でも、既存のT5から自在に特徴量を取得できることを目標とします。Flan-T5からSentence Embeddingをとって見たりします。 はじめに 普段画像処理ばっかりやってる自然言語処理素人だけど、Imagenで使っていたり、Unified IOがベースにしていたり、何かとT5を聞きますよね。 調べていたらtransformersのライブラリから簡単に利用できることがわかったので、今回遊んでいきたいと思います。このブログでは珍しいNLPの内容です。 問題点 (自然言語処理やっている人には当たり前かもしれませんが、)一つ問題
Google Map APIの代替として、無料で使える地理院タイルを使ってみました。Pythonのstaticmapと併用すれば、緯度経度から地図画像に文字を入れられました。地理院地図だけでなく空中写真での利用も可能です。 Google Map APIではできるけど Google Mapのような地図アプリから任意の領域の画像を取得し、適当な地点に文字を入れるという処理を考えます。今までこういうのはパワポでやっていましたが、手動でやるとそこそこ時間がかかります。地図の画像取得や、緯度経度がわかっている地点(例:駅など)への文字入れを自動化できないかというのが今回のコンセプトです。 Webサイトへの埋め込みではなく、画像として地図を取得するスタイルをStatic Mapというそうです。Google MapでもMap Static APIというのがあります。冒頭の「A quick example
タイトル:Hierarchical Text-Conditional Image Generation with CLIP Latents リンク:https://cdn.openai.com/papers/dall-e-2.pdf 所属:OpenAI コード:DALL・E 2の前の段階のGLIDEは公開されているが、これは非公開(2022年4月時点) ざっくりいうと 訓練済みCLIPと拡散モデルを使った、テキスト→画像による生成モデル CLIPの画像埋め込み特徴を生成するような、拡散モデルベースの事前分布モデルを開発 先行研究のGLIDEの改良という位置づけだが、多様性に富む画像生成に成功 要旨 2段階のモデルを提案 テキストキャプションを与えてCLIP画像埋め込みを生成する事前処理 画像埋め込みを条件として画像を生成するデコーダ 画像表現を明示的に生成することで、写実性とキャプションの
PythonからVOICEVOXの音声を合成する方法を紹介します。VOICEVOXの合成音声を、Azure Text to SpeechやGoogle CloudのText-to-speechとも比較してみました。GoogleやAzureと場合によっては互角になりうる期待のソフトウェアです。 VOICEVOX、皆さん使ってますか? 2021年8月ごろに彗星のように登場した、無料なのにかなり優秀な音声合成ソフトウェアです。 今回Pythonから使いたかったのですが、コードベースで使う解説記事がどこにもなかったので書いてみました。 https://voicevox.hiroshiba.jp/ GUIでの使い方は解説されている記事が多いので、この記事ではPythonからコマンドラインベースで音声を出力する方法を書いていきます。インストールのやり方は省略します。 VOICEVOX ENGINE V
Windows11にはWSL2があり、Linux環境からGPUありのPyTorchを動かすことが可能です。WSL2経由のほうがWindowsネイティブよりも訓練速度が倍になります。nvidia-dockerを使うと、CUDAのバージョンを気にすることなく、環境構築できます。 やりたいこと Windows11に標準装備されたWSL2を使って、Linux環境からGPU利用ありのPyTorchを動かしたい。 よくあるやり方(例えばこの記事)では、WSL側にCUDAとCuDNNをインストールしているが、これをやったところCUDAのセットアップ時に、前提ライブラリのインストールでドハマリし、うまくいかなかった GPUのランタイムはWindowsにインストールしたCUDAのみを使い、できるだけあとはnvidia-dockerに任せたい よくあるやり方ではうまく行かず「もうWSL2でPyTorch動かす
学習初期は徐々に学習率を上げていく「Warmup」と、学習率をなめらかに下げていく「Cosine Annealing」を1つのオプティマイザーとして楽に実装する方法を、timmライブラリを使って見ていきます。 timmについて timm(PyTorch Image Models)という便利なライブラリがあります。画像のTransformer系の論文実装で特によく使われているライブラリです。 このライブラリでは訓練済みのモデルの係数の提供の他に、Data Augmentationや学習率のスケジューラーも入っています。RandAugmentやCutMix、Mixupといった、ディープラーニングのフレームワークには組み込まれていないが、1から実装するとそこそこ大変なAugmentを使いたいときはかなり便利です。PyTorchのデフォルトのコードとも相互運用できるようになっています。 Cosin
特徴量処理(特徴量エンジニアリング)でよく使う処理として、「A,B,C」「1,2,3」といったカテゴリー変数をOne-Hotベクトル化するというのがあります。SkelarnのOneHotEncoderでもできますが、Pandasのget_dummies()を使うと、もっと統合的にすることができます。それを見ていきましょう。 One-Hotエンコーディングとは One-Hot、つまり1つだけ1でそれ以外は0のベクトル(行列)を指します。経済学や統計学では「ダミー変数」と呼ばれることもあります。One-Hotエンコーディングもダミー変数もやっていることはほとんど同じで、カテゴリー変数を0,1の変数に変換して、学習器が学習しやすい形に変換しているということです。 例えば次のようなクラス変数があったとしましょう。0,1,2はクラス0に属する、クラス1に属する、…を表します。 >>> X=np.ar
OpenCVで作成した動画をサイトで表示する場合、ローカルで再生できていても、ブラウザ上では突然プレビューがでなり、ハマることがあります。原因の特定が難しい現象ですが、動画を作成する際にH.264形式でエンコードするとうまくいきました。その方法を解説します。 MPV4は手軽だが… OpenCVで動画を作成する例で検索すると、おそらくこっちのほうが多く出てくると思うのですが、fourccにMP4Vを指定するパターンです。 directory以下のPNGファイルを1つのMP4ファイルにまとめてみましょう。 import cv2 import glob # よくある例 def create_mp4(directory): # コーデックの指定 fourcc = cv2.VideoWriter_fourcc("m", "p", "4", "v") # 引数はファイル名、コーデック、FPS、解像度(
VAE(Variational Auto Encoder)やGAN(Generative Adversarial Network)などで用いられるデコーダーで畳み込みの逆処理(Convtranspose2d)を使うことがあります。このパラメーター設定についてハマったので解説します。 エンコーダーのConv2Dでダウンサンプリング まず前提として、MaxPoolingなどのPoolingを使わなくても畳み込み(Conv2D)だけでダウンサンプリングはできます。GANで使われる手法ですが、CNNでも使えます。例えばMNISTで考えましょう。 入力:(-1, 1, 28, 28)+kernel=3の畳み込み 出力:(-1, 32, 14, 14) どういう処理かというと、モノクロ(チャンネル数1)の28×28の画像を、32チャンネルの3×3の畳み込みを通して、14×14にダウンサンプリングすると
オプティマイザーはMomentumで係数は0.9です。このオプティマイザーの設定はケースを通じて変更しません。ただしその他の設定は途中で変更します。なお、試行回数はすべて1回なので精度に誤差があるかもしれません。 10層CNNは、32×32×64が3層、16×16×128が3層、8×8×256が3層、Global Average PoolingしてSoftmaxが1層という構成です。詳しくは末尾のコードを見てください。 Data Augmentationなしでの精度(テスト精度)は88.95%とりました。テストデータ1万個に対する混同行列は次の通りです。さすがにミス多いですね。 ベースライン:Standard Data Augmentation ここからData Augmentationを入れます。まず、CIFAR-10のData Augmentationとして定番の左右反転+上下左右4ピ
他の条件は以前と同じです。 バッチサイズは640 Weight Decayはなし MNISTの場合と同様に、テストデータを基準に1クラスあたりのサンプル数を500、200、100、50、20、10と変化させる。訓練データのサンプル数はテストデータの各5倍。 TensorFlow/KerasのTPUで訓練する すべてのケースについて5回試行した Macro F1スコアで比較 試行ごとに変えた条件は次の通りです。 長く訓練してみる(100epoch→250epoch) ネットワークをMobileNetに変更する ネットワークをResNet50に変更する ネットワークを10層から3層に変更する バッチサイズを640→128に変更する(学習率も適切に合わせる) Affinity Lossの直前のBatchNormalizationを削る SoftmaxとAffinity lossを混合して訓練する
ML Study JamsというGoogle Cloudが提供している無料の学習プログラムが期間限定でオープンしています。それを全部終わらせてきたのでその報告と感想を書いていきたいと思います。 ML Study Jamsとは Googleが提供している、Google Cloudを使った機械学習やデータ分析の初心者向け学習プログラム。すべてオンライン上で行え、参加費は無料。 ML Study Jams : Machine Learning 初心者向けトレーニングプログラム https://events.withgoogle.com/ml-study-jams-japan-2019-01/ 7つプログラムがあり、4つ以上完了させると、TensorFlowのロゴ入りTシャツかパーカーがもらえるらしい。「俺がTensorFlowerだ!!」ってどんどんイキろう。 補足しておくとこのプログラム、ほと
あるニュース記事で、ディープラーニング=最小二乗法で三次関数なんていう「伝説の画像」が出回っていたので、それに対して突っ込みつつ、非線形関数という立場からディープラーニングの本当の表現の豊かさを見ていきたいと思います。 きっかけ ある画像が出回っていた。日経新聞の解説らしい。 伝説の画像になるぞこれhttps://t.co/CpeWKrHseP pic.twitter.com/qfTUVt5j7A — 猫じゃら美少女 (@tonets) 2019年2月19日 確かにこれは伝説の画像だ。今までディープラーニングの入門書を立ち読みしていても、ディープラーニング=最小二乗法で三次関数なんて解説は見たことがない。画期的な説明だ。 しかし、この画像、ディープラーニングを少しでもやったことある人から見ればかなり違和感を覚える解説だと思う。そこを突っ込み始めるとディープラーニング、あるいはニューラルネッ
Google ColaboratoryからGoogle Driveに保存する方法はいくつかあるのですが、最近改良が入って簡単に書き込めるようになっていました。その方法を見ていきます。 まずはGoogle Driveをマウント Google Driveをマウントし、Colabの中で使えるようにします。 from google.colab import drive drive.mount('./gdrive') これはカレントディレクトリ以下の「gdrive」というフォルダに、Google Driveをマウントするよという意味です。このフォルダは何でもいいです。Google Driveのファイルはここで指定したフォルダ(gdrive)以下の、「gdrive/My Drive」フォルダに格納されます。 このコードを実行すると認証URLが出てくるので、その認証コードをコピーし認証させます。この認証
さて、フレームワークごとに結果を細かく見ていきましょう。 Keras(TensorFlowバックエンド) どうもいつもお世話になっています。速度面では最遅となっていまいましたが、それを引き換えにしても有り余る書きやすさと保守のしやすさが売り。日本企業が作っているChainerが公式の日本語ドキュメントがないのに、なぜか外国人が作っているKerasが公式日本語ドキュメントあるという不思議な事態。公式の日本語ドキュメントがほしい人は、日本語ドキュメント作る気のない日本企業にだまされないでKeras使いましょう(一応Chianerには日本語ドキュメントありますが、有志が作ったものです)。 あとデフォルトで出してくるプログレスバーが結構かっこよくてディープラーニング始めたばっかりの人は「ディープラーニングやってるすげええ」感が味わえるのが売り。こういう細かいところが嬉しい。結構ポイント抑えていてて
Qiitaからお引越しテスト。Qiitaの記事では、ニューラル協調フィルタリングでMyAnimeListのレコメンドデータから、アニメの作品単位の特徴量抽出を行い、クラスタリングの手法を用いて、アニメを10個のグループに分類しました。この記事では、同様に抽出した特徴量を用いて、Word2Vecの「王+女-男=女王」のようなアニメ単位での足し算・引き算を行います。 元データはKaggleのMyAnimeListを使いました。 リポジトリ https://github.com/koshian2/MyAnimeList_NCF 事前準備として、上記リポジトリからdataをダウンロードしておきます。また、analyze_plus.pyの表示用の関数を定義しておきます。コサイン類似度でソートしたり、IDを探してきたりする関数なので、特に解説はいらないと思います。 注意点 Qiitaのときと同じですが
36{icon} {views} LLMをデプロイする際に、LLM部分の量子化が必要になることが多いです。MiniGPT4のようなVLMに焦点をあて、AutoGPTQとBitsAndBytesという2つの量子化フレームワ […]...
次のページ
このページを最初にブックマークしてみませんか?
『Shikoan's ML Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く