Ahogrammer

Deep Dive Into NLP, ML and Cloud

情報検索

ナレッジグラフを用いたRAGの改善

RAG(Retrieval Augmented Generation)は大規模言語モデル(LLM)の性能を改善するための手法の1つであり、質問に対する回答を生成する際に、外部知識源から情報を取り込みます。 これにより、LLM 自体で学習できる情報量に制限されることなく、より正確で…

Azure AI Searchを使った同義語によるクエリ拡張とその効果

PythonからAzure AI Searchのシノニムマップを作成し、クエリ拡張をして、その効果を日本語の質問応答データセットで確認してみました。昔からある機能で、とくに何か新しいことをしているわけでもないのですが、使いそうな機会があったので試してみました。…

意味的知識グラフとApache Solrを使った関連語検索の実装

Manningから出版予定の『AI-Powered Search』(AIを活用した情報検索の意)を冬休み中に読んでいたら、その中で意味的知識グラフ(Semantic Knowledge Graph)と呼ばれるデータ構造について説明していて、関連語の計算やクエリ拡張などに使えるということで…

日本語版のColBERTを検索に使ってみる

冬休み中に日本語版のColBERTであるJaColBERTが公開されていたので試してみました。ColBERTは、論文を読んでいるときに名前が出てくることがあるので試してみたかったのですが、これで試せるようになりました。

多言語E5をファインチューニングして検索性能を向上させる

多言語のテキスト埋め込み用のモデルであるMultilingual-E5[1]をファインチューニングして、検索性能が向上するか否かを日本語のデータセット検証してみました。結果としては、ファインチューニングすることで、OpenAIのtext-embedding-ada-002を上回る性能…

ハイブリッド検索で必ずしも検索性能が上がるわけではない

最近では、RAG(Retrieval Augmented Generation)を使って、検索して得られた文書を生成時に活用することがありますが、その性能を改善するための手法の1つとしてハイブリッド検索が知られています。ハイブリッド検索は、2つ以上の異なる検索技術を組み合わ…

検索性能を改善するハイブリッド検索で使えるランク融合アルゴリズム

Risk-Reward Trade-offs in Rank Fusionを読んでいて、検索システムの結果を統合するために使える教師なしのランク融合アルゴリズムについて書きたくなったのでまとめました。最近では、RAGの性能を改善するためにハイブリッド検索が使われることがあります…

LLMを用いたクエリ書き換えによる検索性能の変化を検証する

Rewrite-Retrieve-Readの論文[1]の構成で検索性能が改善するか試してみました。内容としては、RAGの内部で検索するときに、ユーザーのクエリを書き換えると性能が上がるという話です。ユーザーのクエリが検索に適しているとは限らないため、LLMで書き換えて…

LLMを用いたマルチクエリ生成による検索性能の改善

近年、大規模言語モデル(LLM)の進化は、自然言語処理の分野において画期的な変化をもたらしています。とくに、OpenAIのGPT-4のようなLLMは、その応用範囲の広さと精度の高さで注目を集めており、多くの研究者や開発者が新たな利用方法を模索しています。本…

LangChainを使ってHyDEによるクエリ変換の効果を検証する

ChatGPTやGPT-4をはじめとする大規模言語モデルの能力が向上し、多くの注目を集めています。とくにRAG(Retrieval Augmented Generation)と呼ばれる手法を使って、手元のデータを生成時に活用する手法がよく使われていますが、その性能を改善する方法は様々…

文書検索におけるリランキングの効果を検証する

日本語でのキーワード検索とベクトル検索に対して、検索結果のリランキングを適用して性能を評価してみました。 リランキングとは? 文書検索では検索クエリにマッチングした文書を順位付けして返しますが、その結果を何らかのモデルを使って並び替えること…

Cohereの多言語用の埋め込みモデルを日本語で評価してみる

Cohereが提供を開始した多言語用のテキスト埋め込み用のモデルであるembed-multilingual-v3.0の性能を日本語の文類似度と検索のデータセットで評価してみました。 Cohere Embed v3とは CohereのEmbed v3はテキストを埋め込むためのモデルです[1]。これまでも…

ranxを使って検索システムのオフライン評価をする

ranxはPythonで実装されたランキング評価用のライブラリです。検索システムの評価に使える以下のような指標が用意されていたり、それらの結果をRRFのようなアルゴリズムで組み合わせたり、論文用にテーブルをエクスポートする機能を備えています。本記事では…

OpenAIの埋め込みよりも高性能?多言語E5を日本語で評価してみる

多言語のテキスト埋め込み用のモデルであるMultilingual-E5-largeの性能を日本語のデータセットで評価してみました。 E5とは E5とはEmbEddings from bidirEctional Encoder rEpresentationsの略で、テキストの埋め込み用のモデルです[1]。Web上から収集した…

質問応答におけるパッセージ検索 BERT vs BM25

最近、文章を書く機会が少なくなっているので、リハビリがてら以下の論文を紹介しよう。 Investigating the Successes and Failures of BERT for Passage Re-Ranking この論文は、BERTによるパッセージ検索がBM25と比べて、どのような状況で強いのか分析して…

検索エンジンにBERTを組み合わせて検索性能を向上させる手法

SIGIR 2019より以下の論文を紹介。NLP2019でも発表されており、わかりやすいスライド付き。 FAQ Retrieval using Query-Question Similarity and BERT-Based Query-Answer Relevance 【論文】行政対話システムにおける検索エンジンTSUBAKIとBERTを併用したFA…

ElasticsearchとBERTを組み合わせて類似文書検索

本記事ではElasticsearchとBERTを組み合わせて類似文書検索を行う方法について紹介します。Elasticsearchでは最近、ベクトルに対する類似文書検索の機能が実装されました。一方、BERTを使うことでテキストを固定長のベクトルに変換することができます。つま…