Traitement du langage naturel avancé avec les LLM

Traitement du langage naturel avancé avec les LLM

Introduction

Les modèles de langage peuvent être utilisés pour effectuer des tâches avancées de traitement du langage naturel (NLP). Ce tutoriel explore les différentes façons d’implémenter ces fonctionnalités avec les LLM.

Types de tâches NLP

1. Analyse de texte

2. Classification

3. Extraction d’informations

Implémentation

1. Analyseur de texte

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

class TextAnalyzer:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def analyze_text(self, text: str, analysis_type: str = "sentiment") -> Dict[str, Any]:
        prompt = self._create_analysis_prompt(text, analysis_type)
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en analyse de texte."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)
    
    def _create_analysis_prompt(self, text: str, analysis_type: str) -> str:
        return f"""
        Analyse le texte suivant de type {analysis_type} :
        
        Texte : {text}
        
        Fournis :
        1. L'analyse détaillée
        2. Les points clés
        3. Les insights
        4. Les recommandations
        
        Réponds au format JSON.
        """

2. Classificateur de texte

class TextClassifier:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def classify_text(self, text: str, classification_type: str = "document") -> Dict[str, Any]:
        prompt = self._create_classification_prompt(text, classification_type)
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en classification de texte."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)
    
    def _create_classification_prompt(self, text: str, classification_type: str) -> str:
        return f"""
        Classifie le texte suivant de type {classification_type} :
        
        Texte : {text}
        
        Fournis :
        1. La classification
        2. Le score de confiance
        3. Les caractéristiques clés
        4. Les alternatives
        
        Réponds au format JSON.
        """

3. Extracteur d’informations

class InformationExtractor:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def extract_information(self, text: str, extraction_type: str = "entities") -> Dict[str, Any]:
        prompt = self._create_extraction_prompt(text, extraction_type)
        
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "Tu es un expert en extraction d'informations."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)
    
    def _create_extraction_prompt(self, text: str, extraction_type: str) -> str:
        return f"""
        Extrais les informations de type {extraction_type} du texte suivant :
        
        Texte : {text}
        
        Fournis :
        1. Les éléments extraits
        2. Leur contexte
        3. Leur importance
        4. Leurs relations
        
        Réponds au format JSON.
        """

Applications avancées

1. Analyseur de documents

class DocumentAnalyzer:
    def __init__(self, api_key: str):
        self.text_analyzer = TextAnalyzer(api_key)
        self.text_classifier = TextClassifier(api_key)
        self.information_extractor = InformationExtractor(api_key)
    
    def analyze_document(self, document: Dict[str, Any]) -> Dict[str, Any]:
        # Analyse de texte
        text_analysis = self.text_analyzer.analyze_text(
            document["content"],
            "comprehensive"
        )
        
        # Classification
        classification = self.text_classifier.classify_text(
            document["content"],
            "document"
        )
        
        # Extraction d'informations
        information = self.information_extractor.extract_information(
            document["content"],
            "comprehensive"
        )
        
        return {
            "text_analysis": text_analysis,
            "classification": classification,
            "information": information,
            "insights": self._generate_insights(text_analysis, classification, information)
        }
    
    def _generate_insights(self, text_analysis: Dict[str, Any], 
                         classification: Dict[str, Any], 
                         information: Dict[str, Any]) -> Dict[str, Any]:
        prompt = f"""
        Génère des insights basés sur l'analyse du document :
        
        Analyse de texte : {json.dumps(text_analysis, indent=2)}
        Classification : {json.dumps(classification, indent=2)}
        Information : {json.dumps(information, indent=2)}
        
        Fournis :
        1. Les insights principaux
        2. Les patterns identifiés
        3. Les connexions
        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 analyse de documents."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)

2. Analyseur de conversations

class ConversationAnalyzer:
    def __init__(self, api_key: str):
        self.text_analyzer = TextAnalyzer(api_key)
        self.text_classifier = TextClassifier(api_key)
        self.information_extractor = InformationExtractor(api_key)
    
    def analyze_conversation(self, conversation: List[Dict[str, Any]]) -> Dict[str, Any]:
        # Analyse des messages
        message_analyses = []
        for message in conversation:
            analysis = self.text_analyzer.analyze_text(
                message["content"],
                "sentiment"
            )
            message_analyses.append(analysis)
        
        # Classification des messages
        message_classifications = []
        for message in conversation:
            classification = self.text_classifier.classify_text(
                message["content"],
                "intent"
            )
            message_classifications.append(classification)
        
        # Extraction d'informations
        conversation_information = self.information_extractor.extract_information(
            " ".join([msg["content"] for msg in conversation]),
            "comprehensive"
        )
        
        return {
            "message_analyses": message_analyses,
            "message_classifications": message_classifications,
            "conversation_information": conversation_information,
            "insights": self._generate_insights(
                message_analyses,
                message_classifications,
                conversation_information
            )
        }
    
    def _generate_insights(self, message_analyses: List[Dict[str, Any]], 
                         message_classifications: List[Dict[str, Any]], 
                         conversation_information: Dict[str, Any]) -> Dict[str, Any]:
        prompt = f"""
        Génère des insights basés sur l'analyse de la conversation :
        
        Analyses des messages : {json.dumps(message_analyses, indent=2)}
        Classifications des messages : {json.dumps(message_classifications, indent=2)}
        Information de la conversation : {json.dumps(conversation_information, indent=2)}
        
        Fournis :
        1. Les insights principaux
        2. Les patterns de conversation
        3. Les tendances
        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 analyse de conversations."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)

