Первоначально опубликовано на https://cyberconnect.hashnode.dev/cyberconnects-nft-recommendation-engine-1

Введение

Находить новые проекты в Web3 невероятно сложно. Независимо от того, пытаетесь ли вы быть в курсе последних проектов NFT PFP или хотите открыть для себя новейшие онлайн-игры, Web3 в его нынешнем состоянии не имеет возможности находить персонализированный контент и проекты, отвечающие вашим интересам. На самом деле онлайн-обнаружение сегодня очень похоже на онлайн-обнаружение продуктов в конце 1990-х годов. Мы либо слышим об онлайн-продуктах от друзей и родственников (сегодня крипто-Твиттер), либо заходим на онлайн-рынок и получаем список неперсонализированных/общих продуктов (первая страница OpenSea). Хотя существуют такие сервисы, как Icy Tools и Rarity Tools, они больше ориентированы на торговцев, а не на коллекционеров. Их внимание сосредоточено на получении прибыли для своих пользователей, а не на художественных/социальных открытиях. Большинство людей не являются трейдерами и не заинтересованы в зарабатывании денег на изображениях обезьян. Люди просматривают Интернет, чтобы найти контент, идеи и людей, с которыми они могут связаться. Релевантность, которую ищут отдельные пользователи, в значительной степени отсутствует в текущем Web3. Только на Ethereum уже развернуто более 100 000 контрактов ERC-721, и по мере того, как каждую неделю вступают в силу сотни новых контрактов, эта проблема обнаружения становится все более сложной в геометрической прогрессии.

CyberConnect — это децентрализованный протокол социальной сети, помогающий разработчикам создавать социальные децентрализованные приложения следующего поколения, предоставляя передовые инструменты и инфраструктуру Web3. Мы считаем, что помощь в решении проблемы обнаружения NFT является ключевым компонентом этого инструментария.

Посмотрите интерактивную версию здесь

Социальные децентрализованные приложения и обнаружение NFT

Web3 и децентрализованные социальные сети в основе своей ориентированы на пользователя. Пользователи владеют и используют свои социальные связи, предпочтения, истории и все свои целостные личности на разных платформах и в разных контекстах. Социальный опыт этой следующей итерации Интернета всегда должен плавно и последовательно соответствовать предпочтениям пользователей, а не быть изолированным стенами платформы. Основой этого опыта является новый механизм, с помощью которого пользователи могут находить контент и проекты, которые более значимо связаны с их личностью и ценностями.

Чтобы решить эту растущую проблему обнаружения, наша команда CyberConnect разрабатывает набор механизмов рекомендаций для Web3, которые можно использовать в социальных сетях, DeFi и всех других проектах, стремящихся включить децентрализованные социальные сети в свои услуги. Сегодня мы рады запустить первую версию нашего механизма обнаружения/рекомендации NFT: это наш первый шаг в оказании помощи как разработчикам, так и пользователям в обнаружении новых проектов ERC-721/1155, которые могут их заинтересовать, исходя из их активности в сети.

В более общем плане мы разрабатываем набор рекомендательных механизмов для Web3, которые можно использовать в социальных приложениях, протоколах DeFi или любых других проектах, стремящихся включить децентрализованные социальные сети в свой продукт.

Система рекомендаций CyberConnect

Эта модель обеспечивает две основные конечные точки рекомендаций:

  1. userRecommendation = рекомендует адреса пользователей (EOA), у которых история торговли NFT аналогична входному адресу.
  2. tokenRecommendation = рекомендует токены ERC-721, которые аналогичны истории NFT входного адреса.

1. userRecommendation Пошаговое руководство по конечной точке

Вот пример запроса для конечной точки userRecommendation с использованием ETH-адреса соучредителя Bankless Дэвида Хоффмана (0xfA53D837B5dDd616007F91487F041d27edb683A0)

Попробуйте запустить его в Apollo

Шаблон запросаg

query getUserRecommendatio($address: AddressEVM!, $chainId: ChainID!) {
  address(address: $address, chainID: $chainId) {
    wallet {
      recommendation {
        userRecommendation {
          userToFollow
          userToFollowRank
          userToFollowDistanceScore
          userToFollowReason
        }
       }
    }
  }
}

Пример ответа

