Авторы:Джозеф Харди, Сахил Пуджари, Майк Кларк

www.nft-recs.com

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

ПРЕДСТАВЛЕНИЕ ПРОЕКТА

Non Fungible Tokens (NFT) — это цифровые активы, хранящиеся в блокчейне, которые приобрели популярность вместе с ростом криптовалют. Цель нашего проекта — создать рекомендательную систему, направленную на решение вопроса: «Какие NFT заинтересуют данного владельца кошелька?». Мы находим эту проблему особенно интересной, поскольку желательность и спрос на цифровые активы — в отличие от физических активов — менее понятны.

Более целостно, наряду с рекомендательной системой, мы планируем разработать и развернуть внешний интерфейс веб-сайта, где пользователь может ввести свой идентификатор кошелька NFT, а веб-сайт будет извлекать и анализировать его текущее имущество и возвращать рекомендации NFT, которые пользователь может использовать. Кроме того, для пользователей, у которых нет NFT, веб-сайт позволит создать «бумажный кошелек», который будет использоваться для имитации покупок NFT и, в свою очередь, будет давать рекомендации, основанные на смоделированных кошельках.

ОБСУЖДЕНИЕ НАБОРОВ ДАННЫХ

Во время инициации проекта мы определили рынок OpenSea (ОС) как доминирующую платформу для покупки и продажи NFT; по некоторым оценкам на ОС приходится 97% общей доли рынка NFT. Таким образом, OS API — это то, с чего мы начинаем обнаружение и сбор данных.

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

Таблица 01. Наборы данных рекомендаций NFT — представляют ключевые атрибуты данных, используемые при построении системы рекомендаций (неполный список элементов данных)

Данные о транзакционных событиях NFT
Транзакционные данные были собраны как псевдослучайная выборка действий, происходящих на платформе ОС с середины декабря 21 года по март 22 года. Каждая запись представляет собой «событие» NFT на платформе — листинг, продажа, ставка, удаление — и содержит связанные метаданные актива (сбор, описание и т. д.), а также соответствующие стороны, цену закрытия (если продано) и реквизиты контракта. Этот набор данных позволил нам собрать большое количество уникальных идентификаторов кошелька NFT (покупателей и/или продавцов), которые позже использовались для сбора данных кошелька NFT, используемых для создания рекомендательной системы.

Данные кошелька NFT
Каждый уникальный адрес кошелька, полученный из набора данных о событиях NFT, передавался обратно в API ОС для сбора активов соответствующего кошелька, а также транзакций, для которых был связан этот кошелек. с на тот момент времени, представленный отметкой времени. По состоянию на март 2022 года мы собрали данные для 2813 уникальных кошельков NFT, на которые приходится более 500 000 записей NFT (с дублированием). Основываясь на времени вызова API, NFT может существовать в нескольких кошельках в нашем наборе данных, хотя и очень редко.

Данные активов NFT
По своей сути NFT – это цифровой актив, который представляет право собственности на цифровые элементы (например, файл изображения), а также потенциальные привилегии, которые актив предоставляет своему владельцу (например, как членство в виртуальном клубе). Большинство NFT принадлежат родительской коллекции более высокого уровня, характеризующей эти NFT. Имея это в виду, возвращаясь к набору данных активов NFT, основные переменные, представляющие интерес для рекомендательной системы, включают описание актива, признаки (унифицированные категориальные характеристики актива), URL-адрес файла необработанного изображения, имя коллекции, которую актив принадлежит, имя создателя и исторические данные о транзакциях с активами.

Сведения о конвейере данных кошелька NFT
С технической точки зрения для компиляции этих наборов данных требуется конвейер, соединяющий вызовы OS API с базой данных с таблицами, предназначенными для хранения данных JSON ответов API. Кроме того, из-за ограничений скорости этому конвейеру требовался запланированный интервал для обеспечения отказоустойчивой конструкции, если мы достигнем ограничения скорости (чего мы не сделали).

Вызовы API представляют собой типичные REST-типы, требующие аутентификации, и могут быть написаны на нескольких языках, включая Python. Каждый набор данных, упомянутый выше, имеет свои собственные конечные точки, параметры и полезную нагрузку ответа JSON. Оттуда наши протестированные и проверенные сценарии API, написанные на Python, были развернуты в экземпляре Azure и запланированы как задания CRON. На последнем этапе полезная нагрузка API была вставлена ​​в структурированные таблицы базы данных postgres, которые также хранятся в Azure. Более подробную информацию о наборах данных ОС и API можно найти в документах.

