Рекомендации по оптимизации двигателя для новостной ленты - PullRequest
0 голосов
/ 23 марта 2019

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

Логика следующая: пользователь регистрируется и выбирает одну или несколько тем, представляющих интерес, среди 15 из них.В приложении пользователи могут публиковать контент, такой как фотографии, текст и т. Д.

Я хотел сопоставить людей, использующих приложение, с контентом, исходящим от пользователей, которые заполнили те же настройки на этапе регистрации (или свысокий индекс корреляции, называемый C).

Чтобы сделать это, я подумал о внедрении показателя «релевантности», который будет прикреплен к каждому сообщению.

Этот показатель будет рассчитываться какfollow: Score = C (индекс корреляции между предпочтениями двух пользователей) x P (популярность пользователя, разместившего контент) x F (свежесть поста для отображения контента, который был недавно опубликован).После этого в ленте новостей будут отображаться записи с наивысшим или самым низким баллом в ленте каждого пользователя.

Сложность заключается в том, чтобы получить оценку для каждого поста, которая будет отличаться для каждой ленты новостей, и перевести ее в нашбазы данных, чтобы сделать правильное количество запросов.Я использую Expo (React Native) и Firestore в качестве базы данных.

Вот реальный пример: на этапе регистрации, скажем, у меня есть выбор между 5 интересующими темами: Спорт, Фотография, Музыка,Мода и Путешествия.Я выбрал Спорт и Путешествия.Завершив этот этап и попав в ленту новостей приложения, я хочу, чтобы меня сравнивали с контентом, который в первую очередь связан со спортом и путешествиями (давайте даже не будем взвешивать темы здесь).Поэтому я хочу отображать контент от других пользователей, которые выбрали точно такие же категории (индекс корреляции будет 1) или ближайший (следующий лучший индекс корреляции здесь будет 0,5).

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

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

Спасибо за ваше время, ядействительно ценю это.

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Если есть 15 категорий, то предпочтения пользователя могут быть представлены в виде 1-битного флага «хотел / нежелал» для каждой категории.Другими словами, предпочтения пользователя могут быть простым 15-разрядным целым числом.

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

Если вы выполняете побитовое И из предпочтений пользователя и категорий, к которым относится новость;Вы можете посчитать количество битов, установленных в результате.Это количество установленных битов даст вам оценку в диапазоне от «новостной элемент соответствует всем категориям, которые хочет пользователь» до «новостной элемент не соответствует ни одной из категорий, которые хочет пользователь».Вы можете использовать это для фильтрации и / или сортировки списка новостей.

1 голос
/ 23 марта 2019

Допустим, у нас есть 2 набора A и B с интересами:

Один из способов определения корреляции может быть:

Correlation =  size(intersection(A, B)) / max( size(A), size(B) )

Сценарий 1:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1

Сценарий 2:

Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4

Сценарий 3:

Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...