{
  "data": {
    "address": {
      "ethWallet": {
        "recommendation": {
          "userRecommendation": [
            {
              "userToFollow": "0x7ec6ffd8c5d5620903a22ce7a8b37d62e0e6559a",
              "userToFollowRank": 1,
              "userToFollowDistanceScore": 2.5657267570495605,
              "userToFollowReason": "Similar ERC721 Trading History"
            }, ...

Глядя на первую рекомендацию, мы получаем этот адрес 0x7ec6ffd8c5d5620903a22ce7a8b37d62e0e6559a`

При поиске указанного адреса в OpenSea мы обнаруживаем, что этот выходной адрес на самом деле принадлежит logancraig.eth, визуальному дизайнеру Bankless! Обратите внимание, что даже несмотря на то, что в модели рекомендаций не было информации о пользователях вне сети, она смогла идентифицировать сотрудника исключительно на основе истории торговли NFT!

2. tokenRecommendation Пошаговое руководство по конечной точке

Теперь давайте рассмотрим пример второй конечной точки — tokenRecommendation. На этот раз давайте воспользуемся ETH-адресом соведущего Дэвида Райана Шона Адама -› 0xE9D18dbFd105155eb367fcFef87eAaAFD15ea4B2.

Попробуйте запустить его в Apollo

Шаблон запроса

query GetTokenRecommendation($address:AddressEVM!, $chainId: ChainID!)
{
address(address: $address, chainID: $chainId) {
  wallet {    
      recommendation {
        tokenRecommendation {
          rank
          tokenInfo {
            token {
              ... on ERC721 {
                name
                symbol
                contractAddress
              }
              }

            tokenLogo
            twitter
            homepage
            etherscan_labels
            etherscan_token_contractnames
          }
        }

      }
    }
  }
  }

Пример ответа

{
  "data": {
    "address": {
      "wallet": {
        "recommendation": {
          "tokenRecommendation": [
            {
              "rank": 0,
              "tokenInfo": {
                "token": {
                  "name": "The Infinite Machine Movie Collection",
                  "symbol": "INFINITE",
                  "contractAddress": "0x674d37ac70e3a946b4a3eb85eeadf3a75407ee41"
                },
                "tokenLogo": "https://lh3.googleusercontent.com/UsX1WeoXvor4nxN0ssF39r7y2cg4N2yrus7qilzodPtB7KtnwCBf-TaEU2-9VPPsscmgYwjSsQPJBdDqG04djxW3YVXu3ppYEtoK=s120",
                "twitter": "https://twitter.com/ETHMovie",
                "homepage": "https://www.theinfinitemachinemovie.com/",
                "etherscan_labels": [
                  "Token Contract"
                ],
                "etherscan_token_contractnames": []
              }
            },
            {
              "rank": 1,
              "tokenInfo": {
                "token": {
                  "name": "DAOpunks",
                  "symbol": "DAOPNK",
                  "contractAddress": "0x700f045de43fce6d2c25df0288b41669b7566bbe"
                },
                "tokenLogo": "https://lh3.googleusercontent.com/fpyFlFiwfJTe2_lD00907R-X9ZheiUcw4Pyuyz9vrDfLXHEIFBS3qP18DqfoWZIOkJl95FZw9nsR7vfN3xXJkJBLO9ZZZVRwJWSJ=s120",
                "twitter": "https://twitter.com/DAOpunksNFT",
                "homepage": "https://daopunks.io",
                "etherscan_labels": [],
                "etherscan_token_contractnames": []
              }
            },
            {
              "rank": 2,
              "tokenInfo": {
                "token": {
                  "name": "The Rocketeers",
                  "symbol": "RCT",
                  "contractAddress": "0xb3767b2033cf24334095dc82029dbf0e9528039d"
                },
                "tokenLogo": "https://lh3.googleusercontent.com/KsAt3pNG_NNHwTPU3OeVS175wX0M-4PrrjACMSI6A-dwmejWvMr68_sS7MiNk_aaDDDsKqcZNaUkYVlCYo9iAnlz7IheXXeenDt9Ik4=s120",
                "twitter": "",
                "homepage": "https://rocketeer.fans/",
                "etherscan_labels": [],
                "etherscan_token_contractnames": []
              }
            },

Топ-3 рекомендуемых токена:

  1. The Infinite Machine Movie Collection
    — NFT, поддерживающий создание фильма об Ethereum — очень соответствует поддержке, которую Райан оказывает сообществу ethereum!
  2. DAOpunksNFT
    — Райан следит за проектом в твиттере!
  3. Ракетчики
    Райан — активный сторонник ракетного пула и Ракетчики — неофициальные духовные животные сообщества ставок Rocketpool,…

По общему признанию, трудно предсказать, захочет ли сам Райан купить эти NFT, но эти рекомендации имеют смысл.
P.S. Райан, если вы читаете эту статью, нам было бы интересно узнать, что вы думаете об этих рекомендациях :)

Как работает большинство моделей рекомендаций?

Хотя существует несколько подходов к рекомендательным системам, их обычно делят на две большие категории: совместная фильтрация и фильтрация на основе контента.

Согласно Википедии:

Подходы к совместной фильтрации строят модель на основе прошлого поведения пользователя (предметы, купленные или выбранные ранее и/или числовые оценки, присвоенные этим элементам), а также аналогичные решения, принятые другими пользователями. Подходы к фильтрации на основе содержания используют ряд отдельных характеристик элемента, чтобы рекомендовать дополнительные элементы с аналогичными свойствами.

В частности, для NFT трудно применить подход, основанный на содержании, потому что измерение сходства между NFT сложнее, чем многие могут предположить. Хотя можно сравнить метаданные двух NFT, и если они действительно имеют одну и ту же черту, обязательно ли они похожи? Что, если коллекция просто пытается скопировать характеристики/метаданные другой в попытке привлечь пользователей более заметной и успешной коллекции?

Хотя наша команда CyberConnect планирует в будущем создавать гибридные модели рекомендаций, мы решили начать с совместной фильтрации (CF). Но есть предостережение. Стандартная совместная фильтрация основана на оценках пользователей (например, Netflix), однако с NFT нет надежных оценок пользователей. Благо есть альтернатива. Даже если люди не оценивают контент, неявной обратной связи может быть более чем достаточно:

Неявная обратная связь — это действия пользователя, которые можно использовать для косвенного вывода о предпочтениях пользователя, например. клики, просмотры страниц, действия по покупке. Иногда известны только положительные отзывы, например. продукты, которые клиенты купили, но не те, от которых они отказались.

В этом случае мы используем неявную обратную связь в форме покупок, монетных дворов и переводов NFT, а затем мы можем применить реализацию Совместной фильтрации для модели фактора неявной обратной связи для получения полезных рекомендаций. от этой неявной обратной связи.

Разбираемся в механизме рекомендаций CyberConnect

Давайте подробнее поговорим о том, как была построена наша модель совместной фильтрации. Рассмотрим следующую матрицу обратной связи, в которой:

  • Каждая строка представляет собой адрес пользователя (т.е. EOA).
  • Каждый столбец представляет контракт/проект NFT.

В простейшем случае отзывы пользователей о NFT могут быть бинарными; то есть значение 1 указывает на то, что пользователь взаимодействовал с контрактом NFT, 0 указывает на отсутствие взаимодействия. Заполнение нашей матрицы даст нам большую (в частности, размер # пользователей * # адресов nft) матрицу, заполненную 1 и 0 (в основном 0, поскольку большинству людей принадлежит лишь очень небольшой процент всех доступных nft). Затем мы факторизуем матрицу и оставляем только верхние n столбцов/признаков, чтобы можно было описать каждого пользователя как вектор из n чисел.

Матричная факторизация — это простая модель встраивания. Учитывая матрицу обратной связи \(A∈R^{m×n}\), где \(m\) — количество пользователей (или адресов), а \(n\) — количество элементов (или nft контрактов), модель узнает:

  • Матрица вложения адресов, где строка \(i\) представляет собой вложение для пользователя \(i\) \(U∈R^{m×d}\)
  • Матрица вложения контракта, где строка \(j\) является вложением для контракта \(j\) \(V∈R^{n×d}\)
  • Вложения изучены таким образом, что произведение \(UV^T\) является хорошим приближением матрицы обратной связи A. Обратите внимание, что запись \((i,j)\) \(U^.V^T\) равна просто точечный продукт \(⟨Ui,Vj⟩\) вложений пользователя \(i\) и элемента \(j\), который вы хотите получить близко к \(A_{i,j}\). Ключевым моментом здесь является то, что матричная факторизация обычно дает более компактное представление, чем изучение полной матрицы. Полная матрица имеет \(O(nm)\) элементов, а матрицы вложения \(U, V\) имеют \(O((n+m)d)\) элементов, где размерность вложения \(d\) обычно намного меньше, чем \(m\) и \(n\). В результате матричная факторизация находит в данных скрытую структуру, предполагая, что наблюдения лежат близко к низкоразмерному подпространству. Таким образом, в нашем случае имеется порядка ~5 миллионов адресов, которые взаимодействовали с ERC-721 на ETH L1, и ~120 тысяч разных ERC-721. Это означает полную матрицу 5M x 120k ~ 600 000 000 000 пар/ячеек, поэтому для построения масштабируемой и быстрой модели рекомендаций необходимо было разложить эту матрицу на множители. После факторизации матрицы (с использованием одного из многих алгоритмов факторизации) у нас остаются векторы пользователя/адреса и векторы nft/контракта. С ними мы можем легко найти похожих пользователей и/или nfts на основе вычисления расстояний между этими векторами с использованием функции расстояния (например, косинусное сходство, евклидово расстояние и т. д.).
  • До сих пор это была стандартная совместная фильтрация с той оговоркой, что мы используем данные взаимодействия ERC-721, а не рейтинги фильмов или просмотры на YouTube. Есть несколько конкретных идей и улучшений, которые мы сделали при создании нашего конкретного рекомендателя ERC-721:
  1. Фильтрация спам-коллекций
     –
    это было наиболее важным улучшением наших рекомендаций. Сначала мы обучили модель, используя все ~120 тыс. контрактов ERC-721, но обнаружили, что модель продолжала рекомендовать некачественные проекты NFT/аирдропы/коллекции спама. Поэтому мы потратили много времени на сбор проверенных списков контрактов NFT из нескольких источников (включая Opensea, Trustwallet, Dune, Alchemy и т. д.), а также применили собственную логику для фильтрации коллекций с определенными аирдроп-подобными поведение. Это значительно сократило количество контрактов и повысило качество наших рекомендаций.
  2. Не относиться ко всем взаимодействиям как к равным
     
    . Вторым открытием, которое у нас было, было использование наших знаний в предметной области в NFT для замены подсчета неявных взаимодействий взвешенными составными оценками. В частности, мы присвоили определенные веса различным типам взаимодействий с NFT (например, монетным дворам, сжиганию и т. д.), чтобы более точно обобщить историю неявных взаимодействий пользователей с контрактом. Это видно на последнем изображении ниже, где галочки ✔️ заменены на

3.Включение биржевых контрактов/сделок
 –
Последнее изменение, которое мы сделали, заключалось в том, чтобы включить данные/сигнал, с какой торговой площадки NFT произошла передача/чеканка/сжигание. Это было полезно для улучшения рекомендаций, поскольку некоторые пользователи покупают/продают только на одном рынке (например, Rarible), поэтому придание веса этой информации означает, что два опытных пользователя Rarible получат больше похожих векторов (и, следовательно, рекомендаций), чем если бы мы просто смотрели только в информации о контракте NFT.

Сочетание трех вышеуказанных модификаций привело к созданию механизма рекомендаций, который был значительно более точным, чем те, которые использовали стандартную матричную факторизацию совместной фильтрации.

Заключение

Мы все еще только в начале перехода от централизованной и разрозненной сети к децентрализованной, ориентированной на пользователя. Большая часть этого состоит из нового механизма обнаружения контента и рекомендаций. Наш первый вклад в этот переход — эта модель рекомендаций на основе ERC-721, и она доступна сегодня через обе конечные точки API, указанные выше.

Мы только начинаем работать с рекомендациями NFT и планируем выпустить дополнительные модели в будущем. Мы хотим сделать гораздо больше, и вот некоторые из вещей, над которыми мы сейчас работаем:

  • Добавление поддержки других стандартов ERC
  • Включая оффчейн данные о проектах
  • Включение метаданных NFT для предоставления более подробных рекомендаций (например, рекомендовать конкретный NFT, а не просто набор)
  • Добавление поддержки дополнительных цепочек

Мы рады поделиться чем-то еще в будущем и всегда готовы поддержать разработчиков, которые хотят создавать приложения, использующие наши модели. Свяжитесь с нами, если вы хотите строить вместе!

Если вам нравится то, что вы читаете, подпишитесь на нашу рассылку, загляните в наше Зеркало и следите за нами в CyberConnect Twitter. Испытываете желание внести свой вклад? Ознакомьтесь с этим руководством по началу работы с CyberConnect, присоединитесь к нашему динамичному сообществу, нажав здесь, или ознакомьтесь с документацией для разработчиков здесь.

Первоначально опубликовано на https://cyberconnect.hashnode.dev.