КЛАСТЕРИЗАЦИЯ КОШЕЛЬКА NFT

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

NFT Wallet EDA
Из нашего исследования рынка NFT мы узнали, что существуют различные сегменты покупателей NFT: от хорошо финансируемых венчурных капиталистов и инвесторов до коллекционеров, искренне заинтересованных в накоплении NFT, и отдельных лиц. спекулянты, заинтересованные в «быстрой наживе». Основываясь на этом субъективном понимании, мы подумали, что было бы неплохо начать с изучения распределения количества транзакций NFT в кошельке, количества хранимых NFT и разнообразия уникальных коллекций, хранящихся в кошельке.

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

Анализируя количество транзакций NFT и холдинги в более чем 2800 уникальных кошельках, мы наблюдаем асимметрию в правом хвосте, предполагающую, что пропорционально небольшое количество кошельков участвует в очень большом количестве транзакций и хранит много NFT и коллекций. Эти свойства приводят нас к гипотезе о том, что коллекция NFT имеет меньшее значение для кошельков, содержащих много NFT, чем для кошельков, содержащих меньшее количество, представляющих «обычных» коллекционеров.

Рисунок 02. Сравнение общего количества NFT и уникальных коллекций для кошельков, содержащих менее 100 NFT и более 100 NFT

Глядя на взаимосвязь между количеством NFT в кошельке и количеством уникальных коллекций в этом кошельке, можно предположить, что «обычные» коллекционеры (менее 100 холдингов NFT), вероятно, будут покупать из разных коллекций, тогда как кошельки с большим объемом, как правило, более сконцентрированы. на свои коллекционные фонды. Эта взаимосвязь представлена ​​коэффициентом положительной корреляции 0,69 по сравнению с 0,11 для кошельков, содержащих более 100 NFT.

Эти результаты подразумевают, что рекомендательная система может извлечь выгоду из различения имеющихся NFT при определении того, из каких коллекций рекомендовать NFT. Например, он мог бы порекомендовать более концентрированные коллекции для кошельков с большими запасами, представляющие «эксплуататорские» тенденции, по сравнению с более разнообразными коллекциями для кошельков с меньшими запасами, представляющими «исследовательские» тенденции.

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

Выбор функции классификатора кошелька NFT
В дополнение к рассмотренным выше функциям — общему количеству NFT кошелька, транзакциям NFT, уникальным коллекциям — мы также обнаружили общее количество проданных NFT каждого кошелька и средний объем Считается, что НФТ обладают дискриминационной силой. Кроме того, мы разработали функцию кошелька, представляющую количество оттока, определяемое как отношение транзакций NFT к общему (текущему) холдингу NFT. Мотивация этой функции заключается в том, что более высокий отток отражает более высокую относительную скорость транзакций по сравнению со стратегией «купи и держи» с более низкой скоростью транзакций. Владельцы кошельков с разными стратегиями и целями (например, трейдеры и коллекционеры) могут иметь разные предпочтения в отношении рекомендаций NFT.

Рисунок 03. Распределение количества транзакций продажи NFT на кошелек, среднего объема для кошелька NFT и скорости оттока NFT (ниже = меньше относительная скорость транзакций)

Построение и оценка классификатора
Начнем с подбора базового классификатора k-средних (scikit-learn) с параметрами по умолчанию, максимальным числом итераций, равным 100, и одним запуском с центроидными начальными значениями для вышеупомянутой функции. космос. С помощью этой подобранной модели мы перебрали диапазон размеров кластеров от 2 до 20 и оценили показатель инерции для каждого. Оценка инерции измеряет расстояние между каждой точкой и ее центром тяжести, при этом более низкие оценки представляют большую плотность и «компактность» кластера — желаемые свойства. Применение «метода локтя» к графику инерции является субъективной эвристикой для уравновешивания низких показателей инерции с относительно меньшим количеством кластеров. Как мы видим на рисунке 04 ниже, размер кластера 5, по-видимому, создает благоприятный показатель инерции с уменьшающейся отдачей по мере того, как мы масштабируемся за пределы 5 кластеров.

Рисунок 04. Метрика оценки классификатора K-mean (показатель инерции) как функция размера кластера

С числом кластеров, равным 5, мы используем подобранную модель k-средних, чтобы предсказать метку класса для каждого кошелька, и просматриваем предсказания по диапазону входных характеристик, чтобы качественно оценить «качество» модели. На рисунке 05 ниже представлена ​​матрица диаграммы рассеяния прогнозов классов относительно входного пространства признаков.

