mardi, novembre 28, 2023

Annonce des métriques MLflow 2.8 LLM-as-a-juge et des meilleures pratiques pour l’évaluation LLM des candidatures RAG, partie 2


Aujourd’hui, nous sommes ravis d’annoncer MLflow 2.8 prend en charge nos métriques LLM-as-a-juge qui peuvent aider à économiser du temps et des coûts tout en fournissant une approximation des métriques jugées par l’homme. Dans notre rapport précédentnous avons discuté d’une étude de cas sur la façon dont la technique LLM-as-a-juge nous a aidés à accroître l’efficacité, à réduire les coûts et à maintenir une cohérence de plus de 80 % avec les scores humains dans le domaine. Assistant IA pour la documentation Databricks, ce qui entraîne des économies significatives de temps (de 2 semaines avec une main-d’œuvre humaine à 30 minutes avec des juges LLM) et de coûts (de 20 $ par tâche à 0,20 $ par tâche). Nous avons également suivi notre rapport précédent sur les meilleures pratiques pour l’évaluation LLM en tant que juge des candidatures RAG (Retrieval Augmented Generation) avec une partie 2 ci-dessous. Nous expliquerons comment vous pouvez appliquer une méthodologie similaire, en combinaison avec le nettoyage des données, pour évaluer et ajuster les performances de vos propres applications RAG. Comme dans le rapport précédent, le LLM en tant que juge est un outil prometteur dans la suite de techniques d’évaluation nécessaires pour mesurer l’efficacité des candidatures basées sur le LLM. Dans de nombreuses situations, nous pensons qu’il représente un point idéal : il peut évaluer les résultats non structurés (comme la réponse d’un chatbot) automatiquement, rapidement et à faible coût. En ce sens, nous le considérons comme un digne compagnon de l’évaluation humaine, qui est plus lente et plus coûteuse mais qui représente la référence en matière d’évaluation de modèles.

Votre utilisation d’un service LLM tiers (par exemple, OpenAI) à des fins d’évaluation peut être soumise et régie par les conditions d’utilisation du service LLM.

MLflow 2.8 : évaluation automatisée

La communauté LLM a exploré l’utilisation des « LLM en tant que juge » pour l’évaluation automatisée et nous avons appliqué leurs théorie à projets de production. Nous avons constaté que vous pouvez économiser beaucoup de temps et d’argent si vous utilisez l’évaluation automatisée avec des LLM de pointe, comme les familles de modèles GPT, MPT et Llama2, avec un seul exemple d’évaluation pour chaque critère. MLflow 2.8 introduit un cadre puissant et personnalisable pour l’évaluation LLM. Nous avons étendu le API d’évaluation MLflow pour prendre en charge les métriques GenAI et les exemples d’évaluation. Vous obtenez des métriques prêtes à l’emploi telles que la toxicité, la latence, les jetons et plus encore, ainsi que certaines métriques GenAI qui utilisent GPT-4 comme juge par défaut, comme la fidélité, la réponse_correction et la réponse_similarité. Des métriques personnalisées peuvent toujours être ajoutées dans MLflow, même pour les métriques GenAI. Voyons MLflow 2.8 en pratique avec quelques exemples !

Lors de la création d’une métrique GenAI personnalisée avec la technique LLM-as-a-juge, vous devez choisir le LLM que vous souhaitez en tant que juge, fournir une échelle de notation et donner un exemple pour chaque note de l’échelle. Voici un exemple de la façon de définir une métrique GenAI pour le « Professionnalisme » dans MLflow 2.8 :

professionalism = mlflow.metrics.make_genai_metric(
    name="professionalism",
    definition=(
        "Professionalism refers to the use of a formal, respectful, and appropriate style of communication that is "
        "tailored to the context and audience. It often involves avoiding overly casual language, slang, or "
        "colloquialisms, and instead using clear, concise, and respectful language."
    ),
    grading_prompt=(
        "Professionalism: If the answer is written using a professional tone, below are the details for different scores: "
        "- Score 1: Language is extremely casual, informal, and may include slang or colloquialisms. Not suitable for "
        "professional contexts."
        "- Score 2: Language is casual but generally respectful and avoids strong informality or slang. Acceptable in "
        "some informal professional settings."
        "- Score 3: Language is overall formal but still have casual words/phrases. Borderline for professional contexts."
        "- Score 4: Language is balanced and avoids extreme informality or formality. Suitable for most professional contexts. "
        "- Score 5: Language is noticeably formal, respectful, and avoids casual elements. Appropriate for formal "
        "business or academic settings. "
    ),
    examples=[professionalism_example_score_1, professionalism_example_score_2, professionalism_example_score_3, professionalism_example_score_4, professionalism_example_score_5],
    model="openai:/gpt-4",
    parameters={"temperature": 0.0},
    aggregations=["mean", "variance"],
    greater_is_better=True,
)

