New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re-add follow recommendations API #7918

Merged
merged 3 commits into from Jul 2, 2018

Conversation

Projects
None yet
@Gargron
Copy link
Member

Gargron commented Jun 30, 2018

New REST API:

GET /api/v1/suggestions

Was previously removed in 8efa081 due to the Neo4J dependency also being removed.

The algorithm uses interactions.

What interactions? If you engage with a person you're not following, it bumps their score on your hidden list. Between replies, favourites and reblogs, the weight of the score bump is different. The idea is that you may have lots of positive interactions with a person, but forget to follow them.

What problem does this solve? Help regular users improve their home feed by reminding them to follow people they have positive experiences with.

__

Update: I am removing triadic closures. I realized because of limited data for remote users (we only know which local accounts they are following) the results would always be skewed towards local accounts, so it's better to not do it at all.

Re-add follow recommendations API
    GET /api/v1/suggestions

Removed in 8efa081 due to Neo4J
dependency. The algorithm uses triadic closures, takes into account
suspensions, blocks, mutes, domain blocks, excludes locked and moved
accounts, and prefers more recently updated accounts.

@Gargron Gargron added the api label Jun 30, 2018

Track interactions with people you don't follow
Replying to, favouriting and reblogging someone you're not following
will make them show up in follow recommendations. The interactions
have different weights:

- Replying is 1
- Favouriting is 10 (decidedly positive interaction, but private)
- Reblogging is 20

Following them, muting or blocking will remove them from the list,
obviously.
@PaulFree14

This comment has been minimized.

Copy link

PaulFree14 commented Jun 30, 2018

I would like to see within the follow recommendations also a method being used that has it focus on breaking silos.

@ykzts

This comment has been minimized.

Copy link
Collaborator

ykzts commented Jul 1, 2018

Does the Web UI implementation later?

@albjeremias

This comment has been minimized.

Copy link

albjeremias commented Jul 2, 2018

i want to disable this on my instance...

@Gargron

This comment has been minimized.

Copy link
Member

Gargron commented Jul 2, 2018

Please explain why you think that you want to disable this on your instance.

@albjeremias

This comment has been minimized.

Copy link

albjeremias commented Jul 2, 2018

Well i don't find this feature useful, I think this is the best explanation till now:
Being on mobile I haven't read code, but personally I'd need explicit opt out so I can say both "don't show me any recommendations" and "don't recommend me".

(Besides locking the account. )

Not really a fan of algorithmic recommendation systems, but I can see others might like them. Personally wouldn't wanna participate, though.
https://cybre.space/@minx/100298178840709626

can I ask you the same? :) why not have this option as opt-in/opt-out per instance?

@Gargron Gargron force-pushed the feature-suggestions branch from 84ebb9a to 6d17a46 Jul 2, 2018

@Gargron Gargron force-pushed the feature-suggestions branch from 6d17a46 to 312559d Jul 2, 2018

@Gargron

This comment has been minimized.

Copy link
Member

Gargron commented Jul 2, 2018

@ykzts Yes, people will likely argue about the UI so I want to split them.

@ykzts

ykzts approved these changes Jul 2, 2018

@Gargron Gargron merged commit da8fe80 into master Jul 2, 2018

9 checks passed

ci/circleci: build Your tests passed on CircleCI!
Details
ci/circleci: check-i18n Your tests passed on CircleCI!
Details
ci/circleci: install Your tests passed on CircleCI!
Details
ci/circleci: install-ruby2.4 Your tests passed on CircleCI!
Details
ci/circleci: install-ruby2.5 Your tests passed on CircleCI!
Details
ci/circleci: test-ruby2.4 Your tests passed on CircleCI!
Details
ci/circleci: test-ruby2.5 Your tests passed on CircleCI!
Details
ci/circleci: test-webui Your tests passed on CircleCI!
Details
codeclimate Approved by Eugen.
Details

@Gargron Gargron deleted the feature-suggestions branch Jul 2, 2018

@elomatreb

This comment has been minimized.

Copy link

elomatreb commented Jul 6, 2018

