Я добавил рекомендации в GitHub

Браузерное расширение добавит пять похожих репозиториев прямо на страницу с кодом.

Я добавил рекомендации в GitHub

Интро

Мне всегда было трудно найти интересные репозитории на GitHub. Кроме того, когда я искал какие-то open-source инструменты или библиотеки, мне приходилось открывать кучу ссылок и вкладок, чтобы посмотреть похожие репозитории.

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

Немного деталей

Первой проблемой, которую нужно было решить, было получение базы данных с популярными репозиториями гитхаба для использования в качестве пула рекомендаций. Короче говоря, я написал скраппер на python, который загружал все страницы репозиториев гитхаба с более чем 100 звездами и опубликованных за последние 8 лет. Так я хотел избавиться от бесполезного шума в данных и нерелевантных репозиториев.

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

Получение текстовых эмбеддингов
Получение текстовых эмбеддингов

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

В целом, мне нужен был только один запрос к API, поэтому я решил использовать flask в качестве простого и легкого бэкенда. Что касается фронтенда, я подумал, что делать отдельный сайт для рекомендации репозиториев будет неудобно для пользователей (да и мне лень), поэтому я решил сделать его в виде расширения для Chrome и расширения для Firefox.

Вся эта история конечно же не коммерческая, так что весь код открыт для всех желающих: код бэкенд и расширения на гитхабе.

По всем вопросам 👉 github.com/ovyan

------------------

Ссылка на секретный телеграм канал

9999
48 комментариев

Ну вощето нужные репы гуглятся.

Если репа рабочая и как следствие - популярная , она в топе выдачи и везде рекомендуется.

Поэтому искать какой-то нонейм не имеет смысла.

Очередное бесполезное решение

7
Ответить
Автор

Кажется, Вы не поняли смысла расширения

21
Ответить

Автор, Вы молодец! Забрал себе в полезности, отличная идея и реализация 🤘🏻

9
Ответить
Автор

Спасибо!

3
Ответить

Такое статьи на хабр бы писать с более подробным описанием алгоритма рекомендаций. На vc не та аудитория)

5
Ответить

Почему именно sentence-transformers? Есть какие-то преимущества над другими векторизаторами?

1
Ответить
Автор

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

Я работаю с сегментацией параграфов (обычно описание и полезный readme это 3-4 коротких предложения). Я начинал с простого word2vec + tf-idf. Потом попробовал doc2vec. Подсказки были релевантными, но мне не нравилось качество. Понятно, что на 100к описаниях (30% которых это мусор) обучить чего-нибудь стоящего не получится, я начал тестить популярные pre-trained модели. Ну и просто начал с самых популярных моделек на HF. SBERT показался по качеству/скорости самым подходящим вариантом, решил остановиться на нем.

13
Ответить