Semblable à ce que nous avons vu dans notre rapport précédent, les exemples d’évaluation (la liste des « exemples » dans l’extrait ci-dessus) peuvent contribuer à l’exactitude de la métrique jugée par LLM. MLflow 2.8 facilite la définition d’un EvaluationExample :

professionalism_example_score_2 = mlflow.metrics.EvaluationExample(
    input="What is MLflow?",
    output=(
        "MLflow is like your friendly neighborhood toolkit for managing your machine learning projects. It helps "
        "you track experiments, package your code and models, and collaborate with your team, making the whole ML "
        "workflow smoother. It's like your Swiss Army knife for machine learning!"
    ),
    score=2,
    justification=(
        "The response is written in a casual tone. It uses contractions, filler words such as 'like', and "
        "exclamation points, which make it sound less professional. "
    ),
)

Nous savons que vous avez besoin de métriques courantes, c’est pourquoi MLflow 2.8 prend en charge certaines métriques GenAI prêtes à l’emploi. En nous indiquant quel est le « model_type » de votre application, par exemple « question-réponse », l’API MLflow Evaluate générera automatiquement des métriques GenAI communes pour vous. Vous pouvez également ajouter des métriques « supplémentaires », comme nous le faisons avec « Pertinence de la réponse » dans l’exemple suivant :

from  mlflow.metrics.genai.metric_definitions import answer_relevance

answer_relevance_metric = answer_relevance()

eval_df = pd.DataFrame() # Index(['inputs', 'predictions', 'context'], dtype='object')

eval_results = mlflow.evaluate(
    data = eval_df, # evaluation data
    model_type="question-answering",
    predictions="predictions", # prediction column_name from eval_df
    extra_metrics=[answer_relevance_metric]
)

Pour affiner davantage les performances, vous pouvez également modifier le modèle de jugement et demander ces métriques GenAI prêtes à l’emploi. Vous trouverez ci-dessous une capture d’écran de l’interface utilisateur MLflow qui vous aide à comparer rapidement les métriques GenAI visuellement dans l’onglet Évaluation :

Interface utilisateur MLflow

Vous pouvez également afficher les résultats dans le eval_results_table.json correspondant ou les charger en tant que dataframe Pandas pour une analyse plus approfondie.

Cadre de données Pandas

Application de l’évaluation LLM aux candidatures RAG : partie 2

Lors de la prochaine série de nos investigations, nous avons revisité notre application de production du Assistant IA pour la documentation Databricks pour voir si nous pouvions améliorer les performances en améliorant la qualité des données d’entrée. À partir de cette enquête, nous avons développé un flux de travail pour nettoyer automatiquement les données qui a permis d’obtenir une exactitude et une lisibilité plus élevées des réponses du chatbot, ainsi que de réduire le nombre de jetons pour réduire les coûts et améliorer la vitesse.

Nettoyage des données pour une auto-évaluation efficace pour les applications RAG

Nous avons exploré l’impact de la qualité des données sur les performances de réponse du chatbot ainsi que diverses techniques de nettoyage des données pour améliorer les performances. Nous pensons que ces résultats se généralisent et peuvent aider votre équipe à évaluer efficacement les chatbots basés sur RAG :

  • Le nettoyage des données a amélioré l’exactitude des réponses générées par LLM jusqu’à +20% (de 3,58 à 4,59 pour l’échelle de notation 1~5)
  • Un avantage inattendu du nettoyage des données est qu’il peut réduire les coûts en nécessitant moins de jetons. Le nettoyage des données a réduit le nombre de jetons pour le contexte jusqu’à -64% (de 965538 jetons dans les données indexées à 348542 jetons après nettoyage)
  • Différents LLM se comportent mieux avec différents codes de nettoyage de données
LLM
LLM

Défis liés aux données avec les applications RAG

Il y a divers types de données d’entrée pour les applications RAG : pages de sites Web, PDF, Google Doc, pages Wiki, etc. Les types de données les plus fréquemment utilisés par l’industrie et par nos clients sont les sites Web et les PDF. Notre assistant Databricks Document AI utilise la documentation officielle Databricks, la base de connaissances et les pages de documentation Spark comme sources de données. Bien que les sites Web de documentation soient lisibles par l’homme, le format peut être difficile à comprendre pour un LLM. Ci-dessous un exemple :

