現在のビッグデータ業界では、アルゴリズムのアップグレード、特に機械学習の導入により、「パターン発見」アルゴリズムがもたらす「ボーナス」が徐々に消えつつあり、より深いデータマイニングを行う方法が必要とされています。この新しい方法がナレッジグラフです。次に、ナレッジグラフと Daguan Data でのその応用について説明します。
1. ナレッジグラフとは何ですか? ナレッジ グラフは、ポイントを使用してエンティティを置き換え、エッジを使用してエンティティ間の関係を置き換えるセマンティック ネットワークです。簡単に言えば、ナレッジ グラフとは、さまざまな種類の情報 (異種情報) をすべて結び付けるリレーショナル ネットワークです。リレーショナルな観点から問題を分析するための視点を提供します。この観点から見ると、「パターンを見つける」という次元から「理解する」という次元に上昇することができ、ナレッジグラフが AI の未来であると主張する人もいます。 「Daguan Data は人工知能企業です」という文章は、機械にとっては単なる文字列ですが、人間にとっては主語、述語、目的語の 3 つの部分に分けられます。つまり、主語「Daguan Data」、述語「は」、目的語「人工知能企業です」です。 では、機械がこの文を見たときに、それが単なる文字列ではなく、主語、述語、目的語によって「理解」できる構造であることがわかるようなデータ編成の形式はあるのでしょうか?もちろん、これがナレッジグラフの目的です。 ナレッジ グラフは、エンティティ リレーションシップ ネットワーク ダイアグラムとして表すことができます。エンティティは情報を含む個体であり、ノードと呼ばれます。リレーションシップは 2 つのエンティティ間の接続であり、エッジと呼ばれます。上記の例「Daguan Data は人工知能企業です」を借りると、「Daguan Data」と「人工知能企業」は 2 つのエンティティであり、「is」はこれら 2 つのエンティティ間の関係を指します。したがって、この文は図 1 のようにナレッジ グラフで表すことができます。 図1 2. ナレッジグラフの応用シナリオ ナレッジ グラフとは何かがわかったところで、その用途は何でしょうか?ここでは、検索エンジンにおけるナレッジグラフの役割と、銀行のリスク管理システムにおけるその応用という 2 つの例を示します。 1. 検索エンジンにおけるナレッジグラフの応用 検索エンジンを使用する際、検索語句 (クエリ) は「張さんはどこを卒業したのですか?」などの質問のように見えることがよくあります。このとき、Web ページのランキング (ページランク) ではなく、検索エンジンが直接必要な結果を返す必要があります。たとえば、Google で「ザッカーバーグの妻は誰ですか」と検索する場合、必要なのはザッカーバーグの妻プリシラ・チャンに関する情報を含む Web ページではなく、プリシラ・チャンに関する詳細な情報です。まずはGoogleの結果を見てみましょう。 図2 それで、Google はどうやってそれを実現したのでしょうか?実際、Google は 2012 年の早い段階ですでに検索にナレッジ グラフを追加していました。ユーザーは Google が構築したナレッジ グラフを通じて結果を直接照会できるため、ユーザー エクスペリエンスが大幅に向上します。 Google にとっても、処理は比較的簡単です。まず、「ザッカーバーグの妻は誰か」というクエリが、自然言語処理技術 (NLP) によって「ザッカーバーグ」エンティティと「has_wife」の関係に処理され、次に、すでに構築されている知識グラフからクエリが検索され、クエリ結果がユーザーに返されます。 しかし、このような変化により、通常の検索エンジンからユーザー視点でのインテリジェントな質疑応答システムへと変貌し、ユーザーエクスペリエンスがより高いレベルに引き上げられました。 2. 暗黙的関係マイニングにおけるナレッジグラフの応用。 マックス・ウェーバーはかつて「人間は、自らが織り成した意味の網に掛かっている動物である」と言いました。この言葉は、人と人との関係が非常に複雑であることを間接的に示しています。私たちは、このような複雑な人間関係を探求できるでしょうか? まず、人間関係は実はネットワークのようなもので、ネットワークである以上、ネットワーク上の隣接する2つのノード間の経路にダメージがあっても、必ずしもネットワーク全体に影響が及ぶわけではないという特性があるはずです。たとえば、ネットワーク (無向グラフ) 内の隣接ノード A からノード B へのパスが「壊れている」場合、ネットワーク全体に影響を与えずに A から B への別のパスが見つかる可能性が非常に高くなります。では、インターネットのこの特性はデータマイニングにどのように適用すればよいのでしょうか?銀行のリスク管理システムにおけるナレッジグラフの例を見てみましょう。 図3 借り手がお金を借りる際に記入した関係に基づいて、ナレッジ グラフを構築できます。図に示すように、借り手は張三の友人であり、李思とは父子の関係です。借り手の情報をナレッジグラフに追加しようとすると、「一貫性検証」エンジンが起動します。エンジンはまず張三と李斯の関係を読み取り、この「三角関係」が正しいかどうかを確認します。当然ですが、友人の友人は父と息子の関係ではないので、明らかにリスクがあります。ここでの暗黙的な関係マイニングでは、一般的な関係マイニング エンジンを使用することも、暗黙的な関係マイニング エンジンを自分で実装することもできます。一般的な関連関係のマイニングは普遍的であるため、関係マイニングの正確性を保証することは通常困難です。通常、関係マイニングの正確性を保証するために、ルールは自分で構成されます。暗黙の関係性をマイニングする技術は現在、ナレッジグラフ研究の最前線にあります。ご興味があれば、関連論文を参照してください。 ナレッジ グラフは、失われた借り手の 2 つ以上の関係をマイニングして借り手を見つけるなど、銀行のリスク管理において他の多くの役割を果たします。 これは、「関係」が複雑になるほど、ナレッジ グラフがより効果的になることを示しています。 ナレッジグラフの応用シナリオは他にもたくさんありますが、ここでは紹介していません。ご興味がありましたら、「ナレッジグラフの応用」(http://mp.weixin.qq.com/s/aRKS1CHNdh51010sZzBLlA)をご覧ください。 3. ナレッジグラフの構築 ナレッジ グラフは非常に便利なので、独自のナレッジ グラフを構築するにはどうすればよいでしょうか。また、従来のデータをナレッジ グラフに変換するにはどうすればよいでしょうか。 従来のデータは、主にフォーマットされたデータとフォーマットされていないデータの 2 種類に分けられます。フォーマットされたデータをナレッジ グラフに変換する場合、ナレッジ グラフを構築するために、フォーマットされたデータをエンティティ リレーションシップ グループにマッピングする必要があります。フォーマットされていないデータの変換はより複雑であり、通常はアルゴリズム抽出とプログラム抽出の 2 つの方法が使用されます。 1. アルゴリズム抽出方法: 自然言語処理 (NLP) 技術を通じてテキストの固有表現抽出 (NER) が実行され、フォーマットされていないテキストから固有名詞や意味のあるフレーズが識別され、分類されます。たとえば、上記の例では、「Daguan Data は人工知能会社です」というテキストから、「Daguan Data」と「人工知能会社」という 2 つのエンティティと従属関係「is」を識別できます。このようにして、「Daguan Data」、「is」、「人工知能会社」というエンティティ グループを通じてナレッジ グラフを構築できます。現在の NER 認識技術はまだ十分に成熟していないため、認識されたエンティティの正確性を確保するために、通常は NER によって認識されたエンティティを手動で修正します。 2. プログラム抽出方法: エンティティ認識のためにフォーマットされていないデータを処理する場合、履歴書のテキストなど、名前: XXX、会社名: XXX などの形式が含まれることが多い半フォーマットされたデータに遭遇することがよくあります。このような半フォーマットされたテキストに遭遇した場合、正規表現やその他の方法を使用してテキストを抽出し、ナレッジ グラフ構築の整合性と正確性を確保することもできます。 4. ナレッジグラフストレージと neo4j パフォーマンステスト ナレッジグラフはグラフベースのデータ構造で、通常はグラフデータベースに保存されます。まずはグラフデータベースのランキング(一部)を見てみましょう。データソース: DB-Engines ランキング (https://db-engines.com/en/ranking/graph+dbms)。 図4 ランキングから、Neo4j データベースが 1 位であることがわかります。実際、neo4j はすでに業界でナレッジ グラフを分析するための主流のデータベースです。では、neo4j グラフ データベースをプロジェクトに適用し、neo4j グラフ データベースを最適化するにはどうすればよいでしょうか。まず、neo4j のパフォーマンスを見てみましょう。 テスト環境: 1. オペレーティングシステム: Mac OS X 10.10.5 2. メモリ: 8G 3. CPUパラメータ: 8コア、8スレッド 4. プログラミング言語: Python 2.7 5. Neo4j バージョン: 3.3.0 6. サーバーノード数: 単一ポイント テスト内容: ノード数がそれぞれ 10,000、100,000、100 万、1,000 万の場合の、インデックス設定ありとなしのノード検索の平均レイテンシ。テスト結果は次のとおりです。 図5 上記のテストから、ノード数が 1,000 万を超えると、インデックスを設定せずに平均クエリ遅延が 6 秒を超えていることがわかります。これは、この時点で neo4j が明らかに「対応できない」ことを示しています。明らかに、このような遅延は実際のプロジェクト アプリケーションではまったく受け入れられません。しかし、インデックスを設定した後はクエリ時間が大幅に短縮されたことがわかりました。では、インデックスをさらに設定する方が良いのでしょうか? 1,000 万ノードの場合のインデックスありとなしの挿入遅延テストを見てみましょう。 図6 上の図のテスト結果から、*** データの場合、インデックス付きの挿入はインデックスなしの挿入よりも 30% 遅いことがわかります。したがって、インデックスの数が多いほど良いというわけではありません。では、これ以外に、neo4j のどの領域を最適化できるでしょうか。 4. Neo4jグラフデータベースの最適化 Neo4j はスキーマを使用しないため、理論的には neo4j はあらゆる形式のデータを保存できます。ただし、neo4j はキーと値のペアの双方向リストを通じてノードとリレーションシップの属性値を保存するため、neo4j はエンティティ リレーションシップと単純なエンティティ属性の保存にのみ適しています。実際のアプリケーションでは、エンティティには通常、多くの属性が含まれます。これらの属性がすべて neo4j に保存されると、neo4j のクエリは非常に遅くなります。実際のアプリケーション シナリオでは、同時実行性が高い状況に遭遇することがよくあります。現時点では、単一ノードの neo4j では状況に対処できないようです。では、実際のプロジェクトで高い同時実行性に耐えるために、neo4j をどのように活用すればよいのでしょうか? 1. 高可用性アーキテクチャ: neo4j HA (高可用性) は neo4j の高可用性機能ですが、この機能は neo4j エンタープライズ エディションでのみ利用できます。 neo4j HA は、複数の neo4j スレーブを使用して単一の neo4j マスターを置き換えるフォールト トレラント アーキテクチャを使用します。このアーキテクチャにより、物理マシンに障害が発生した場合でも、データベースは完全な読み取りおよび書き込み機能を持つことができます。neo4j HA はマスターとスレーブ間のデータ同期を使用し、書き込み操作もスレーブ データベースで実行できるため (この方法はマスター ノードへの書き込みほど信頼性が高くないことがテスト済み)、neo4j HA は単一の neo4j データベースよりも読み取り負荷処理能力が高くなります。 neo4j エンタープライズ エディションを使用していない場合は、高可用性アーキテクチャを実現するために、自分で neo4j クラスターを構築する必要がある場合があります。もちろん、Neo4j + DRBD (Distributed Replicated Block Device) + Keepalived を使用して独自の neo4j クラスターを構築し、DRBD を使用して neo4j ライブラリ データを単一のポイントにバックアップし、Keepalived を使用してクラスターを管理することもできます。さらに、Zookeeper を使用してクラスター ノードを管理し、マスター ノードのデータ変更の Cypher ステートメント メタ操作をスレーブ ノードに同期して (MySQL の binlog に類似)、マスターとスレーブの同期を実現し、読み取りと書き込みの分離を実現することもできます。もちろん、方法 1 と方法 2 のどちらを採用しても、開発および保守コストは増加します。 2. キャッシュを増やす: アプリケーション キャッシュ: 実際のアプリケーション プロセスでは、ギャラリーの読み取りと書き込み時に、頻繁に変更されない一部のデータに対するクエリによく遭遇します。たとえば、ユーザーの国情報を頻繁にクエリする必要がありますが、国属性の変更頻度は比較的低く、ユーザーの国籍情報は頻繁に変更されません。このとき、アプリケーション キャッシュ (redis、leveldb など) を追加してクエリ結果をキャッシュし、ギャラリーへの直接アクセス頻度を減らし、ギャラリーの読み取り負荷を軽減できます。 データベース キャッシュ: クエリ操作を実行すると、neo4j はデータをメモリにキャッシュします。同じクエリ操作を実行すると、neo4j はメモリにキャッシュされたデータ結果を直接返します。ランダム クエリが実行されると、後者のクエリの結果によって前のクエリ データが上書きされます。メモリ キャッシュの構成は、構成ファイルの dbms.query_cache_size パラメータを変更することで調整できます。したがって、ステートメントを実行するときは、キャッシュミスの発生を減らすために、既存のデータのキャッシュを可能な限り使用するようにしてください。 3. インデックスクエリの最適化: クエリの最適化: neo4j はクエリ結果をメモリにキャッシュするため、次の cypher ステートメントのように、不要なクエリ結果をメモリに格納しないようにしてください。 1、MATCH (n) オプション MATCH (n)-[r]->() RETURN count(n.prop) + count(r.prop); 2、MATCH (n) オプション MATCH (n)-[r]->() RETURN count(*) + count(*); ステートメント 1 はステートメント 2 よりも優れています。後者はノードとリレーションシップのすべての属性をメモリにロードしてからカウント値を計算するのに対し、前者はカウント値を計算するために必要な属性のみをメモリにロードするからです。 インデックスの最適化: データベース インデックスは、実際にはデータの外部に特定のアルゴリズム (B+Tree など) のデータ構造を維持していることがわかっています。たとえば、図 7 では、Col2 のクエリを高速化するためにバイナリ ツリーが構築され、元の「シーケンシャル」検索が「バイナリ検索」に変換され、クエリの複雑さが o(logn) に削減されます。さらに、インデックスはアクセス ローカリティの原則も使用し、オペレーティング システムのページ キャッシュを最大限に活用して検索を高速化します。 図7: データベースのインデックス作成の原則の紹介 インデックスを追加すると、ライブラリはデータを維持しながら追加のデータ構造を維持する必要があるため、データを更新するときに追加のオーバーヘッドが発生します。これは、インデックスなしでデータを挿入する方がインデックスありの場合よりも高速であるという上記のテストの結論を裏付けています。 Neo4j 1.4 以降のバージョンでは、自動インデックス作成が導入されています。config/neo4j.properties で自動インデックス作成を構成するか、ステートメント CREATE INDEX ON :Label(PropertyName) を使用して手動でインデックスを作成し、クエリの効率を向上させることができます。 複数の属性値は、共同インデックスを使用して設定することもできます。(https://neo4j.com/docs/developer-manual/current/cypher/schema/index/) を参照してください。 4. Neo4jとKV(キーバリュー)データベースを併用する neo4j ノードのプロパティとリレーションシップはキーと値の双方向リストに格納されるため、このデータ構造では、neo4j に格納されるノードにあまり多くのプロパティ値を含められないことが決定されます。ただし、実際のアプリケーションでは、多数の属性を持つエンティティに遭遇することがよくあります。必要に応じて、これらの属性の値を介してエンティティをクエリし、エンティティが持つ関係を見つける必要があります。このとき、MongoDB の objectId を neo4j ノードの属性に格納するなど、neo4j データベースと KV データベース (MongoDB など) を併用することができます。このように、neo4j の特性を最大限に活用してリレーションシップ クエリを実行し、KV データベースの特性を使用して属性からエンティティへのクエリを実行できます。通常、ギャラリーと KV データベースを一緒に使用する場合、特に属性によってエンティティを頻繁にクエリする必要がある場合は、neo4j スキーマ インデックスを設定する必要があります。つまり、neo4j で KV データベースに関連付けられた値のインデックスを設定する必要があります。 要約と展望 ナレッジ グラフと Neo4j には興味深い機能が多数ありますが、スペースの制約によりここでは説明しません。 Google が 2012 年にナレッジ グラフ テクノロジーを発表して以来、ナレッジ グラフは急速な発展を遂げてきました。ナレッジグラフは関係性を「理解する」という点で優れているため、大手インターネット企業や伝統的な企業のプロジェクトに導入され、良好な成果を上げています。ナレッジ グラフによるデータの理解が従来の方法と一致していないため、従来のデータ マイニング アルゴリズムに課題が生じます。ナレッジ グラフへの注目が高まるにつれ、ナレッジ グラフの分野ではより成熟した構築、保存、マイニングの概念が生まれると考えています。近い将来、ナレッジ グラフはより幅広い分野ですべての人に役立つようになると信じています。 [この記事は51CTOコラムニスト「Daguan Data」によるオリジナル記事です。転載については51CTOコラムまでご連絡ください] この著者の他の記事を読むにはここをクリックしてください |
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
まだ「投資段階」にある自動運転業界にとって、「新しいインフラ」は単なる概念ではなく、実際のビジネスチ...
この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...
[51CTO.com クイック翻訳] 現在、機械学習は主要なソフトウェアエンジニアリング分野における...
[[428819]]ダブルポインタのアルゴリズム原理は、2 つのポインタを介して 1 つの for ...
ChatGPT ですら首をかしげたアルゴリズムの最適化は、北京大学のチームによって達成されました。...
2023年6月、Ant Groupはデータベース分野の大規模モデルフレームワークであるDB-GPT...
生成 AI は 2022 年末までに世界を席巻し、2023 年には AI 分野が脚光を浴びることにな...
[[335375]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...
一部の企業にとって、新型コロナウイルス感染症のパンデミックは壊滅的な打撃となっている。しかし、他の企...
[[423559]] 5Gの開発と導入は、特にアジアで加速しています。現場ではさまざまな試験が進行中...