STEP3-VL-10B : Optimisation Multiscène pour la Localisation de Clauses Clés dans les Contrats Juridiques et la Correction Automatisée de Copies d'Examen

Dans le monde professionnel, certaines tâches, comme la recherche de clauses spécifiques dans des contrats volumineux ou la correction manuelle de piles de copies d'examen, peuvent s'avérer chronophages et sujettes aux erreurs. L'intelligence artificielle offre aujourd'hui des solutions pour transformer ces processus.

Cet article présente STEP3-VL-10B, un modèle d'IA multimodale capable de comprendre et d'analyser simultanément des informations visuelles et textuelles. Malgré une taille de 10 milliards de paramètres, relativement modeste dans le domaine de l'IA, il excelle dans la reconnaissance d'images, l'extraction de texte et le raisonnement, rivalisant parfois avec des modèles beaucoup plus imposants.

Nous nous concentrerons sur deux applications concrètes : la localisation rapide de clauses essentielles dans les contrats juridiques et la correction intelligente de copies d'examen manuscrites. Vous découvrirez comment ces tâches autrefois laborieuses peuvent être simplifiées grâce à cette technologie.

STEP3-VL-10B : Un assistant multimodal puissant et compact

Qu'est-ce que STEP3-VL-10B ?

STEP3-VL-10B est un modèle visuel-linguistique multimdoal open-source développé par Stepfun AI. Il est conçu pour traiter et comprendre des données provenant de différentes modalités, notamment les images et le texte. Cela lui permet d'interpréter le contenu d'une image, de comprendre des instructions textuelles et même d'extraire et d'analyser le texte présent dans des documents visuels tels que des contrats ou des examens.

Avec 10 milliards de paramètres, le modèle est considéré comme "léger", ce qui facilite son déploiement dans des environnements aux ressources matérielles limitées.

Ses performances

Les performances de STEP3-VL-10B dans diverses tâches visuelles et de raisonnement sont notables :

Benchmark Description Score STEP3-VL-10B Remarques
MMMU Raisonnement multidisciplinaire STEM 78.11 Inclut des questions complexes en mathématiques, physique, chimie.
MathVista Résolution de problèmes mathématiques visuels 83.97 Analyse de graphiques et de diagrammes pour résoudre des problèmes.
OCRBench Reconnaissance et compréhension de texte dans les documents 86.75 Évalue la capacité à extraire et comprendre le texte de divers documents.
ScreenSpot-V2 Localisation d'éléments d'interface graphique 92.61 Identification et positionnement d'éléments comme des boutons ou des menus.

Le score élevé sur OCRBench (86.75) atteste de sa forte capacité à reconnaître et interpréter le texte dans des documents, une compétence clé pour nos cas d'usage.

Configuration matérielle requise

Pour un déploiement local, voici les configurations recommandées :

Composant Configuration minimale Configuration recommandée
GPU NVIDIA, 24 Go VRAM (ex: RTX 4090) A100 40 Go / 80 Go
Mémoire RAM 32 Go 64 Go
Logiciel CUDA 12.x CUDA 12.4+

Des services pré-déployés sont également disponibles pour éviter la complexité de la configuration.

Accès rapide : Trois méthodes d'utilisation

STEP3-VL-10B est accessible via différentes interfaces pour convenir aux développeurs comme aux utilisateurs finaux.

1. Interface Web : La simplicité avant tout

Pour une expérience sans code, l'interface Web est idéale. Elle offre une plateforme de chat intuitive où vous pouvez uploader une image et poser des questions.

Utilisation :

  1. Uploader une image (glisser-déposer).
  2. Saisir la question dans la zone de texte.
  3. Envoyer et attendre la réponse du modèle.

Gestion des services (via supervisor) :


# Vérifier l'état des services
supervisorctl status

# Démarrer l'interface Web
supervisorctl start webui

# Redémarrer le service (après modification de configuration)
supervisorctl restart webui

# Arrêter le service
supervisorctl stop webui

2. API : Intégration programmatique

Pour intégrer STEP3-VL-10B dans vos applications, l'API offre une flexibilité maximale. Elle est compatible avec l'API OpenAI, facilitant la transition pour ceux qui l'utilisent déjà.

Exemple d'appel API pour la compréhension d'image :


curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Step3-VL-10B",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "image_url",
            "image_url": {
              "url": "https://votre-image.jpg"
            }
          },
          {
            "type": "text",
            "text": "Décris le contenu principal de cette image."
          }
        ]
      }
    ],
    "max_tokens": 1024
  }'

Notez que le champ content accepte un tableau d'éléments, combinant texte et image.

3. Déploiement local : Contrôle total

Pour un contrôle complet, déployez le modèle sur votre propre serveur.


# Cloner le dépôt
git clone https://github.com/stepfun-ai/Step3-VL-10B
cd Step3-VL-10B

# Créer et activer un environnement virtuel
python -m venv venv
source venv/bin/activate

# Installer les dépendances
pip install -r requirements.txt

# Lancer le service WebUI
python webui.py --host 0.0.0.0 --port 7860

# Ou lancer le serveur API
python -m vllm.entrypoints.openai.api_server \
  --model stepfun-ai/Step3-VL-10B \
  --served-model-name Step3-VL-10B \
  --port 8000

Application 1 : Localisation intelligente de clauses dans les contrats juridiques

L'analyse des contrats est un défi majeur pour les juristes. STEP3-VL-10B permet d'identifier rapidement les clauses pertinentes.

Comparaison des approches

Critère Méthode traditionnelle Méthode assistée par IA
Temps 1-2 heures pour 30-50 pages Quelques minutes
Précision Dépend de l'expérience, risque d'omission Réduit les omissions, analyse systématique

Mise en œuvre

Étape 1 : Conversion du PDF en images


import fitz  # PyMuPDF
from PIL import Image

def pdf_vers_images(chemin_pdf, dossier_sortie):
    doc = fitz.open(chemin_pdf)
    chemins_images = []
    for num_page in range(len(doc)):
        page = doc.load_page(num_page)
        pixmap = page.get_pixmap(dpi=150)
        chemin_image = f"{dossier_sortie}/page_{num_page+1}.png"
        pixmap.save(chemin_image)
        chemins_images.append(chemin_image)
    doc.close()
    return chemins_images

# Exemple
images_contrat = pdf_vers_images("contrat_achat.pdf", "./pages_contrat")

Étape 2 : Analyse par le modèle


import requests
import base64
import json

def analyser_page_contrat(chemin_image, question):
    with open(chemin_image, "rb") as fichier_image:
        image_base64 = base64.b64encode(fichier_image.read()).decode('utf-8')

    url = "http://localhost:8000/v1/chat/completions"
    headers = {"Content-Type": "application/json"}
    payload = {
        "model": "Step3-VL-10B",
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {"url": f"data:image/png;base64,{image_base64}"}
                    },
                    {
                        "type": "text",
                        "text": f"{question}\nIndique la section concernée et résume le contenu."
                    }
                ]
            }
        ],
        "max_tokens": 1024
    }
    response = requests.post(url, headers=headers, data=json.dumps(payload))
    return response.json()

clauses_paiement = []
for i, chemin in enumerate(images_contrat):
    resultat = analyser_page_contrat(chemin, "Y a-t-il des clauses relatives au paiement dans cette page ?")
    if "clause relative au paiement" in resultat['choices'][0]['message']['content'].lower():
        clauses_paiement.append({
            "page": i + 1,
            "contenu": resultat['choices'][0]['message']['content']
        })

Étape 3 : Génération du rapport


from datetime import datetime

def generer_rapport_contrat(clauses, nom_contrat):
    rapport = f"# Rapport d'analyse des clauses de paiement du contrat '{nom_contrat}'\n\n"
    rapport += f"Date d'analyse : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
    rapport += f"Nombre de clauses trouvées : {len(clauses)}\n\n"
    
    for i, clause in enumerate(clauses, 1):
        rapport += f"## {i}. Page {clause['page']}\n{clause['contenu']}\n---\n\n"
    
    return rapport

# Génération et sauvegarde du rapport
rapport = generer_rapport_contrat(clauses_paiement, "Contrat d'achat")
with open("rapport_analyse_contrat.md", "w", encoding="utf-8") as f:
    f.write(rapport)

Le modèle a permis de localiser rapidement les clauses relatives aux modalités, délais et pénalités de paiement dans un contrat de 15 pages.

Application 2 : Correction automatisée des examens scolaires

La correction des copies, particulièrement pour les questions ouvertes et les calculs, représente une charge de travail considérable pour les enseignants. STEP3-VL-10B peut automatiser une partie de ce processus.