Рисунок-05: Матрица рассеяния цветов переменных характеристик, закодированных с помощью предсказания класса для каждого кошелька

Анализируя Figure-05, можно сделать несколько выводов, которые бросаются в глаза. Во-первых, похоже, что классификатор выполняет разумную работу по разделению кошельков на классы на основе наблюдаемых границ кодирования цвета относительного класса на парных графиках. Во-вторых, эти границы, по-видимому, особенно выражены для общего количества NFT и транзакций NFT, что подтверждает нашу интуицию в отношении сегментов рынка и результаты EDA на уровне кошелька.

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

ТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ NFT

Чтобы еще больше улучшить набор результатов рекомендаций, мы обратимся к тематическому моделированию NFT, чтобы измерить сходство рекомендаций NFT друг с другом, а также с рекомендациями, хранящимися в кошельке. В частности, мы разработали модели скрытого распределения Дирихле (LDA) и скрытого семантического индексирования (LSI) и подогнали их к предварительно обработанной векторизованной строке описания для каждого NFT. Прежде чем углубляться в модели, мы сначала начнем с описания исследовательского анализа данных NFT.

Текстовое описание NFT EDA
Мы начинаем с распаковки всех NFT из соответствующих кошельков, оставляя нам 32 873 уникальных NFT, каждый из которых содержит ту или иную форму текстового описания. Оттуда мы разделяем каждое описание NFT на токены (то есть токенизируем) и удаляем часто используемые стоп-слова, как определено в корпусе стоп-слов, содержащемся в библиотеке gensim. На рисунке 06 ниже представлена ​​сводная статистика по полученному токенизированному набору данных. Как видите, всего имеется 47 649 различных токенов со средним числом токенов 14.

Рисунок 06. Сводная статистика по всему токенизированному набору данных NFT Description

На Рисунке 06 видно, что требуется дополнительная очистка строки на основе значений максимального, минимального и межквартильного диапазона. Чтобы лучше понять токенизированные данные, мы рассмотрели частоту подсчета токенов для 50 наиболее часто встречающихся слов; На Рисунке 07 ниже показан этот частотный подсчет.

Рисунок 07. Частота подсчета 50 самых распространенных токенизированных слов в описаниях NFT

Анализируя частоту подсчета токенов, мы сначала наблюдаем слова, которые не очень описательные и выразительные и, следовательно, содержат низкий информационный прирост; несколько примеров: «https», «com», «nft», «eth». «https» и «com» ​​предполагают, что URL-адреса содержатся во многих описаниях NFT. Кроме того, есть несколько односимвольных токенов, таких как «s», «t» и «x», которые не добавляют ценности. Основываясь на этих выводах, мы добавляем в корпус стоп-слов эти токены и выполняем дополнительную очистку строки, например ограничиваем длину символов токена больше 3 и меньше 15. Кроме того, мы решили исключить токены с частотностью ниже 10 или выше. 10 000. Наконец, с подготовленным набором данных мы конвертируем документы в формат набора слов (BOW) с использованием модуля словаря корпусов gensim и векторизируем BOW с помощью векторизатора термина «частотно-инверсная частота документа» (TF-IDF) из модуля моделей gensim.

Построение и оценка модели LSI + LDA
Тематические модели были построены с использованием библиотеки моделей gensim. Начиная с LSI, эта модель gensim реализует быстрое усеченное SVD (Singular Value Decomposition)… [которое] может быть обновлено новыми наблюдениями в любое время для постепенного обучения с эффективным использованием памяти. LDA, с другой стороны, обучает модель из учебного корпуса и делает вывод о распределении тем по новым, невидимым документам. Подобно модели кластеризации кошелька k-means, и LSI, и LDA являются неконтролируемыми методами машинного обучения и требуют заранее определенного количества тем (концептуально аналогично количеству кластеров). Поэтому мы начинаем с перебора массива номеров тем, от 5 до 100 тем с шагом 5, генерируем модели LSI и LDA с использованием корпуса (TF-IDF для LSI) и вычисляем показатели согласованности для каждой модели на основе разное количество тем. На рис. 08 показаны показатели согласованности для каждой модели с разными номерами тем.

Рисунок 08. Оценка согласованности моделирования темы описания NFT для моделей LSI и LDA

Показатели согласованности измеряют степень семантического сходства между словами в теме — более высокие баллы представляют более высокие уровни сходства и, следовательно, более желательны. Анализируя показатели когерентности LSI и LDA, мы видим, что LDA незначительно превосходит LSI в создании семантического сходства с 25 темами, что дает наибольшую оценку согласованности ~ 0,5. Поэтому наша окончательная тематическая модель представляет собой модель LDA с параметром количества тем, установленным на 25.

