More equitable distribution of initial prompt tasks
Getting to write an initial prompt puts you in a powerful position. You get to dictate what the other participants will talk about and have greater influence over the model as a result of the discussion. Unfortunately, there aren't very many opportunities to write an initial prompt, since only one initial prompt creates many other tasks.
Because initial prompt tasks are served on a first-come, first-served basis, it creates an incentive for participants to closely monitor the set of available tasks and instantly submit their initial prompts as soon as the task becomes available. In a sense, it allows certain individuals to achieve greater influence over the model than others. Worse, if you spend too long formulating a high-quality initial prompt, someone else might have submitted one, and your work is permanently lost (probably a bug for another issue). This means that quick and lower-quality prompts sometimes are able to beat higher-quality ones to the chase.
Currently, the distribution of the proportion of initial prompts submitted to other tasks completed among the beta volunteers is far from uniform. Some beta testers were able to submit 60+ initial prompts and approximately 200 other tasks completed. Other beta testers only were able to submit 0-4 prompts with a similar number of other tasks completed.
I propose a new algorithm for determining initial prompt task availability with two limits: the number of active dialogue trees that anyone can race to enter an initial prompt for, and the number of active dialogue trees that are unlocked based on the user's task completion ratio for other task types. (Once a user has completed a number of tasks equal to the size of a tree, the ratio is met, and the user unlocks the ability to create an initial prompt.)
When demand for initial prompts is high, it means users have to work on other tasks in order to improve their ratio and unlock the ability to write their own initial prompts. Creating multiple accounts will not help you get more initial prompt tasks, since each account would still need to provide equal amounts of other work per initial prompt task received. The higher absolute cap on the number of active trees will help make these initial prompt tasks available to those who earned them.
Here is a quick pseudocode sketch of how it might look like:
# Constants
max_active_trees_anyone = 100 # put whatever the real number is here
max_active_trees = max_active_trees_anyone * 3 // 2
num_active_trees = ...
# Possibly even make this slightly larger than the size of a tree
other_tasks_per_prompt = <total size of a tree>
target_initial_prompt_ratio = 1 / other_tasks_per_prompt
user.initial_prompt_count = ...
user.total_task_count = ...
IsInitialPromptTaskOpen(user):
if num_active_trees < max_active_trees_anyone:
return True
if num_active_trees >= max_active_trees:
return False
# no divide by 0; users need to do work for first prompt
if ((user.total_task_count > other_tasks_per_prompt) and
(user.initial_prompt_count / user.total_task_count < target_initial_prompt_ratio)):
return True
For reference, see backend/oasst_backend/tree_manager.py for the current code that distributes tasks.
Other things: Users with high ratios already might not want to wait ages for their ratio to come down; one way to solve this is to use a local ratio sampled from the last X (say, 250) task completions.
Thoughts?
I see the problem. I suggest that we implement a simple solution first: Users can submit an infinite amount of prompts (ratetlimited). When the count of active trees falls below the desired number of trees prompt-lottery kicks in and selects a prompt with a probability that is anti-proportional to number of prompts submitted by the user.
Here is a first PR which should attenuate the initial prompt 'competition': https://github.com/LAION-AI/Open-Assistant/pull/1055 Strategy: Users can submit as much initial prompts as they want. Users are selected uniformly + a random prompt of the selected user is drawn. All users have the same chance of being selected independent of how many prompts they submit. Hope is that this will maximize prompt diversity.
I really like how your PR gives users time to create a pool of high quality initial prompts. Nonetheless, it does create the incentive for an attacker to create many accounts that perform no work, since each additional account will give the attacker greater influence over the initial prompt pool. Previously, there was no incentive to create more than one account (in the context of initial prompt influence - Sybil attacks toward approving one's own contributions are still on the table).
I think a combination of the lottery system and a closely related incentive toward performing other tasks would be optimal. For instance, the probability of one of your initial prompts being selected might be proportional to your other-task-to-prompt ratio.
@mashdragon I am closing this for now .. let us know if you want to work on a more fair/complex prompt selection system or please create a full proposal as separate issue.
@andreaskoepf After doing hours of reviewing and replying (countless full trees worth), I am disappointed at how none of my prompts are going through the system anymore beyond initial review. I think my fears about "accounts doing no work" have been realized.
Someone who makes an account, submits 10 prompts, and subsequently never logs in again is getting an equal chance of one of their prompts being selected as I am. I am significantly less motivated to contribute if my unique prompts I put time into making are never given responses.
I think there needs to be some factor where the work you perform rewards you with eventual prompt selections. That was what my ratio system proposal was trying to answer.
For example, we can take the lottery system and weight it: use random.choices with k=1, and weight it, maybe, by (other_tasks_done - max_tree_size) / (initial_prompts_accepted + 1) off the back of my hand - some factor of other tasks done to initial prompts accepted. Is this doable with our database?
The general problem is that wirting prompts is trivial/easy and generating a full message tree takes a lot of effort (>=60 tasks).
For example take a look at the current numbers for English:
- Prompts waiting lottery: 18884
- Message trees in ready_to_export state: 1938
The question is of course which prompts should we select and why? Base on quality rating, diversity? Why would it be a good idea to show prompts of the most active users? Will this yield diverse message trees or just to motivate active users because there is a higher chance for them to see their prompts again?
Please feel free to propose a better strategy and submit a PR. If you can explain why the new selection method is better than the existing one and it has no drastic side effects such a PR will very likely be merged.
Sure. When I find some free time, I'll create a PR. It shouldn't be hard to come up with a selection method that is strictly more flexible. For instance, it might take the form of a configurable ratio of "any user" vs. "contributing user" prompts that pass through, so both (a) prompts from non-contributing users are still included, and (b) users doing lots of other tasks will eventually see their own prompts included with certainty, also making Sybil attacks harder.
I'm of the opinion that the highest quality contributors could also develop the highest quality prompts without compromising diversity. Requiring work to be done to see your prompts included (with certainty) might cause users to think harder about what prompts they want to submit. And in spending time doing work and reviewing others' prompts, you get to see what is a good prompt and what is not.
It would be interesting to see if my intuition is true based on ratings... but alas, I have no access to the database.