
シギルecomチャレンジ2020での場所
WSDM Booking.com Challenge 2021での2収およびベストペーパー賞
Twitter Recsys Challenge 2021での2️⃣の場所
KDDカップ2021での3か地
クレオラは、幾何学科のmothの属です。彼らの科学名は、古代ギリシャのジオジオγῆまたはγαῖα「地球」に由来し、幼虫、または「インチワーム」がループで動くときに「地球を測定する」ように見えるように見えるように、メトロンμέτρονを「測定」します。ファッション。
Cleoraは、不均一なリレーショナルデータのための安定した誘導エンティティ埋め込みの効率的でスケーラブルな学習のための汎用モデルです。
インストール
pip install pycleora
指示を作成します
# prepare python env
pip install maturin
# Install pycleora in current env (meant for development)
maturin develop
# Usage example below. More examples in examples/ folder.
CleoraはPythonパッケージpycleoraとして利用可能になりました。以前のバージョンと比較した重要な改善:
tsvファイルに加えて、Python iteratorsからグラフを作成できますNumPyとのシームレスな統合変化の破壊:
complex::reflexive列を作成します。 from pycleora import SparseMatrix
import numpy as np
import pandas as pd
import random
# Generate example data
customers = [f"Customer_{i}" for i in range(1, 20)]
products = [f"Product_{j}" for j in range(1, 20)]
data = {
"customer": random.choices(customers, k=100),
"product": random.choices(products, k=100),
}
# Create DataFrame
df = pd.DataFrame(data)
# Create hyperedges
customer_products = df.groupby('customer')['product'].apply(list).values
# Convert to Cleora input format
cleora_input = map(lambda x: ' '.join(x), customer_products)
# Create Markov transition matrix for the hypergraph
mat = SparseMatrix.from_iterator(cleora_input, columns='complex::reflexive::product')
# Look at entity ids in the matrix, corresponding to embedding vectors
print(mat.entity_ids)
# ['Product_5', 'Product_3', 'Product_2', 'Product_4', 'Product_1']
# Initialize embedding vectors externally, using text, image, random vectors
# embeddings = ...
# Or use built-in random deterministic initialization
embeddings = mat.initialize_deterministically(1024)
# Perform Markov random walk, then normalize however many times we want
NUM_WALKS = 3 # The optimal number depends on the graph, typically between 3 and 7 yields good results
# lower values tend to capture co-occurrence, higher iterations capture substitutability in a context
for i in range(NUM_WALKS):
# Can propagate with a symmetric matrix as well, but left Markov is a great default
embeddings = mat.left_markov_propagate(embeddings)
# Normalize with L2 norm by default, for the embeddings to reside on a hypersphere. Can use standardization instead.
embeddings /= np.linalg.norm(embeddings, ord=2, axis=-1, keepdims=True)
# We're done, here are our embeddings
for entity, embedding in zip(mat.entity_ids, embeddings):
print(entity, embedding)
# We can now compare our embeddings with dot product (since they are L2 normalized)
print(np.dot(embeddings[0], embeddings[1]))
print(np.dot(embeddings[0], embeddings[2]))
print(np.dot(embeddings[0], embeddings[3]))
Q:何を埋め込むべきですか?
A:互いに相互作用するエンティティ、共同作業、または特定のコンテキストで一緒に存在すると言えます。例には、ショッピングバスケット内の製品、同じ人が同様の時間に頻繁に訪れる場所、協力している従業員、特定の状況で存在する化学分子、同じ細菌によって生成されたタンパク質、薬物相互作用、同じ学術論文の共著者、同じLinkedInプロファイルで一緒に発生する企業。
Q:入力をどのように構築する必要がありますか?
A:最もうまくいくのは、エンティティが同様のコンテキストで共起し、 complex::reflexiveグループ化することです。たとえば、製品データがある場合は、ショッピングバスケットまたはユーザーによって製品をグループ化できます。 URLがある場合は、ブラウザセッション、(ユーザー、タイムウィンドウ)ペアでグループ化できます。上記の使用例をご覧ください。顧客による製品のグループ化は、1つの可能性にすぎません。
Q:コサインの類似性と比較するために、ユーザーと製品を同時に埋め込むことはできますか?
A:いいえ、これは、時代遅れのマトリックス因数分解アプローチに起因する方法論的に間違ったアプローチです。あなたがすべきことは、最初に良い製品埋め込みを考えてから、それらからユーザーの埋め込みを作成することです。 user productの2つの列をCleoraに供給すると、二部グラフが得られます。同様の製品は互いに近くにあり、同様のユーザーは互いに近くにありますが、ユーザーと製品は必ずしも互いに似ているわけではありません。
Q:使用する次元の埋め込みは何ですか?
A:それ以上、より良いですが、通常は1024から4096まで作業します。メモリは安く、マシンは強力なので、埋め込みサイズをスキップしないでください。
Q:マルコフ伝播の反復はいくつ使用する必要がありますか?
A:達成したいことに依存します。低反復(3)は共起マトリックスに近似する傾向がありますが、高い反復(7+)は文脈上の類似性を与える傾向があります(スキップグラムがより正確で高速であると考えてください)。
Q:エンティティメタデータ、画像、テキストを埋め込みに組み込むにはどうすればよいですか?
A:埋め込みマトリックスを、数値機能のランダムな投影のVit、Setence-Transformersからの独自のベクトルを使用して初期化するだけです。そのシナリオでは、マルコフの反復の数が少ない(1〜3)。
Q:私の埋め込みはメモリに収まらない、どうすればよいですか?
A:クレオラは、寸法を独立して動作します。埋め込みを少数の寸法で初期化し、クレオラを実行し、ディスクに保持してから繰り返します。その後、結果として生じる埋め込みベクトルを連結できますが、後でそれらを正常化することを忘れないでください!
Q:エンティティの発生数は最低ですか?
A:いいえ、エンティティAはA他のエンティティBと一緒に1回だけ共同開催されます。つまり、 Bに最も似ています。もう1つの方法では、 A Bの最近隣人の間で高度にランク付けされます。これは、ユースケースに応じて望ましい場合と望まれない場合があります。低頻度のアイテムを排除するために、入力をCleoraに自由に剪定してください。
Q:クレオラが失敗する可能性のあるエッジケースはありますか?
A:Cleoraは、比較的まばらなハイパーグラフに最適です。すべてのハイペレッジに非常に一般的なエンティティXが含まれている場合、たとえばショッピングバッグなど、ランダムウォークで最も短いパスを退化させることにより、埋め込みの品質を分解します。そのようなエンティティをハイパーグラフから削除することは良い習慣です。
Q:Cleoraはどのように同時に非常に速く正確になることができますか?
A:否定的なサンプリングを使用しないことは素晴らしい恩恵です。 (スパース)マルコフ遷移マトリックスを構築することにより、クレオラは1つの大きなステップ(単一のマトリックス増殖)でハイパーグラフ内のすべての可能なランダムウォークを明示的に実行します。それが私たちが単一の反復と呼んでいるものです。このような反復を3+実行します。 Rustの非常に効率的な実装のおかげで、並行性、メモリレイアウト、キャッシュコヒーレンスに特に注意して、それは非常に高速です。負のサンプリングまたはランダムにランダムなウォークを選択すると、多くのノイズが導入される傾向があります - クレオラにはこれらの負担がありません。
ホワイトペーパー「クレオラ:シンプルで強力でスケーラブルなグラフ埋め込みスキーム」を読む
Cleoraは、非常に高速な安定性の反復ランダム投影を利用して、 n次元の球面空間にエンティティを埋め込みます。これにより、比類のないパフォーマンスとスケーラビリティが可能になります。
埋め込むことができるデータの種類は、例えば次のことです。
!!!免責事項:以下の数字はCleora 1.xの場合、新しいバージョンは大幅に高速ですが、ベンチマークを再実行する必要があります
クレオラの重要な競争上の利点:
埋め込み時間 - 例:
| アルゴリズム | FBデータセット | RoadNetデータセット | LiveJournalデータセット |
| クレオラ | 00:00:43 h | 00:21:59 h | 01:31:42 h |
| Pytorch-biggraph | 00:04.33 h | 00:31:11 h | 07:10:00 h |
リンク予測の結果 - 例:
| FBデータセット | RoadNetデータセット | LiveJournalデータセット | ||||
| アルゴリズム | MRR | hitrate@10 | MRR | hitrate@10 | MRR | hitrate@10 |
| クレオラ | 0.072 | 0.172 | 0.929 | 0.942 | 0.586 | 0.627 |
| Pytorch-biggraph | 0.035 | 0.072 | 0.850 | 0.866 | 0.565 | 0.672 |
Cleoraは、さまざまなデータ型と形式に適した多目的「Just It It It」ツールとして構築されています。
クレオラは、刻印されていない、無視されていない不均一なハイパーグラフを表す行のリレーショナルテーブルを摂取します。
たとえば、ショッピングバスケットを表すリレーショナルテーブルには、次の列がある場合があります。
user <t> product <t> store
値を含む入力ファイルで:
user_id <t> product_id product_id product_id <t> store_id
すべての列にはタイプがあり、異なる列間の識別子のスペースが共有されるか異なるかどうかを判断するために使用されます。 2つの列がタイプを共有する可能性があります。これは、均一なグラフの場合です。
user <t> user
列形式の仕様に基づいて、Cleoraは次のことを実行します。
Cleoraの最終出力は、テーブル内のエンティティタイプの各(無向)ペアの複数のファイルで構成されています。
これらの埋め込みは、以下でさらに説明する薄暗い独立財産のおかげで、新しい方法で利用できます。
Cleoraによって生成される埋め込みは、このクラスのNode2Vec、Word2vec、Deepwalk、または他のシステムによって生成された埋め込みとは異なります。
上記の技術的な特性は、クレオラの優れた生産の準備を暗示しています。これは、エンドユーザーの観点からは次のように要約できます。
!!!免責事項以下のドキュメントは、2.xで更新されるCleora 1.x用です
詳細については、完全なドキュメントをご覧ください。
詳細については、[email protected]までお問い合わせください
自分の作品でこのコードを使用する場合は、私たちの論文(および使用した方法のそれぞれの論文)を引用してください。
@article{DBLP:journals/corr/abs-2102-02302,
author = {Barbara Rychalska, Piotr Babel, Konrad Goluchowski, Andrzej Michalowski, Jacek Dabrowski},
title = {Cleora: {A} Simple, Strong and Scalable Graph Embedding Scheme},
journal = {CoRR},
year = {2021}
}
Synerise Cleoraは、ライセンスファイルにあるように、MITライセンスを取得しています。
プルリクエストは大歓迎です。