LightRAGという軽量で高速なRAGが登場したので見てみる【LLM】

LLM

スポンサーリンク

今回は、軽量かつ高速なRAGとしてLightRAGというのが出たらしいので少し見てみます。

概要

LightRAGとは

LightRAGについては、以下の記述が分かりやすいので日本語訳で引用します。

Retrieval-Augmented Generation(RAG)システムは、大きな言語モデル(LLM)を強化するために、外部の知識源を組み合わせて、ユーザーのニーズに応じたより正確で関連性のある応答を提供します。しかし、既存のRAGシステムにはいくつかの大きな問題があります。例えば、データの表現が平面的で、文脈を十分に理解できないため、複雑な関係をうまく表現できないことがあります。

そこで提案されているのが「LightRAG」という新しいシステムです。このシステムは、テキストのインデックス作成と検索プロセスにグラフ構造を取り入れています。これにより、情報をより広範囲にわたって取得できるようになります。また、グラフ構造とベクトル表現を組み合わせることで、関連する情報やその関係を効率よく取得できるようになり、応答の速度が大幅に向上します。

さらに、LightRAGには新しいデータを迅速に取り入れるためのアルゴリズムがあり、急速に変化するデータ環境でも効果的に機能します。実験によって、既存の方法と比べて取得精度や効率が大きく改善されたことが確認されています。

このLightRAGはオープンソースとして公開されており、誰でも利用できるようになっています。

引用:「LightRAG: Simple and Fast Retrieval-Augmented Generation」

この技術を利用したオープンソースコードもGitHub上で展開されています。
「このリポジトリはLightRAGのコードをホストしており、コード構造はnano-graphragに基礎づいている」と説明されています。

パフォーマンス

NativeRAGと比較して精度は非常に高いことが見て取れます。

AgricultureCSLegalMix
NaiveRAGLightRAGNaiveRAGLightRAGNaiveRAGLightRAGNaiveRAGLightRAG
Comprehensiveness32.69%67.31%35.44%64.56%19.05%80.95%36.36%63.64%
Diversity24.09%75.91%35.24%64.76%10.98%89.02%30.76%69.24%
Empowerment31.35%68.65%35.48%64.52%17.59%82.41%40.95%59.05%
Overall33.30%66.70%34.76%65.24%17.46%82.54%37.59%62.40%
RQ-RAGLightRAGRQ-RAGLightRAGRQ-RAGLightRAGRQ-RAGLightRAG
Comprehensiveness32.05%67.95%39.30%60.70%18.57%81.43%38.89%61.11%
Diversity29.44%70.56%38.71%61.29%15.14%84.86%28.50%71.50%
Empowerment32.51%67.49%37.52%62.48%17.80%82.20%43.96%56.04%
Overall33.29%66.71%39.03%60.97%17.80%82.20%39.61%60.39%
HyDELightRAGHyDELightRAGHyDELightRAGHyDELightRAG
Comprehensiveness24.39%75.61%36.49%63.51%27.68%72.32%42.17%57.83%
Diversity24.96%75.34%37.41%62.59%18.79%81.21%30.88%69.12%
Empowerment24.89%75.11%34.99%65.01%26.99%73.01%45.61%54.39%
Overall23.17%76.83%35.67%64.33%27.68%72.32%42.72%57.28%
GraphRAGLightRAGGraphRAGLightRAGGraphRAGLightRAGGraphRAGLightRAG
Comprehensiveness45.56%54.44%45.98%54.02%47.13%52.87%51.86%48.14%
Diversity19.65%80.35%39.64%60.36%25.55%74.45%35.87%64.13%
Empowerment36.69%63.31%45.09%54.91%42.81%57.19%52.94%47.06%
Overall43.62%56.38%45.98%54.02%45.70%54.30%51.86%48.14%
引用:HKUDS/LightRAG

使い方

公式の日本語訳ですが、使い方を紹介します。
詳しくは公式GitHubを参照してください。

インストール

ファイルからのインストール方法

cd LightRAG
pip install -e .

PyPIからのインストール方法

pip install lightrag-hku

設定事項

  • OpenAIのAPIキーを環境設定:export OPENAI_API_KEY="sk-...".
  • デモ用のテキスト"A Christmas Carol by Charles Dickens"を以下からダウンロード
curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt

Pythonコード

以下のPythonスニペットを実行すればOKです。

from lightrag import LightRAG, QueryParam

rag = LightRAG(working_dir="./dickens")

with open("./book.txt") as f:
    rag.insert(f.read())

# Perform naive search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")))

# Perform local search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="local")))

# Perform global search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="global")))

# Perform hybird search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="hybird")))

バッチインサート

rag.insert(["TEXT1", "TEXT2",...])

インクリメンタルインサート

rag = LightRAG(working_dir="./dickens")

with open("./newText.txt") as f:
    rag.insert(f.read())

まとめ

RAGは最近非常にホットな分野である一方、かなり敷居が高く手元でチャチャッとできない印象でしたが、LightRAGのような技術が広まれば誰でも精度高くRAGを動かせる時代も近いのかもしれませんね。

【Reference】

https://arxiv.org/abs/2410.05779

https://github.com/HKUDS/LightRAG?tab=readme-ov-file

LLM

Posted by このめ