If we absolutely must have this feature, I am still very much missing any mention of being able to permanently dismiss users from the recommendations.

@nevillepark

This comment has been minimized.

Copy link
Contributor

nevillepark commented Jul 6, 2018

I'm also not seeing an option to exclude oneself from the algorithm, or to enable/disable it on an instance-wide basis.

@calmasis

This comment has been minimized.

Copy link

calmasis commented Jul 6, 2018

Hi! If you're implementing this, could you include an option for users to turn it off? I'm certain you don't have bad intentions, but I've seen so many spammy, data-mining sites using follow recommendations that they're irrevocably associated in my mind. I'd quite strongly prefer not to have to see follow recommendations, if that is an option. Thank you :)

@lindner

This comment has been minimized.

Copy link

lindner commented Jul 6, 2018

I highly suggest that this Follower Suggestion design be peer-reviewed.

Content recommendation systems have a huge effect on how communities grow and evolve. One thing I like about Mastodon is that user recommendations are done by humans, not machines. This go-slow approach is more resilient to algorithms (even the simple one presented here..)

Here's a recent paper that discusses how recommendation systems can reinforce bias.

https://blog.acolyer.org/2018/05/24/algorithmic-glass-ceiling-in-social-networks-the-effects-of-reco...

So before this gets unleashed on the world please do your research and study the available literature. Get experts to review it and listen to the people that have been doing this for a long time. You can then avoid repeating the mistakes of the past.

