ナレッジグラフを使用して RAG 機能を改善し、大規模モデルの幻覚を軽減する

ナレッジグラフを使用して RAG 機能を改善し、大規模モデルの幻覚を軽減する

幻覚は、大規模言語モデル (LLM) を使用するときによく発生する問題です。 LLM は流暢で一貫性のあるテキストを作成しますが、不正確または一貫性のない情報を作成することがよくあります。 LLM が幻覚を生成するのを防ぐ 1 つの方法は、データベースやナレッジ グラフなどの事実情報を提供する外部の知識ソースを使用することです。

ベクトルデータベースと知識グラフ

ベクターデータベース

ベクター データベースは、単語、フレーズ、ドキュメントなどのエンティティまたは概念を表す高次元ベクターのコレクションです。データベースは、さまざまなエンティティまたは概念のベクトル表現に基づいて、それらの間の類似性または相関関係を測定するために使用できます。

たとえば、ベクトル データベースでは、「パリ」と「フランス」間のベクトル距離に基づいて、「パリ」と「フランス」は「パリ」と「ドイツ」よりも関連性が高いことがわかります。

ベクター データベースのクエリには通常、類似のベクターの検索や、特定の基準に基づいたベクターの取得が含まれます。以下は、ベクター データベースをクエリする方法の簡単な例です。

高次元ベクトルとして表される顧客プロファイルを含むベクトル データベースがあり、特定の参照顧客に類似する顧客を見つけたいとします。

1. まず、参照顧客のベクトル表現を定義します。これは、関連する特徴または属性を抽出し、それらをベクター形式に変換することによって実現できます。

2. k 最近傍法 (k-NN) やコサイン類似度などの適切なアルゴリズムを使用して、ベクター データベースで類似度検索を実行します。アルゴリズムは、参照顧客ベクトルの類似度スコアに基づいて最も近い近傍を識別します。

3. 前の手順で決定した最近傍ベクトルに対応する顧客プロファイルを取得します。これらのプロファイルは、定義された類似度測定に基づいて参照顧客と類似する顧客を表します。

4. 取得した顧客プロファイルまたは関連情報をユーザーに表示します(名前、人口統計データ、購入履歴など)。

ナレッジグラフ

ナレッジ グラフは、エンティティまたは概念とそれらの関係 (事実、属性、カテゴリなど) を表すノードとエッジのコレクションです。ノードとエッジのプロパティに基づいて、さまざまなエンティティまたは概念に関する事実情報を照会または推測するために使用できます。

たとえば、ナレッジ グラフでは、エッジ ラベルに基づいて、「パリ」が「フランス」の首都であることがわかります。

グラフ データベースをクエリするには、グラフ構造を走査し、特定の基準に基づいてノード、関係、またはパターンを取得します。

ソーシャル ネットワークを表すグラフ データベースがあるとします。このグラフ データベースでは、ユーザーがノードであり、その関係はノードを接続するエッジとして表されます。特定のユーザーに友人の友人 (共通のつながり) が見つかった場合は、次のように進めます。

1. グラフ データベース内の参照ユーザーを表すノードを識別します。これは、特定のユーザー ID またはその他の関連する基準を照会することによって実現できます。

2. Cypher (Neo4j で使用) や Gremlin などのグラフ クエリ言語を使用して、参照ユーザー ノードからグラフをトラバースします。探索するパターンまたは関係を指定します。

 MATCH (:User {userId: 'referenceUser'})-[:FRIEND]->()-[:FRIEND]->(fof:User) RETURN fof

このクエリは参照ユーザーから始まり、FRIEND 関係をたどって別のノード (FRIEND) を見つけ、次に別の FRIEND 関係をたどって友人の友人 (fof) を見つけます。

3. グラフ データベースに対してクエリを実行し、クエリ パターンに従って結果ノード (友人の友人) を取得し、取得したノードに関する特定の属性やその他の情報を取得します。

グラフ データベースは、フィルタリング、集計、複雑なパターン マッチングなど、より高度なクエリ機能を提供できます。具体的なクエリ言語と構文は異なる場合がありますが、一般的なプロセスでは、グラフ構造を走査して、目的の条件を満たすノードと関係を取得します。

「幻覚」問題を解決する知識グラフの利点

ナレッジグラフは、ベクター データベースよりも正確で具体的な情報を提供します。ベクター データベースは 2 つのエンティティまたは概念間の類似性または相関関係を表しますが、ナレッジ グラフはそれらの間の関係をよりよく理解できます。たとえば、ナレッジ グラフでは、「エッフェル塔」が「パリ」のランドマークであることがわかりますが、ベクター データベースでは 2 つの概念間の類似度を示すことしかできず、それらの関連性は説明できません。

ナレッジ グラフは、ベクター データベースよりも多様で複雑なクエリをサポートします。ベクター データベースは、主にベクター距離、類似度、または最近傍に基づいてクエリに応答できますが、直接的な類似度の測定に限定されます。ナレッジ グラフは、「プロパティ Z を持つすべてのエンティティは何ですか?」や「W と V の共通カテゴリは何ですか?」などの論理演算子に基づくクエリを処理できます。これにより、LLM はより多様で興味深いテキストを生成できるようになります。

