
Sigir Ecom Challenge 2020에서 1슬 첫 번째 장소
WSDM Booking.com 챌린지 2021에서 2ZD Place 및 Best Paper Award
트위터에서 26 주일의 장소는 2021 년에 챌린지 챌린지
KDD CUP 2021에서 3ZRD 장소
Cleora는 가족 Geometridae 에서 나방의 속입니다. 그들의 과학적 이름은 고대 그리스 지리 γῆ 또는 γα α "지구"에서 유래하고, 메트론 μέ τρον "는 애벌레 또는"인치 웜 "과 관련하여" 지구를 측정 "하는 것처럼 보입니다. 패션.
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 파일 외에 파이썬 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 : 서로 상호 작용하거나 동시에 발생하거나 주어진 맥락에서 함께 존재한다고 말할 수 있습니다. 예제는 다음과 같습니다. 쇼핑 바구니의 제품, 비슷한 시간에 동일한 사람들이 자주 방문하는 위치, 직원들이 함께 협력하는 직원, 특정 상황에서 화학 분자, 동일한 박테리아에 의해 생성 된 단백질, 동일한 학술 논문의 공동 저자 , 동일한 링크드 인 프로파일에서 함께 발생하는 회사.
Q : 입력을 어떻게 구성해야합니까?
A : 가장 잘 작동하는 것은 유사한 맥락에서 동시에 발생하는 엔티티를 그룹화하고 complex::reflexive 수정자를 사용하여 공백 구분 라인으로 공급하는 것이 좋습니다. 예 : 제품 데이터가있는 경우 쇼핑 바구니 또는 사용자로 제품을 그룹화 할 수 있습니다. URL이있는 경우 (사용자, 시간 창) 쌍의 브라우저 세션별로 그룹화 할 수 있습니다. 위의 사용 예를 확인하십시오. 고객별로 제품을 그룹화하는 것은 단 하나의 가능성 일뿐입니다.
Q : 코사인 유사성과 비교하기 위해 사용자와 제품을 동시에 포함시킬 수 있습니까?
A : 아니요, 이것은 구식 매트릭스 인수화 접근법에서 비롯된 방법 론적으로 잘못된 접근법입니다. 당신이해야 할 일은 먼저 좋은 제품 임베딩을 제시 한 다음 그들로부터 사용자 임베딩을 만드는 것입니다. Cleora에 user product 공급하면 이중 파파트 그래프가됩니다. 비슷한 제품이 서로 가까워지고, 비슷한 사용자가 서로 가까이있을 것이지만, 사용자와 제품은 반드시 서로 유사하지는 않습니다.
Q : 사용할 차원은 무엇입니까?
A : 더 많을수록 좋습니다. 그러나 우리는 일반적으로 1024 에서 4096 까지 일합니다. 메모리는 저렴하고 기계는 강력하므로 크기를 삽입하지 마십시오.
Q : Markov 전파의 반복을 사용해야합니까?
A : 달성하고자하는 것에 따라 다릅니다. 낮은 반복 (3)은 동시 발생 매트릭스에 근사하는 경향이있는 반면, 높은 반복 (7+)은 상황에 맞는 유사성을 제공하는 경향이 있습니다 (건너 뛰기 그램이지만 훨씬 더 정확하고 빠른).
Q : 외부 정보 (예 : 엔티티 메타 데이터, 이미지, 텍스트를 임베딩에 통합하려면 어떻게해야합니까?
A : VIT, Setence-Transformers에서 나오는 벡터로 숫자 기능의 임의의 투영으로 임베딩 매트릭스를 초기화하십시오. 이 시나리오에서는 적은 수의 Markov 반복 (1 ~ 3)이 가장 잘 작동하는 경향이 있습니다.
Q : 내 임베딩은 기억에 맞지 않습니다. 어떻게해야합니까?
A : Cleora는 차원에서 독립적으로 작동합니다. 더 적은 수의 치수로 임베딩을 초기화하고, 클레오라를 실행하고, 디스크로 유지 한 다음 반복하십시오. 나중에 결과 임베딩 벡터를 연결할 수 있지만 나중에 정상화해야합니다!
Q : 최소 실체 발생이 있습니까?
A : 아니요, 다른 엔티티 A 와 1 번만 동시 발생하는 엔티티는 적절한 임베딩을 얻을 수 있습니다. 즉, B B A 가장 유사합니다. 다른 방법으로, A B 의 가장 가까운 이웃들 사이에서 높은 순위를 매길 것입니다. 사용 사례에 따라 바람직하거나 바람직하지 않을 수도 있습니다. 저주파 항목을 제거하기 위해 Cleora에 입력을 정리하십시오.
Q : Cleora가 실패 할 수있는 가장자리 사례가 있습니까?
A : Cleora는 비교적 희소 한 하이퍼 그래프에서 가장 잘 작동합니다. 모든 하이퍼 게이지에 매우 일반적인 엔티티 X 와 예를 들어 쇼핑백이 있으면 임의의 산책에서 가장 짧은 경로를 퇴보하여 임베딩의 품질을 저하시킵니다. 하이퍼 그래프에서 그러한 실체를 제거하는 것이 좋습니다.
Q : Cleora는 어떻게 동시에 빠르고 정확할 수 있습니까?
A : 네거티브 샘플링을 사용하지 않는 것은 큰 이익입니다. Cleora는 (스파 스) Markov 전이 행렬을 구성함으로써 하나의 큰 단계 (단일 매트릭스 곱셈)에서 하이퍼 그래프에서 가능한 모든 임의의 산책을 명시 적으로 수행합니다. 그것이 우리가 단일 반복 이라고 부르는 것입니다. 우리는 3+ 이러한 반복을 수행합니다. 동시성, 메모리 레이아웃 및 캐시 일관성에 특별한주의를 기울인 Rust의 매우 효율적인 구현 덕분에 그것은 매우 빠릅니다. 음의 샘플링 또는 무작위로 임의의 산책을 선택하면 많은 소음이 발생하는 경향이 있습니다. Cleora는 그 부담이 없습니다.
백서 "Cleora : 단순하고 강력하며 확장 가능한 그래프 임베딩 방식"을 읽으십시오.
Cleora는 매우 빠른 안정적인 반복 무작위 투영을 사용하여 N- 차원 구형 공간 에 실체를 포함시켜 비교할 수없는 성능과 확장 성을 허용합니다.
내장 할 수있는 데이터 유형은 예를 들어 다음과 같습니다.
!!!!!!! 면책 조항 : 아래의 숫자는 Cleora 1.X의 경우에 새 버전이 훨씬 빠르지 만 벤치 마크를 다시 실행해야합니다.
Cleora의 주요 경쟁 장점 :
임베딩 시간 - 예 :
| 연산 | 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"도구로 제작되었습니다.
Cleora는 유형 및 방향이없는 이종과 그래프를 나타내는 관계형 행 테이블을 섭취하며 다음을 포함 할 수 있습니다.
예를 들어 쇼핑 바구니를 나타내는 관계형 테이블에는 다음 열이있을 수 있습니다.
user <t> product <t> store
값이 포함 된 입력 파일로 :
user_id <t> product_id product_id product_id <t> store_id
모든 열에는 유형이 있으며, 이는 다른 열 사이의 식별자 공간이 공유되는지 또는 구별되는지 여부를 결정하는 데 사용됩니다. 두 열에서 유형을 공유 할 수 있습니다. 균질 그래프의 경우입니다.
user <t> user
열 형식 사양을 기반으로 Cleora는 다음을 수행합니다.
Cleora의 최종 출력은 테이블의 각 (무시되지 않은) 엔티티 유형에 대한 여러 파일로 구성됩니다.
그러한 임베딩은 아래에 더 설명되어있는 희미한 독립 속성 덕분에 새로운 방식으로 활용 될 수 있습니다.
Cleora에 의해 생성 된 임베딩은 Node2Vec, Word2Vec, Deepwalk 또는 기타 시스템에서 생성 된 것과 다수의 주요 속성에 의해 다릅니다.
위에서 설명한 기술적 특성은 Cleora의 우수한 생산 준비를 암시하며, 최종 사용자 관점에서 다음과 같이 요약 할 수 있습니다.
!!!!!!! 면책 조항 아래 문서는 Cleora 1.x에 대한 것이며 2.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 라이센스가 부여됩니다.
풀 요청을 환영합니다.