QLoRAについて少し書く機会があったので、その要素技術であるブロックごとの量子化(block-wise quantization)の解説とその実装をしてみました。実際のところ、bitsandbytesなどのライブラリに実装されているので、自前で実装する必要はまったくないのです…
RAG(Retrieval Augmented Generation)は大規模言語モデル(LLM)の性能を改善するための手法の1つであり、質問に対する回答を生成する際に、外部知識源から情報を取り込みます。 これにより、LLM 自体で学習できる情報量に制限されることなく、より正確で…
PythonからAzure AI Searchのシノニムマップを作成し、クエリ拡張をして、その効果を日本語の質問応答データセットで確認してみました。昔からある機能で、とくに何か新しいことをしているわけでもないのですが、使いそうな機会があったので試してみました。…
RAGを作っていると、論文に出てくる表データを読み取って回答してもらう等、表データを扱いたくなってくる場面が出てきます。そんな欲求を頭の片隅に置いておいたところ、Chain-of-Tableと呼ばれるプロンプトの手法を見かけたので試してみました。 本記事の…
Manningから出版予定の『AI-Powered Search』(AIを活用した情報検索の意)を冬休み中に読んでいたら、その中で意味的知識グラフ(Semantic Knowledge Graph)と呼ばれるデータ構造について説明していて、関連語の計算やクエリ拡張などに使えるということで…
冬休み中に日本語版のColBERTであるJaColBERTが公開されていたので試してみました。ColBERTは、論文を読んでいるときに名前が出てくることがあるので試してみたかったのですが、これで試せるようになりました。
多言語のテキスト埋め込み用のモデルであるMultilingual-E5[1]をファインチューニングして、検索性能が向上するか否かを日本語のデータセット検証してみました。結果としては、ファインチューニングすることで、OpenAIのtext-embedding-ada-002を上回る性能…
最近では、RAG(Retrieval Augmented Generation)を使って、検索して得られた文書を生成時に活用することがありますが、その性能を改善するための手法の1つとしてハイブリッド検索が知られています。ハイブリッド検索は、2つ以上の異なる検索技術を組み合わ…
今週号のData Science Weeklyにて、ウォータールー大学が開講している基盤モデルに関する講座が載っていたので紹介します。同講座では、トピックごとに整理された論文のリストが公開されているので、関心のあるトピックについて読み進めるのに適しています。…
Risk-Reward Trade-offs in Rank Fusionを読んでいて、検索システムの結果を統合するために使える教師なしのランク融合アルゴリズムについて書きたくなったのでまとめました。最近では、RAGの性能を改善するためにハイブリッド検索が使われることがあります…
Rewrite-Retrieve-Readの論文[1]の構成で検索性能が改善するか試してみました。内容としては、RAGの内部で検索するときに、ユーザーのクエリを書き換えると性能が上がるという話です。ユーザーのクエリが検索に適しているとは限らないため、LLMで書き換えて…
近年、大規模言語モデル(LLM)の進化は、自然言語処理の分野において画期的な変化をもたらしています。とくに、OpenAIのGPT-4のようなLLMは、その応用範囲の広さと精度の高さで注目を集めており、多くの研究者や開発者が新たな利用方法を模索しています。本…
ChatGPTやGPT-4をはじめとする大規模言語モデルの能力が向上し、多くの注目を集めています。とくにRAG(Retrieval Augmented Generation)と呼ばれる手法を使って、手元のデータを生成時に活用する手法がよく使われていますが、その性能を改善する方法は様々…
本記事では、LangChain Templates[1]を利用し、RAGを簡単かつ迅速に構築する方法を紹介します。LangChainはLLMを使ったアプリケーションを実装するためのツールですが、LangChain Templatesを活用することで、煩雑なプロセスを大幅に簡略化できます。本記事…
日本語でのキーワード検索とベクトル検索に対して、検索結果のリランキングを適用して性能を評価してみました。 リランキングとは? 文書検索では検索クエリにマッチングした文書を順位付けして返しますが、その結果を何らかのモデルを使って並び替えること…
Cohereが提供を開始した多言語用のテキスト埋め込み用のモデルであるembed-multilingual-v3.0の性能を日本語の文類似度と検索のデータセットで評価してみました。 Cohere Embed v3とは CohereのEmbed v3はテキストを埋め込むためのモデルです[1]。これまでも…
ranxはPythonで実装されたランキング評価用のライブラリです。検索システムの評価に使える以下のような指標が用意されていたり、それらの結果をRRFのようなアルゴリズムで組み合わせたり、論文用にテーブルをエクスポートする機能を備えています。本記事では…
多言語のテキスト埋め込み用のモデルであるMultilingual-E5-largeの性能を日本語のデータセットで評価してみました。 E5とは E5とはEmbEddings from bidirEctional Encoder rEpresentationsの略で、テキストの埋め込み用のモデルです[1]。Web上から収集した…
最近は、ChatGPTやGPT-4に関する記事が多数公開されています。とくに、自社の持つ文書に対して問い合わせをし、そこから回答を抽出したり、要約を生成するようなユースケースを見かけることが多い気がしています。こういったユースケースの場合、伝統的な評…
だいぶ昔の話ですが、日本語テキストをネガ/ポジ分類するソフトウェアとして、scikit-learnを用いて『asari』を作り、Pythonパッケージとして公開したことがあります。作った自分でも存在をほぼ忘れていたのですが、ときどき使うことを試みる方がいて、Issue…
本記事では、部分的にアノテーションされたデータを用いて、固有表現認識モデルの学習を試みます。
導入されたのはだいぶ前ですが、spaCy v3.2からM1チップ上での学習と予測が最大で8倍高速化できるということで試してみました。以前は行列積の演算にBLISを使っていたところを、Appleのネイティブのライブラリに切り替えることで実現しています。その中核と…
このたび、オライリー・ジャパンより、『Natural Language Processing with Transformers』の翻訳書である『機械学習エンジニアのためのTransformers』を出ることになりました。素直にタイトルを訳すと、『Transformersによる自然言語処理』のようになると思…
一月ほど前の話になりますが、spaCy v3.3.1がリリースされました。いくつかの機能の追加とバグフィックスが行われているのですが、その1つとしてSpanRulerと呼ばれるコンポーネントが追加されています。このコンポーネントはルールベースで固有表現認識など…
このたび、オライリー・ジャパンより、『Practical Natural Language Processing』の翻訳書である『実践 自然言語処理』を出すことになりました。Amazonだと2月4日に発売のようです。表紙の鳥はオオハナインコで、オセアニアあたりに生息しています。 最近は…
5年近く前から、fastTextの学習済みモデルをGoogle Driveで公開しているのですが、どうやらGoogle Driveのセキュリティアップデートにより、ダウンロードできなくなっていたようです。 fastTextの学習済みモデルを公開しました 結果として何が起きたかと言う…
SageMaker Processingは、データの前処理や後処理、特徴エンジニアリング、モデルの評価といった機械学習のワークロードをSageMaker上で実行するための機能です。SageMaker Processingを使うことで、これらの処理をするためのジョブをコンテナ上で実行するこ…
TensorFlowには、tf.data.Dataset APIという入力のパイプラインを実現するための強力な機能があります。入力のパイプラインを最適化することで学習全体を高速化できるため、定量的に計測して改善する価値があります。そこで、本記事ではTensorFlow Datasets…
最近の自然言語処理では、大規模なテキストから単語の分散表現や言語モデルを学習させて使っています。学習する際のテキストとしては、分量や利用しやすさの都合からWikipediaが選ばれることが多いですが、その前処理は意外と面倒で時間のかかる作業です。そ…
以下のTweetで紹介したTensorFlow Recommendersのコードを見ていたら、StringLookupクラスという見慣れぬクラスを使っていました。あまり紹介している記事を見たことがないので、Tipsとしてどのようなものか紹介します。 TensorFlowで推薦システムを構築する…