質問だ: ナレッジグラフは重要だ。DeepSeek言語モデルが話題だが、ナレッジグラフを素早く構築するのに使えるのか?試してみたい。 ディープシーク 情報を抽出し、知識を統合し、何もないところからグラフを作成する能力がどの程度あるのか、実物を見てみよう。
方法: 私は、DeepSeekの知識グラフ構築能力をテストするために3つの実験を行った:
- 単一記事のビルドマッピング: DeepSeekに記事を与え、情報を正確に取得してグラフを作成できるかどうかを確認する。
- 複数記事のフュージョンマッピング DeepSeekに複数の記事を与えて、既存のグラフに新しい知識を追加できるかどうかを確認する。
- テーマ・ジェネレーション・マッピング: DeepSeekに、記事ではなくアトラスのトピックを伝え、DeepSeek自身がアトラスを作成できるかどうかを確認してください。
結果 実験は、DeepSeekが知識グラフをうまく構築し融合することを証明しているが、まだ改善の余地がある。
以下は実験の正確な手順と結果だが、より簡単な言葉で明らかにしよう。
I. 1つの記事から知識を抽出してマップを作る
目的 記事から知識を抽出し、ナレッジグラフを構築するDeepSeekの能力をテスト。
プロセス NebulaGraph グラフ・データベースに関する記事を見つけ、DeepSeek に記事を読ませて重要な情報を抽出し、NebulaGraph データベース・コード (nGQL) を生成してナレッジ・グラフを作成させました。
指示する: 「ナレッジグラフの作成を手伝ってもらえませんか?記事を渡すから、重要な情報を抽出して、nGQLコードでナレッジグラフを構築してくれ。"
オペレーション 記事の内容をコピーしてDeepSeekに直接貼り付けます。
DeepSeek が生成した nGQL コード:
# スキーマ定義 (TAG タイプ)
CREATE TAG IF NOT EXISTS product (
名前 STRING、
説明 STRING
); CREATE TAG IF NOT EXISTS product
CREATE TAG IF NOT EXISTS company (
名前 STRING
); CREATE TAG IF NOT EXISTS company
CREATE TAG IF NOT EXISTS feature (
名前
); CREATE TAG IF NOT EXISTS company ( name STRING )
CREATE TAG IF NOT EXISTS ツール (
名前
); 存在しない場合はタグを作成する
CREATE TAG IF NOT EXISTS シナリオ (
名前
); 存在しない場合はタグを作成する
CREATE TAG IF NOT EXISTS 言語 (
名前 STRING
); 存在しない場合はタグを作成する
CREATE TAG IF NOT EXISTS auth_service (
名前
); 存在しない場合はタグを作成する
CREATE TAG IF NOT EXISTS ecosystem (
名前
); CREATE TAG IF NOT EXISTS ecosystem ( name STRING ).
#スキーマ定義(EDGEタイプ)
CREATE EDGE IF NOT EXISTS has_feature (); CREATE EDGE IF NOT EXISTS used ( name STRING )
CREATE EDGE IF NOT EXISTS used_by (); CREATE EDGE IF NOT EXISTS used_by ()
CREATE EDGE IF NOT EXISTS provides_tool ().
CREATE EDGE IF NOT EXISTS supports_language (); CREATE EDGE IF NOT EXISTS supports_language ().
CREATE EDGE IF NOT EXISTS applicable_scenario (); CREATE EDGE IF NOT EXISTS supports_language ().
CREATE EDGE IF NOT EXISTS compatible_with ();; CREATE EDGE IF NOT EXISTS compatible_with ()
CREATE EDGE IF NOT EXISTS supports_auth (); CREATE EDGE IF NOT EXISTS supports_auth ()
CREATE EDGE IF NOT EXISTS integrates_with ().
#データ挿入 - コア製品
INSERT VERTEX product(name, description) VALUES
"NebulaGraph":("NebulaGraph", "数千億のポイントと数兆のエッジデータセットをサポートするオープンソースの分散グラフデータベース");; # Data Insertion - Core Product INSERT VERTEX product(name, description) VALUES
#データ挿入 - 製品の特徴
INSERT VERTEX feature(name) VALUES
"high_performance": ("high performance"), "open_source": ("open_source")
"scalability": ("easy to scale"), "flexible_modelling": ("flexible_modelling"), "flexible_modeling": ("flexible_modelling")
"flexible_modelling": ("flexible data modelling"), "read_write_balance": ("read_write_balance")
"read_write_balance": ("読み書きバランス"), "compatibility": ("互換性")
"compatibility": ("クエリー言語の互換性"); /* ...
/* ... ここでさらにデータを省略する. */
結果 DeepSeekのコードは問題なく、構文も正しく、複数のデータを1つのステートメントにまとめるという点で効率的です。このコードを NebulaGraph に入力して実行すると、グラフは次のようになります:
グラフはNebulaGraphを中心に関連情報を表示する。
II.複数の記事にまたがる知識の統合
目的 既存のグラフを拡張するために、複数の記事から知識を融合するDeepSeekの能力をテスト。
プロセス まず1つの記事でグラフを構築し、次に(百度の百科事典から)NebulaGraphに関するより多くの記事をDeepSeekに与えて、新しい知識を既存のグラフにマージする。
指示する: 「次の記事マッピングを現在のテーブル構造になじませてみてください。テーブル構造を変更するにはALTERコマンドを使用する。"
オペレーション NebulaGraphと360百科事典のエントリの抄録は、それぞれDeepSeekに提供された。
DeepSeekが生成したnGQLコード(NebulaGraphのエントリ):
#構造変更1:製品タグにバージョンと時間属性を追加する
ALTER TAG product ADD (
licence STRING、
current_version STRING、
release_date STRING, last_updated STRING
last_updated STRING
STRING, last_updated STRING)。
# 構造変更 2: 新しい開発済みリレーションシップタイプ
CREATE EDGE IF NOT EXISTS developed_by();
# データ更新 - 製品属性の追加
INSERT VERTEX product(name, description, license, current_version, release_date, last_updated)
値
「NebulaGraph": ("NebulaGraph", "Distributed Graph Database", "Apache 2.0", "v3.3.0", "2019-05-15", "2022-11-14");
# 新規開発会社の追加(companyタグの再利用)
INSERT VERTEX company(名前)
値
"Yueshu": ("Hangzhou Yueshu Technology Co.")
# 新規機能(機能タグの再利用)
INSERTEX feature(名前)
値
"acl_mechanism": ("ACL Mechanism"), "linear_scaling": ("ACL_mechanism"), "linear_scaling": ("ACL_mechanism")
"linear_scaling": ("linear scaling"), "data_recovery": ("data_recovery")
"data_recovery": ("データ復旧"), "htap": ("htap"), "htap": ("htap"), "htap": ("htap"), "htap": ("htap")
"nGQL_language": ("nGQL Query Language")。
#関係の確立(既存の関係タイプの再利用)
INSERT EDGE has_feature()
値
「NebulaGraph"->"acl_mechanism":()、
「NebulaGraph"->"linear_scaling":()、
「NebulaGraph"->"data_recovery":()、
「NebulaGraph"->"htap":()、
「NebulaGraph"->"nGQL_language":();
# 新しい開発済みリレーションシップの追加
INSERT EDGE developed_by()
値
「NebulaGraph"->"Yueshu":();
DeepSeek が生成した nGQL コード (360 ワード):
#構造変更1: companyタグにfounder, founded_date, revenue属性を追加する
ALTER TAG company ADD (founder STRING, founded_date STRING, revenue DOUBLE);
#構造変更2: イベントタイプのTAGを追加する
CREATE TAG IF NOT EXISTS event (
タイプ STRING, 日付 STRING, イベント (
日付 STRING、
金額 STRING、日付 STRING、金額 DOUBLE、詳細 STRING
詳細 STRING
STRING, 日付 STRING, 金額 DOUBLE, 詳細 STRING)。
# データ更新:360 会社情報の追加
INSERT VERTEX company(name, founder, founded_date, revenue)
値
"360": ("Qihoo360", "Zhou Hongyi", "2005-09", 116.15);
# データ挿入:製品エコロジー(製品タグの再利用)
INSERT VERTEX product(名前)
値
「360_Security_Guard": ("360 Security Guard"), "360_Browser".
「360_Cloud": ("360 Security Cloud").
# データ挿入:重要なイベント(新しいイベントタグを使用)
INSERT VERTEX event(タイプ、日付、金額、詳細)
値
"acquisition_360.com": ("Domain Acquisition", "2015-02-04", 1700.0, "RMB 110 million acquisition of 360.com")、
"privatisation": ("privatisation", "2015-12", 9300.0, "$9.3bn privatisation deal"), ).
#関係構築:エッジ接続製品による多重化開発_by
結果 DeepSeek は、新しい項目に基づいてテーブル構造を変更できます ( 製品 歌で応える 会社 テーブル+フィールド)と新しいリレーションシップ・タイプを追加した。これは ALTER コマンドでテーブル構造を変更することができる。 ちょっとした問題は、コメントで --nGQLが認識されない場合は、手動で変更してください。 # ライン上。
コードは実行のためにデータベースに入れられ、融合されたマッピングが機能する:
概要 DeepSeekはグラフの構築や知識の融合に適している。しかし、サーバーは時々遅く、NebulaGraphはスキーマを非同期で変更するため、反映されるまでに時間がかかる。
III.テーマの創出:何もないところからの農業地図作成
目的 記事のないトピックに基づいてナレッジグラフを生成するDeepSeekの機能をテスト。
プロセス 新しいダイアログを作成し、DeepSeekに「農業」のトピックに関するマッピングコードを直接生成させます。記事は指定されず、「自由参加」です。
指示する: "農業ナレッジグラフを構築したい。NebulaGraphデータベースを使用し、nGQLスクリプトを生成する。テーブル名は大きなこぶ、属性名は小さなこぶ、スキーマ名は衝突を避けるため``でラップ。少なくとも3000ノードを生成する。"
DeepSeek によって生成された nGQL コード (部分):
# ============================= #
# ダイアグラムスペースの作成
# =========================== #
CREATE SPACE `Agriculture` (vid_type = FIXED_STRING(32));
USE `Agriculture`.
# =============================== #
# ラベルスキーマの定義(大きなこぶのネーミング)
# ========================= #
CREATE TAG IF NOT EXISTS `Crop` (
cropId` int, `cropName` string
cropName` string, `growthPeriod
growthPeriod` int, `suitableTemp` string
suitableTemp` string, `yieldPerMu
yieldPerMu` float
);
# ============================= #
# ここでは多くのスクリプトが省略されている
# ======================= #
問題点と改善点
- ノード数の制限: 3000ノードで始めたが、DeepSeekは拒否し、CSVコードをインポートするためにPythonを与えた。私はPythonを使いたくなかったので、ノード数を減らした。
- 注釈の問題が再び浮上する: コードのコメントは次のとおりである。 --疑問が再び指摘された。
改善指示: 「コメントには#を使い、Pythonコードは使わない。50ノード分のngqlスクリプトをください。"
フォローアップの対話と指示: マップを改良するために、私はDeepSeekと対話を続け、データの追加、関連付けの強化、分類(門、目、科、属、種)によるマップの整理、さらに輪作データの作成を依頼した。
例えば、私の指示:
- "データリンク強化のための補足データ"
- 「これらの分類(系統、目、科、属、種)のアトラスを作る。
- 「禁忌作物を特定し、既存作物のローテーションに作物を加える。
- "マッピングされた作物組織データを組み合わせて、以前のフォーマットでnGQLスクリプトを与える"
実験的な間奏曲: ディープシーク、一度だけ インサート 文はnGQLではサポートされていないCypher構文を使用しており、指摘を受けて変更した。
指示する: "この挿入文はnGQL構文ではありません。 DDLが先でDMLが後になるように変更してください。"
最終データ量: 数回の対話の後、データ量が表示される:
マッピング効果: ランダムなノードをいくつか展開して見る:
回転種の収量を高める組み合わせの例: 不定植による収量増加の組み合わせ効果:
要約
結論 DeepSeekは知識グラフの構築と融合に優れており、実験でもその能力が実証されている:
- 情報の抽出は迅速かつ正確: DeepSeekは、テキストから重要な情報を素早く抽出し、準拠したnGQLスクリプトを生成し、エンティティ、関係、イベントを認識する強力な言語理解力を備えています。
- 知識を統合する能力が高い: DeepSeekは、複数の記事からの知識をうまく融合し、新しい記事に基づいてグラフを拡張・更新し、グラフの完全性と正確性を保証します。
- 何もないところから地図を作ることができる: トピック別にチャートを生成できる記事はない。生成プロセスにはいくつかの構文の不具合があるが、調整によって合格点のスクリプトが生成される。
- 細部を最適化する必要がある: DeepSeek によって生成されたスクリプトに、不正なコメントなどの構文の問題が発生することがあります。大量のノードを生成する場合、サーバの応答が遅くなることがあります。実際に使用する際は、これらの問題に注意する必要があります。