Dans ce guide sur le mélange d’experts, vous apprendrez :
- Qu’est-ce qu’un MdE et en quoi diffère-t-il des modèles traditionnels ?
- Avantages de son utilisation
- Un tutoriel étape par étape sur la façon de le mettre en œuvre
Plongeons dans l’aventure !
Qu’est-ce que la MdE ?
Un MoE(Mixture of Experts) est une architecture d’apprentissage automatique qui combine plusieurs sous-modèles spécialisés – les “experts” – au sein d’un système plus vaste. Chaque expert apprend à gérer différents aspects d’une tâche ou des types de données distincts.
Un élément fondamental de cette architecture est le “réseau de contrôle” ou “routeur”. Ce composant décide quel expert, ou quelle combinaison d’experts, doit traiter une entrée spécifique. Le réseau de contrôle attribue également des poids aux résultats de chaque expert. Les pondérations sont comparables à des scores, car elles indiquent l’influence que devrait avoir le résultat de chaque expert.
En termes simples, le réseau de contrôle utilise des poids pour ajuster la contribution de chaque expert à la réponse finale. Pour ce faire, il prend en compte les caractéristiques spécifiques de l’entrée. Cela permet au système de traiter de nombreux types de données mieux qu’un modèle unique ne pourrait le faire.
Différences entre les modèles MoE et les modèles denses traditionnels
Dans le contexte des réseaux neuronaux, un modèle dense traditionnel fonctionne différemment de MoE. Pour tout élément d’information que vous lui fournissez, le modèle dense utilise tous ses paramètres internes pour effectuer des calculs. Ainsi, chaque partie de son mécanisme de calcul est sollicitée pour chaque entrée.
L’essentiel est que, dans les modèles denses, toutes les parties sont mobilisées pour chaque tâche. Cela contraste avec le modèle MoE, qui n’active que les sous-sections expertes pertinentes.
Voici les principales différences entre les modèles Moe et dense :
- Utilisation des paramètres:
- Modèle dense: Pour toute entrée donnée, le modèle utilise tous les paramètres dans le calcul.
- Modèle MoE: Pour toute entrée donnée, le modèle n’utilise que les paramètres de l’expert ou des experts sélectionnés et du réseau de contrôle. Ainsi, si un modèle MoE a un grand nombre de paramètres, il n’active qu’une fraction de ces paramètres pour chaque calcul.
- Coût de calcul:
- Modèle dense: La quantité de calcul pour une couche dense est fixe pour chaque entrée, car toutes ses parties sont toujours engagées.
- Modèle MoE: Le coût de calcul pour le traitement d’une entrée par une couche MoE peut être inférieur à celui d’une couche dense dont la taille totale des paramètres est comparable. En effet, seul un sous-ensemble du modèle – les experts choisis – effectue le travail. Cela permet aux modèles MoE de s’adapter à un nombre beaucoup plus important de paramètres totaux sans augmentation proportionnelle du coût de calcul pour chaque entrée individuelle.
- Spécialisation et apprentissage :
- Modèle dense: Toutes les parties d’une couche dense apprennent à contribuer au traitement de tous les types d’entrées qu’elles rencontrent.
- Modèle MoE: Différents réseaux d’experts peuvent apprendre à se spécialiser. Par exemple, un expert peut devenir compétent pour traiter des questions sur l’histoire, tandis qu’un autre se spécialise dans les concepts scientifiques. Le réseau de contrôle apprend à identifier le type d’entrée et à l’acheminer vers les experts les plus appropriés. Cela peut conduire à un traitement plus nuancé et plus efficace.
Avantages de l’architecture mixte d’experts
L’architecture MoE est très pertinente dans l’IA moderne, en particulier lorsqu’il s’agit de LLM. En effet, elle permet d’augmenter la capacité d’un modèle, c’est-à-dire sa capacité à apprendre et à stocker des informations, sans augmentation proportionnelle des coûts de calcul au cours de son utilisation.
Les principaux avantages des ministères de l’environnement dans le domaine de l’intelligence artificielle sont les suivants :
- Réduction du temps de latence de l’inférence: Les modèles MoE peuvent réduire le temps nécessaire à la génération d’une prédiction ou d’un résultat, ce que l’on appelle la latence d’inférence. Cela est possible grâce à leur capacité à n’activer que les experts les plus pertinents.
- Amélioration de l’évolutivité et de l’efficacité de la formation: Vous pouvez tirer parti du parallélisme des architectures MoE au cours du processus de formation à l’IA. Différents experts peuvent être formés simultanément sur divers sous-ensembles de données ou tâches spécialisées. Cela permet d’accélérer la convergence et le temps de formation.
- Amélioration de la modularité et de la maintenabilité des modèles: La nature discrète des sous-réseaux d’experts facilite une approche modulaire du développement et de la maintenance du modèle. Les experts individuels peuvent être indépendamment mis à jour, recyclés ou remplacés par des versions améliorées sans nécessiter un recyclage complet de l’ensemble du modèle. Cela simplifie l’intégration de nouvelles connaissances ou capacités et permet des interventions plus ciblées en cas de dégradation des performances d’un expert spécifique.
- Potentiel d’amélioration de l’interprétabilité: La spécialisation des experts peut permettre de mieux comprendre les processus décisionnels du modèle. L’analyse des experts qui sont systématiquement activés pour des entrées spécifiques peut fournir des indices sur la manière dont le modèle a appris à partitionner l’espace du problème et à attribuer la pertinence. Cette caractéristique offre un moyen potentiel de mieux comprendre les comportements des modèles complexes par rapport aux réseaux denses monolithiques.
- Une meilleure efficacité énergétique à grande échelle: Les modèles basés sur les MoE peuvent réduire la consommation d’énergie par requête par rapport aux modèles denses traditionnels. Cela est dû à l’activation éparse des paramètres pendant l’inférence, car ils n’utilisent qu’une fraction des paramètres disponibles par entrée.
Comment mettre en œuvre les MdE : Un guide étape par étape
Dans cette section du tutoriel, vous apprendrez à utiliser MoE. En particulier, vous utiliserez un ensemble de données contenant des informations sportives. La MoE s’appuiera sur deux experts basés sur les modèles suivants :
sshleifer/distilbart-cnn-6-6
: Pour résumer le contenu de chaque nouvelle.distilbert-base-uncased-finetuned-sst-2-french
: Calculer le sentiment de chaque nouvelle. Dans l’analyse des sentiments, le terme “sentiment” fait référence au ton émotionnel, à l’opinion ou à l’attitude exprimée dans un texte. Le résultat peut être :- Positif : Exprime des opinions favorables, le bonheur ou la satisfaction.
- Négatif : Exprime des opinions défavorables, de la tristesse, de la colère ou de l’insatisfaction.
- Neutre : N’exprime pas d’émotion ou d’opinion forte, souvent factuelle.
À la fin du processus, chaque nouvelle sera sauvegardée dans un fichier JSON contenant :
- L’identifiant, le titre et l’URL.
- Le résumé du contenu.
- Le sentiment du contenu avec la note de confiance.
L’ensemble de données contenant les actualités peut être récupéré à l’aide des API Web Scraper de Bright Data, des points d’extrémité spécialisés dans le scraping pour récupérer des données web structurées à partir de plus de 100 domaines en temps réel.
L’ensemble de données contenant les données JSON d’entrée peut être généré à l’aide du code figurant dans notre guide “Comprendre les bases de données vectorielles : Le moteur de l’IA moderne“. Plus précisément, reportez-vous à l’étape 1 du chapitre “Intégration pratique : Un guide pas à pas”.
L’ensemble de données JSON d’entrée, appelé news-data.json, contient
un tableau d’actualités comme ci-dessous :
[
{
"id": "c787dk9923ro",
"url": "https://www.bbc.com/sport/tennis/articles/c787dk9923ro",
"author": "BBC",
"headline": "Wimbledon plans to increase 'Henman Hill' capacity and accessibility",
"topics": [
"Tennis"
],
"publication_date": "2025-04-03T11:28:36.326Z",
"content": "Wimbledon is planning to renovate its iconic 'Henman Hill' and increase capacity for the tournament's 150th anniversary. Thousands of fans have watched action on a big screen from the grass slope which is open to supporters without show-court tickets. The proposed revamp - which has not yet been approved - would increase the hill's capacity by 20% in time for the 2027 event and increase accessibility. It is the latest change planned for the All England Club, after a 39-court expansion was approved last year. Advertisement "It's all about enhancing this whole area, obviously it's become extremely popular but accessibility is difficult for everyone," said four-time Wimbledon semi-finalist Tim Henman, after whom the hill was named. "We are always looking to enhance wherever we are on the estate. This is going to be an exciting project."",
"videos": [],
"images": [
{
"image_url": "https://ichef.bbci.co.uk/ace/branded_sport/1200/cpsprodpb/31f9/live/0f5b2090-106f-11f0-b72e-6314f702e779.jpg",
"image_description": "Main image"
},
{
"image_url": "https://ichef.bbci.co.uk/ace/standard/2560/cpsprodpb/31f9/live/0f5b2090-106f-11f0-b72e-6314f702e779.jpg",
"image_description": "A render of planned improvements to Wimbledon's Henman Hill"
}
],
"related_articles": [
{
"article_title": "Live scores, results and order of playLive scores, results and order of play",
"article_url": "https://www.bbc.com/sport/tennis/scores-and-schedule"
},
{
"article_title": "Get tennis news sent straight to your phoneGet tennis news sent straight to your phone",
"article_url": "https://www.bbc.com/sport/articles/cl5q9dk9jl3o"
}
],
"keyword": null,
"timestamp": "2025-05-19T15:03:16.568Z",
"input": {
"url": "https://www.bbc.com/sport/tennis/articles/c787dk9923ro",
"keyword": ""
}
},
// omitted for brevity...
]
Suivez les instructions ci-dessous et créez votre exemple de MoE !
Conditions préalables et dépendances
Pour reproduire ce tutoriel, vous devez avoir installé Python 3.10.1 ou une version plus récente sur votre machine.
Supposons que vous appeliez le dossier principal de votre projet moe_project/.
À la fin de cette étape, le dossier aura la structure suivante :
moe_project/
├── venv/
├── news-data.json
└── moe_analysis.py
Où ?
venv/
contient l’environnement virtuel Python.news-data.json
est le fichier JSON d’entrée contenant les données d’actualités que vous avez extraites à l’aide de l’API Web Scraper.moe_analysis.py
est le fichier Python qui contient la logique de codage.
Vous pouvez créer le répertoire de l ‘environnement virtuel venv/ de la
manière suivante :
python -m venv venv
Pour l’activer, sous Windows, exécutez :
venvScriptsactivate
De manière équivalente, sous macOS et Linux, exécutez :
source venv/bin/activate
Dans l’environnement virtuel activé, installez les dépendances avec :
pip install transformers torch
Ces bibliothèques sont les suivantes
transformers
: la bibliothèque de Hugging Face pour les modèles d’apprentissage automatique de pointe.torch
: PyTorch, un cadre d’apprentissage machine open-source.
Étape 1 : Mise en place et configuration
Initialiser le fichier moe_analysis.py
en important les bibliothèques nécessaires et en définissant quelques constantes :
import json
from transformers import pipeline
# Define the input JSON file
JSON_FILE = "news-data.json"
# Specify the model for generating summaries
SUMMARIZATION_MODEL = "sshleifer/distilbart-cnn-6-6"
# Specify the model for analyzing sentiment
SENTIMENT_MODEL = "distilbert-base-uncased-finetuned-sst-2-english"
Ce code définit :
- Le nom du fichier JSON d’entrée contenant les informations extraites.
- Les modèles à utiliser pour les experts.
C’est parfait ! Vous avez ce qu’il faut pour commencer à utiliser MoE en Python.
Étape 2 : Définir l’expert en résumé de nouvelles
Cette étape consiste à créer une classe qui encapsule la fonctionnalité de l’expert pour résumer les nouvelles :
class NewsSummarizationLLMExpert:
def __init__(self, model_name=SUMMARIZATION_MODEL):
self.model_name = model_name
self.summarizer = None
# Initialize the summarization pipeline
self.summarizer = pipeline(
"summarization",
model=self.model_name,
tokenizer=self.model_name,
)
def analyze(self, article_content, article_headline=""):
# Call the summarizer pipeline with the article content
summary_outputs = self.summarizer(
article_content,
max_length=300,
min_length=30,
do_sample=False
)
# Extract the summary text from the pipeline's output
summary = summary_outputs[0]["summary_text"]
return { "summary": summary }
Le code ci-dessus :
- Initialise le pipeline de résumé avec la méthode
pipeline()
de Hugging Face. - Définit comment l’expert en résumé doit traiter un article avec la méthode
analyze().
C’est bien ! Vous venez de créer le premier expert dans l’architecture du MdE qui se charge de résumer les nouvelles.
Étape 3 : Définir l’expert en analyse de sentiments
À l’instar de l’expert en résumé, définissez une classe spécialisée dans l’analyse des sentiments sur les nouvelles :
class SentimentAnalysisLLMExpert:
def __init__(self, model_name=SENTIMENT_MODEL):
self.model_name = model_name
self.sentiment_analyzer = None
# Initialize the sentiment analysis pipeline
self.sentiment_analyzer = pipeline(
"sentiment-analysis",
model=self.model_name,
tokenizer=self.model_name,
)
def analyze(self, article_content, article_headline=""):
# Define max tokens
max_chars_for_sentiment = 2000
# Truncate the content if it exceeds the maximum limit
truncated_content = article_content[:max_chars_for_sentiment]
# Call the sentiment analyzer pipeline
sentiment_outputs = self.sentiment_analyzer(truncated_content)
# Extract the sentiment label
label = sentiment_outputs[0]["label"]
# Extract the sentiment score
score = sentiment_outputs[0]["score"]
return { "sentiment_label": label, "sentiment_score": score }
Cet extrait :
- Initialise le pipeline d’analyse des sentiments avec la méthode
pipeline().
- Définit la méthode
analyze()
pour effectuer une analyse des sentiments. Elle renvoie également l’étiquette de sentiment – négative ou positive – et le score de confiance.
Très bien ! Vous disposez maintenant d’un autre expert qui calcule et exprime le sentiment du texte dans les nouvelles.
Étape n° 4 : Mise en œuvre du réseau de relais
Vous devez maintenant définir la logique qui sous-tend le réseau de portes pour acheminer les experts :
def route_to_experts(item_data, experts_registry):
chosen_experts = []
# Select the summarizer and sentiment analyzer
chosen_experts.append(experts_registry["summarizer"])
chosen_experts.append(experts_registry["sentiment_analyzer"])
return chosen_experts
Dans cette mise en œuvre, le réseau de contrôle est simple. Il fait toujours appel aux deux experts pour chaque nouvelle, mais de manière séquentielle :
- Il résume le texte.
- Il calcule le sentiment.
Remarque: dans cet exemple, le réseau de déclenchement est très simple. Par ailleurs, si vous aviez voulu atteindre le même objectif en utilisant un seul modèle plus grand, cela aurait nécessité beaucoup plus de calculs. En revanche, les deux experts ne sont sollicités que pour les tâches qui les concernent. Il s’agit donc d’une application simple mais efficace de l’architecture du mélange d’experts.
Dans d’autres scénarios, cette partie du processus pourrait être améliorée en formant un modèle ML pour apprendre comment et quand activer un expert spécifique. Cela permettrait au réseau de contrôle de réagir de manière dynamique.
Fantastique ! La logique du réseau de vannes est mise en place et prête à fonctionner.
Étape 5 : Logique d’orchestration principale pour le traitement des données d’actualité
Définir la fonction centrale qui gère l’ensemble du flux de travail défini par la tâche suivante :
- Charger l’ensemble de données JSON.
- Initialiser les deux experts.
- Parcourez les actualités.
- Les acheminer vers les experts choisis.
- Collecter les résultats.
Vous pouvez le faire avec le code suivant :
def process_news_json_with_moe(json_filepath):
# Open and load news items from the JSON file
with open(json_filepath, "r", encoding="utf-8") as f:
news_items = json.load(f)
# Create a dictionary to hold instances of expert classes
experts_registry = {
"summarizer": NewsSummarizationLLMExpert(),
"sentiment_analyzer": SentimentAnalysisLLMExpert()
}
# List to store the analysis results
all_results = []
# Iterate through each news item in the loaded data
for i, news_item in enumerate(news_items):
print(f"n--- Processing Article {i+1}/{len(news_items)} ---")
# Extract relevant data from the news item
id = news_item.get("id")
headline = news_item.get("headline")
content = news_item.get("content")
url = news_item.get("url")
# Print progress
print(f"ID: {id}, Headline: {headline[:70]}...")
# Use the gating network to determine the expert to use
active_experts = route_to_experts(news_item, experts_registry)
# Prepare a dictionary to store the analysis results
news_item_analysis_results = {
"id": id,
"headline": headline,
"url": url,
"analyses": {}
}
# Iterate through the experts and apply their analysis
for expert_instance in active_experts:
expert_name = expert_instance.__class__.__name__ # Get the class name of the expert
try:
# Call the expert's analyze method
analysis_result = expert_instance.analyze(article_content=content, article_headline=headline)
# Store the result under the expert's name
news_item_analysis_results["analyses"][expert_name] = analysis_result
except Exception as e:
# Handle any errors during analysis by a specific expert
print(f"Error during analysis with {expert_name}: {e}")
news_item_analysis_results["analyses"][expert_name] = { "error": str(e) }
# Add the current item's results to the overall list
all_results.append(news_item_analysis_results)
return all_results
Dans cet extrait :
- La boucle
for
itère sur toutes les nouvelles chargées. - Le bloc
try-except
effectue l’analyse et gère les erreurs qui peuvent survenir. Dans le cas présent, les erreurs qui peuvent se produire sont principalement dues aux paramètresmax_length
etmax_chars_for_sentiment
définis dans les fonctions précédentes. Étant donné que tous les contenus récupérés n’ont pas la même longueur, la gestion des erreurs est fondamentale pour traiter efficacement les exceptions.
Nous y voilà ! Vous avez défini la fonction d’orchestration de l’ensemble du processus.
Étape 6 : Lancer la fonction de traitement
La dernière partie du script consiste à exécuter la fonction de traitement principale et à enregistrer les analyses dans un fichier JSON comme suit :
# Call the main processing function with the input JSON file
final_analyses = process_news_json_with_moe(JSON_FILE)
print("nn--- MoE Analysis Complete ---")
# Write the final analysis results to a new JSON file
with open("analyzed_news_data.json", "w", encoding="utf-8") as f_out:
json.dump(final_analyses, f_out, indent=4, ensure_ascii=False)
Dans le code ci-dessus :
- La variable
final_analyses
appelle la fonction de traitement des données avec MoE. - Les données analysées sont stockées dans le fichier de sortie
analyzed_news_data.json
.
Et voilà ! L’ensemble du script est finalisé, les données sont analysées et sauvegardées.
Étape 7 : Assembler le tout et exécuter le code
Voici ce que le fichier moe_analysis.py
devrait maintenant contenir :
import json
from transformers import pipeline
# Define the input JSON file
JSON_FILE = "news-data.json"
# Specify the model for generating summaries
SUMMARIZATION_MODEL = "sshleifer/distilbart-cnn-6-6"
# Specify the model for analyzing sentiment
SENTIMENT_MODEL = "distilbert-base-uncased-finetuned-sst-2-english"
# Define a class representing an expert for news summarization
class NewsSummarizationLLMExpert:
def __init__(self, model_name=SUMMARIZATION_MODEL):
self.model_name = model_name
self.summarizer = None
# Initialize the summarization pipeline
self.summarizer = pipeline(
"summarization",
model=self.model_name,
tokenizer=self.model_name,
)
def analyze(self, article_content, article_headline=""):
# Call the summarizer pipeline with the article content
summary_outputs = self.summarizer(
article_content,
max_length=300,
min_length=30,
do_sample=False
)
# Extract the summary text from the pipeline's output
summary = summary_outputs[0]["summary_text"]
return { "summary": summary }
# Define a class representing an expert for sentiment analysis
class SentimentAnalysisLLMExpert:
def __init__(self, model_name=SENTIMENT_MODEL):
self.model_name = model_name
self.sentiment_analyzer = None
# Initialize the sentiment analysis pipeline
self.sentiment_analyzer = pipeline(
"sentiment-analysis",
model=self.model_name,
tokenizer=self.model_name,
)
def analyze(self, article_content, article_headline=""):
# Define max tokens
max_chars_for_sentiment = 2000
# Truncate the content if it exceeds the maximum limit
truncated_content = article_content[:max_chars_for_sentiment]
# Call the sentiment analyzer pipeline
sentiment_outputs = self.sentiment_analyzer(truncated_content)
# Extract the sentiment label
label = sentiment_outputs[0]["label"]
# Extract the sentiment score
score = sentiment_outputs[0]["score"]
return { "sentiment_label": label, "sentiment_score": score }
# Define a gating network
def route_to_experts(item_data, experts_registry):
chosen_experts = []
# Select the summarizer and sentiment analyzer
chosen_experts.append(experts_registry["summarizer"])
chosen_experts.append(experts_registry["sentiment_analyzer"])
return chosen_experts
# Main function to manage the orchestration process
def process_news_json_with_moe(json_filepath):
# Open and load news items from the JSON file
with open(json_filepath, "r", encoding="utf-8") as f:
news_items = json.load(f)
# Create a dictionary to hold instances of expert classes
experts_registry = {
"summarizer": NewsSummarizationLLMExpert(),
"sentiment_analyzer": SentimentAnalysisLLMExpert()
}
# List to store the analysis results
all_results = []
# Iterate through each news item in the loaded data
for i, news_item in enumerate(news_items):
print(f"n--- Processing Article {i+1}/{len(news_items)} ---")
# Extract relevant data from the news item
id = news_item.get("id")
headline = news_item.get("headline")
content = news_item.get("content")
url = news_item.get("url")
# Print progress
print(f"ID: {id}, Headline: {headline[:70]}...")
# Use the gating network to determine the expert to use
active_experts = route_to_experts(news_item, experts_registry)
# Prepare a dictionary to store the analysis results
news_item_analysis_results = {
"id": id,
"headline": headline,
"url": url,
"analyses": {}
}
# Iterate through the experts and apply their analysis
for expert_instance in active_experts:
expert_name = expert_instance.__class__.__name__ # Get the class name of the expert
try:
# Call the expert's analyze method
analysis_result = expert_instance.analyze(article_content=content, article_headline=headline)
# Store the result under the expert's name
news_item_analysis_results["analyses"][expert_name] = analysis_result
except Exception as e:
# Handle any errors during analysis by a specific expert
print(f"Error during analysis with {expert_name}: {e}")
news_item_analysis_results["analyses"][expert_name] = { "error": str(e) }
# Add the current item's results to the overall list
all_results.append(news_item_analysis_results)
return all_results
# Call the main processing function with the input JSON file
final_analyses = process_news_json_with_moe(JSON_FILE)
print("nn--- MoE Analysis Complete ---")
# Write the final analysis results to a new JSON file
with open("analyzed_news_data.json", "w", encoding="utf-8") as f_out:
json.dump(final_analyses, f_out, indent=4, ensure_ascii=False)
C’est très bien ! En environ 130 lignes de code, vous venez de réaliser votre premier projet MoE.
Exécutez le code avec la commande suivante :
python moe_analysis.py
La sortie dans le terminal doit contenir :
# Omitted for brevity...
--- Processing Article 6/10 ---
ID: cdrgdm4ye53o, Headline: Japanese Grand Prix: Lewis Hamilton says he has 'absolute 100% faith' ...
--- Processing Article 7/10 ---
ID: czed4jk7eeeo, Headline: F1 engines: A return to V10 or hybrid - what's the future?...
Error during analysis with NewsSummarizationLLMExpert: index out of range in self
--- Processing Article 8/10 ---
ID: cy700xne614o, Headline: Monte Carlo Masters: Novak Djokovic beaten as wait for 100th title con...
Error during analysis with NewsSummarizationLLMExpert: index out of range in self
# Omitted for brevity...
--- MoE Analysis Complete ---
Une fois l’exécution terminée, un fichier de sortie analyzed_news_data.json
apparaît dans le dossier du projet. Ouvrez-le et concentrez-vous sur l’une des actualités. Le champ ” analyses
” contient le résumé et les résultats de l’analyse des sentiments produits par les deux experts :
Comme vous pouvez le constater, l’approche du ministère de l’environnement a.. :
- Résumer le contenu de l’article et le présenter sous forme de
résumé
. - Il s’agit d’un sentiment positif avec un taux de confiance de 0,99.
Mission accomplie !
Conclusion
Dans cet article, vous avez appris ce qu’est la MoE et comment la mettre en œuvre dans un scénario réel à l’aide d’une section étape par étape.
Si vous souhaitez explorer d’autres scénarios de MoE et que vous avez besoin de données fraîches pour le faire, Bright Data propose une suite d’outils et de services puissants conçus pour récupérer des données actualisées en temps réel à partir de pages web tout en surmontant les obstacles liés au scraping.
Ces solutions comprennent
- Web Unlocker: Une API qui contourne les protections anti-scraping et fournit du HTML propre à partir de n’importe quelle page web avec un minimum d’effort.
- Navigateur de scraping: Un navigateur contrôlable basé sur le cloud avec un rendu JavaScript. Il gère automatiquement les CAPTCHA, l’empreinte digitale du navigateur, les tentatives, etc. pour vous.
- API de grattage du Web: Points d’extrémité pour l’accès programmatique à des données web structurées provenant de dizaines de domaines populaires.
Pour d’autres scénarios d’apprentissage automatique, explorez également notre hub AI.
Inscrivez-vous à Bright Data dès maintenant et commencez votre essai gratuit pour tester nos solutions de scraping !