Lerner
M. Schreiber
Zielstelle
NLP Specialist (Forschungs-Spinoff, Berlin)
Pfad-Berechnungs-Strategie
RG2.2-SEchte GDS-Dijkstra-Berechnung: Skill-Skill-Graph wird projiziert (Edges = Module, Gewicht = ECTS), Dijkstra findet ECTS-minimale Pfade von acquired zu missing Skills. Demonstriert Graph Data Science als Algorithmik-Plattform.
Erweiterte Optionen (Constraints)
Module
3
ECTS-Summe
24
Offen
0
Berechnungszeit
61 ms
Empfohlener Lernpfad (3 Module)
-
1
Machine Learning Grundlagen
INF-501 · 6 ECTSVoraussetzungen:Statistik Python (Computerprogrammierung)Schließt Skill-Lücke:maschinelles Lernen -
2
Deep Learning Spezialisierung
INF-602 · 9 ECTSVoraussetzungen:maschinelles LernenSchließt Skill-Lücke:Deep Learning -
3
NLP mit Transformer-Modellen
INF-705 · 9 ECTSVoraussetzungen:Deep LearningSchließt Skill-Lücke:Verarbeitung natürlicher Sprache
Berechnungs-Transparenz
GDS Dijkstra
Architektur:
Graph Data Science Library. Projizierter Skill-Skill-Graph (Edges = Module, Weight = ECTS). Dijkstra läuft als nativer Algorithmus im Neo4j-Server. Greedy-Sequenzierung für valide Abhängigkeits-Reihenfolge.
Knoten:
13
Edges:
16
Cypher-Calls:
4
Sequenz-Iter.:
3
Graph-Projektion:
hrqde_path_6a301c36c44310_66591100
Gefundene Dijkstra-Pfade (kürzester pro fehlendem Skill):
→ Ziel:
3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43
Quelle:
7ee4c2ea-b349-4bd2-81a3-ec31475d4833
Cost:
6
Skill-Sequenz:
7ee4c2ea-b349-4bd2-81a3-ec31475d4833 → 3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43
→ Ziel:
ecc4552a-92c5-4222-b18d-faf5ac841080
Quelle:
7ee4c2ea-b349-4bd2-81a3-ec31475d4833
Cost:
15
Skill-Sequenz:
7ee4c2ea-b349-4bd2-81a3-ec31475d4833 → 3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43 → ecc4552a-92c5-4222-b18d-faf5ac841080
→ Ziel:
fff0e2cd-d0bd-4b02-9daf-158b79d9688a
Quelle:
7ee4c2ea-b349-4bd2-81a3-ec31475d4833
Cost:
24
Skill-Sequenz:
7ee4c2ea-b349-4bd2-81a3-ec31475d4833 → 3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43 → ecc4552a-92c5-4222-b18d-faf5ac841080 → fff0e2cd-d0bd-4b02-9daf-158b79d9688a
Cypher-Queries (vier Phasen) anzeigen
projection
// Phase 1: Skill-Skill-Graph-Projektion
// Knoten: Skills, die von Demo-Modulen referenziert werden
// Edges: pro Modul eine Kante prereq -> outcome,
// Weight = ECTS, Property moduleUri für Resolution
CALL gds.graph.project.cypher(
$graphName,
'MATCH (m)-[:hrqde__requiresCompetence]->(s)
WHERE m.uri STARTS WITH "..."
RETURN DISTINCT id(s) AS id
UNION
MATCH (m)-[:hrqde__hasOutcome]->()
-[:hrqde__targetsCompetence]->(s)
WHERE m.uri STARTS WITH "..."
RETURN DISTINCT id(s) AS id',
'MATCH (s1)<-[:hrqde__requiresCompetence]-(m)
-[:hrqde__hasOutcome]->()
-[:hrqde__targetsCompetence]->(s2)
WHERE m.uri STARTS WITH "..."
RETURN id(s1) AS source, id(s2) AS target,
toFloat(m.hrqde__ects) AS weight,
m.uri AS moduleUri'
)
YIELD nodeCount, relationshipCount
dijkstra
// Phase 2: Dijkstra für alle (acquired, missing) Paare
// mit Best-of-N Auswahl pro missing Skill
UNWIND $acquiredUris AS acqUri
MATCH (source:Resource {uri: acqUri})
UNWIND $missingUris AS missingUri
MATCH (target:Resource {uri: missingUri})
CALL gds.shortestPath.dijkstra.stream($graphName, {
sourceNode: source,
targetNode: target,
relationshipWeightProperty: 'weight'
})
YIELD totalCost, path
WITH missingUri, acqUri, totalCost,
[n IN nodes(path) | n.uri] AS skillUris
ORDER BY missingUri, totalCost ASC
WITH missingUri,
collect({sourceUri: acqUri, totalCost: totalCost,
skillUris: skillUris})[0] AS bestPath
RETURN missingUri, bestPath.sourceUri, bestPath.totalCost,
bestPath.skillUris
moduleResolution
// Phase 3: Pro Skill-Übergang das billigste Modul auflösen
UNWIND $transitions AS t
MATCH (s1:Resource {uri: t.from})
<-[:hrqde__requiresCompetence]-(m:Resource)
-[:hrqde__hasOutcome]->()
-[:hrqde__targetsCompetence]->(s2:Resource {uri: t.to})
WHERE m.uri STARTS WITH "..."
WITH t, m
ORDER BY toFloat(m.hrqde__ects) ASC, m.uri ASC
WITH t, collect(m.uri)[0] AS moduleUri
RETURN DISTINCT moduleUri
cleanup
// Phase 5: Graph-Projektion droppen (im finally-Block) CALL gds.graph.drop($graphName, false) YIELD graphName RETURN graphName