Hi all,
Just wondering is it possible to see where someone did disagree with an annotation I added (for example life stage)? This to learn and/or correct errors. Any tips or advice welcome.
Hi all,
Just wondering is it possible to see where someone did disagree with an annotation I added (for example life stage)? This to learn and/or correct errors. Any tips or advice welcome.
you have to get the details of each observation that has annotations via the API and parse through the annotation “votes” to see if there are disagreements. right now, it doesn’t look like any of your observations with life stage annotations have any disagreeing votes.
Because annotations can be disagreed with but not corrected by anyone except the observer/annotator and they don’t generate notifications, I always comment/tag the annotator if I come across wrong annotations.
Ah, I didn’t know that. That sounds like a good practice, thanks.
Would you care to explain what “the API” is in this context?
API = application programming interface.
information about iNat’s API can be found at https://api.inaturalist.org.
i used one of my Jupyter notebooks running Python to get information from the API and come to the conclusions in my previous post, but you can also write your own code / scripts to get information from the API.
Thanks for checking pisum.
It’s a pity this is not default available in inaturalist.
Are you able to share your code in some way?
there’s not a straightforward way to look for the particular information you want because it’s a complicated request, and there are a lot of potential variations in how exactly any particular persion might want to filter for observations in their particular case. maybe one person wants any disagreement on a particular annotation. (that’s the way i did it.) but maybe another person wants only disagreements by a particular person on any annotation. and maybe another person wants another person wants only disagreements on any annotation by a particular person. each of these variations requires very different ways of parsing the data to get the desired result.
see the link to my Jupyter Notebook in my previous post. as it is currently saved, you would:
#
) from items / lines in the parse_fields
definition for the async def get_obs
which begin with label: 'annot_score_ls...'
. (this will tell the code to return the overall scores for life stage annotations, which i’ve defined as 1 for the annotation, plus 1 for each agreement, minus 1 for each disagreement)req_params_string = 'user_id=rudolphous&term_id=1'
. (this tells the code to get your observations that have a life stage annotation.)obs = await get_obs(req_params, get_all_pages=True, use_authorization=False)
. (the get_all_pages=True
parameter will get up to the first 10,000 records for the parameters you defined in #2, which will be a high enough limit in your case.)obs = await get_obs
.note that although score <1 is not a perfect indicator of disagreements, it should work in most cases and was the easiest way to find these without doing new coding. you could make it better by filtering the votes on the individual annotations for just disagreements and counting those vote records. any vote count > 0 would indicate there was a disagreement.
instead of looking yourself for scores <1 in step #6, you could also tell the code to filter for records that have scores <1 directly by adding a parameter in step #3 that would be something like post_parse_filter_function=(lambda x: x['annot_score_ls_adult'] < 1 or x['annot_score_ls_juvenile'] < 1 or ...)
, where you would define which particular life stage annotations you want to look for overall scores less than 1.
This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.