ナレッジグラフは、ベクターデータベースよりも推論と推測の能力に優れています。ベクター データベースは、データベースに保存されている直接的な情報のみを提供できます。一方、ナレッジ グラフは、エンティティまたは概念間の関係から派生した間接的な情報を提供できます。たとえば、ナレッジ グラフは、「パリはフランスの首都である」と「フランスはヨーロッパにある」という 2 つの事実に基づいて、「エッフェル塔はヨーロッパにある」と推論できます。これにより、LLM はより論理的で一貫性のあるテキストを生成できるようになります。

したがって、ナレッジグラフはベクターデータベースよりも優れたソリューションです。これにより、LLM はより正確で、関連性が高く、多様で、興味深く、論理的で、一貫性のある情報を入手でき、正確で信頼性の高いテキストをより確実に作成できるようになります。しかし、ここで重要なのは、ドキュメント間に明確な関係性が必要であるということです。そうでなければ、ナレッジ グラフはそれを捉えることができません。

ただし、ナレッジ グラフの使用は、ベクター データベースほど直接的かつ単純ではありません。コンテンツ編成 (データ)、アプリケーションの展開、クエリ生成などの点でベクター データベースほど便利ではないだけでなく、実際のアプリケーションでの使用頻度にも影響します。そこで以下では、簡単な例を使って、ナレッジ グラフを使用して RAG を構築する方法を紹介します。

コードの実装

使用する必要がある主なツール/コンポーネントは 3 つあります。

1. LlamaIndex は、プライベート データとパブリック データの統合を簡素化するオーケストレーション フレームワークです。データの取り込み、インデックス作成、クエリのためのツールを提供し、生成 AI のニーズに対応する汎用ソリューションとなっています。

2. 埋め込みモデルは、テキストを、テキストによって提供される情報のデジタル表現に変換します。この表現は埋め込まれたコンテンツの意味を捉え、多くの業界アプリケーションに対して堅牢なものとなります。ここでは「thenlper/gte-large」モデルが使用されます。

3. 提供された質問とコンテキストに基づいて応答を生成するには、大規模な言語モデルが必要です。ここではZephyr 7Bベータモデルが使用されています

次に、コードを書き始めます。まず、パッケージをインストールします

%%capture pip install llama_index pyvis Ipython langchain pypdf

ログ記録を有効にするログ記録レベルを「INFO」に設定すると、アプリケーション操作のフローを監視するのに役立つメッセージを出力できます。

 import logging import sys # logging.basicConfig(stream=sys.stdout, level=logging.INFO) logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

依存関係のインポート

from llama_index import (SimpleDirectoryReader, LLMPredictor, ServiceContext, KnowledgeGraphIndex) # from llama_index.graph_stores import SimpleGraphStore from llama_index.storage.storage_context import StorageContext from llama_index.llms import HuggingFaceInferenceAPI from langchain.embeddings import HuggingFaceInferenceAPIEmbeddings from llama_index.embeddings import LangchainEmbedding from pyvis.network import Network

Huggingface推論APIエンドポイントを使用してLLMをロードします

HF_TOKEN = "api key DEEPHUB 123456" llm = HuggingFaceInferenceAPI( model_name="HuggingFaceH4/zephyr-7b-beta", token=HF_TOKEN )

まず埋め込みモデルを読み込みます。

 embed_model = LangchainEmbedding( HuggingFaceInferenceAPIEmbeddings(api_key=HF_TOKEN,model_name="thenlper/gte-large") )

データセットの読み込み

documents = SimpleDirectoryReader("/content/Documents").load_data() print(len(documents)) ####Output### 44

ナレッジグラフインデックスの構築

ナレッジ グラフの作成には、多くの場合、専門的で複雑なタスクが伴います。 Llama Index (LLM)、KnowledgeGraphIndex、GraphStore を活用することで、あらゆるデータ ソースから比較的効果的なナレッジ グラフを簡単に作成できます。

 #setup the service context service_context = ServiceContext.from_defaults( chunk_size=256, llm=llm, embed_model=embed_model ) #setup the storage context graph_store = SimpleGraphStore() storage_context = StorageContext.from_defaults(graph_store=graph_store) #Construct the Knowlege Graph Undex index = KnowledgeGraphIndex.from_documents( documents=documents, max_triplets_per_chunk=3, service_context=service_context, storage_context=storage_context, include_embeddings=True)

Max_triplets_per_chunk: データチャンクごとに処理されるリレーショントリプレットの数を制御します。

Include_embeddings: 高度な分析のためにインデックスに埋め込みを含めるかどうかを切り替えます。

クエリエンジンを構築してナレッジグラフをクエリする

