1.1.9 • Published 1 month ago

karibou-mlx v1.1.9

Weekly downloads
1
License
MIT
Repository
github
Last release
1 month ago

Objectif

L'objectif d'un index est de produire des listes d'identifiants de produits (SKU) à très faible coût (CPU+MEM) qui match les besoins du clients. Quelques exemples de listes:

  • Les produits préférés d'un utilisateur.
  • Les produits de saison.
  • Les produits similaires.
  • Les produits d'une catégorie.
  • Les produits d'une thématique.
  • Les produits d'un commerçants.
  • Les produits d'un marché.
  • Les produits associés à une phrase.

Motivation

Produire des listes de produits de manière efficace (faible mémoire utilisée) et rapide (<50ms) est un élément important pour karibou.ch. Nous devons déléguer ce travail de l'application principale (karibou-api).

Specifications

1. Calcul du score d'un produit

Le score d'un produit est le résultat d'une fonction des achats dans le temps. Nous devons créer une liste des meilleurs produits selon les critères suivants. 1. un produit souvent acheté dans le présent est très valorisé 1. un produit acheté en petite quantité mais régulièrement est très valorisé 2. un nouveau produit ou un produit de saison activé est très valorisé 3. un produit souvent acheté dans le passé est moyennement valorisé 4. un produit acheté en grande quantité une sur une commandes est moyennement valorisé

Note: Il faut prendre en compte le contexte lors de la génération d'une liste. Il faut pouvoir contraindre les données avec les commercants actifs d'un marché spécifique.

Apprentissage.

La fréquence d'achat du produit est une mesure de l'importance du produit dans l'ensemble des commandes d'un client. Elle vise à donner un poids plus important aux produits les plus fréquents, considérés comme plus discriminants.

  • Ensemble des utilisateurs {u} de 1 à N
    • contient les clients, les groupes de clients et l'utilisateur Anonymous
  • Ensemble des produits {p} de 1 à N
  • Ensemble des commandes {o} de 1 à N
  • Le nombre de commande oFreq pour un utilisateur
  • Le nombre de commandes pFreq où le produit apparaît
  • Il faut extraire les scores min/max/avg par catégories
 score =  log(attenuation * prodFreq) * prodOrders/(UserOrders+1)
  1. Model: on créé une MATRIX constituée de N lignes (utilisateurs) et M colonne (produits)
  2. Learn: on modifie notre MATRIX (produits (M) + utilisateurs (N)) avec la somme des quantités commandées dans l'historique des cmd.
  3. Score: on calcul un score pour chaque produit avec la formule précédente
  4. Mitigation: le score est attenué/amplifié en fonction du contexte de la commande

Création d'un index pour l'utilisateur Anonymous

On considère un index qui appartient à un utilisateur neutre Anonymous. Le score normalisé des produits de l'utilisateur Anonymous est le score pondéré par l'ensemble des utilisateurs. La liste des produits associée a l'utilisateur anonymous est aussi utilisée pour compléter une proposition pour un utilisateur qui n'a pas passé sufisament de commandes.

boost

