Recommandation et personnalisation avec les LLM

Recommandation et personnalisation avec les LLM

Introduction

Les modèles de langage peuvent être utilisés pour créer des systèmes de recommandation sophistiqués et des expériences personnalisées. Ce tutoriel explore les différentes façons d’implémenter ces fonctionnalités avec les LLM.

Types de recommandation

1. Recommandation de contenu

2. Recommandation comportementale

3. Recommandation contextuelle

Implémentation

1. Système de recommandation

from openai import OpenAI
import json
from typing import List, Dict, Any
import numpy as np

class RecommendationSystem:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def generate_recommendations(self, user_profile: Dict[str, Any], 
                               available_items: List[Dict[str, Any]], 
                               recommendation_type: str = "content") -> List[Dict[str, Any]]:
        prompt = self._create_recommendation_prompt(user_profile, available_items, recommendation_type)
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en systèmes de recommandation."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.5
        )
        
        return json.loads(response.choices[0].message.content)
    
    def _create_recommendation_prompt(self, user_profile: Dict[str, Any], 
                                    available_items: List[Dict[str, Any]], 
                                    recommendation_type: str) -> str:
        return f"""
        Génère des recommandations {recommendation_type} pour l'utilisateur suivant :
        
        Profil utilisateur : {json.dumps(user_profile, indent=2)}
        Items disponibles : {json.dumps(available_items, indent=2)}
        
        Pour chaque recommandation, fournis :
        1. L'item recommandé
        2. Le score de pertinence
        3. Les raisons de la recommandation
        4. Des alternatives
        
        Réponds au format JSON.
        """

2. Système de personnalisation

class PersonalizationSystem:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def personalize_content(self, content: Dict[str, Any], 
                          user_profile: Dict[str, Any]) -> Dict[str, Any]:
        prompt = self._create_personalization_prompt(content, user_profile)
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en personnalisation de contenu."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.5
        )
        
        return json.loads(response.choices[0].message.content)
    
    def _create_personalization_prompt(self, content: Dict[str, Any], 
                                     user_profile: Dict[str, Any]) -> str:
        return f"""
        Personnalise le contenu suivant pour l'utilisateur :
        
        Contenu : {json.dumps(content, indent=2)}
        Profil utilisateur : {json.dumps(user_profile, indent=2)}
        
        Fournis :
        1. Le contenu personnalisé
        2. Les modifications apportées
        3. Les raisons des modifications
        4. Les alternatives
        
        Réponds au format JSON.
        """

3. Gestionnaire de profil utilisateur

class UserProfileManager:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def analyze_user_behavior(self, user_data: Dict[str, Any]) -> Dict[str, Any]:
        prompt = self._create_analysis_prompt(user_data)
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en analyse de comportement utilisateur."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)
    
    def _create_analysis_prompt(self, user_data: Dict[str, Any]) -> str:
        return f"""
        Analyse le comportement de l'utilisateur suivant :
        
        Données utilisateur : {json.dumps(user_data, indent=2)}
        
        Fournis :
        1. Les préférences identifiées
        2. Les patterns de comportement
        3. Les intérêts
        4. Les recommandations
        
        Réponds au format JSON.
        """

Applications avancées

1. Recommandateur e-commerce

class EcommerceRecommender:
    def __init__(self, api_key: str):
        self.recommendation_system = RecommendationSystem(api_key)
        self.personalization_system = PersonalizationSystem(api_key)
        self.user_profile_manager = UserProfileManager(api_key)
    
    def recommend_products(self, user_data: Dict[str, Any], 
                         product_catalog: List[Dict[str, Any]]) -> Dict[str, Any]:
        # Analyse du profil utilisateur
        user_profile = self.user_profile_manager.analyze_user_behavior(user_data)
        
        # Génération des recommandations
        recommendations = self.recommendation_system.generate_recommendations(
            user_profile,
            product_catalog,
            "product"
        )
        
        # Personnalisation des recommandations
        personalized_recommendations = []
        for recommendation in recommendations:
            personalized = self.personalization_system.personalize_content(
                recommendation,
                user_profile
            )
            personalized_recommendations.append(personalized)
        
        return {
            "user_profile": user_profile,
            "recommendations": personalized_recommendations,
            "insights": self._generate_insights(user_profile, personalized_recommendations)
        }
    
    def _generate_insights(self, user_profile: Dict[str, Any], 
                         recommendations: List[Dict[str, Any]]) -> Dict[str, Any]:
        prompt = f"""
        Génère des insights basés sur le profil utilisateur et les recommandations :
        
        Profil utilisateur : {json.dumps(user_profile, indent=2)}
        Recommandations : {json.dumps(recommendations, indent=2)}
        
        Fournis :
        1. Les tendances d'achat
        2. Les opportunités
        3. Les recommandations marketing
        4. Les actions suggérées
        
        Réponds au format JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en analyse e-commerce."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.5
        )
        
        return json.loads(response.choices[0].message.content)

2. Recommandateur de contenu éducatif

class EducationalContentRecommender:
    def __init__(self, api_key: str):
        self.recommendation_system = RecommendationSystem(api_key)
        self.personalization_system = PersonalizationSystem(api_key)
        self.user_profile_manager = UserProfileManager(api_key)
    
    def recommend_educational_content(self, student_data: Dict[str, Any], 
                                   content_catalog: List[Dict[str, Any]]) -> Dict[str, Any]:
        # Analyse du profil étudiant
        student_profile = self.user_profile_manager.analyze_user_behavior(student_data)
        
        # Génération des recommandations
        recommendations = self.recommendation_system.generate_recommendations(
            student_profile,
            content_catalog,
            "educational"
        )
        
        # Personnalisation des recommandations
        personalized_recommendations = []
        for recommendation in recommendations:
            personalized = self.personalization_system.personalize_content(
                recommendation,
                student_profile
            )
            personalized_recommendations.append(personalized)
        
        return {
            "student_profile": student_profile,
            "recommendations": personalized_recommendations,
            "learning_path": self._generate_learning_path(student_profile, personalized_recommendations)
        }
    
    def _generate_learning_path(self, student_profile: Dict[str, Any], 
                              recommendations: List[Dict[str, Any]]) -> Dict[str, Any]:
        prompt = f"""
        Génère un parcours d'apprentissage basé sur le profil étudiant et les recommandations :
        
        Profil étudiant : {json.dumps(student_profile, indent=2)}
        Recommandations : {json.dumps(recommendations, indent=2)}
        
        Fournis :
        1. Le parcours d'apprentissage
        2. Les objectifs d'apprentissage
        3. Les prérequis
        4. Les évaluations
        
        Réponds au format JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en pédagogie."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.5
        )
        
        return json.loads(response.choices[0].message.content)

