{"id":14275,"url":"\/distributions\/14275\/click?bit=1&hash=bccbaeb320d3784aa2d1badbee38ca8d11406e8938daaca7e74be177682eb28b","title":"\u041d\u0430 \u0447\u0451\u043c \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u044b \u0430\u0432\u0442\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f72066c6-8459-501b-aea6-770cd3ac60a6"}

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

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

Интро

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

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

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

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

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

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

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

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

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

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

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

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

0
48 комментариев
Написать комментарий...
Стакан чая

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

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

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

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

Ответить
Развернуть ветку
Mike
Автор

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

Ответить
Развернуть ветку
Котик Котиков

Я вот тоже не понял, если можно воспользоваться Гуглом

Ответить
Развернуть ветку
Mike
Автор

Если вы наткнулись на какой-нибудь прикольный репозиторий или библиотеку, всегда интересно глянуть альтернативы или похожие продукты. Мне лень такое гуглить)

Ответить
Развернуть ветку
Петя Вася

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

Ответить
Развернуть ветку
Mike
Автор

Посмотрел по своим звездочкам, не нашёл в readme альтернатив. Да и не все будут упоминать конкурентов у себя)

Ответить
Развернуть ветку
Котик Котиков

Это опенсурс. Какие конкуренты )

Ответить
Развернуть ветку
Mike
Автор

Все зависит от лицензии)

Ответить
Развернуть ветку
Котик Котиков

Код то открыт. Любой может зарабатывать тогда, если это апач лицензия. В чем конкуренция то )

Ответить
Развернуть ветку
Mike
Автор
если это апач лицензия

Вот вы и сами ответили на свой вопрос)

Ответить
Развернуть ветку
Котик Котиков

Нет конкуренции никакой между проектами

Ответить
Развернуть ветку
Mike
Автор

Не будет внимания к проекту - им не будут заниматься. Вот и все)

Ответить
Развернуть ветку
Котик Котиков

Обычно проектами занимаются или для себя или это какая-то учебная разработка. Без разницы на внимание

Ответить
Развернуть ветку
Mike
Автор

Хаха

Ответить
Развернуть ветку
Владислав Горящий

чисто из прикола открыл парочку последних что я ставил - никаких аналогов в ридми((

Ответить
Развернуть ветку
Вадим Д.

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

Ответить
Развернуть ветку
Mike
Автор

Спасибо!

Ответить
Развернуть ветку
mv

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

Ответить
Развернуть ветку
Daily Science

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

Ответить
Развернуть ветку
Mike
Автор

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

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

Ответить
Развернуть ветку
Daily Science

IMHO было б интересно еще векторизовать используемый проектом API. Хотя это toolchain-специфично, конечно, для узкой прикладной задачи должен компактный кластер получиться.

Ответить
Развернуть ветку
Mike
Автор

Что вы имеете в виду под "векторизовать API"?

Ответить
Развернуть ветку
Daily Science

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

Ответить
Развернуть ветку
Aleksander Aleksandrov

Ви таки считаете, что тем, кто ищет нужный код нужны рекомендации....

ладно. ждем 90% кода copilot (удобный кстати) и новых выпускников курсов python.

в интересное время живем, господа.

Ответить
Развернуть ветку
Виталий Литвинов

В чем удобство?

Ответить
Развернуть ветку
Aleksander Aleksandrov

решает рутину. иногда удивляет да и вообще - веселей.

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

Короче, иногда говнокодит но больше по делу подставляет варианты.

Ответить
Развернуть ветку
Max Kuznetsov

Да, как только эмбеддинги не называли... Но вот "вкрапления"... (смайл с вытекшими глазами)

Ответить
Развернуть ветку
Mike
Автор

Изначально статью писал на английском, это был артефакт перевода... спасибо за замечание)

Ответить
Развернуть ветку
Владислав Горящий

потенциально - довольно полезная вещичка. спасибо, автор!

Ответить
Развернуть ветку
Mike
Автор

Спасибо!

Ответить
Развернуть ветку
Mark Frost

Охуенчик

Ответить
Развернуть ветку
Pavel Bychko

Привет
Прошелся по десятку популярных пакетов. В целом - стек/экосистему определяет, но о релевантности говорить слишком рано.

Пример: https://github.com/spatie/laravel-medialibrary
5k звезд, в Readme есть секция Alternatives, ни одного пакета в подсказках нет, сами подсказки нерелевантны

Еще пример: https://github.com/spatie/laravel-backup

Но идея занятная, подписался

Ответить
Развернуть ветку
Mike
Автор

Спасибо за замечание! Да, в выборке пока 80к+ репозиториев. Будет спрос - добавлю больше. Возможно эти репозитории просто не попали в пулл. Да и в теории можно не ограничиваться на 5 рекомендациях, может добавлю кнопку "показать больше".

Ответить
Развернуть ветку
Pavel Bychko

Анализ всего README, возможно, не нужен. Большей релевантности можно добиться, если анализировать первый заголовок, абзац под ним, поле About ну и название репы

Ответить
Развернуть ветку
Mike
Автор

Сейчас все происходит именно так, как Вы описали)

Ответить
Развернуть ветку
Ренат Ренатович
Readme есть секция Alternatives

Если она есть - можно и с неё инфу просто выводить там же где и ваша инфа.

Ответить
Развернуть ветку
Rnatery

добавить просто все репозитории с гитхаб

Ответить
Развернуть ветку
Dmitriy Plehanov

Profanity - Vanity. Гениально. Ни одного похожего репозитория.

Ответить
Развернуть ветку
Dmitriy Plehanov

А сорян. Не заметил, перепутал с другим profanity проектом, более популярным. Описание подходит к рекомендациям.

Ответить
Развернуть ветку
RomanistHere

А можно узнать кейзы для использования расширения? Мне ни разу не приходилось искать похожие к чему-то проекты за годы в разработке и обитания на гитхабе. Плюс оно ищет похожее по идее: react-input найдёт react-input-new & react-form-elements (условно) или просто похожие по структуре проекты на реакте? Первое теоретически могло бы иметь смысл, если бы многочисленные агрегаторы не предлагали кучи альтернатив, а поисковики по каким-то причинам не могли бы работать адекватно.

Ответить
Развернуть ветку
Mike
Автор

А мне часто интересно посмотреть альтернативы проектам которые лайкают мои друзья, нахожу что-то интересное

Ответить
Развернуть ветку
RomanistHere

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

Ответить
Развернуть ветку
Mike
Автор

Спасибо за идею!

Ответить
Развернуть ветку
Князь Тьмы

А почему на гитхабе написано что авторов два - ты и какой-то Евгений. А тут ты пишешь от первого лица, якобы ты все придумал и ты все сделал?

Ответить
Развернуть ветку
Виталий Литвинов

Кто успел того и тапки

Ответить
Развернуть ветку
Виталий Литвинов

Да ну, это ж для гиков. Зачем аналоги искать? Нашел либо копирнул репо и идёшь дальше кодить

Ответить
Развернуть ветку
Рома Кунашко

Есть еще github topics и collections

Ответить
Развернуть ветку
Херовый русский
Мне всегда было трудно найти интересные репозитории на GitHub

Пипец нердский круг интересов. Лучше бы на PornHub искал ))

Ответить
Развернуть ветку
45 комментариев
Раскрывать всегда