Défis de la correction manuscrite

  • Variabilité de l'écriture
  • Format des réponses non standardisé
  • Nécessité de comprendre et d'évaluer le contenu
  • Calcul manuel des notes

Système de correction intelligent

Étape 1 : Définition du modèle d'examen


{
  "nom_examen": "Mathématiques 7ème année",
  "score_total": 100,
  "sections": [
    {
      "nom": "QCM",
      "questions": [
        {"numero": 1, "contenu": "Calculez 3 * (4 + 5) = ?", "type": "choix_unique", "reponse_correcte": "A", "score": 5},
        {"numero": 2, "contenu": "Quel est le plus petit nombre ?", "type": "choix_unique", "reponse_correcte": "D", "score": 5}
      ]
    },
    {
      "nom": "Calculs",
      "questions": [
        {"numero": 11, "contenu": "Résolvez 2x + 5 = 15", "type": "calcul", "score_total": 5}
      ]
    }
  ]
}

Étape 2 : Prétraitement des images de copies

Amélioration de la lisibilité des écritures manuscrites via des techniques comme la binarisation et le débruitage.

Étape 3 : Correction des QCM

Identification de l'option choisie par l'élève.


def corriger_qcm(chemin_image_reponse, info_question):
    prompt = f"Image de la réponse à la question {info_question['numero']}. Question: {info_question['contenu']}. Identifiez l'option choisie (A, B, C, D)."
    reponse_modele = analyser_page_contrat(chemin_image_reponse, prompt)
    reponse_eleve = extraire_reponse(reponse_modele)
    
    correct = info_question['reponse_correcte']
    est_correct = (reponse_eleve == correct)
    
    return {
        "numero_question": info_question['numero'],
        "reponse_correcte": correct,
        "reponse_eleve": reponse_eleve,
        "est_correct": est_correct,
        "score": info_question['score'] if est_correct else 0
    }

Étape 4 : Correction des calculs

Analyse des étapes de résolution et de la réponse finale.


def corriger_calcul(chemin_image_reponse, info_question):
    prompt = f"""Analysez la résolution de ce problème de calcul.
    
    Question : {info_question['contenu']}
    
    Veuillez :
    1. Identifier les étapes de la solution.
    2. Vérifier la correction de chaque étape.
    3. Évaluer la réponse finale.
    4. Identifier le type d'erreur si présente.
    
    Répondez en JSON avec: étapes (contenu, correction, score_etape), réponse_finale_correcte, score_total, commentaires."""
    
    reponse_modele = analyser_page_contrat(chemin_image_reponse, prompt)
    try:
        resultat = json.loads(reponse_modele)
        return resultat
    except json.JSONDecodeError:
        return parse_reponse_texte(reponse_modele, info_question)

Étape 5 : Génération du rapport de notation

Création d'un rapport détaillé incluant les scores, les erreurs et les suggestions d'amélioration.

Les tests ont montré une amélioration significative du temps de correction, avec une vérification humaine ciblée sur les points litigiexu.

Autres applications potentielles

  • Analyse de rapports médicaux : Extraction d'informations clés à partir d'images et de textes médicaux.
  • Analyse de bilans financiers : Identification des indicateurs financiers clés dans les rapports.
  • Compréhension de plans d'ingénierie : Extraction de dimensions et de spécifications techniques.
  • Traitement de documents quotidiens : Saisie automatique de factures, gestion de cartes de visite, etc.

Conclusion

STEP3-VL-10B offre des gains d'efficacité considérables en transformant les tâches de traitement visuel de documents. Il agit comme une "seconde paire d'yeux" pour les professionnels, améliorant la précision et réduisant les coûts.

Pour les entreprises, cet outil représente une opportunité de :

  • Accélérer les processus
  • Garantir la fiabilité des données
  • Étendre les capacités d'analyse
  • Réduire les coûts opérationnels

Il est essentiel de considérer l'IA comme un outil d'aide à la décision, et non comme un substitut complet au jugement humain. La confidentialité des données doit également être une priorité.

L'avenir des modèles multimodaux comme STEP3-VL-10B promet des améliorations continues en précision, vitessse et applicabilité, ouvrant la voie à une automatisation accrue dans de nombreux secteurs.

Étiquettes: IA multimodale traitement visuel de documents STEP3-VL-10B analyse de contrats correction automatique

Publié le 29 juillet à 20h48