gorse-05-config-migration

Par divinevideo · divine-mobile

Corriger le moteur de recommandation Gorse 0.5.x silencieusement désactivé ou dégradé en raison d'une incompatibilité de configuration avec la version 0.4. À utiliser quand : (1) les recommandations Gorse 0.5 sont médiocres ou vides malgré la présence de données, (2) le filtrage collaboratif semble désactivé même si la section `[recommend.collaborative]` existe, (3) vous migrez la configuration Gorse de la version 0.4 vers la 0.5, (4) d'anciennes clés de configuration comme `[recommend.popular]`, `[recommend.neighbors]`, `[recommend.online]`, `[recommend.offline]` sont utilisées avec Gorse 0.5. Point critique : `type="mf"` doit être explicitement défini dans `[recommend.collaborative]`, sans quoi le filtrage collaboratif est silencieusement désactivé (valeur par défaut : `"none"`).

npx skills add https://github.com/divinevideo/divine-mobile --skill gorse-05-config-migration

Gorse 0.5.x Migration de Configuration depuis 0.4

Problème

Gorse 0.5 a introduit des changements de configuration incompatibles avec 0.4. Les anciennes sections de configuration sont silencieusement ignorées (pas d'erreur, pas d'avertissement), ce qui donne l'impression que des fonctionnalités comme le filtrage collaboratif, les tendances et les voisins d'articles sont configurées alors qu'elles sont en réalité désactivées.

Le problème le plus critique : [recommend.collaborative] utilise par défaut type = "none" dans 0.5, ce qui signifie que le filtrage collaboratif est silencieusement désactivé à moins que vous ne définissiez explicitement type = "mf".

Contexte / Conditions de Déclenchement

  • Gorse 0.5.x est déployé mais les recommandations semblent aléatoires ou de mauvaise qualité
  • Le filtrage collaboratif ne semble pas fonctionner malgré une configuration ayant [recommend.collaborative]
  • La configuration contient d'anciennes sections 0.4 : [recommend.popular], [recommend.neighbors], [recommend.online], [recommend.offline]
  • Mise à niveau de Gorse 0.4 vers 0.5
  • Gorse master démarre correctement mais les anciennes fonctionnalités de configuration ne prennent pas effet

Solution

Sections 0.4 Supprimées (silencieusement ignorées dans 0.5)

Section 0.4 Remplacement 0.5
[recommend.popular] [[recommend.non-personalized]] (tableau TOML de tables)
[recommend.neighbors] [[recommend.item-to-item]] + [[recommend.user-to-user]]
[recommend.online] (explore/exploit) [recommend.ranker] (FM ou basé LLM)
[recommend.offline] Cache [recommend.ranker] cache_expire + [recommend.fallback]

Clés 0.4 Supprimées (n'existent pas dans 0.5)

  • enable_item_neighbor_index
  • enable_user_neighbor_index
  • item_neighbor_type
  • neighbor_type
  • explore_recommend
  • popular_window

Correctif Critique : Activer le Filtrage Collaboratif

# Style 0.4 (CASSÉ dans 0.5 — CF silencieusement désactivé) :
[recommend.collaborative]
fit_period = "60m"
fit_epoch = 100

# Style 0.5 (FONCTIONNE — doit ajouter type = "mf") :
[recommend.collaborative]
type = "mf"
fit_period = "60m"
fit_epoch = 100

Modèle de Configuration Complet 0.5

[recommend]
cache_size = 100
cache_expire = "72h"
context_size = 100

[recommend.data_source]
positive_feedback_types = ["reaction", "comment", "repost"]
read_feedback_types = ["view"]
positive_feedback_ttl = 0
item_ttl = 0

# Filtrage collaboratif — DOIT définir type = "mf" pour activer
[recommend.collaborative]
type = "mf"
fit_period = "60m"
fit_epoch = 100
optimize_period = "360m"
optimize_trials = 10

[recommend.collaborative.early_stopping]
patience = 10

# Tendances/populaire — syntaxe tableau TOML [[...]] pour plusieurs classements
[[recommend.non-personalized]]
name = "trending_weekly"
score = "count(feedback, .FeedbackType == 'reaction') + count(feedback, .FeedbackType == 'comment') * 2"
filter = "(now() - item.Timestamp).Hours() < 168"

# Similarité d'articles basée sur le contenu (nécessite des Labels sur les articles)
[[recommend.item-to-item]]
name = "similar_content"
type = "tags"         # correspond aux Labels d'articles

# Similarité d'articles collaborative
[[recommend.item-to-item]]
name = "also_liked"
type = "users"        # les utilisateurs qui ont aimé X ont aussi aimé Y

# Similarité d'utilisateurs
[[recommend.user-to-user]]
name = "similar_users"
type = "items"        # les utilisateurs qui partagent des articles aimés

# Ranker FM fusionne toutes les sources de candidats
[recommend.ranker]
type = "fm"           # ou "llm" pour reclassement basé LLM
recommenders = ["latest", "collaborative", "non-personalized/trending_weekly", "item-to-item/similar_content", "item-to-item/also_liked", "user-to-user/similar_users"]
fit_period = "60m"
fit_epoch = 100

[recommend.ranker.early_stopping]
patience = 10

[recommend.fallback]
recommenders = ["latest"]

[recommend.replacement]
enable_replacement = true
positive_replacement_decay = 0.8
read_replacement_decay = 0.6

Principales Différences de Configuration 0.5

  1. [[recommend.non-personalized]] utilise le langage Expr pour les fonctions de score/filtre

    • Disponible : count(feedback, .FeedbackType == 'X'), item.Timestamp, now()
    • Filtre : (now() - item.Timestamp).Hours() < N
  2. [[recommend.item-to-item]] types : "tags" (similarité de labels), "users" (collaborative), "embedding"

  3. [[recommend.user-to-user]] types : "items" (articles partagés), "tags", "embedding"

  4. [recommend.ranker] types : "none", "fm" (machines à factorisation), "llm"

    • La liste recommenders utilise le format "category/name" pour référencer des recommandeurs spécifiques
  5. Types de feedback personnalisés : Toute chaîne est valide dans positive_feedback_types (p. ex. "extended_view", "bookmark")

Vérification

Après la mise à jour de la configuration :

  1. Redémarrez Gorse master et vérifiez les logs pour les erreurs d'analyse de configuration
  2. Visitez le tableau de bord Gorse (port 8088) — les nouveaux recommandeurs devraient apparaître
  3. Vérifiez l'endpoint /api/dashboard/config pour confirmer que la configuration a été acceptée
  4. Après fit_period (60m par défaut), vérifiez que l'entraînement du modèle s'exécute dans les logs worker

Remarques

  • Gorse 0.5 n'avertit PAS des clés de configuration non reconnues — elles sont silencieusement ignorées
  • La syntaxe [[double.bracket]] est un tableau TOML de tables — permet plusieurs entrées
  • La syntaxe [single.bracket] est une table régulière — une seule autorisée
  • [recommend.ranker].recommenders doit référencer les recommandeurs par leur chemin "category/name"
  • Les types de feedback personnalisés sont supportés — Gorse ne valide pas les noms de types de feedback

Références

Skills similaires