ナレッジグラフを使用して 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 を実装するにはどうすればよいでしょうか?

ブログ    
ブログ    
ブログ    

推薦する

Uberの自動運転車による死亡事故の捜査に新たな進展:横断歩道の外を歩く歩行者を識別できない

最近、国家運輸安全委員会(NTSB)は、Uberの自動運転車による死亡事故に関する調査の新たな進展を...

...

...

...

生成 AI は通信業界を救うことができるか?

MWC 2024カンファレンスで、Nvidiaは、ARM、ServiceNow、SoftBankと...

...

ソラが「莫大な富」をもたらす、AIインフラ:今度は私の番です!

春節期間中、OpenAIの最新の技術的成果であるVincentのビデオモデルSoraが衝撃的なデビュ...

ついに誰かがROSロボットオペレーティングシステムをわかりやすく説明しました

01 ROS入門多くの初心者は、ロボットのオペレーティングシステムと聞いて、「オペレーティングシス...

...

OpenAIはMicrosoftに対抗するためChatGPTパーソナルアシスタントの発売を計画

6 月 27 日のニュース: わずか半年で、ChatGPT は世界で最も有名なインターネット ブラン...

世界初の大型モデルエージェントが発売!口を動かすだけでPCが働き者になる

最近、謎のアシスタントであるシャオ・シュアイの助けにより、彼のオフィスの効率は以前に比べて10倍以上...

...

...

数千億ドル規模の市場:教育用ロボットは本当に実現可能か?

[[341606]]ある調査では、2025年までに中国の教育用ロボット市場は3000億ドルに達し、...

産業用ロボットはセンサーなしでも動作できますか?

現在、人口ボーナスの減少、人件費の上昇、人材構成の矛盾などの問題が、製造業の発展を阻む困難になりつつ...