Ladsgroup added a subscriber: guergana.tzatchkova.
Ladsgroup added a comment.


  So I have been working on this (plus pairing with @guergana.tzatchkova) . 
What we did is that first we added a new model in the make file:
  
    datasets/wikidatawiki.labelings.5k.2020.json:
        ./utility fetch_labels \
            https://labels.wmflabs.org/campaigns/wikidatawiki/95/ > $@
    
    datasets/wikidatawiki.labeling_revisions.w_cache.5k.2020.json: \
            datasets/wikidatawiki.labelings.5k.2020.json
        cat $< | \
        revscoring extract \
          articlequality.feature_lists.wikidatawiki.item_quality \
          --host https://www.wikidata.org \
          --batch-size 10 \
          --verbose > $@
    
    models/wikidatawiki.item_quality.gradient_boosting.2020.model: \
            datasets/wikidatawiki.labeling_revisions.w_cache.5k.2020.json
        cat $< | \
        revscoring cv_train \
          revscoring.scoring.models.GradientBoosting \
          articlequality.feature_lists.wikidatawiki.item_quality \
          item_quality \
          --version $(item_quality_major_minor).0 \
          -p 'learning_rate=0.01' \
          -p 'n_estimators=500' \
          -p 'max_features="log2"' \
          -p 'max_depth=5' \
          --labels '"A","B","C","D","E"' \
          --center --scale > $@
     
        revscoring model_info $@ > model_info/wikidatawiki.item_quality.2020.md
     
  
  Which built the model based on the 1300 observations. Then we ran this code:
  
    import mwapi
    from revscoring import Model
    import time
    import json
    from revscoring.extractors.api.extractor import Extractor
    import requests
    r = 
requests.get('https://labels.wmflabs.org/campaigns/wikidatawiki/95/?tasks=')
    val = r.json()
    with open("models/wikidatawiki.item_quality.gradient_boosting.2020.model") 
as f:
         scorer_model = Model.load(f)
    
    extractor = Extractor(mwapi.Session(host="https://www.wikidata.org";,
                                            user_agent="revscoring demo"))
    labeleds = []
    for i in val['tasks']:
        if i['labels']:
            continue
        try:
            feature_values = list(extractor.extract(i['data']['rev_id'], 
scorer_model.features))
            feature_values = scorer_model.score(feature_values)
        except:
            continue
        if feature_values['probability'][feature_values['prediction']] < 0.9:
            continue
        i['labels'] = [
            {
                'data': {'item_quality': feature_values['prediction']},
                'timestamp': time.time(), 
                'autolabel': True
            }
        ]
        labeleds.append(i)
        with open('labeleds.json', 'w') as f:
            f.write(json.dumps(labeleds))
  
  With this it labeled around 1237 new items. This really quick python script 
produced the postgres command we needed to run on production to add the labels:
  
    import json
    with open('labeleds.json', 'r') as f:
        cases = json.loads(f.read())
    print('insert into label (task_id, user_id, timestamp, data) values')
    for case in cases:
        print('(' + str(case['id']) + ', 13387278, NOW(), \''+ 
json.dumps(case['labels'][0]['data']) + '\'), ')
    print(';')
  
  (The user id is ID of my bot, zero causes error sometimes and I needed 
something distinct to be able to clean up later)
  
  Then I'm running this all over again (the second iteration).

TASK DETAIL
  https://phabricator.wikimedia.org/T261293

EMAIL PREFERENCES
  https://phabricator.wikimedia.org/settings/panel/emailpreferences/

To: Ladsgroup
Cc: guergana.tzatchkova, Aklapper, Lydia_Pintscher, Hazizibinmahdi, Akuckartz, 
darthmon_wmde, Michael, Nandana, Lahi, Gq86, GoranSMilovanovic, QZanden, 
LawExplorer, _jensen, rosalieper, Scott_WUaS, Wikidata-bugs, aude, Ladsgroup, 
Mbch331
_______________________________________________
Wikidata-bugs mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikidata-bugs

Reply via email to