query = "What is ESOP?" query_engine = index.as_query_engine(include_text=True, response_mode ="tree_summarize", embedding_mode="hybrid", similarity_top_k=5,) # message_template =f"""<|system|>Please check if the following pieces of context has any mention of the keywords provided in the Question.If not then don't know the answer, just say that you don't know.Stop there.Please donot try to make up an answer.</s> <|user|> Question: {query} Helpful Answer: </s>""" # response = query_engine.query(message_template) # print(response.response.split("<|assistant|>")[-1].strip()) #####OUTPUT ##################### ESOP stands for Employee Stock Ownership Plan. It is a retirement plan that allows employees to receive company stock or stock options as part of their compensation. In simpler terms, it is a plan that allows employees to own a portion of the company they work for. This can be a motivating factor for employees as they have a direct stake in the company's success. ESOPs can also be a tax-efficient way for companies to provide retirement benefits to their employees.

ご覧のとおり、出力結果は非常に良好で、ベクター データベースの結果と非常に一致していると言えます。

最後に、Pyvisライブラリを使用して生成したグラフを視覚化することもできます。

 from pyvis.network import Network from IPython.display import display g = index.get_networkx_graph() net = Network(notebook=True,cdn_resources="in_line",directed=True) net.from_nx(g) net.show("graph.html") net.save_graph("Knowledge_graph.html") # import IPython IPython.display.HTML(filename="/content/Knowledge_graph.html")

上記のコードにより、LLM を通じてナレッジ グラフを直接生成できるため、多くの手動操作が簡素化されます。より正確で完全なナレッジ グラフが必要な場合は、手動での検査が必要になりますが、ここでは詳細には触れません。

データストレージは、データを永続化することで、結果をハードディスクに保存し、後で使用することが可能になります。

 storage_context.persist()

保存された結果は次のとおりです。

要約する

ベクター データベースとナレッジ グラフの違いは、データの保存方法と表現方法にあります。ベクター データベースは、数値ベクターを使用してエンティティ間の距離を測定する、類似性ベースの操作に優れています。ナレッジ グラフは、ノードとエッジを通じて複雑な関係と依存関係をキャプチャし、セマンティック分析と高度な推論を容易にします。

言語モデル (LLM) 幻覚の場合、知識グラフはベクトル データベースよりも優れていることが示されています。ナレッジ グラフは、より正確で、多様で、興味深く、論理的で、一貫性のある情報を提供するため、LLM 幻覚の可能性が減ります。この利点は、類似点を示すだけでなく、エンティティ間の関係の正確な詳細を提供できることから生まれ、より複雑なクエリと論理的推論が可能になります。

これまで、ナレッジグラフの適用における難しさはグラフの構築にありました。しかし、現在では LLM の登場によりこのプロセスが簡素化され、使いやすいナレッジグラフを簡単に構築できるようになり、ナレッジグラフの適用が大きく前進しました。 RAG にとって、ナレッジ グラフは非常に優れたアプリケーション方向です。

<<: 

>>:  企業に適応型 AI を実装するにはどうすればよいでしょうか?

ブログ    

推薦する

実践的 | この記事は、ディープラーニングをゼロから始めるのに役立ちます

この記事は、初心者の視点から始まり、真のゼロベースの視点から専門的なアドバイスとガイダンスを提供する...

Google、一般的な皮膚疾患を識別するための新しいAIツールを発表

5月19日、海外メディアの報道によると、人工知能はヘルスケア分野で多くの用途があるため、Google...

指先で操作できる人工知能(基礎編)

人工知能の概念知能は知識と知性の総和です。知識はすべての知的行動の基礎であり、知能は知識を獲得し、そ...

Torch7 オープンソース PyTorch: Python ファーストのディープラーニング フレームワーク

PyTorch は、次の 2 つの高レベル機能を提供する Python パッケージです。強力な GP...

「スカイアイ」が母親殺害事件の容疑者を発見する前に、私たちはいくら支払ったのでしょうか?

少し前、あるニュースが大きな衝撃を与えた。3年前の母親殺害事件の容疑者、呉謝宇が重慶江北空港で逮捕さ...

...

AV-TESTに再び認定されました! Sangfor EDRは中国で初めて満点を獲得したエンタープライズレベルのエンドポイントセキュリティ製品となる

検出能力6点!パフォーマンス消費6ポイント!使いやすさ6点!先日、国際的に権威のある評価機関 AV-...

...

...

エンティティと値オブジェクトの特性を識別する

[[411622]]正確さは集計の設計に直接影響するため、エンティティと値オブジェクトを区別すること...

MetaのAIディレクターは、AIスーパーインテリジェンスがすぐに実現するとは考えておらず、量子コンピューティングにも懐疑的だ。

メタの主任科学者であり、ディープラーニングの先駆者であるヤン・ルカン氏は、現在のAIシステムが、山の...

[ディープラーニングシリーズ] PaddlePaddleとTensorflowによる画像分類

先月は、ディープラーニングにおける「Hello World」であるMNIST画像認識を中心に、畳み込...

役立つ情報 | 115 行のコードで数独パーサーを作成する方法を段階的に説明します。

あなたも数独愛好家ですか? Aakash Jhawar さんは、多くの人と同じように、新しい困難な課...

2022 年の AIOps トレンド予測

[[429163]]人工知能、機械学習、自動化などの先進技術の普及により、企業のビジネスシナリオは大...