Optimisation et personnalisation

1. Gestionnaire de contexte

class ContextManager:
    def __init__(self):
        self.context = {}
    
    def update_context(self, context_data: Dict[str, Any]):
        self.context.update(context_data)
    
    def get_context(self) -> Dict[str, Any]:
        return self.context
    
    def clear_context(self):
        self.context = {}
    
    def get_context_report(self) -> Dict[str, Any]:
        return {
            "context": self.context,
            "summary": self._generate_summary(),
            "recommendations": self._generate_recommendations()
        }

2. Optimiseur de résultats

class ResultOptimizer:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)
    
    def optimize_results(self, results: List[Dict[str, Any]], 
                        optimization_criteria: Dict[str, Any]) -> List[Dict[str, Any]]:
        prompt = f"""
        Optimise les résultats suivants selon les critères donnés :
        
        Résultats : {json.dumps(results, indent=2)}
        Critères : {json.dumps(optimization_criteria, indent=2)}
        
        Fournis :
        1. Les résultats optimisés
        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 résultats."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3
        )
        
        return json.loads(response.choices[0].message.content)

Bonnes pratiques

1. Gestionnaire de qualité

class QualityManager:
    def __init__(self):
        self.quality_metrics = {
            "accuracy": 0,
            "precision": 0,
            "recall": 0,
            "f1_score": 0
        }
    
    def update_metrics(self, result_data: Dict[str, Any]):
        self.quality_metrics["accuracy"] = self._calculate_accuracy(result_data)
        self.quality_metrics["precision"] = self._calculate_precision(result_data)
        self.quality_metrics["recall"] = self._calculate_recall(result_data)
        self.quality_metrics["f1_score"] = self._calculate_f1_score(result_data)
    
    def get_quality_report(self) -> Dict[str, Any]:
        return {
            "metrics": self.quality_metrics,
            "summary": self._generate_summary(),
            "recommendations": self._generate_recommendations()
        }

2. Analytics NLP

class NLPAnalytics:
    def __init__(self):
        self.metrics = {
            "total_analyses": 0,
            "success_rate": 0,
            "average_time": 0,
            "quality_score": 0
        }
    
    def update_metrics(self, analysis_data: Dict[str, Any]):
        self.metrics["total_analyses"] += 1
        self.metrics["success_rate"] = self._calculate_success_rate()
        self.metrics["average_time"] = self._update_average(
            self.metrics["average_time"],
            analysis_data["time"]
        )
        self.metrics["quality_score"] = self._calculate_quality_score()
    
    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 le traitement du langage naturel avancé. 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 recommandation et de personnalisation.