Optimisation et personnalisation

1. Gestion du feedback

class FeedbackManager:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def process_feedback(self, feedback: Dict[str, Any], 
                        recommendations: List[Dict[str, Any]]) -> Dict[str, Any]:
        prompt = f"""
        Traite le feedback suivant pour les recommandations :
        
        Feedback : {json.dumps(feedback, indent=2)}
        Recommandations : {json.dumps(recommendations, indent=2)}
        
        Fournis :
        1. L'analyse du feedback
        2. Les ajustements suggérés
        3. Les améliorations
        4. Les actions à prendre
        
        Réponds au format JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en gestion de feedback."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)

2. Optimisation des recommandations

class RecommendationOptimizer:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def optimize_recommendations(self, recommendations: List[Dict[str, Any]], 
                               optimization_criteria: Dict[str, Any]) -> List[Dict[str, Any]]:
        prompt = f"""
        Optimise les recommandations suivantes selon les critères donnés :
        
        Recommandations : {json.dumps(recommendations, indent=2)}
        Critères : {json.dumps(optimization_criteria, indent=2)}
        
        Fournis :
        1. Les recommandations optimisées
        2. Les améliorations apportées
        3. Les métriques de performance
        4. Les recommandations
        
        Réponds au format JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en optimisation de recommandations."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)

Bonnes pratiques

1. Gestion de la confidentialité

class PrivacyManager:
    def __init__(self):
        self.privacy_settings = {}
    
    def update_privacy_settings(self, user_id: str, settings: Dict[str, Any]):
        self.privacy_settings[user_id] = settings
    
    def get_privacy_settings(self, user_id: str) -> Dict[str, Any]:
        return self.privacy_settings.get(user_id, {})
    
    def validate_data_usage(self, user_id: str, data_type: str) -> bool:
        settings = self.get_privacy_settings(user_id)
        return settings.get(data_type, False)
    
    def get_privacy_report(self) -> Dict[str, Any]:
        return {
            "settings": self.privacy_settings,
            "compliance": self._check_compliance(),
            "recommendations": self._generate_recommendations()
        }

2. Monitoring et analytics

class RecommendationAnalytics:
    def __init__(self):
        self.metrics = {
            "total_recommendations": 0,
            "acceptance_rate": 0,
            "average_rating": 0,
            "user_satisfaction": 0
        }
    
    def update_metrics(self, recommendation_data: Dict[str, Any]):
        self.metrics["total_recommendations"] += 1
        self.metrics["acceptance_rate"] = self._calculate_acceptance_rate()
        self.metrics["average_rating"] = self._update_average(
            self.metrics["average_rating"],
            recommendation_data["rating"]
        )
        self.metrics["user_satisfaction"] = self._calculate_satisfaction()
    
    def get_analytics_report(self) -> Dict[str, Any]:
        return {
            "metrics": self.metrics,
            "trends": self._calculate_trends(),
            "recommendations": self._generate_recommendations()
        }

Conclusion

Les LLM offrent des capacités puissantes pour la création de systèmes de recommandation et de personnalisation. En utilisant les techniques présentées dans ce tutoriel, vous pouvez :

Dans le prochain tutoriel, nous explorerons l’utilisation des LLM pour la création d’applications de recherche et d’analyse d’information.