サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
secon.dev
結果として、ほぼ全てのスコアにおいて性能向上が確認されており、RetroMAEの有益性が確認された。また学習方法も、教師なしでテキストのみを与えれば良いという手軽さも実用性が高いであろう。 RetroMAE について RetroMAEの特徴は、Masked Auto-Encoderの手法を採用しながら、以下の3つの設計を取り入れた点である。 入力文に対して異なるマスクを適用する新しいワークフロー エンコーダーとデコーダーで非対称な構造を採用 エンコーダーとデコーダーで異なるマスク率を使用 これらの工夫により、文書の意味をより深く理解し、効果的な検索を可能にする表現学習を実現している。実際の評価においても、BEIRやMS MARCOなどのベンチマークで優れた性能を示している。また高性能のマルチリンガル密ベクトルモデルの BAAI/bge-m3 も RetroMAE を用いた事前学習を行なって
CrossEncoder の学習方法 CrossEncoder は、単純な回帰タスクである。query text[SEP]passage text といったSEPトークン等で区切ったテキストを、正例は1.0 負例は0.0としてラベル付けし学習させる。具体的な学習コード例としては、SentenceTransformers の CrossEncoder 学習サンプルが分かりやすい。 また、複数の負例(ハードネガティブ)を正例と同一バッチで学習させることで性能が大きく向上する。この学習方法については、FlagEmbedding の reranker trainerが参考になる。 学習用データセット 学習には、質問と正例・負例のデータセットが必要である。1件につき、positive(正例)1個とhard-negative(負例)15個を1セットとし、1グループ=16個として学習に用いた。以下のデー
なお、今回作った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
RTX 4090 が圧勝(そりゃそうだろう)、というのは置いておいても、T4 の60%の速度が M2 GPU 10 コアで出ている。M3 Max はGPU 40コアモデルもあって、速度が線型増加すると仮定すると、M3 Max GPU 40コアならRPSは130ぐらい。RTX4090 の 1/3ぐらいの速度になって、ラップトップPCのGPUとしてはかなり速い。T4の倍以上の速度は出そう。 M2 の Embeddings の変換は実用的な速度か?と言われると用途によりそう。すごく遅くはないが、早くもない。ただ、M2 CPU で変換するよりは GPU は3倍は速いし、HuggingFace Transformers なら device を "mps" にするだけで使えるので、Mac で使う場合は当たり前に GPU を使っていきたい。M3 Max なら大体の用途で、そこそこ実用的な速度が出るんじゃ
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とは何か?というお話は、輪講資料
引き続きホテル大和田に宿泊。朝の散歩二日目も気持ちが良いなぁ。周りどこ見ても山々、という景色も素晴らしい。 RubyKaigiで、Rubyistのキーボードを並べるちょっとしたイベントがあったので覗いてみると、どれもこれも面白くて新しいキーボード欲しくなるなぁ。日本のカスタムキーボードの先駆けの一人であるT氏からまず使ってみるならMODEのキーボードあたりが良いんじゃ無い、と言われ興味を持つ。カスタマイズが必要なので、ちょっと調べてから買ってみたい。 RubyKaigiはちゃんと技術の話が多くていいね、と言われハッとする。たしかにセッショントークはどこかの企業でなんたらを導入して云々、みたいな話はほとんどなくて、基本Rubyにまつわるテクニカルな話だなぁ。 トークは基本Rubyの話をしていて、エモい話や他コミニュケーションの話は合間の休憩やトークセッションが終わった後、という絶妙なバランス
英語記事を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に
LangChain v0.0.141 に SVM Retriever という実装が入った。これは embeddings(集合)から、単一 embedding と類似しているもの top-K を SVM を使って見つけるという実装で、えっどうやってるの?と追っかけてみたら、知らない知識で面白かったのでメモ記事に。 kNN vs SVM この実装の元となった、knn_vs_svm.ipynbというnotebookがあって、冒頭を機械翻訳すると以下となる。 よくあるワークフローは、あるデータを埋め込みに基づいてインデックス化し、新しいクエリの埋め込みがあれば、k-Nearest Neighbor検索で最も類似した例を検索することです。例えば、大規模な論文コレクションをその抄録に基づいて埋め込み、興味のある新しい論文を与えると、その論文に最も類似した論文を検索することが想像できます。 私の経験では
AI News という、AI・データサイエンス(DS)・機械学習(ML)関係の話題を集め、AIで3行に要約して配信するサイトを公開しました。twitter @AINewsDev や Atomフィードでも配信しています。数日前から運用していて、手前味噌ですが便利に情報集めに使えています。また英語記事も日本語で要約されるので便利です。 なぜ作ったのか 以前、 @syou6162 さん作の ML-News で、ML系の情報を便利に読ませてもらっていたのですが、Twitter API の有料化の話が出た前後で閲覧できないようになってしまったようでした。 そのため、DS・ML系の話題を追いかけるのが大変になって、そのうち同じようなサイトを作ろうかな、と思っていた所でChatGPT(GPT4)というふつうに便利なLLMが登場しました。その後は御存知の通り、それらの話題が大量に溢れ、情報過多で見きれない
「セカンドライフ、はてなグループのディレクターやらへん?」 2006年、鉢山オフィスの会議室に呼び出された。当時のはてなでは、基本パブリックスペースでの会議が主だったので、何なんだろうと思った。会議室では、jkondo *1がいて、上記のようなことを言われた。曰く、はてなグループはとても価値があるサービスだと思っていて、jkondo は様々なサービスを、naoya んはブックマークをやってるし、きっと伸びるサービスだから、ディレクター(今で言うプロダクト責任者)を secondlife がやらないか、とのことだった。その時、私は即答で「えー、面白く無さそうだからやりません!」といった回答をしたと思う*2。 はてなでは印象的な出来事がいくつもあったのだけど、この出来事は今でも覚えている。今でこそ当たり前に使われている Qiita::Team, Kibela といった、日本の様々な企業が導入し
先日参加した Kaggle コンペFeedback Prize - English Language Learningで知った手法、RAPIDS SVR (SVC) が高速に学習でき、回帰や分類タスクでは有益な手法の一つと感じたので、どのようなものかを紹介する。実際にこのコンペの上位解法では、RAPIDS SVR の手法が使われていた。 また RAPIDS SVC を使って日本語評価データセットのJGLUEのクラス分類データセットの MARC-ja を評価する。評価につかった実装はGitHub 上で公開している。 なおこの記事は、Kaggle Advent Calendar 2022の13日目の記事だ。 SVR (SVC) とは? SVR はサポートベクタ回帰(Support Vector Regression)で、SVC はサポートベクタ分類(Support Vector Classif
Kaggle のコンペティション、Feedback Prize - English Language Learningが終わり、約2650チーム中15位で金メダル取得となった。これで合計金メダル2つ、銀メダル1つを取得し、Kaggle Competitions Master の条件を満たし、コンペを始めた当初目指していた Master の称号を年内にとることができた。自分一人ではこの結果にはならなかったと思うので、チームメンバーの@masakiaota氏、@olivineryo氏に感謝だ。 Public LBではコンペ終了時に8位/2700チームの成績で金メダル圏内だったが、Public LB がLB全体の26%のデータでのスコア。スコア表示も小数点以下第二位まででLBのスコア表示がざっくりとしており、かつ我々のCVではかなり悪いスコアがPublic LB上ではやたら上位になったりとCV・
画像の美しさ、というのは主観が多分に含まれるものなので、コンピュータが評価するタスクとしては難しいのかな、と思っていたのだけどLAION-AESTHETICS を読んでびっくり、だいぶきちんと評価できてそう。実際にLAION Aesthetics V2でデータセットをスコア付した結果(リンク先ページは大量の画像ロードが走って遅いので注意)ではこんな感じ。例えばスコアが1.5~1.75の画像だと となる。またスコア7~7.25の画像では という感じになる。おーすごい、それっぽい。そしてこのスコアを学習・導出しているものも複雑なディープラーニング処理ではなく、単純なMLP(5つの線型層+Dropoutで、活性化関数を挟まない)というのもすごい。 LAION-Aesthetics V1 V1 では SAC というStable Diffusion等が生成した画像とプロンプトを約24万枚のデータセッ
本日終了したKaggleのコンペ、Feedback Prize - Predicting Effective Argumentsにソロで参加し、1566チーム中43位銀メダルを獲得した。暫定順位なので、確定順位はちょっと変わる可能性がある。 前回始めて参加したコンペではチームメンバーに恵まれ、たまたま金メダルだった。その中でKaggleの面白さを知って、次も参加したい、ただ個人だとモチベーションが無くなりそうなのでできたらチームで、と思っていたのだけど、今回はチーム組まず(というか知り合いが少ないので組めず、が正しいが…)でのコンペスタート。チーム参加だと実力がなくても場合によって金メダルも採れてしまう(前回の自分の成績)ことがわかったので、ソロ参加でどれぐらいの成績が残せるか、ということにもチャレンジ。 当初はモチベーションが続かないのではと懸念があったけど、最初に作ったベースラインが銀
今日(2022/06/21)の朝9時がKaggleのコンペ終了の時間。結果は即座に表示されるので、チームメンバーと見守る。結果はPublic LB(サンプルで抽出されたスコア)順位と変わらずの1975チーム中8位で金メダル。Kaggleコンペ初参加でチームに恵まれた幸運の結果であった。 チームの解法は英語では公開されていて、日本語でも別途公開されると思うので、ここでは解法ではなく主に初参加の感想を。40日ぐらい前に特許と自然言語処理処理コンペであるU.S. Patent Phrase to Phrase Matchingをやらない?とAota氏に誘ってもらい始める。Kaggleは初学者用の本を読んで練習用タイタニックコンペをやった程度の知識だったので、より具体的な進め方やチームで大切にする時の考え方を教えてもらう。 ツールとしては情報共有にNotion(主にboardでkanban)を使い
facebook が作ったベクトル検索エンジンの faiss を使って類似画像検索ができる、というなにかの記事を見てへーと思い、自分の日記画像の中から類似画像を見つけるというのをやってみたら、思っていた以上に簡単だったのでお気持ちを記事に。 類似画像検索は画像を embedding (ベクトル表現)に変えて類似度が高いものを見つければ良い。のだけど、そもども画像をどうやってベクトルに変えるのか、というのが、CNNの流れの画像分類用の学習モデルを使えば良い、というのを知ってなるほど!という感じであった。メルカリも MobileNet V2 を使っている(いた?)らしい。そしてこいつの良いところが、基本が学習済みモデルに転移学習すらさせることなく、学習済み重みを含むモデルに普通に推論させるだけで(大抵の場合)良い。 なおこの記事では faiss を使っての類似画像検索は行っていないので、fai
今年から機械学習を学び始めて、最初の6ヶ月ぐらいはいわゆる機械学習の書籍を読んで学んでいた。回帰・分類といった基本的な教師あり学習、クラスタリングや時限削減といった教師なし学習、結果の見方や整ったデータがある場合の処理方法、ニューラルネットワークのパーセプトロン、全層結合、CNN、 RNNといった簡単なものを1からの実装したり、TensorFlow(Keras)を使ってのモデル作成など。いわゆる抽象化されたライブラリがある物は使いながら、何が問題を解くための最適なモデルなのかを考え適用していた。 しかしながら、実務では必要なモデルを作る以前に、まずデータを見て考えることが必要になる。探索的データ分析(EDA)の解説は、初心者には「データから何がわかるか」(そもそもの前提としてそのような知識がある)をすっ飛ばして、相関が〜とか分布が〜という所の説明になるので、なんとなくEDAっぽいことは出来
最近、手伝っている仕事の機械学習プロジェクトで 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)の記事ファイルは公開して
次のページ
このページを最初にブックマークしてみませんか?
『川o・-・)<2nd life』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く