Metarank : personnalisation en temps réel en tant que service
Metarank est un service de classement open source. Il peut vous aider à créer une recherche et des recommandations sémantiques/neurales personnalisées.
Si vous voulez juste commencer, essayez :
Avec Metarank, vous pouvez rendre vos recherches et recommandations existantes plus intelligentes :
Le Metarank est rapide :
Gagnez du temps de développement :
Metarank vous aide à créer des systèmes de classement avancés pour la recherche et les recommandations :
Articles de blog :
Meetups et conférences-débats :
Vous pouvez jouer avec la démo Metarank sur demo.metarank.ai :
La démo elle-même et les données utilisées sont open source et vous pouvez récupérer une copie des événements de formation et du fichier de configuration dans le dépôt github.
Laissez-nous vous montrer comment vous pouvez commencer à personnaliser le contenu avec le reclassement basé sur LambdaMART en un peu moins d'une minute :
Nous utiliserons l'ensemble de données Ranklens, qui est utilisé dans notre démo, il suffit donc de télécharger le fichier de données
curl -O -L https://github.com/metarank/metarank/raw/master/src/test/resources/ranklens/events/events.jsonl.gz
Nous utiliserons à nouveau le fichier de configuration de notre démo. Il utilise un magasin en mémoire, aucune autre dépendance n'est donc nécessaire.
curl -O -L https://raw.githubusercontent.com/metarank/metarank/master/src/test/resources/ranklens/config.yml
Avec la dernière étape, nous utiliserons le mode standalone
de Metarank qui combine la formation et l'exécution de l'API en une seule commande :
docker run -i -t -p 8080:8080 -v $( pwd ) :/opt/metarank metarank/metarank:latest standalone --config /opt/metarank/config.yml --data /opt/metarank/events.jsonl.gz
Vous verrez des résultats utiles pendant que Metarank démarre et parcourt les données. Une fois cela fait, vous pouvez envoyer des requêtes à localhost:8080
pour obtenir des résultats personnalisés.
Ici, nous allons interagir avec plusieurs films en cliquant sur l'un d'eux et en observant les résultats.
Tout d'abord, voyons le résultat initial fourni par Metarank avant d'interagir avec lui.
# get initial ranking for some items
curl http://localhost:8080/rank/xgboost
-d ' {
"event": "ranking",
"id": "id1",
"items": [
{"id":"72998"}, {"id":"67197"}, {"id":"77561"},
{"id":"68358"}, {"id":"79132"}, {"id":"103228"},
{"id":"72378"}, {"id":"85131"}, {"id":"94864"},
{"id":"68791"}, {"id":"93363"}, {"id":"112623"}
],
"user": "alice",
"session": "alice1",
"timestamp": 1661431886711
} '
# {"item":"72998","score":0.9602446652021992},{"item":"79132","score":0.7819134441404151},{"item":"68358","score":0.33377910321385645},{"item":"112623","score":0.32591281190727805},{"item":"103228","score":0.31640256043322723},{"item":"77561","score":0.3040782705414116},{"item":"94864","score":0.17659007036183608},{"item":"72378","score":0.06164568676567339},{"item":"93363","score":0.058120639770243385},{"item":"68791","score":0.026919880032451306},{"item":"85131","score":-0.35794106000271037},{"item":"67197","score":-0.48735167237049154}
# tell Metarank which items were presented to the user and in which order from the previous request
# optionally, we can include the score calculated by Metarank or your internal retrieval system
curl http://localhost:8080/feedback
-d ' {
"event": "ranking",
"fields": [],
"id": "test-ranking",
"items": [
{"id":"72998","score":0.9602446652021992},{"id":"79132","score":0.7819134441404151},{"id":"68358","score":0.33377910321385645},
{"id":"112623","score":0.32591281190727805},{"id":"103228","score":0.31640256043322723},{"id":"77561","score":0.3040782705414116},
{"id":"94864","score":0.17659007036183608},{"id":"72378","score":0.06164568676567339},{"id":"93363","score":0.058120639770243385},
{"id":"68791","score":0.026919880032451306},{"id":"85131","score":-0.35794106000271037},{"id":"67197","score":-0.48735167237049154}
],
"user": "test2",
"session": "test2",
"timestamp": 1661431888711
} '
Maintenant, interagissons avec les objets
93363
# click on the item with id 93363
curl http://localhost:8080/feedback
-d ' {
"event": "interaction",
"type": "click",
"fields": [],
"id": "test-interaction",
"ranking": "test-ranking",
"item": "93363",
"user": "test",
"session": "test",
"timestamp": 1661431890711
} '
Désormais, Metarank personnalisera les éléments, l'ordre des éléments dans la réponse sera différent
# personalize the same list of items
# they will be returned in a different order by Metarank
curl http://localhost:8080/rank/xgboost
-d ' {
"event": "ranking",
"fields": [],
"id": "test-personalized",
"items": [
{"id":"72998"}, {"id":"67197"}, {"id":"77561"},
{"id":"68358"}, {"id":"79132"}, {"id":"103228"},
{"id":"72378"}, {"id":"85131"}, {"id":"94864"},
{"id":"68791"}, {"id":"93363"}, {"id":"112623"}
],
"user": "test",
"session": "test",
"timestamp": 1661431892711
} '
# {"items":[{"item":"93363","score":2.2013986484185124},{"item":"72998","score":1.1542776301073876},{"item":"68358","score":0.9828904282341605},{"item":"112623","score":0.9521647429731446},{"item":"79132","score":0.9258841742518286},{"item":"77561","score":0.8990921381835769},{"item":"103228","score":0.8990921381835769},{"item":"94864","score":0.7131600718467729},{"item":"68791","score":0.624462038351694},{"item":"72378","score":0.5269765094008626},{"item":"85131","score":0.29198666089255343},{"item":"67197","score":0.16412780810560743}]}
Consultez une référence complète de démarrage rapide plus détaillée.
Si vous avez des questions, n'hésitez pas à rejoindre notre Slack !
Ce projet est publié sous la licence Apache 2.0, comme spécifié dans le fichier de licence.