Hallucination et IA

Comment réduire le taux d'hallucinations "GPT" de plus de 20% à moins de 2%.

fred

Au lieu de procéder à un réglage fin, nous avons utilisé une combinaison d'enchaînement d'invites et de pré/post-traitement pour réduire le taux d'hallucinations d'un ordre de grandeur, mais cela a nécessité 3 à 4 fois plus d'appels à OpenAI. Il y a encore beaucoup de place pour l'amélioration !

L'un des plus grands défis liés à l'utilisation de grands modèles de langage tels que GPT est leur tendance à fabriquer des informations. Cela peut convenir dans des cas d'utilisation tels que la génération de texte pour la création littéraire ou les sessions de brainstorming, mais cela peut être désastreux lorsque le résultat est utilisé pour des applications commerciales telles que l'assistance à la clientèle. Les hallucinations, ou la production de fausses informations, peuvent être particulièrement préjudiciables dans ces contextes et avoir de graves conséquences. Un seul cas de génération de fausses informations peut nuire à la réputation d'une entreprise, entraîner des poursuites judiciaires et porter préjudice aux clients.

Il existe plusieurs façons de relever ce défi. Une méthode courante consiste à utiliser le réglage fin pour améliorer la précision du modèle sur un ensemble de données spécifique à un domaine. Le problème de l'ajustement fin est que la collecte d'un ensemble de données spécifiques à un domaine est difficile lorsque vous avez un produit SaaS multi-tenant, où chaque client a un cas d'utilisation légèrement différent et des personas d'utilisateurs différents. Nous avons donc dû trouver d'autres moyens de résoudre le problème.


Voici ce qui a été fait jusqu'à présent

Enchaînement d'invites (de commande)

La première chose que nous avons essayée a été d'utiliser des techniques de chaînage d'invites pour diviser une invite complexe en plusieurs parties et demander à GPT de "vérifier ses réponses" à chaque étape.

Par exemple, au lieu d'avoir un seul appel à GPT avec l'entrée de l'utilisateur et le contenu injecté, nous avons d'abord demandé à GPT d'évaluer s'il pouvait même répondre à la question, et de justifier sa réponse. Nous avons actuellement trois étapes : une étape de prétraitement, une étape d'évaluation et une étape de réponse.

Voici un exemple de l'invite que nous avons utilisée lors de l'étape d'évaluation. Elle demande simplement à GPT de répondre s'il peut répondre à une question compte tenu du contenu fourni.

"""<|im_start|>system Vous avez trouvé le contenu suivant en cherchant dans la documentation. N'utilisez que ce contenu pour construire votre réponse. {content}<|im_end|>
<|Tout d'abord, déterminez si le contenu trouvé est suffisant pour résoudre le problème. Deuxièmement, répondez avec un JSON au format :
{
"content_contains_answer" : booléen, // vrai ou faux. Indique si les informations contenues dans le contenu sont suffisantes pour résoudre le problème.
"justification" : string // Pourquoi vous pensez que le contenu que vous avez trouvé est ou n'est pas suffisant pour résoudre le problème.
}
L'enquête : {inquiry}<|im_end|><|im_start|>assistant {
"content_contains_answer":<|im_end|>"""

Notez que nous avons demandé à GPT de renvoyer sa réponse au format JSON et que nous avons ajouté la structure attendue à la réponse de l'assistant. Cela nous a permis de nous assurer que nous serions en mesure d'analyser la réponse, et cela a fonctionné dans presque 100 % des cas. Nous avons également remarqué que le simple fait de demander au modèle de fournir une justification améliorait sa précision dans la prédiction de content_contains_answer, même si nous ne l'utilisions pas pour quoi que ce soit. Il faut bien appeler GPT à l'aide pour ses conneries !

Cette approche a permis de réduire le taux d'hallucinations de 20 % à probablement 5 %.

Post-traitement

L'étape suivante qui nous a permis de passer de 5 % à 2 % a été le post-traitement des résultats de GPT. Il y a eu plusieurs étapes :

1. Vérifier si le e^(logprob) du vrai jeton est inférieur à 90%. Si c'est le cas, nous réexécutons l'invite d'évaluation et forçons content_contains_answer à être faux. Nous avons constaté que cette méthode permettait de réduire le nombre de faux positifs sans avoir trop d'impact sur les faux négatifs.

2. Si content_contains_answer est faux, nous utilisons la justification renvoyée et un deuxième appel à l'API GPT pour reformuler la justification afin de la cibler sur l'utilisateur. Cela réduit les risques que notre résultat final ait une formulation bizarre comme "L'utilisateur devrait...". Ce n'est pas vraiment une hallucination, mais ce n'est pas non plus une expérience optimale.

Prétraitement

Il s'agit de l'étape la plus récente que nous ayons ajoutée et qui nous a permis d'atteindre un taux d'hallucinations inférieur à 2 %. La première chose que nous avons faite est de demander à GPT de classer l'intention de la demande de l'utilisateur. En fonction de l'intention, nous utiliserons une invite différente pour les étapes d'évaluation et de réponse.

Nous expérimentons également un prétraitement supplémentaire des données de l'utilisateur afin d'augmenter les chances de trouver des résultats pertinents lors de l'étape de recherche. Cela peut se faire en extrayant des entités de la requête de l'utilisateur et en exécutant la recherche vectorielle avec un poids plus élevé sur les encastrements épars. Cela est utile pour les questions techniques qui impliquent des combinaisons de mots spécifiques comme keras.save_model , car la recherche par mot-clé est plus utile que la recherche sémantique dans ces cas-là.