Мы завершаем наш тематический анализ моделирования визуализацией результатов модели с использованием пакета pyLDAvis, как показано на рисунке 09.

Рисунок 09. Карта расстояний между темами и 30 наиболее важных терминов, созданных моделью LDA

В целом, мы видим, что 25 тем в основном однородны по 2 основным компонентам, причем в пятерку наиболее важных терминов входят уникальный, облако, mypinata, время и сгенерировано. Термины облако и mypinata, в частности, выделялись для нас, и после дальнейших исследований мы узнали, что они относятся к платформе управления мультимедиа NFT, известной как Pinata.

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

СИСТЕМА РЕКОМЕНДАЦИЙ NFT

Поскольку нашей целью было создать живое веб-приложение, нам нужен был рекомендатель, который мог бы обеспечить скорость, модульность и хорошие результаты:

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

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

Полная матричная совместная фильтрация на основе памяти

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

Совместная фильтрация на основе памяти с помощью матрицы сообщества

  • Мы применили тот же метод прогнозирования, что и полноматричная совместная фильтрация на основе памяти, но уменьшили количество учитываемых пользователей с помощью фильтрации «Сообщество» или «Пространство профиля».
  • Фильтрация пространства сообщества/профиля включает в себя ограничение пользователей и ресурсов сообществом пользователей, которым принадлежит ресурс, которым владеет пользователь запроса, и активами, принадлежащими пользователю запроса и этому сообществу пользователей. Приоритет для этой модели использует косинусное сходство, чтобы показать только первые N наиболее похожих пользователей. Наш метод отличается тем, что размер сообщества (N) является переменным и основан на естественном подключении пользователя. Это уменьшает время прогнозирования и точность, как показано ниже. Это также приводит к пустым рекомендациям для пользователей без достаточного сообщества, что является проблемой в средах с редко подключенными активами. Это проблема, которая будет решена в будущих улучшениях.
  • Самая важная особенность этой модели заключается в том, что количество пользователей и активов растет медленнее, чем в полноматричном решении, что позволяет в некоторой степени проверить наше приложение на будущее, чтобы предотвратить чрезмерное время рекомендаций (или даже события нехватки памяти).
  • См. Оценка для дальнейшего обсуждения сильных и слабых сторон этой модели.

Полноматричная совместная фильтрация на основе SVD

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

Рекомендовать оценку

Таблица 02. Точность модели рекомендаций, показатели среднеквадратичной ошибки и показатели производительности

Ссылаясь на Таблицу 02 выше, мы объясним по пунктам, почему для развертывания выбрана модель Community Matrix Memory-Based:

  1. Точность
  • В этом раунде решения на основе Full Matrix SVD были отклонены из-за их очень низкой точности. Поскольку решения на основе SVD сжимают данные, время запроса нового пользователя сокращается, но качество результатов ниже.

2. СКО

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

3. Время запроса модели для нового пользователя

  • Версия Full Matrix хорошо работает по точности и RMSE, но терпит неудачу, когда дело доходит до возможности обновления. Версия Full Matrix должна обрабатывать всю матрицу взаимодействий пользователя и nft каждый раз, когда к ней добавляется новый пользователь. Версия Community Matrix работает намного быстрее, поскольку она может ограничивать своих пользователей и рассматриваемые активы на основе фильтрации сообщества.

4. Скорость снижения среднеквадратичной ошибки на дополнительный актив

  • Скорость ухудшения среднеквадратичной ошибки также является важным фактором, который следует учитывать, поскольку нам нужна модель, качество прогнозирования которой снижается как можно медленнее по мере добавления новых активов. Чтобы найти это значение, мы подгоняем простую модель линейной регрессии к среднеквадратичным ошибкам, полученным из нашего набора данных 1 млн пользователей, чтобы оценить увеличение этого показателя ошибки для каждой модели.
  • Как показано в таблице выше и на рисунке ниже, модели на основе SVD имели очень низкую деградацию RMSE по количеству дополнительных активов.
  • Хотя матрица сообщества никогда не догоняет полноматричную модель на основе памяти, разница в RMSE быстро становится очень небольшой, а разница в RMSE между двумя моделями падает до 5–6% после того, как пользователь владеет 4 NFT.

Рис. 10. Показатели среднеквадратичной ошибки для разного количества активов в зависимости от метода рекомендательной модели

