機械翻訳について

グラフへの機械学習の適用

PGX機械学習ライブラリを使用して、Graph Studioのpropertyグラフ・データで機械学習を使用できます。

次に、サポートされているいくつかの機械学習アルゴリズムを示します:

  • DeepWalk
  • 監視ありGraphWise
  • 監視なしGraphWise
  • Pg2vec
詳細は、「Oracle Databaseプロパティ・グラフのグラフ開発者ガイド」「グラフのための機械学習ライブラリ(PgxML)の使用」を参照してください。
機械学習アルゴリズムの実行は、次のインタプリタを使用してノートブック段落でサポートされています:
たとえば、次のステップでは、ノートブック段落のグラフでのDeepWalkモデルの使用方法について説明します。
  1. 必要なグラフをメモリーにロードし、ノートブックのグラフを参照します。
    詳細については、「プログラムによるメモリーへのグラフのロード」を参照してください。
  2. カスタマイズされたハイパーパラメータを使用して、DeepWalkモデルを作成します。
    import oracle.pgx.api.mllib.DeepWalkModel
    var model = session.createAnalyst().deepWalkModelBuilder().
                    setMinWordFrequency(1).
                    setBatchSize(512).
                    setNumEpochs(1).
                    setLayerSize(100).
                    setLearningRate(0.05).
                    setMinLearningRate(0.0001).
                    setWindowSize(3).
                    setWalksPerVertex(6).
                    setWalkLength(4).
                    setSampleRate(0.00001).
                    setNegativeSample(2).
                    setValidationFraction(0.01).
                    build()
    model = analyst.deepwalk_builder(min_word_frequency= 1,
                                    batch_size= 512,
                                    num_epochs= 1,
                                    layer_size= 100,
                                    learning_rate= 0.05,
                                    min_learning_rate= 0.0001,
                                    window_size= 3,
                                    walks_per_vertex= 6,
                                    walk_length= 4,
                                    sample_rate= 0.00001,
                                    negative_sample= 2,
                                    validation_fraction= 0.01)
  3. グラフ・データでDeepWalkモデルをトレーニングします。
    model.fit(g)
    model.fit(g)

DeepWalkモデルで、次の機能の1つ以上を実行できるようになりました:

  1. データの損失値をコンピュートします。
    var loss = model.getLoss()
    loss = model.loss
  2. 入力頂点のリストの類似した頂点を取得します。
    import oracle.pgx.api.frames.*
    List<java.lang.Object> vertices = Arrays.asList("3244407212344026742", "371586706748522153")
    var batchSimilars = model.computeSimilars(vertices, 2 )
    batchSimilars.print(out,10,0)
    vertices = ["3244407212344026742", "371586706748522153"]
    batch_similars = model.compute_similars(vertices, 2)
    batch_similars.print()
    出力の形式は次のとおりです:
    +----------------------------------------------------------------+
    | srcVertex           | dstVertex           | similarity         |
    +----------------------------------------------------------------+
    | 3244407212344026742 | 3244407212344026742 | 1.0                |
    | 3244407212344026742 | 3510061098087750671 | 0.2863036096096039 |
    | 371586706748522153  | 371586706748522153  | 1.0                |
    | 371586706748522153  | 2128822953047004384 | 0.3220503330230713 |
    +----------------------------------------------------------------+
  3. トレーニング済みのすべての頂点ベクトルをデータベースに取得して保存します。
    var vertexVectors = model.getTrainedVertexVectors().flattenAll()
    vertexVectors.write().db().name("deepwalkframe").tablename("vertexVectors").overwrite(true).store()
    
    vertex_vectors = model.trained_vectors.flatten_all()
    vertex_vectors.write().db().table_name("vertex_vectors").overwrite(True).store()
    
    Always Free Autonomous Databaseインスタンス(つまり、1つのOCPUと20GBのストレージのみを含むインスタンス)を使用している場合は、Java (PGX)ノートブック段落の表へのPgxFrameの書込み時に、1つの接続のみを使用する必要も指定する必要があります。 たとえば、次のようにwrite()を起動する必要があります:
    vertexVectors.write().db().name("deepwalkframe").tablename("vertexVectors").overwrite(true).connections(1).store()
    フラット・ベクターのデータベース・テーブルの列は、次のように表示されます:
    +----------------------------------------------------+---------------------+
    | vertexid                     | embedding_0         | embedding_1         |
    +----------------------------------------------------+---------------------+
  4. トレーニング済モデルをデータベースに格納します。
    model.export().db().modelstore("bank_model").modelname("model").description("DeepWalk Model for Bank data").store()
    model.export().db(model_store="bank_model",
                      model_name="model", model_description="DeepWalk Model for Bank data", overwrite=True)
    モデルは、モデル・ストア表に行として格納されます。
  5. 事前トレーニング済モデルをデータベースからロードします。
    var model = session.createAnalyst().loadDeepWalkModel().db().modelstore("bank_model").modelname("model").load()
    model = analyst.get_deepwalk_model_loader().db(model_store="bank_model",
                                           model_name="model")
  6. DeepWalkモデルを破棄します。
    model.destroy()
    model.destroy()