サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
デスク環境を整える
secon.dev
なお、今回作ったRerankerの技術的な話は、日本語 Reranker 作成のテクニカルレポートに記載しているので、興味のある方はそちらをご覧ください。 そもそも Reranker とは? Reranker とは、名前の通り再ランク付け(rerank)するもので、質問文に対して関連する順に文章を並べ替えます。文ベクトル(文章のembeddings)で類似度を測って並べ替えするものと何が違うのか?と思われるかもしれませんが、実際、文ベクトル類似度でも同じように並べ替えが可能です。 しかしながら、大きく二つの点で異なります。 Reranker は再ランク性能が高い 文ベクトルは、質問文と文章を同じベクトル空間上の表現として類似度を測ります。そのため大規模なデータに対しても事前に文章のベクトルを算出しておくことで、効率的な計算が可能です。 しかしながら、Reranker は再ランクに特化してお
昨今、生成AI・LLMの台頭により、「良質なデータ」をどう集める・作るかの話をより身近で聞くようになった。LLMに学習させるデータは元より、身近な課題を解決するためにも課題解決のためのタスクを定義し、そのためにデータを分析し作成することが、社会課題解決には当たり前に求められる。 これらの課題解決には、新しいモデルを自ら考える必要がないことも多く、タスク定義とデータを集め学習させるだけで、十分な性能を発揮することも多い。いわゆるデータセントリックなデータに焦点を集めた考え方である。 ただ、世の中にはモデルやアルゴリズムといったモデルセントリックな話は数多くあれど、データは基本公開されているなんらかのデータセットに対して評価するといった内容はほとんど。しかしながら、この書籍Human-in-the-Loop 機械学習では、データに焦点を集め解説を行なっているという、稀な書籍である。 どんな内容
先日、OpenAI から新しい embeddings モデルである、text-embedding-3-smallとtext-embedding-3-largeが公開された。text-embedding-3-smallは、古いembeddingsモデルのada-v2よりも価格は1/5に、かつ性能は向上しているとのこと。 OpenAIの記事によると、MTEBの評価は少々スコアが上がり、特筆すべきはMIRACLの方は大幅にスコアの向上が見られる。MIRACL(Multilingual Information Retrieval Across a Continuum of Languages)は名前の通り、多言語での情報検索タスクで、このスコアが大幅に上がったということは、日本語での情報検索タスクの精度向上にも期待が持てる。 Wikipedia Q&A の RAG タスクで評価 というわけで早速評
LCEL は LangChain の chain を簡単に構築するための方法です。2023 年後半から開発が盛んに進んでおり、現在(2024 年1月)は LangChain のコードを記述するには、基本 LCEL を使って書く(以前の書き方もできますが)ことが推奨されています。LCEL のメリットについてはオフィシャルドキュメントの LCELを参考すると良いでしょう。 しかしながら、LCEL を書き始めると、オフィシャルドキュメント通りに書けば動くけど、ちょっとでもアレンジして書こうとするうまく動かなくなったりします。これは一重に LCEL の挙動を理解していなからなのですが、オフィシャルドキュメントやチュートリアルでは、LLM+RAG のコードなど、LCEL 使うとこんなにシンプルに書けるんだ、というコードは多くのっているのですが、LCEL の挙動についてはあまりのっておらず、のっていて
この記事は、Kaggle Advent Calendar 2023の21日の記事である。 長いトークンを扱えるLLMの登場などの背景もあり、LLM出力の精度を上げる手法として Retrieval-Augmented Generation(RAG)の重要性の高まりを感じる。例えば Kaggle コンペLLM Science Examでは、上位解放の全てでRAGが使われている。RAGのコア要素の一つである、質問文などの対象文章をうまく表現した文章を取得する検索方法として、主な方法にBM25等のキーワードベースの検索や文の特徴量(embeddings)からのベクトル検索がある。 本記事では、この日本語のベクトル検索のみを使って、AI王 〜クイズAI日本一決定戦〜 第1回コンペティション(すでに終了済み)の課題を解き、どれぐらいのスコアが出るのかを確認する。また、複数の日本語embeddingsへ
なお、評価に使ったコードはこちらの eval_xxx というコードである。 https://github.com/hotchpotch/youri-7b-stf-qa-context-jaqket/ Supervised Fine-tuning Trainer(SFT) を使った学習 STFは手軽な方法で指示に対して特定フォーマットの出力(Instruction Tuning)を学習させることができる方法である。学習のさせ方も簡単で、例えば ### 指示: 今日の天気は何ですか? ### 入力: 本日は大雨ですね。 ### 応答: 大雨 のような例文を用意する。例では「### 応答:」以降がうまく出力されるように学習して欲しいデータである。この時、例文と「### 応答:」だけ与えれば、よしなに学習してくれる。実際の学習時には、「応答:」以降を推論し、望ましい回答である「大雪」のtokenの
この記事は、情報検索・検索技術 Advent Calendar 2023の12月4日の記事である。 昨今のLLMの台頭により、外部情報を In-Context Learning として利用しLLMの生成結果の性能を高めることが可能な RAG(Retrieval Augmented Generation) の重要性の高まりを感じる。ただ、RAG を使ったシステムを構築してみようにも、データが少ないと面白みが少なかったりする。その為、Wikipedia 日本語の約550万文から簡単に検索可能でRAGの入力データとして使えるような embeddings と、素早い速度でベクトル検索できるような faiss 用の index を作成した。 例えば、Wikipedia から該当の文を検索する用途はこのように使える。 from datasets.download import DownloadMana
最近、文をembeddingsといった特徴ベクトルに変換するユースケースが増えている。そのベクトルから類似ベクトルを探す時に、数千ベクトルならほぼ何も考えなくともよく、数万ベクトル〜になると検索速度を高速化するためHNSW等のANNの近似最近傍探索アルゴリズムを使い、そして数百万ベクトル〜になってくると現実的なデータサイズ収めるために量子化等々を組み合わせた最適化を行うことが多いだろう。 これら類似ベクトル検索のための最適化(HNSW・IVFといったアルゴリズムや量子化)では、検索速度、データサイズ(メモリに乗るか)、精度、三つのトレードオフが発生する。これらトレードオフを踏まえた最適化戦略を考えるのだが、最適化時の正確さの計測結果として recall@10 や recall@100 が掲載されていることを多く見かける。例えばChoose the k-NN algorithm for yo
CTranslate2という Python と C++で書かれた高速推論用ライブラリがあり、いつか試そうと思っていたのだけど、モデルを変換する必要があったため億劫になって試していなかった。しかし hf_hub_ctranslate2 という、何もやらずにも透過的に HuggingFace のモデルを CTranslate2 で推論できる形式に変換して利用できるライブラリを知ったので試してみたところ、とても簡単に GPU で推論が 1.6 倍速に、CPU で1.9倍速になり、かつ精度もほぼ変わらなかったので、もっと早く使うべきだった、のでメモ。 CTranslate2 とは CTranslate2(以下CT2) とは、GitHub プロジェクトページの概要に書かれている "CTranslate2 is a C++ and Python library for efficient infere
AI関連の話題が引き続き多い昨今、今週どんなことが話題になったのだろう?ぐらいの頻度で知れると結構便利なんじゃないかなーと、毎週配信するメルマガ(substack)を始めました。内容は全自動で作成しています。例えば、2023年7月28日から遡って約一週間分のAIニュースまとめは以下の感じです。 https://ainewsdev.substack.com/p/weekly-ai-news-1 完璧とまでは言わないまでも、そこそこ話題になったものをいい感じで集められているのではないでしょうか。興味がある方はご登録 or フィードリーダーなどで購読ください。 なお、メルマガタイトルは Weekly Kaggle News のリスペクトです。 と、広報だけではあれなので、内部の実装の話でも。以前リンクを張った資料と、とりわけ大きく変えているわけでは無いのですが、ざっくりと書くと multilin
最近公開された論文 “Low-Resource” Text Classification: A Parameter-Free Classification Method with Compressors (Jiang et al., Findings 2023) は、gzip で圧縮したデータの長さを活用し、テキスト分類課題で BERTよりも優れたパフォーマンスを発揮すると述べています。面白そうだったので、自分でこの方法を実装して試してみました。その結果、実際に livedoor ニュースコーパス を用いたテキストのカテゴリー分類では、日本語 BERTよりも優れた結果が出ました。 どんな手法なのか やっていることはシンプルで、まずNCD(Normalized compression distance)を算出します。例では圧縮アルゴリズムに gzip を使っています。 個々のデータxとyを圧
低ランク行列を追加することで、大元のモデルを維持しつつ少ないコストで学習できる LoRA(Low-Rank Adaptation of Large Language Models)。先日、日本語でも大規模パラメータモデル cyberagent/open-calm-7b や rinna/japanese-gpt-neox-3.6b 等々がリリースされたり、HuggingFaceからはtransformersでLoRAを簡単に実現できるライブラリ、peft がリリースされたことで、試したことがある方も多いと思います。 ただ、LoRAのメリットについて主に学習の話が殆どで、もう一つの大きなメリットであるLLMのベースモデルのメモリを共有しつつ、複数のタスクをこなす方法の紹介は見かけたことがなかったので、それをpeftで行う方法についてのお話です。 なお、LoRAとは何か?というお話は、輪講資料
英語記事をAI関連 or AI関連でない、というテキスト分類器を fastText + 量子化で作ったら、ファイルサイズ1.7MBで実用的なモデルができてしまって驚き、というお話をメモ記事に。1.7MB ですよ!! AI Newsでは、AI関連 or AI関連でないのテキスト分類にAI News の公開と、裏側の OpenAI の活用話で書いた通り、OpenAIのtext-embedding-ada-002で1536次元のベクトルにしたものをlightGBMで学習させたものを使っている。この方法の問題は、すべての記事の判定に必ず OpenAI の API を通す必要があり、長文記事が沢山あると日によっては一日あたり数十円がかかってしまっている。月にすると500~1000円はかかってそうで、チリツモヤマトテナデコである。 というわけで、そろそろデータも溜まってきたしと、OpenAIのAPIに
AI News という、AI・データサイエンス(DS)・機械学習(ML)関係の話題を集め、AIで3行に要約して配信するサイトを公開しました。twitter @AINewsDev や Atomフィードでも配信しています。数日前から運用していて、手前味噌ですが便利に情報集めに使えています。また英語記事も日本語で要約されるので便利です。 なぜ作ったのか 以前、 @syou6162 さん作の ML-News で、ML系の情報を便利に読ませてもらっていたのですが、Twitter API の有料化の話が出た前後で閲覧できないようになってしまったようでした。 そのため、DS・ML系の話題を追いかけるのが大変になって、そのうち同じようなサイトを作ろうかな、と思っていた所でChatGPT(GPT4)というふつうに便利なLLMが登場しました。その後は御存知の通り、それらの話題が大量に溢れ、情報過多で見きれない
facebook が作ったベクトル検索エンジンの faiss を使って類似画像検索ができる、というなにかの記事を見てへーと思い、自分の日記画像の中から類似画像を見つけるというのをやってみたら、思っていた以上に簡単だったのでお気持ちを記事に。 類似画像検索は画像を embedding (ベクトル表現)に変えて類似度が高いものを見つければ良い。のだけど、そもども画像をどうやってベクトルに変えるのか、というのが、CNNの流れの画像分類用の学習モデルを使えば良い、というのを知ってなるほど!という感じであった。メルカリも MobileNet V2 を使っている(いた?)らしい。そしてこいつの良いところが、基本が学習済みモデルに転移学習すらさせることなく、学習済み重みを含むモデルに普通に推論させるだけで(大抵の場合)良い。 なおこの記事では faiss を使っての類似画像検索は行っていないので、fai
最近、手伝っている仕事の機械学習プロジェクトで Python を書き始め、そういえば Python にも型ヒントあったよなぁ、とプロジェクトに導入してみたら簡単に導入でき、かつ静的型チェックの恩恵が受けれてとても便利だった。 しかしながら、型ヒントを書き始めるに当たり「型ヒントについて、どのドキュメントを読めばよいのか」や「どう型ヒントを導入すればよいのか」が最初はイマイチ解らなかったので、その説明とともに Python プロジェクトで型を書き始める方法を紹介する。 どのドキュメントを読めば良いのか この2つ読めば、他の静的型付け言語を書いたことがある人なら、まずは十分。 Understanding Typing 型チェッカー実装である、pyright のドキュメントの一部。ポイントが簡潔にまとまっている。 typing --- 型ヒントのサポート Python のオフィシャルドキュメント
先日この secon.dev で使う用に、いわゆる関連エントリーを出力する cli を書いたのだけど、世の中に有る静的サイトジェネレータの殆どは、どこかのファイルパスに .md, .html 等の markdown や html で書いた記事データを元に html を生成するものが大半なことに気づいたので、ひょっとしたら利用する奇特な人が現れるかも、と類似ドキュメントを出力する cli として公開した。 https://github.com/hotchpotch/similar-documents-cli pip install -U similar-documents でインストールできる この cli の引数に、関連エントリーとして類推して欲しいファイルをガッと渡すと、json 形式でファイルごとに関連度が高いファイルを表示する。このサイト(secon.dev)の記事ファイルは公開して
久しぶりに WSL2 環境で開発をしていると時刻がずれていることに気づく。以前は起こっていなかった、スリープ復帰時に WSL 側の時計がずれる問題が発生してしまうようになってしまったようだ。 https://github.com/microsoft/WSL/issues/5324 古くからある問題で、昨日の Insider Preview のLinuxカーネルで修正済みなのでWindows 10 21H1 では直りそうだけど、現状問題が起きたままだ。 Linux 側で hwclock --hctosys で直るのだけど、いちいちコマンドを叩くのが面倒だし、WSL2 側での定期実行、たとえば cron.d を動かすのはいがいと厄介。なので、Windows 側で wsl 側を叩く以下のようなバッチファイルを用意して、それを Windows のタスクスケジューラで実行する。 wsl.exe -u
TensorFlow では、高レベルAPIであるKerasを使うことで、簡単にニューラルネットワークのモデル作成~訓練、その他NNで行いたい様々なことを実現できる。しかしながら、自分のようなNN初心者にとっては何をやってるか解らないで使ってしまっていたため、簡単な順伝播型のNNを、Keras を使わず TensorFlow の API のみを用いて実装する。 なおこの記事は、ゼロから作るDeep Learningを参考に実装している。また、自分で理解するための忘備録的に残しており、きちんと理解したい人書籍ゼロから作るDeep Learningと、TensorFlow ガイドを読んだほうが良いであろう。また、この記事の元の jupyter notebookはこちら。 一通り手を動かして自分で作ってみることで、どの関数がどう影響するのか、訓練を手動でやるとどんな感じなのか、自動微分とその使い方
次のページ
このページを最初にブックマークしてみませんか?
『川o・-・)<2nd life』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く