On peut appliquer un boost (un facteur d'amplification) au score d'un produit pour différente situations. 1. lorsque l'utilisateur n'a pas encore passé de commande 3. lorsque qu'il y a un nouveau produit qui n'a pas été commandé 4. Lorsqu'un produit est en promotion.

Note: les constantes sont à determiner et à valider

l'intérêt d'un produit s'estompe en fonction du temps

  • un produit de saison acheté récemment ~3 doit être valorisé
  • un produit perd de son intéret dans le temps jusqu'à ~ 24 mois =>
  • On doit pouvoir représenter la courbe idéale pour effectuer des tests et déterminer les bons paramêtes :fire:
 attenuation = 1 / ( timeInMonth + 0.9)^1 x 1.8 + 0.1 

Note: les constantes sont à determiner et à valider

image

Normalisation des scores entres les différents marchés

Lorsque l'on créé un nouveau marché composé de nouvelles boutiques et de boutiques d'un autre marché, les scores des produits doivent rester cohérents. 1. On utilise les valeurs min/max/avg de chaque catégories pour déterminer les scores initiaux d'un nouveau marchés .

Penalties

La valeur subjective d'un produit est corrélée avec celle de son score. Cependant il est possible que soudainement un produit apprecié génère de l'insatisfaction (par exemple en fin de saison le produit perd un peu de sa qualité). Dans ce cas, nous proposons d'introduire une pénalité relative au nombre d'insatisfaction qui atténu la valeur du score. Cette atténuation s'estompe également avec le temps. Exemple de problème qui atténu la valeur d'un score:

  • plusieurs clients on manifestés un problème avec un même produit (ex. avocat pas assez mûr)
  • des clients n'ont pas ressus des produits commandés (mauvaise gestion des stocks)

2. Création d'un espace vectoriel (par utilisateur) pour remplacer le score

L'intégration des techniques d'apprentissage automatique et l'analyse des vecteurs d'embedding peuvent considérablement améliorer la pertinence des recommandations. Et comme depuis peu, la possibilité de créer un espace-vertoriel à N dim (1536) pour chaque produit est ultra-simplifié, nous souhaitons transformer karibou-api en un esemble d'espaces de vecteurs à 1536 dim afin de capturer des nuances plus subtiles dans les préférences des utilisateurs.

  • trouver des similarité entre produits.
  • trouver les produits associés à un text

Pour l'Index des vecteurs, nous avons plusieurs options

Models

On peut soit utiliser un modèle standard, soit utiliser un modèle fine-tuned, soit utiliser le modèle standard text-embedding-ada-002

Liens*

Autres

1.1.9

1 month ago

1.1.8

2 months ago

1.1.7

2 months ago

1.1.6

2 months ago

1.1.5

2 months ago

1.1.1

2 months ago

1.1.0

2 months ago

1.1.4

2 months ago

1.1.3

2 months ago

1.1.2

2 months ago

1.0.37

2 months ago

1.0.38

2 months ago

1.0.33

3 months ago

1.0.36

2 months ago

1.0.35

2 months ago

1.0.34

2 months ago

1.0.32

3 months ago

1.0.31

3 months ago

1.0.29

3 months ago

1.0.28

3 months ago

1.0.30

3 months ago

1.0.27

4 months ago

1.0.26

4 months ago

1.0.25

4 months ago

1.0.19

4 months ago

1.0.22

4 months ago

1.0.21

4 months ago

1.0.20

4 months ago

1.0.24

4 months ago

1.0.23

4 months ago

1.0.18

4 months ago

1.0.17

5 months ago

1.0.16

5 months ago

1.0.15

5 months ago

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago

1.0.9

5 months ago

1.0.8

5 months ago

1.0.7

5 months ago

1.0.6

5 months ago

1.0.5

5 months ago

1.0.4

5 months ago

1.0.3

5 months ago

1.0.11

5 months ago

1.0.10

5 months ago

1.0.14

5 months ago

1.0.13

5 months ago

1.0.12

5 months ago

0.3.6

12 months ago

0.200.2

1 year ago

0.200.3

1 year ago

0.200.1

1 year ago

0.3.5

1 year ago

0.3.2

1 year ago

0.3.1

1 year ago

0.3.4

1 year ago

0.3.3

1 year ago

0.100.8

2 years ago

0.100.7

2 years ago

0.100.6

3 years ago

0.100.5

3 years ago

0.100.3

4 years ago

0.100.1

4 years ago

0.100.2

4 years ago

0.99.4

4 years ago

0.99.3

4 years ago

0.99.2

4 years ago

0.99.1

4 years ago

0.99.0

4 years ago

0.72.2

4 years ago

0.72.1

4 years ago

0.72.3

4 years ago

0.71.0

5 years ago

0.70.0

5 years ago

0.69.0

5 years ago

0.68.0

5 years ago

0.67.0

5 years ago

0.66.0

5 years ago

0.65.0

5 years ago

0.64.0

5 years ago

0.63.0

5 years ago

0.62.0

5 years ago

0.61.0

5 years ago

0.60.0

5 years ago

0.31.0

5 years ago

0.30.0

6 years ago