Рекомендуемое развертывание
В конечном итоге мы развернули модель Community Matrix на основе памяти из-за ее высокой скорости, относительно высокой точности и близкой производительности RMSE с моделью Full Matrix на основе памяти. Мы использовали базу данных контекста владения и связанный обработчик данных для управления созданием сообщества для пользователя запроса.

База данных контекста владения хранит все активы, «принадлежащие» пользователю, и любые отзывы, которые пользователь дал об активе. Это обеспечивает чистое место для хранения всей информации, необходимой для создания рекомендаций в нашей модели, основанной на сообществе. Эта база данных будет увеличиваться по мере добавления новых пользователей, активов и взаимодействий пользователей на веб-сайте.

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

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

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

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

Пользователи с плохим подключением

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

Рис. 11. Распределение пользователей NFT и активов в их кошельках

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

Точность модели и снижение среднеквадратичной ошибки

  • Точность модели могла бы быть выше, поскольку в каждом большом запросе отображалось бы чуть более половины релевантных документов.
  • Для моделей на основе памяти RMSE увеличивается с высокой скоростью для каждого нового актива, добавляемого в кошелек пользователя. Желательно иметь минимальное увеличение RMSE на новый актив, как в моделях на базе SVD.

Фильтрация на основе содержания

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

Рекомендовать следующие шаги
Чтобы внести улучшения в соответствии с ранее предложенными направлениями, модель была предложена, но не разработана. Эта модель будет использовать наше неконтролируемое исследование и включать преобразование изображений и текстовых данных.

Модель будет группировать пользователей и активы с помощью LSI/LDA или других неконтролируемых методов кластеризации, а затем позволит построить либо совместную, либо контентную модель фильтрации поверх этой матрицы типов пользователей и типов активов. Это имеет несколько преимуществ:

Гарантированное сообщество

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

Обобщенная информация о модели

  • Кодирование информации из более широкой области, чем уровень пользователя, в нашу модель поможет гарантировать, что RMSE не так подвержен случайным локализованным пользователями изменениям в активах и не так быстро ухудшится с течением времени.

Перекрестная проверка

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

ВЕБ-СЛУЖБЫ И РАЗВЕРТЫВАНИЕ

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

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

Симулятор включает в себя 3 аспекта:

  1. Веб-интерфейс
  2. Веб-сервер
  3. Веб-хостинг / инфраструктура

Ниже мы подробно рассмотрим каждый из этих аспектов.

1. Веб-интерфейс

Внешний интерфейс написан на ReactJS и использует библиотеки внешнего интерфейса с открытым исходным кодом, такие как Bootstrap/CoreUI/другие. Он размещен в Microsoft Azure, и мы приобрели домен через GoDaddy для веб-сайта (www.nft-recs.com).

Последовательность действий для веб-сайта следующая:

2. Веб-сервер

Бэкенд состоит из двух компонентов:

  • RESTful API-сервер
  • БД PostgreSQL

Сервер API написан на Python с использованием Flask в качестве веб-фреймворка, что упростило интеграцию с нашей моделью рекомендаций, которая также написана на Python. Сервер API использует базу данных PostgreSQL в качестве постоянного хранилища. Эта база данных состоит из нашего основного набора данных, а также данных с отслеживанием состояния, которые поддерживают работу проекта.

Поток последовательности для серверной части показан на рисунке выше.

3. Веб-хостинг/инфраструктура

Для размещения веб-сайта и компонентов инфраструктуры мы решили использовать Microsoft Azure по следующим причинам:

  • Microsoft Azure предлагает бесплатный кредит в размере 100 долларов США с пожизненным хостингом бесплатно для учетных записей учащихся (даже после истечения срока действия кредитов).
  • Мы начали работать над нашим проектом еще до того, как были переданы инструкции по использованию кредитов AWS.

Используя Azure, мы настроили конвейер CD (непрерывное развертывание) с нашим репозиторием Github для проекта. Таким образом, любой из нас мог закоммитить код в основную ветку, что вызвало бы обновление сервера или веб-сайта.

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Проект Lighthouse был спродюсирован Сахилом Пуджари, Джозефом Харди и Майком Кларком. Майк руководил сбором наборов данных, кластеризацией кошельков NFT и моделированием тем NFT. Джозеф руководил исследованиями и разработками рекомендательной системы, включая поддержку производственного развертывания. Сахил возглавил разработку веб-приложения пользовательского интерфейса, включая комплексную сквозную интеграцию необходимых технологий. Каждый член команды внес свой вклад в подготовку этого письменного отчета по своей области деятельности.