In diesem Leitfaden über die Mischung von Experten werden Sie lernen:
- Was MoE ist und wie es sich von traditionellen Modellen unterscheidet
- Vorteile der Verwendung
- Eine Schritt-für-Schritt-Anleitung für die Umsetzung
Lasst uns eintauchen!
Was ist MoE?
Ein MoE(Mixture of Experts) ist eine Architektur des maschinellen Lernens, die mehrere spezialisierte Teilmodelle – die “Experten” – innerhalb eines größeren Systems kombiniert. Jeder Experte lernt, verschiedene Aspekte einer Aufgabe oder bestimmte Datentypen zu verarbeiten.
Eine grundlegende Komponente dieser Architektur ist das “Gating-Netzwerk” oder der “Router”. Diese Komponente entscheidet, welcher Experte bzw. welche Kombination von Experten eine bestimmte Eingabe verarbeiten soll. Das Gating-Netzwerk weist den Ergebnissen der einzelnen Experten auch Gewichte zu. Die Gewichte sind wie Punkte, da sie zeigen, wie viel Einfluss das Ergebnis eines jeden Experten haben sollte.
Vereinfacht ausgedrückt, verwendet das Gating-Netzwerk Gewichte, um den Beitrag jedes Experten zur endgültigen Antwort anzupassen. Dabei berücksichtigt es die spezifischen Merkmale der Eingabe. Dadurch kann das System viele Arten von Daten besser verarbeiten als ein einzelnes Modell.
Unterschiede zwischen MoE und traditionellen dichten Modellen
Im Zusammenhang mit neuronalen Netzen arbeitet ein traditionelles dichtes Modell anders als MoE. Für jede Information, die man ihm zuführt, verwendet das dichte Modell alle seine internen Parameter, um Berechnungen durchzuführen. Somit wird jeder Teil seines Rechenapparats für jede Eingabe genutzt.
Der wichtigste Punkt ist, dass bei dichten Modellen alle Teile für jede Aufgabe aktiviert werden. Dies steht im Gegensatz zu MoE, bei dem nur relevante Teilbereiche von Experten aktiviert werden.
Nachfolgend sind die wichtigsten Unterschiede zwischen Moe und dichten Modellen aufgeführt:
- Verwendung der Parameter:
- Dichtes Modell: Für jede beliebige Eingabe verwendet das Modell alle Parameter für die Berechnung.
- MoE-Modell: Für jede beliebige Eingabe verwendet das Modell nur die Parameter des/der ausgewählten Experten und des Gating-Netzwerks. Wenn ein MoE-Modell also eine große Anzahl von Parametern hat, aktiviert es nur einen Bruchteil dieser Parameter für jede einzelne Berechnung.
- Berechnungsaufwand:
- Dichtes Modell: Der Rechenaufwand für eine dichte Schicht ist bei jeder Eingabe gleich, da immer alle Teile der Schicht beteiligt sind.
- MoE-Modell: Die Rechenkosten für die Verarbeitung einer Eingabe durch eine MoE-Schicht können niedriger sein als bei einer dichten Schicht mit vergleichbarer Gesamtparametergröße. Das liegt daran, dass nur eine Teilmenge des Modells – die ausgewählten Experten – die Arbeit verrichten. Dadurch können MoE-Modelle auf eine viel größere Anzahl von Gesamtparametern skaliert werden, ohne dass die Rechenkosten für jede einzelne Eingabe proportional ansteigen.
- Spezialisierung und Lernen:
- Dichtes Modell: Alle Teile einer dichten Schicht lernen, einen Beitrag zur Verarbeitung aller Arten von Eingaben zu leisten, auf die sie treffen.
- MoE-Modell: Verschiedene Expertennetzwerke können lernen, sich zu spezialisieren. So kann ein Experte beispielsweise gut darin sein, Fragen zur Geschichte zu bearbeiten, während ein anderer auf wissenschaftliche Konzepte spezialisiert ist. Das Gating-Netzwerk lernt, die Art der Eingabe zu erkennen und sie an die am besten geeigneten Experten weiterzuleiten. Dies kann zu einer differenzierteren und effektiveren Verarbeitung führen.
Vorteile der Architektur der Expertenmischung
Die MoE-Architektur ist in der modernen KI von großer Bedeutung, insbesondere wenn es um LLMs geht. Der Grund dafür ist, dass sie eine Möglichkeit bietet, die Kapazität eines Modells, d. h. seine Fähigkeit, Informationen zu lernen und zu speichern, zu erhöhen, ohne dass die Rechenkosten während der Nutzung proportional ansteigen.
Zu den wichtigsten Vorteilen von MoE in der KI gehören:
- Geringere Inferenzlatenz: MoE-Modelle können die für die Erstellung einer Vorhersage oder einer Ausgabe benötigte Zeit, die sogenannte Inferenzlatenz, verringern. Dies geschieht dank der Fähigkeit, nur die relevantesten Experten zu aktivieren.
- Verbesserte Skalierbarkeit und Effizienz des Trainings: Sie können die Parallelität der MoE-Architekturen beim KI-Trainingsprozess nutzen. Verschiedene Experten können gleichzeitig für verschiedene Datenuntermengen oder spezialisierte Aufgaben trainiert werden. Dies kann zu einer schnelleren Konvergenz und Trainingszeit führen.
- Verbesserte Modularität und Wartbarkeit der Modelle: Die diskrete Natur der Experten-Teilnetze erleichtert einen modularen Ansatz für die Modellentwicklung und -pflege. Einzelne Experten können unabhängig voneinander aktualisiert, umgeschult oder durch verbesserte Versionen ersetzt werden, ohne dass eine vollständige Umschulung des gesamten Modells erforderlich ist. Dies vereinfacht die Integration von neuem Wissen oder neuen Fähigkeiten und ermöglicht gezieltere Eingriffe, wenn die Leistung eines bestimmten Experten nachlässt.
- Potenzial für bessere Interpretierbarkeit: Die Spezialisierung der Experten kann einen besseren Einblick in die Entscheidungsprozesse des Modells bieten. Die Analyse, welche Experten bei bestimmten Eingaben durchgängig aktiviert werden, kann Aufschluss darüber geben, wie das Modell gelernt hat, den Problemraum aufzuteilen und Relevanz zuzuordnen. Diese Eigenschaft bietet eine Möglichkeit, das Verhalten komplexer Modelle im Vergleich zu monolithischen, dichten Netzwerken besser zu verstehen.
- Höhere Energieeffizienz im großen Maßstab: MoE-basierte Modelle können im Vergleich zu herkömmlichen dichten Modellen einen geringeren Energieverbrauch pro Abfrage erreichen. Dies ist auf die spärliche Aktivierung von Parametern während der Inferenz zurückzuführen, da sie nur einen Bruchteil der verfügbaren Parameter pro Eingabe verwenden.
Wie man MoE implementiert: Eine Schritt-für-Schritt-Anleitung
In diesem Abschnitt des Tutorials lernen Sie, wie Sie MoE verwenden. Sie werden insbesondere einen Datensatz mit Sportnachrichten verwenden. Die MoE wird zwei Experten einsetzen, die auf den folgenden Modellen basieren:
sshleifer/distilbart-cnn-6-6
: Um den Inhalt der einzelnen Nachrichten zusammenzufassen.distilbert-base-uncased-finetuned-sst-2-english
: Zur Berechnung der Stimmung der einzelnen Nachrichten. In der Sentiment-Analyse bezieht sich “Sentiment” auf den emotionalen Ton, die Meinung oder die Einstellung, die in einem Text ausgedrückt wird. Die Ausgabe kann sein:- Positiv: Drückt eine positive Meinung, Glück oder Zufriedenheit aus.
- Negativ: Drückt ungünstige Meinungen, Traurigkeit, Ärger oder Unzufriedenheit aus.
- Neutral: Äußert keine starken Gefühle oder Meinungen, oft sachlich.
Am Ende des Prozesses wird jede Nachricht in einer JSON-Datei gespeichert, die Folgendes enthält:
- Die ID, die Überschrift und die URL.
- Die Zusammenfassung des Inhalts.
- Die Stimmung des Inhalts mit dem Vertrauenswert.
Der Datensatz mit den Nachrichten kann über die Web Scraper APIs von Bright Data abgerufen werden, spezielle Scraping-Endpunkte zum Abrufen strukturierter Webdaten von über 100 Domains in Echtzeit.
Der Datensatz, der die JSON-Eingabedaten enthält, kann mit dem Code in unserem Leitfaden “Vektordatenbanken verstehen: Der Motor hinter moderner KI“. Beziehen Sie sich insbesondere auf Schritt 1 im Kapitel “Praktische Integration: Eine schrittweise Anleitung”.
Der JSON-Eingabedatensatz – news-data.json - enthält
ein Array von Nachrichten (siehe unten):
[
{
"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...
]
Folgen Sie den nachstehenden Anweisungen und erstellen Sie Ihr MoE-Beispiel!
Voraussetzungen und Abhängigkeiten
Um dieses Tutorial zu wiederholen, müssen Sie Python 3.10.1 oder höher auf Ihrem Rechner installiert haben.
Angenommen, Sie nennen den Hauptordner Ihres Projekts moe_project/
. Am Ende dieses Schrittes hat der Ordner die folgende Struktur:
moe_project/
├── venv/
├── news-data.json
└── moe_analysis.py
Wo:
venv/
enthält die virtuelle Python-Umgebung.news-data.json
ist die JSON-Eingabedatei mit den Nachrichtendaten, die Sie mit der Web Scraper API erfasst haben.moe_analysis.py
ist die Python-Datei, die die Kodierungslogik enthält.
Sie können das Verzeichnis venv/
virtual environment wie folgt erstellen:
python -m venv venv
Um es zu aktivieren, führen Sie unter Windows aus:
venvScriptsactivate
Unter macOS und Linux führen Sie die gleiche Funktion aus:
source venv/bin/activate
In der aktivierten virtuellen Umgebung installieren Sie die Abhängigkeiten mit:
pip install transformers torch
Diese Bibliotheken sind:
transformers
: Hugging Face’s Bibliothek für moderne maschinelle Lernmodelle.Fackel
: PyTorch, ein Open-Source-Framework für maschinelles Lernen.
Schritt 1: Einrichtung und Konfiguration
Initialisieren Sie die Datei moe_analysis.py
, indem Sie die erforderlichen Bibliotheken importieren und einige Konstanten einrichten:
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"
Dieser Code definiert:
- Der Name der JSON-Eingabedatei mit den gescrapten Nachrichten.
- Die Modelle für die Experten.
Perfekt! Sie haben alles, was Sie brauchen, um mit MoE in Python zu beginnen.
Schritt #2: Definieren Sie den Experten für Nachrichtenzusammenfassung
In diesem Schritt wird eine Klasse erstellt, die die Funktionalität des Experten für die Zusammenfassung der Nachrichten kapselt:
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 }
Der obige Code:
- Initialisiert die Zusammenfassungspipeline mit der Methode
pipeline()
aus Hugging Face. - Legt fest, wie der Verdichtungsexperte einen Artikel mit der Methode
analyze()
zu bearbeiten hat.
Sehr gut! Sie haben gerade den ersten Experten in der MoE-Architektur geschaffen, der sich um die Zusammenfassung der Nachrichten kümmert.
Schritt #3: Definieren Sie den Experten für Stimmungsanalyse
Definieren Sie, ähnlich wie der Zusammenfassungsexperte, eine spezialisierte Klasse für die Durchführung von Stimmungsanalysen in den Nachrichten:
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 }
Dieser Ausschnitt:
- Initialisiert die Sentiment-Analyse-Pipeline mit der Methode
pipeline()
. - Definiert die Methode
analyze()
zur Durchführung der Stimmungsanalyse. Sie gibt auch das Stimmungslabel – negativ oder positiv – und den Vertrauenswert zurück.
Sehr gut! Sie haben nun einen weiteren Experten, der die Stimmung des Textes in den Nachrichten berechnet und ausdrückt.
Schritt #4: Implementierung des Gating-Netzwerks
Nun müssen Sie die Logik hinter dem Gating-Netzwerk definieren, um die Experten weiterzuleiten:
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
In dieser Implementierung ist das Gating-Netzwerk einfach. Es verwendet immer beide Experten für jede Nachricht, allerdings nacheinander:
- Sie fasst den Text zusammen.
- Sie berechnet das Sentiment.
Hinweis: Das Gating-Netzwerk ist in diesem Beispiel recht einfach. Hätte man dasselbe Ziel mit einem einzigen, größeren Modell erreichen wollen, wäre deutlich mehr Rechenarbeit erforderlich gewesen. Im Gegensatz dazu werden die beiden Experten nur für die Aufgaben herangezogen, die für sie relevant sind. Dies macht es zu einer einfachen, aber effektiven Anwendung der Mixture of Experts Architektur.
In anderen Szenarien könnte dieser Teil des Prozesses verbessert werden, indem ein ML-Modell trainiert wird, um zu lernen, wie und wann ein bestimmter Experte zu aktivieren ist. Dies würde es dem Gating-Netzwerk ermöglichen, dynamisch zu reagieren.
Fantastisch! Die Logik des Gating-Netzwerks ist eingerichtet und betriebsbereit.
Schritt Nr. 5: Hauptorganisationslogik für die Verarbeitung von Nachrichtendaten
Definieren Sie die Kernfunktion, die den gesamten durch die folgende Aufgabe definierten Workflow verwaltet:
- Laden Sie den JSON-Datensatz.
- Initialisieren Sie die beiden Experten.
- Iterieren Sie durch die Nachrichten.
- Leiten Sie sie an die ausgewählten Experten weiter.
- Sammeln Sie die Ergebnisse.
Sie können dies mit folgendem Code tun:
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
In diesem Ausschnitt:
- Die
for-Schleife
iteriert über alle geladenen Nachrichten. - Der
try-except-Block
führt die Analyse durch und verwaltet die Fehler, die auftreten können. In diesem Fall sind die Fehler, die auftreten können, hauptsächlich auf die Parametermax_length
undmax_chars_for_sentiment
zurückzuführen, die in den vorherigen Funktionen definiert wurden. Da nicht alle abgerufenen Inhalte die gleiche Länge haben, ist das Fehlermanagement von grundlegender Bedeutung für eine effiziente Behandlung von Ausnahmen.
Jetzt geht’s los! Sie haben die Orchestrierungsfunktion des gesamten Prozesses definiert.
Schritt #6: Starten Sie die Verarbeitungsfunktion
Als letzten Teil des Skripts müssen Sie die Hauptverarbeitungsfunktion ausführen und dann die Analysen wie folgt in einer JSON-Ausgabedatei speichern:
# 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)
Im obigen Code:
- Die Variable
final_analyses
ruft die Funktion zur Verarbeitung der Daten mit MoE auf. - Die analysierten Daten werden in der Ausgabedatei
analyzed_news_data.json
gespeichert.
Et voilà! Das gesamte Skript wird fertiggestellt, die Daten werden analysiert und gespeichert.
Schritt Nr. 7: Alles zusammenfügen und den Code ausführen
Im Folgenden ist der Inhalt der Datei moe_analysis.py
aufgeführt:
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)
Großartig! Mit etwa 130 Zeilen Code haben Sie soeben Ihr erstes MoE-Projekt abgeschlossen.
Führen Sie den Code mit dem folgenden Befehl aus:
python moe_analysis.py
Die Ausgabe im Terminal sollte enthalten:
# 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 ---
Wenn die Ausführung abgeschlossen ist, wird im Projektordner eine Ausgabedatei analyzed_news_data.json
angezeigt. Öffnen Sie sie und fokussieren Sie auf eine der Nachrichten. Das Feld analyses
enthält die von den beiden Experten erstellte Zusammenfassung und die Ergebnisse der Stimmungsanalyse:
Wie Sie sehen können, hat der MoE-Ansatz:
- Fasst den Inhalt des Artikels zusammen und gibt ihn in der
Zusammenfassung
wieder. - Definiert eine positive Stimmung mit einem Vertrauen von 0,99.
Auftrag erfüllt!
Schlussfolgerung
In diesem Artikel haben Sie die MoE kennengelernt und erfahren, wie sie in einem realen Szenario Schritt für Schritt umgesetzt werden kann.
Wenn Sie weitere MoE-Szenarien erforschen möchten und dazu frische Daten benötigen, bietet Bright Data eine Reihe leistungsstarker Tools und Services, die darauf ausgelegt sind, aktualisierte Echtzeitdaten von Webseiten abzurufen und dabei die Hindernisse des Scrapings zu überwinden.
Diese Lösungen umfassen:
- Web Unlocker: Eine API, die Anti-Scraping-Schutzmaßnahmen umgeht und mit minimalem Aufwand sauberes HTML von jeder Webseite liefert.
- Scraping-Browser: Ein Cloud-basierter, kontrollierbarer Browser mit JavaScript-Rendering. Er verwaltet automatisch CAPTCHAs, Browser-Fingerprinting, Wiederholungsversuche und mehr für Sie.
- Web Scraper APIs: Endpunkte für den programmatischen Zugriff auf strukturierte Webdaten aus Dutzenden von beliebten Domains.
Weitere Szenarien des maschinellen Lernens finden Sie auch in unserem KI-Hub.
Melden Sie sich jetzt bei Bright Data an und testen Sie unsere Scraping-Lösungen kostenlos!