(Originally published at: http://www.1500wordmtu.com/2018/i-highly-suggest-that-this-follower-suggestion)

@inmysocks

This comment has been minimized.

Copy link

inmysocks commented Jul 6, 2018

I would really rather not have this sort of compiled information easily accessible. I thought the point of mastodon was that it wouldn't do things like track the people who use it.

Also it seems custom made as a really useful tool to enable harassment. When you are feeling belligerent instead of having to remember who that random depressed person you tell to slit their wrists when you notice them you have a nice list to pick from.
Yes, everyone could just block the harassers but that moves the responsibility onto the abused party and it makes harassment easier. Things that hurt vulnerable people and help those trying to hurt them are probably a bad idea in social media.

@joyeusenoelle

This comment has been minimized.

Copy link
Contributor

joyeusenoelle commented Jul 6, 2018

Recommendation: in account_interactions.rb, modify remove_potential_friendship() as such:

def remove_potential_friendship(local_account, other_account)
    PotentialFriendshipTracker.remove(local_account.id, other_account.id)
end

Then add a second remove_potential_friendship() call to mute! and block! such that both users are removed from each other's potential friendships.

@joyeusenoelle

This comment has been minimized.

Copy link
Contributor

joyeusenoelle commented Jul 6, 2018

Additional recommendation: I don't see it in the code, and I'm not sure where this happens in the codebase, but un-favoriting and un-boosting a toot should have the effect of un-bumping the potential friendship by the same amount. This prevents manipulation of the system by repeatedly favoriting and unfavoriting or boosting and unboosting a status. (I'm not sure what the goal of such manipulation would be, but I'm also not a malicious user.)

@PaulFree14

This comment has been minimized.

Copy link

PaulFree14 commented Jul 6, 2018

What problem does this solve?

the problem it solves seem to me rather fictional then really existing. (that's my personal understanding of it sofar)

if I often boost a persons toots why should I forget that I often boost that person?

If I forget, which is ok, I latest can remember that I boost a post from that person, when I boost it. And can then simply decide if I want to follow or not.

I only can see this feature being used at one point in future as in twitter, to promote specific ppl. and by that creating communities that are biased through the software.

@PaulFree14

This comment has been minimized.

Copy link

PaulFree14 commented Jul 6, 2018

Improofing discoverability for those who want it is great.
Having it mandatory propably not.

Having a look how it's done in other projects is great to get ideas and to not reproduce same misstakes, if there are any.

As a positive example how it can be done I found hubzilla:

  • plugin that user can turn on/off showing suggestions of whom to follow
  • letting the user decide to not be suggested to others
  • having a local searchable database where people can, if they want, be listed based on their interest, where they life...etc.
  • it's everyones own decision if to be listed or not and what to be listed
  • you can search within multible local database at the same time
@joyeusenoelle

This comment has been minimized.

Copy link
Contributor

joyeusenoelle commented Jul 6, 2018

Paul, if you remember 100% of the people whom you don't follow but with whom you've interacted, this feature isn't intended for you.

Since it by design can't suggest anyone you don't interact with, and suggests people proportionally to how much you interact with them, it can't be used to promote specific people.

And since it's only an API endpoint and not a UI element, it can't be mandatory.

It sounds like you're arguing against a feature that isn't actually the one under discussion.

@PaulFree14

This comment has been minimized.

Copy link

PaulFree14 commented Jul 6, 2018

And since it's only an API endpoint and not a UI element, it can't be mandatory.

it can be anytime gargron decides so.

it can't be used to promote specific people.

it can be anytime gargron decides so

@joyeusenoelle

This comment has been minimized.

Copy link
Contributor

joyeusenoelle commented Jul 6, 2018

So what you're saying is

you're arguing against a feature that isn't actually the one under discussion.

@PaulFree14

This comment has been minimized.

Copy link

PaulFree14 commented Jul 6, 2018

I've been sharing concerns related to this feature. They don't need to be true in it's current state, that I have them.
(thx for listening, I'm out)

@Oreolek

This comment has been minimized.

Copy link

Oreolek commented Jul 6, 2018

This is a naive and very harmful approach.

Imagine this scenario: there is a brand with a custom instance. It wants to drive engagement, it hires a SMM manager. The manager makes a lottery: "reblog this toot for a chance to win!" Now every user who reblogged that would see the brand in their recommendations, every day, until they engage in several long conversations or reblog something else to clear the list.

Obscuring recommendation algorithms is a security measure, because there are people who actively exploit them. Open source algorithms would be exploited in no time using unethical tricks polished in other social networks.

@joyeusenoelle

This comment has been minimized.

Copy link
Contributor

joyeusenoelle commented Jul 6, 2018

If the user in question interacts so little that a single boost can keep that account in their recommendations for a long period of time, then yes, that might happen. But simply muting the brand - even temporarily - will remove them from your list of recommendations until the next time you interact with them. And since two favorites are worth a boost, it's easy to drive a single-boost interaction down the chart.

And again, in the current implementation, you only see recommended users if you explicitly ask for them, and I agree that that should remain the case if a UI element is added. (Make it a column that goes in the "utility" slot - the Getting Started/LTL/FTL/etc column - and can be summoned and dismissed as easily as those are.)

@Laurelai

This comment has been minimized.

Copy link

Laurelai commented Jul 6, 2018

This is an exploitable feature that will alter the behavior of users to act in more attention grabbing but toxic ways.

@bunnybooboo

This comment has been minimized.

Copy link

bunnybooboo commented Jul 6, 2018

For privacy reasons I'd prefer users had to OPT-IN to such an algorithm. As an additional ethical and debiasing measure I believe it's benefitial for an instance to also be required to OPT-IN. I'd prefer purposeful, selective, granularity regarding my personal acct used in any promotional activity.

In my opinion this is territory which has made other sites destructive. I recognise MANY users will want it. Perhaps even MOST users. Those blurry edge cases should be considered in the design contemplation though.

There is a myriad of reasons why both options (inclusion of this feature vs exclusion of this feature) might prove successful. Without a strategic scoring matrix in place of the pluses and minuses across a number of issues, a user like myself would likely only bring individual biased opinion.

What I feel needs to be considered beyond an agile methodology is the likely OUTCOMES: What would be the likelihood of when people overuse such feature? What about if they managed to be able misuse or abuse it? Who would likely benefit from its addition? And why is this benefitial for the wider community? Who would experience a decline in their experience? How might this negative be countermeasured?

Those kind of questions are often missing from controversial feature sets like this. The gentle guiding to have a user further interact, is the stuff of addictive behaviours. I've concerns of this addition.

lawremipsum added a commit to lawremipsum/mspsocial-mastodon that referenced this pull request Jul 7, 2018

Re-add follow recommendations API (tootsuite#7918)
* Re-add follow recommendations API

    GET /api/v1/suggestions

Removed in 8efa081 due to Neo4J
dependency. The algorithm uses triadic closures, takes into account
suspensions, blocks, mutes, domain blocks, excludes locked and moved
accounts, and prefers more recently updated accounts.

* Track interactions with people you don't follow

Replying to, favouriting and reblogging someone you're not following
will make them show up in follow recommendations. The interactions
have different weights:

- Replying is 1
- Favouriting is 10 (decidedly positive interaction, but private)
- Reblogging is 20

Following them, muting or blocking will remove them from the list,
obviously.

* Remove triadic closures, ensure potential friendships are trimmed

GenbuHase added a commit to Itabashi-don/mastodon that referenced this pull request Jul 31, 2018

Re-add follow recommendations API (tootsuite#7918)
* Re-add follow recommendations API

    GET /api/v1/suggestions

Removed in 8efa081 due to Neo4J
dependency. The algorithm uses triadic closures, takes into account
suspensions, blocks, mutes, domain blocks, excludes locked and moved
accounts, and prefers more recently updated accounts.

* Track interactions with people you don't follow

Replying to, favouriting and reblogging someone you're not following
will make them show up in follow recommendations. The interactions
have different weights:

- Replying is 1
- Favouriting is 10 (decidedly positive interaction, but private)
- Reblogging is 20

Following them, muting or blocking will remove them from the list,
obviously.

* Remove triadic closures, ensure potential friendships are trimmed

byronhulcher added a commit to byronhulcher/mastodon that referenced this pull request Aug 18, 2018

Re-add follow recommendations API (tootsuite#7918)
* Re-add follow recommendations API

    GET /api/v1/suggestions

Removed in 8efa081 due to Neo4J
dependency. The algorithm uses triadic closures, takes into account
suspensions, blocks, mutes, domain blocks, excludes locked and moved
accounts, and prefers more recently updated accounts.

* Track interactions with people you don't follow

Replying to, favouriting and reblogging someone you're not following
will make them show up in follow recommendations. The interactions
have different weights:

- Replying is 1
- Favouriting is 10 (decidedly positive interaction, but private)
- Reblogging is 20

Following them, muting or blocking will remove them from the list,
obviously.

* Remove triadic closures, ensure potential friendships are trimmed
@hakaba-hitoyo

This comment has been minimized.

Copy link

hakaba-hitoyo commented Aug 23, 2018

I only can see this feature being used at one point in future as in twitter, to promote specific ppl. and by that creating communities that are biased through the software.

Imagine this scenario: there is a brand with a custom instance. It wants to drive engagement, it hires a SMM manager. The manager makes a lottery: "reblog this toot for a chance to win!" Now every user who reblogged that would see the brand in their recommendations, every day, ....

This is serious problem, but in our decentralized social network, we can anytime go away from the evil instance which abuses its recommendation.

https://pawoo.net provides its who to follow panel since 2017 May, which is actually the list of the famous illustrators. Japanese or other Pawoo users rarely complain about this feature, but the #7918 seems better (more gentle or moderate) approach than Pawoo's.

I hope the official UI of the /api/v1/suggestions is provided very soon. In the future, the instances can provide their recommendation engine which is designed for their policy.

Gargron added a commit that referenced this pull request Oct 19, 2018

Show suggested follows on search screen in mobile layout
Reminder: Suggestions were added in #7918 and are based on who you
interact with who you do not follow. E.g. if you boost someone a lot
from seeing other people's boosts of that person, it makes sense you
might be interested in following the original source; or if you reply
to someone a lot, maybe you'd want to follow them

Each suggestion can be dismissed

Gargron added a commit that referenced this pull request Oct 22, 2018

Show suggested follows on search screen in mobile layout (#9010)
Reminder: Suggestions were added in #7918 and are based on who you
interact with who you do not follow. E.g. if you boost someone a lot
from seeing other people's boosts of that person, it makes sense you
might be interested in following the original source; or if you reply
to someone a lot, maybe you'd want to follow them

Each suggestion can be dismissed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment