Aller au contenu

Blog ·

Une étiquette que porte la moitié du corpus

Une étiquette figurait sur 75 des 127 articles : le bloc de suggestions retombait sur la date de publication et 71 pages ne recevaient aucune tuile entrante.

Par Provibr

Sous chaque article de ce site se trouve un bloc de quatre tuiles intitulé Poursuivre la lecture. C’est le seul maillage interne automatique que nous ayons ; tout le reste est un lien que quelqu’un a écrit dans une phrase.

Le bloc était en place depuis des mois et personne n’avait demandé ce qu’il choisissait. Quand nous l’avons mesuré, sur les pages rendues d’une compilation de production plutôt que sur la fonction qui les remplit, la réponse a été qu’il ne choisissait presque rien. Sur les 127 articles anglais, 71 ne recevaient aucune tuile entrante. L’article médian n’était lié par personne. Quatre articles recevaient 304 des 508 tuiles existantes, à raison de 88, 76, 72 et 68 chacun.

Un bloc qui ne nomme jamais 71 pages n’est pas du maillage interne. C’est un palmarès de quatre avec un intitulé au-dessus.

L’étiquette ne faisait aucun travail

L’ancienne sélection fonctionnait en trois couches de famille : même famille avec une étiquette commune, autre famille avec une étiquette commune, même famille sans étiquette commune. À l’intérieur de chaque couche, elle triait par date de publication et prenait les quatre premiers.

Cela se lit comme un ordre raisonnable, et sur ce corpus c’était une machine à fabriquer des orphelins, pour une raison qui n’a rien à voir avec le tri : proxmox figure sur 75 des 127 articles anglais, soit 59 pour cent. Presque chaque note technique que ce projet écrit se produit sur Proxmox, donc presque chaque note a reçu l’étiquette.

Une étiquette que porte la moitié du corpus ne distingue rien. La première couche était donc presque toujours pleine, et à l’intérieur d’une couche pleine, par date signifie les quatre articles les plus récents. 300 des 508 paires de voisins partageaient cette seule étiquette et rien d’autre, et pour 75 articles c’était vrai des quatre voisins à la fois. Le symptôme le plus net se trouvait dans les pages de comparaison : les quatre articles d’alternatives à des produits concurrents affichaient les quatre mêmes notes récentes, et donc jamais l’un l’autre, et jamais leur propre comparaison directe.

Une seconde mesure dit la même chose depuis l’autre bout, et c’est elle qui a décidé de la façon dont nous avons étiqueté les articles que vous lisez en ce moment. Sur les 75 articles anglais portant proxmox, 43 ne contiennent le mot Proxmox nulle part dans leur corps. L’étiquette avait cessé de signifier ceci parle de Proxmox et s’était mise à signifier ceci est l’un des nôtres.

Un score unique, trois sortes de termes, aucun bonus manuel

Le remplacement est un score unique. Deux articles sont voisins dans la mesure où ils partagent des termes, et un terme vaut ln(N / df) : la fréquence inverse de document classique, où N est le nombre d’articles dans cette langue et df le nombre de ceux qui portent le terme.

Trois sortes de termes vivent dans un même espace, préfixées pour qu’elles ne puissent pas se confondre : tag: depuis l’en-tête, vorm: depuis la forme de l’article telle qu’elle se lit sur son slug et sa famille, et over: depuis les mots de sujet du slug.

La pondération découle au lieu d’être posée. Sur le corpus que nous avons mesuré, tag:proxmox vaut 0,53 et tag:dedicated 2,45. Personne n’a tapé l’un ou l’autre de ces nombres, et personne n’a à se souvenir d’abaisser le premier quand la seizième note Proxmox arrivera.

Le vocabulaire de sujet est dérivé plutôt que tapé. C’est l’union des slugs d’intégration que le site tient déjà et des valeurs about des blocs d’affirmation sur les concurrents, d’où viennent des noms comme solusvm, tenantos, virtfusion et virtualizor : exactement les mots qui sont le sujet d’une page sans être une intégration. Une troisième liste écrite à la main aurait été le quatrième endroit où vit le même nom, et le premier à se périmer.

Pondérer les seules étiquettes est pire, pas à moitié mieux

La petite modification tentante consiste à garder l’étiquette comme unique signal et à simplement la pondérer. Nous avons mesuré cette variante avant de choisir, parce que c’est ce que quelqu’un proposera la prochaine fois que le sujet reviendra.

Elle produit 74 orphelins au lieu de 71, et sur les 22 pages d’alternatives et de comparaison, exactement une a gardé deux voisins de sa propre forme, contre neuf auparavant. Pondérer un signal qui ne discrimine pas ne le rend pas discriminant. La discrimination vient de vorm: et de over: ; la fréquence inverse de document ne décide que de la façon dont le poids se répartit.

Si une caractéristique n’a presque aucune variance, aucun schéma de pondération ne la sauve, et une formule habile posée sur une mauvaise caractéristique a l’air d’un progrès parce que les nombres bougent.

Le départage fait la moitié de la réparation

Voici la partie que nous n’aurions pas prédite. Sur 75 articles qui ne partagent que la forme de note et l’étiquette commune, le score est identique. Chacune de ces paires est une égalité, donc c’est le départage qui décide de tout, et non des cas limites.

Trier les égalités par date, c’est l’ancien comportement sous un habit neuf : les quatre plus récents à nouveau. Le départage est désormais d’abord l’article qui a reçu le moins de tuiles, avec la date et le slug derrière lui comme fin de course stable.

Ce seul changement est ce qui a ramené le compte d’orphelins à zéro, et il coûte quelque chose de réel dans sa forme : il ne peut pas se calculer article par article. Il faut parcourir toute la langue une fois, dans un ordre fixé, en comptant ce qui a déjà été distribué.

En anglais : la médiane 0 devient 4, le maximum 88 devient 12, les 71 orphelins deviennent 0. Toutes les autres langues aboutissent à la même médiane et au même zéro, avec un maximum de 13. Sur les 46 paires de voisins qui ne partagent aucune étiquette, les 46 partagent désormais la forme, là où auparavant 37 paires ne partageaient absolument rien.

Nous avons aussi mesuré une pénalité à l’intérieur du score lui-même, retranchant un quart du nombre de tuiles qu’un article a déjà reçues. Elle aplatit légèrement plus, minimum deux au lieu d’un, et elle paie cela en pertinence : la part de voisins n’ayant rien en commun passe de 9,1 à 12,2 pour cent. Un départage ne peut par construction que réordonner des candidats ayant déjà obtenu le même score, il ne peut donc jamais évincer un meilleur voisin. Une pénalité, si.

Ce qu’un garde-fou peut honnêtement affirmer ici

Le test existant sur ce bloc vérifiait que le bloc était plein. Il est resté vert tout du long, et il avait raison de l’être : quatre tuiles étaient rendues sur chaque page. Il n’avait aucun avis sur le fait qu’elles parlaient de quelque chose.

La règle stricte évidente pour le remplacement est fausse. Chaque page d’alternatives et de comparaison doit avoir au moins deux voisins de sa propre forme ressemble à la propriété que nous voulons, et elle imposerait de moins bons voisins : l’une de ces pages parle des alternatives à cPanel, et ses quatre meilleurs voisins sont quatre articles cPanel sans aucun accord de forme. C’est correct, et une règle exigeant le contraire le casserait. Le garde-fou nomme donc les neuf pages dont la ronde parlait réellement.

Et la propriété que vous voulez peut tout simplement ne pas exister sur vos données. Aucune paire ne peut partager uniquement l’étiquette la plus courante est insatisfiable ici. La forme honnête est comparative : aucun candidat non retenu n’obtient un score supérieur au plus faible des voisins retenus. Cela se vérifie, c’est la définition même de correct, et cela ne fait pas semblant que le corpus est autre chose que ce qu’il est.

Ce que nous noterions

  1. Mesurez les pages rendues, pas la fonction. La distribution est le défaut ; la fonction avait l’air correcte.
  2. Une étiquette posée sur 59 pour cent d’un corpus n’est pas un signal. C’est une marque d’usage maison.
  3. Vérifiez que votre étiquette signifie encore ce que son nom dit. 43 sur 75 ne le faisaient plus.
  4. Une sélection en couches avec un tri dans chaque couche est un tri. La première couche suffisait presque toujours.
  5. Trier les égalités par date réintroduit le biais de récence partout où les égalités sont fréquentes, et sur un corpus uniforme l’égalité est le cas normal.
  6. Le départage peut être toute la réparation. Le nôtre a fait passer les orphelins de 71 à zéro.
  7. Pondérer une caractéristique sans variance ne change rien. Mesurez la demi-réparation tentante avant de la rejeter par le raisonnement.
  8. Préférez un départage à une pénalité. Un départage ne peut pas déplacer un meilleur candidat ; le nôtre aurait coûté 3,1 points de pertinence s’il l’avait fait.
  9. Dérivez votre vocabulaire d’un registre que vous tenez déjà. Une quatrième copie d’un nom de produit est la première à se périmer.
  10. Si la propriété que vous voulez est insatisfiable, écrivez la comparative. Rien de non retenu ne bat le plus faible des retenus se vérifie et est vrai.

Pour être clair sur ce dont il s’agit : les distributions avant et après ont été lues dans le DOM de deux compilations de production, 20 pages sur 20 concordaient directement avec la fonction de sélection, deux compilations distinctes du même commit étaient identiques octet pour octet sur 18 sections de tuiles, une exploration de 1758 pages n’a trouvé ni orphelin ni lien mort, le nouveau garde-fou porte 13 tests dont 5 ont été prouvés rouges d’abord, la suite web s’est terminée à 4703 verts et la vérification de contenu à 923 sur 923. Non prouvé : l’effet de tout cela sur le classement, qui se mesure dans quatre à six semaines et pas avant, contre la liste enregistrée des 71 pages qui ne recevaient rien.

Issu du travail de plateforme sur Provibr. Ce qu’un titre et les liens qui pointent vers lui se doivent mutuellement est dans Trois défauts qu’aucun script ne pouvait voir, pourquoi un même article peut finir avec deux noms est dans Deux noms pour le même article, et le cas où un intitulé et un titre de page doivent différer est dans Quand le titre ne peut pas être l’intitulé.

Commencez avec un hôte et un agent

Créez un compte, installez l’agent avec une seule commande et connectez votre premier hôte Proxmox. La période d’essai dure 14 jours et ne demande aucune coordonnée de paiement.