Rendu pour l’humain Rendu pour LLM
Défis liés aux données avec les applications RAG
Documentation Spark

Ici, le format Markdown et les options de langue d’extrait de code fournissent une interface utilisateur facile à comprendre pour présenter des exemples correspondants pour chaque langue. Cependant, une fois cette interface utilisateur convertie uniquement au format Markdown pour un LLM, le contenu est converti en plusieurs blocs de code répétitifs, ce qui le rend difficile à comprendre. En conséquence, lorsque nous avons posé à mpt-7b-chat la question « Comment configurer un nom de catalogue par défaut différent ? » étant donné le contexte, il fournit la réponse suivante : « « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` «  ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` ` «  « ` « ` « ` « ` « ` « ` « ` « ` « ` », qui est la répétition du symbole du bloc de code. Dans d’autres cas, le LLM ne suit pas les instructions et commence à répéter les questions. De même, une page Web peut contenir diverses icônes, images et symboles spéciaux devant être utilisés par le navigateur pour afficher une meilleure interface utilisateur, ce qui confond également les LLM. Notez qu’une approche alternative consiste à modifier l’invite pour ignorer le balisage de formatage. Cependant, nous prévoyons d’affiner davantage l’invite pour une application particulière, et nous préférons éviter de la rendre trop compliquée et d’introduire de l’instabilité.

Le nettoyage des données améliore les performances

Nous avons écrit un flux de travail rapide qui a exploité le LLM-as-juge et compris de manière itérative le code de nettoyage pour supprimer les jetons de formatage superflus des fichiers Markdown et des pages Web. Vous trouverez ci-dessous un exemple de ce à quoi ressemble un document unique avant et après le nettoyage, illustrant que le document conserve à la fois sa structure et sa signification :

Nettoyage des données

Vous pouvez également clairement constater que le nettoyage de documents peut réduire considérablement le nombre de jetons utilisés dans une fenêtre contextuelle LLM, ce qui permet d’économiser du temps et de l’argent. Après le nettoyage des données, nous avons constaté des améliorations dans la réponse de MPT-7B-Chat :

Question Réponse avant le nettoyage Réponse après nettoyage
Quelle est la syntaxe pour créer un schéma à l’aide de Spark SQL ? « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` «  ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` ` «  « ` « ` « ` « ` « ` « ` Pour créer un schéma à l’aide de Spark SQL, vous pouvez utiliser la syntaxe suivante : CREATE SCHEMA [schema_name] Vous pouvez spécifier l’emplacement du schéma à l’aide de la clause LOCATION, et vous pouvez également fournir un de…
Quels sont les résultats courants par objet pour le stockage S3, ADLS Gen2 et GCS ? Quels sont les résultats courants par objet pour le stockage S3, ADLS Gen2 et GCS ? « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` « ` «  ` « ` « ` « ` « ` « ` « ` « ` « ` Les résultats courants par objet pour le stockage S3, ADLS Gen2 et GCS sont : 1 (répertoire de base) 365 (par jour) 24 heures) 8761 Il s’agit du nombre total d’appels d’API de stockage d’objets qui seront effectués par jour, ba…
Comment épingler un personnage dans la barre latérale ? Merci pour votre aide! Pour épingler un personnage dans la barre latérale, vous pouvez cliquer sur l’icône du personnage sous le logo Databricks, sélectionner le personnage souhaité et cliquer sur le bouton « Épingler le personnage ». Cela garantira que la personne sélectionnée…
Quelles API sont disponibles dans Databricks ? réponse réponse : Il existe trois types d’entrepôts SQL disponibles dans Databricks : sans serveur, Pro et Classique. Le type d’entrepôt SQL par défaut est Pro, mais il peut être défini sur Serverless ou Classic à l’aide de Plusieurs API sont disponibles dans Databricks pour l’entreposage de données, notamment l’API SQL Warehouse, l’API de requêtes, l’API de visualisations et l’API de tableaux de bord. Ces API fournissent une gamme de fonctionnalités…

Essayez MLflow 2.8 aujourd’hui pour une évaluation automatique

Dans la partie 2 de notre analyse, nous avons utilisé MLflow 2.8 pour évaluer les applications RAG avec LLM-as-a-juge. Désormais, grâce au nettoyage des données et à l’évaluation automatique, vous pouvez comparer et contraster rapidement et efficacement différents LLM pour naviguer dans les exigences de votre application RAG. Quelques ressources pour vous aider à démarrer :

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles