
1 место в Sigir Ecom Challenge 2020
2⃣ Плейс и лучшая бумажная награда на WSDM Booking.com Challenge 2021
2⃣ место в Twitter Recsys Challenge 2021
3⃣ место в KDD Cup 2021
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 Package pycleora . Ключевые улучшения по сравнению с предыдущей версией:
iterators Python в дополнение к файлам tsvNumPyНарушение изменений:
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]))
В: Что мне встроить?
A: Любые сущности, которые взаимодействуют друг с другом, совпадают или можно сказать, что они присутствуют вместе в данном контексте. Примеры могут включать в себя: продукты в корзине для покупок, места, посещаемые теми же людьми в аналогичное время, сотрудники сотрудничают вместе, химические молекулы присутствуют в определенных обстоятельствах, белки, продуцируемые теми же бактериями, лекарственные взаимодействия, соавторы тех же академических работ Компании, встречающиеся вместе в одних и тех же профилях LinkedIn.
В: Как мне построить вход?
A: То, что работает лучше всего, это группировка сущностей, сочетающихся в аналогичном контексте, и кормить их в сериях, разделенных в секторах, с использованием complex::reflexive модификатор-хорошая идея. Например, если у вас есть данные о продукте, вы можете сгруппировать продукты с помощью корзин для покупок или пользователей. Если у вас есть URL -адреса, вы можете сгруппировать их по сеансам браузера, из (пользователя, временного окна) пар. Проверьте пример использования выше. Группирование продуктов по клиентам - это лишь одна возможность.
В: Могу ли я одновременно встроить пользователей и продукты, чтобы сравнить их с косинусным сходством?
A: Нет, это методологически неправильный подход, вытекающий из устаревших подходов к факторизации матрицы. Сначала вы должны придумать хорошие встраиваемые продукты, а затем создать из них пользовательские вставки. Кормление двух столбцов, например, user product в Cleora приведет к двустороннему графику. Подобные продукты будут близки друг к другу, аналогичные пользователи будут близки друг к другу, но пользователи и продукты не обязательно будут похожи друг на друга.
Q: Какая встраиваемая размерность использовать?
A: Чем больше, тем лучше, но мы обычно работаем с 1024 до 4096 . Память дешевая, и машины являются мощными, поэтому не экономьте по размеру встраивания.
В: Сколько итераций распространения Маркова мне следует использовать?
A: Зависит от того, чего вы хотите достичь. Низкие итерации (3) имеют тенденцию к аппроксимации матрицы совместного появления, в то время как высокие итерации (7+) имеют тенденцию придавать контекстуальное сходство (подумайте о пропуске, но гораздо более точной и быстрее).
В: Как мне включить внешнюю информацию, например, метаданные сущности, изображения, тексты во внедрения?
A: Просто инициализируйте матрицу встраивания с вашими собственными векторами, поступающими из Vit, трансформеров-трансформаторов Vit, о случайной проекции ваших числовых функций. В этом сценарии низкое количество итераций Маркова (от 1 до 3), как правило, лучше всего работает.
В: Мои встраивания не вписываются в память, что мне делать?
A: Cleora работает на размерах независимо. Инициализируйте свои встраивания с меньшим количеством измерений, запустите Cleora, сохраняйте диск, а затем повторите. Вы можете впоследствии объединить свои полученные векторы, но не забудьте нормализовать их потом!
В: Есть ли минимальное количество случаев сущностей?
A: Нет, сущность A которая сочнется всего в 1 раз с какой-то другой сущностью B получит надлежащее внедрение, то есть B будет наиболее похож на A Другой путь A высоко оценен среди ближайших соседей B , которые могут быть или не быть желательными, в зависимости от вашего варианта использования. Не стесняйтесь обрезать свой вклад в Cleora, чтобы устранить низкочастотные элементы.
Q: Есть ли какие -нибудь краевые случаи, когда Cleora может потерпеть неудачу?
A: Cleora лучше всего работает для относительно разреженных гиперграфов. Если все ваши гипереджи содержат некоторую очень распространенную организацию X , например, сумку для покупок , то это ухудшит качество вторжений путем дегенерации самых коротких путей в случайной прогулке. Это хорошая практика, чтобы удалить такие сущности из гиперграфа.
В: Как Cleora может быть такой быстрой и точной одновременно?
A: Не использовать отрицательный выборка - отличный благо. Построив матрицу перехода Маркова, Cleora явно выполняет все возможные случайные прогулки в гиперграфе на одном большом шаге (единая матрица умножения). Это то, что мы называем одной итерацией . Мы выполняем 3+ таких итераций. Благодаря высокоэффективной реализации в Rust, с особой заботой о параллелизме, макете памяти и когерентности кеша, она явно быстро. Отрицательный отбор проб или случайным образом выбор случайных прогулок, как правило, вносят много шума - Cleora свободен от этих бремени.
Прочитайте Белый документ "Cleora: простая, сильная и масштабируемая схема встроенного графика"
Cleora встраивает сущности в n-размерные сферические пространства, использующие чрезвычайно быстрые стабильные, итеративные случайные проекции, которые обеспечивают беспрецедентную производительность и масштабируемость.
Типы данных, которые можно встроить, включают, например:
!!! Отказ от ответственности: цифры ниже для Cleora 1.x, новая версия значительно быстрее, но все же придется перезапустить тесты
Ключевые конкурентные преимущества Cleora:
Время встраивания - пример:
| Алгоритм | Набор данных FB | Набор данных Roadnet | Живой набор данных |
| Cleora | 00:00:43 ч | 00:21:59 ч | 01:31:42 ч |
| Питор-бигграф | 00: 04,33 ч | 00:31:11 ч | 07:10:00 ч |
Результаты прогнозирования ссылки - пример:
| Набор данных FB | Набор данных Roadnet | Живой набор данных | ||||
| Алгоритм | MRR | Hitrate@10 | MRR | Hitrate@10 | MRR | Hitrate@10 |
| Cleora | 0,072 | 0,172 | 0,929 | 0,942 | 0,586 | 0,627 |
| Питор-бигграф | 0,035 | 0,072 | 0,850 | 0,866 | 0,565 | 0,672 |
Cleora построена как многоцелевой инструмент «только что встроенный», подходящий для многих различных типов данных и форматов.
Cleora Ingests реляционная таблица рядов, представляющих напечатанный и неопределенный гетерогенный гиперграф, который может содержать множественные:
Например, реляционная таблица, представляющая корзины для покупок, может иметь следующие столбцы:
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, как найдено в файле лицензии.
Приглашаются запросы.