othmanekabal commited on
Commit
d44be42
·
verified ·
1 Parent(s): 310e8d4

Upload index.html

Browse files
Files changed (1) hide show
  1. index.html +286 -19
index.html CHANGED
@@ -1,19 +1,286 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <style>
3
+ * { box-sizing: border-box; margin: 0; padding: 0; }
4
+ body { font-family: var(--font-sans); }
5
+ .page { padding: 1.5rem 0; }
6
+ h1 { font-size: 22px; font-weight: 500; color: var(--color-text-primary); margin-bottom: 0.4rem; }
7
+ .subtitle { font-size: 14px; color: var(--color-text-secondary); margin-bottom: 2rem; }
8
+ .tabs { display: flex; gap: 8px; margin-bottom: 2rem; flex-wrap: wrap; }
9
+ .tab { padding: 8px 18px; border-radius: var(--border-radius-md); border: 0.5px solid var(--color-border-secondary); font-size: 14px; cursor: pointer; background: var(--color-background-primary); color: var(--color-text-secondary); transition: all .15s; }
10
+ .tab.active { background: var(--color-background-secondary); color: var(--color-text-primary); border-color: var(--color-border-primary); font-weight: 500; }
11
+ .panel { display: none; }
12
+ .panel.active { display: block; }
13
+ .section-title { font-size: 18px; font-weight: 500; color: var(--color-text-primary); margin-bottom: 0.3rem; }
14
+ .section-sub { font-size: 13px; color: var(--color-text-secondary); margin-bottom: 1.4rem; line-height: 1.6; }
15
+ .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.5rem; }
16
+ .card { background: var(--color-background-primary); border: 0.5px solid var(--color-border-tertiary); border-radius: var(--border-radius-lg); padding: 1rem 1.2rem; }
17
+ .card-label { font-size: 11px; font-weight: 500; letter-spacing: .04em; color: var(--color-text-tertiary); text-transform: uppercase; margin-bottom: 6px; }
18
+ .card-title { font-size: 15px; font-weight: 500; color: var(--color-text-primary); margin-bottom: 6px; }
19
+ .card-desc { font-size: 13px; color: var(--color-text-secondary); line-height: 1.6; }
20
+ .badge { display: inline-block; font-size: 11px; padding: 2px 9px; border-radius: 20px; margin-right: 4px; margin-bottom: 4px; font-weight: 500; }
21
+ .badge-green { background: var(--color-background-success); color: var(--color-text-success); }
22
+ .badge-red { background: var(--color-background-danger); color: var(--color-text-danger); }
23
+ .loss-box { background: var(--color-background-secondary); border-radius: var(--border-radius-md); padding: 1rem 1.2rem; margin-bottom: 1rem; border-left: 3px solid transparent; }
24
+ .loss-box.blue { border-color: #378ADD; }
25
+ .loss-box.teal { border-color: #1D9E75; }
26
+ .loss-box.amber { border-color: #BA7517; }
27
+ .loss-box.purple { border-color: #534AB7; }
28
+ .loss-name { font-size: 14px; font-weight: 500; color: var(--color-text-primary); margin-bottom: 4px; }
29
+ .loss-formula { font-family: var(--font-mono); font-size: 13px; color: var(--color-text-info); background: var(--color-background-primary); border: 0.5px solid var(--color-border-tertiary); border-radius: 6px; padding: 8px 12px; margin: 8px 0; line-height: 1.7; }
30
+ .loss-desc { font-size: 13px; color: var(--color-text-secondary); line-height: 1.6; }
31
+ .flow-row { display: flex; align-items: center; gap: 0; margin: 1.2rem 0; flex-wrap: wrap; }
32
+ .flow-node { background: var(--color-background-secondary); border: 0.5px solid var(--color-border-secondary); border-radius: var(--border-radius-md); padding: 8px 14px; font-size: 13px; color: var(--color-text-primary); text-align: center; min-width: 90px; }
33
+ .flow-node.highlight-blue { background: #E6F1FB; border-color: #378ADD; color: #0C447C; }
34
+ .flow-node.highlight-teal { background: #E1F5EE; border-color: #1D9E75; color: #085041; }
35
+ .flow-node.highlight-amber { background: #FAEEDA; border-color: #BA7517; color: #633806; }
36
+ .flow-node.highlight-purple { background: #EEEDFE; border-color: #534AB7; color: #3C3489; }
37
+ @media (prefers-color-scheme: dark) {
38
+ .flow-node.highlight-blue { background: #0C447C; border-color: #378ADD; color: #B5D4F4; }
39
+ .flow-node.highlight-teal { background: #085041; border-color: #1D9E75; color: #9FE1CB; }
40
+ .flow-node.highlight-amber { background: #633806; border-color: #BA7517; color: #FAC775; }
41
+ .flow-node.highlight-purple { background: #3C3489; border-color: #534AB7; color: #CECBF6; }
42
+ }
43
+ .flow-arrow { font-size: 18px; color: var(--color-text-tertiary); margin: 0 6px; }
44
+ .divider { border: none; border-top: 0.5px solid var(--color-border-tertiary); margin: 1.5rem 0; }
45
+ .compare-row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-bottom: 1rem; }
46
+ .compare-cell { font-size: 13px; color: var(--color-text-secondary); background: var(--color-background-secondary); border-radius: var(--border-radius-md); padding: 8px 12px; line-height: 1.5; }
47
+ .compare-cell.header { font-weight: 500; color: var(--color-text-primary); font-size: 13px; background: transparent; padding: 4px 12px; }
48
+ .tag { font-size: 11px; font-weight: 500; padding: 2px 8px; border-radius: 20px; display: inline-block; }
49
+ .tag-gen { background: #E6F1FB; color: #0C447C; }
50
+ .tag-con { background: #EEEDFE; color: #3C3489; }
51
+ @media (prefers-color-scheme: dark) {
52
+ .tag-gen { background: #042C53; color: #B5D4F4; }
53
+ .tag-con { background: #26215C; color: #CECBF6; }
54
+ }
55
+ </style>
56
+
57
+ <div class="page">
58
+ <h2 class="sr-only">Explication des méthodes GSSL: Generative et Contrastive</h2>
59
+ <h1>Graph Self-Supervised Learning (GSSL)</h1>
60
+ <p class="subtitle">Deux grandes familles de méthodes pour apprendre des représentations de graphes sans étiquettes</p>
61
+
62
+ <div class="tabs">
63
+ <button class="tab active" onclick="show('gen')">Méthodes génératives</button>
64
+ <button class="tab" onclick="show('con')">Méthodes contrastives</button>
65
+ <button class="tab" onclick="show('loss')">Fonctions de loss</button>
66
+ <button class="tab" onclick="show('compare')">Comparaison</button>
67
+ </div>
68
+
69
+ <!-- GENERATIVE -->
70
+ <div class="panel active" id="panel-gen">
71
+ <p class="section-title"><span class="tag tag-gen">Generative</span> &nbsp;Approche par reconstruction</p>
72
+ <p class="section-sub">Le modèle apprend à encoder le graphe dans un espace latent, puis à reconstruire les attributs originaux (features) ou la structure (relations). Le signal superviseur est la qualité de la reconstruction.</p>
73
+
74
+ <div class="flow-row">
75
+ <div class="flow-node">Graphe G(X, R)</div>
76
+ <span class="flow-arrow">→</span>
77
+ <div class="flow-node highlight-blue">GNN Encoder</div>
78
+ <span class="flow-arrow">→</span>
79
+ <div class="flow-node">Z (embedding)</div>
80
+ <span class="flow-arrow">→</span>
81
+ <div class="flow-node highlight-teal">Decoder</div>
82
+ <span class="flow-arrow">→</span>
83
+ <div class="flow-node highlight-amber">X̂ / R̂</div>
84
+ <span class="flow-arrow">→</span>
85
+ <div class="flow-node">Loss L</div>
86
+ </div>
87
+
88
+ <hr class="divider">
89
+ <p style="font-size:14px; font-weight:500; color:var(--color-text-primary); margin-bottom:1rem;">Deux sous-tâches principales</p>
90
+
91
+ <div class="grid2">
92
+ <div class="card">
93
+ <div class="card-label">Tâche 1</div>
94
+ <div class="card-title">Reconstruction des features</div>
95
+ <div class="card-desc">Le modèle masque certains attributs de nœuds <strong style="font-weight:500">X</strong> et apprend à les prédire depuis l'embedding Z. Le décodeur peut être un MLP, GCN ou RGCN.</div>
96
+ <br>
97
+ <div class="loss-formula">Ẑ = GNN(X, A)<br>X̂ = Decoder(Ẑ)<br>L_feat = ‖X - X̂‖²</div>
98
+ <div style="margin-top:8px">
99
+ <span class="badge badge-green">✓ Préserve les features</span>
100
+ <span class="badge badge-green">✓ Info locale</span>
101
+ </div>
102
+ </div>
103
+ <div class="card">
104
+ <div class="card-label">Tâche 2</div>
105
+ <div class="card-title">Reconstruction des relations</div>
106
+ <div class="card-desc">Le modèle prédit les arêtes ou scores de relation entre paires de nœuds depuis leurs embeddings. Utilise ConvE, DistMult ou produit scalaire.</div>
107
+ <br>
108
+ <div class="loss-formula">Ẑ = GNN(X, A)<br>R̂ᵢⱼ = Decoder(zᵢ, zⱼ)<br>L_struct = BCE(R, R̂)</div>
109
+ <div style="margin-top:8px">
110
+ <span class="badge badge-green">✓ Structure locale</span>
111
+ <span class="badge badge-red">✗ Pas discriminatif</span>
112
+ </div>
113
+ </div>
114
+ </div>
115
+
116
+ <div class="card" style="border-left: 3px solid #378ADD;">
117
+ <div class="card-label">Décodeurs disponibles</div>
118
+ <div style="display:flex; gap:10px; flex-wrap:wrap; margin-top:8px;">
119
+ <div style="flex:1; min-width:140px;">
120
+ <div style="font-size:13px; font-weight:500; color:var(--color-text-primary);">Pour les features</div>
121
+ <div class="loss-formula" style="margin-top:6px">RGCN, GCN, MLP</div>
122
+ </div>
123
+ <div style="flex:1; min-width:140px;">
124
+ <div style="font-size:13px; font-weight:500; color:var(--color-text-primary);">Pour les relations</div>
125
+ <div class="loss-formula" style="margin-top:6px">ConvE, DistMult,<br>Dot Product</div>
126
+ </div>
127
+ </div>
128
+ </div>
129
+ </div>
130
+
131
+ <!-- CONTRASTIVE -->
132
+ <div class="panel" id="panel-con">
133
+ <p class="section-title"><span class="tag tag-con">Contrastive</span> &nbsp;Approche par vues augmentées</p>
134
+ <p class="section-sub">Le modèle apprend à rapprocher les représentations de différentes vues augmentées d'un même graphe (paires positives), et à éloigner celles de graphes différents (paires négatives).</p>
135
+
136
+ <div class="flow-row">
137
+ <div class="flow-node">Graphe G(X, R)</div>
138
+ <span class="flow-arrow">→</span>
139
+ <div class="flow-node highlight-teal">Augmentation</div>
140
+ <span class="flow-arrow">→</span>
141
+ <div class="flow-node">G₁, …, Gₖ</div>
142
+ <span class="flow-arrow">→</span>
143
+ <div class="flow-node highlight-blue">GNN Encoder</div>
144
+ <span class="flow-arrow">→</span>
145
+ <div class="flow-node">H₁, …, Hₖ</div>
146
+ <span class="flow-arrow">→</span>
147
+ <div class="flow-node highlight-purple">L_contrastive</div>
148
+ </div>
149
+
150
+ <hr class="divider">
151
+ <p style="font-size:14px; font-weight:500; color:var(--color-text-primary); margin-bottom:1rem;">Types d'augmentation du graphe</p>
152
+
153
+ <div class="grid2">
154
+ <div class="card">
155
+ <div class="card-label">Augmentation 1</div>
156
+ <div class="card-title">Feature Masking</div>
157
+ <div class="card-desc">Masque aléatoirement une proportion des attributs de nœuds (mis à zéro ou bruit gaussien). Force le modèle à apprendre des représentations robustes aux features manquantes.</div>
158
+ <br>
159
+ <div class="loss-formula">X̃ᵢ = Xᵢ ⊙ mᵢ<br>mᵢ ~ Bernoulli(1-p)</div>
160
+ </div>
161
+ <div class="card">
162
+ <div class="card-label">Augmentation 2</div>
163
+ <div class="card-title">Edge Dropping</div>
164
+ <div class="card-desc">Supprime aléatoirement une proportion des arêtes du graphe. Force le modèle à apprendre des représentations robustes aux variations de structure.</div>
165
+ <br>
166
+ <div class="loss-formula">Ẽ = {(u,v) ∈ E : bᵤᵥ=1}<br>bᵤᵥ ~ Bernoulli(1-p)</div>
167
+ </div>
168
+ </div>
169
+
170
+ <div class="card" style="border-left: 3px solid #534AB7;">
171
+ <div class="card-label">Paires positives / négatives</div>
172
+ <div class="grid2" style="margin-top:10px; margin-bottom:0;">
173
+ <div>
174
+ <div style="font-size:13px; font-weight:500; color:var(--color-text-primary); margin-bottom:6px;"><span class="badge badge-green">Positives</span></div>
175
+ <div class="card-desc">Deux vues du <em>même</em> nœud/graphe après différentes augmentations → rapprocher dans l'espace latent</div>
176
+ </div>
177
+ <div>
178
+ <div style="font-size:13px; font-weight:500; color:var(--color-text-primary); margin-bottom:6px;"><span class="badge badge-red">Négatives</span></div>
179
+ <div class="card-desc">Vues de nœuds/graphes <em>différents</em> → éloigner dans l'espace latent</div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+ <!-- LOSS FUNCTIONS -->
186
+ <div class="panel" id="panel-loss">
187
+ <p class="section-title">Fonctions de loss</p>
188
+ <p class="section-sub">Chaque approche optimise un objectif différent. Les méthodes génératives minimisent l'erreur de reconstruction ; les méthodes contrastives maximisent l'accord entre vues augmentées.</p>
189
+
190
+ <div class="loss-box blue">
191
+ <div class="loss-name"><span class="tag tag-gen">Generative</span> &nbsp; L_features — Reconstruction des attributs</div>
192
+ <div class="loss-formula">L_feat = (1/N) · Σᵢ ‖Xᵢ - X̂ᵢ‖²
193
+
194
+ où X̂ᵢ = Decoder(GNN(X, A))ᵢ</div>
195
+ <div class="loss-desc">MSE entre les features originales et reconstruites. Minimisé quand l'encodeur capture l'information contenue dans les attributs de chaque nœud. Utilisé avec un masquage partiel (style MAE).</div>
196
+ </div>
197
+
198
+ <div class="loss-box teal">
199
+ <div class="loss-name"><span class="tag tag-gen">Generative</span> &nbsp; L_struct — Reconstruction des relations</div>
200
+ <div class="loss-formula">L_struct = -Σ₍ᵢ,ⱼ₎ [ Aᵢⱼ · log σ(zᵢᵀzⱼ) + (1-Aᵢⱼ) · log(1-σ(zᵢᵀzⱼ)) ]
201
+
202
+ ou via DistMult: score(i,r,j) = zᵢᵀ · diag(rᵣ) · zⱼ</div>
203
+ <div class="loss-desc">Binary cross-entropy sur l'existence d'arêtes (Dot Product / ConvE / DistMult). Le modèle apprend à prédire quels nœuds sont connectés depuis leurs embeddings.</div>
204
+ </div>
205
+
206
+ <div class="loss-box purple">
207
+ <div class="loss-name"><span class="tag tag-con">Contrastive</span> &nbsp; L_NT-Xent — InfoNCE / NT-Xent</div>
208
+ <div class="loss-formula">L = -(1/N) · Σᵢ log [ exp(sim(hᵢ, hᵢ⁺)/τ) / Σⱼ≠ᵢ exp(sim(hᵢ, hⱼ)/τ) ]
209
+
210
+ sim(u,v) = uᵀv / (‖u‖·‖v‖) (cosine similarity)
211
+ τ : température (hyperparamètre)</div>
212
+ <div class="loss-desc">Pour chaque nœud i, maximise la similarité avec sa vue augmentée hᵢ⁺ (positive) relativement à toutes les autres représentations du batch (négatives). τ contrôle la concentration des distributions.</div>
213
+ </div>
214
+
215
+ <div class="loss-box amber">
216
+ <div class="loss-name"><span class="tag tag-gen">Generative</span> + <span class="tag tag-con">Contrastive</span> &nbsp; Loss combinée</div>
217
+ <div class="loss-formula">L_total = α · L_feat + β · L_struct + γ · L_contrastive
218
+
219
+ α, β, γ : hyperparamètres de pondération</div>
220
+ <div class="loss-desc">Combinaison des deux approches pour bénéficier à la fois de la préservation de l'information locale (generative) et d'un objectif discriminatif (contrastive). Utilisé dans des méthodes hybrides comme AFGRL, SimGRACE ou des variantes VGAE.</div>
221
+ </div>
222
+ </div>
223
+
224
+ <!-- COMPARE -->
225
+ <div class="panel" id="panel-compare">
226
+ <p class="section-title">Comparaison des deux approches</p>
227
+ <p class="section-sub">Chaque famille a ses forces et faiblesses. Les choisir selon la tâche aval et les contraintes du problème.</p>
228
+
229
+ <div class="compare-row">
230
+ <div class="compare-cell header"></div>
231
+ <div class="compare-cell header" style="color:#0C447C"><span class="tag tag-gen">Generative</span></div>
232
+ <div class="compare-cell header" style="color:#3C3489"><span class="tag tag-con">Contrastive</span></div>
233
+ </div>
234
+
235
+ <div class="compare-row">
236
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Objectif</div>
237
+ <div class="compare-cell">Reconstruire X ou R depuis Z</div>
238
+ <div class="compare-cell">Aligner les vues positives, séparer les négatives</div>
239
+ </div>
240
+ <div class="compare-row">
241
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Signal</div>
242
+ <div class="compare-cell">Erreur de reconstruction</div>
243
+ <div class="compare-cell">Similarité entre représentations</div>
244
+ </div>
245
+ <div class="compare-row">
246
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Info capturée</div>
247
+ <div class="compare-cell"><span class="badge badge-green">✓ Locale</span> voisinage immédiat</div>
248
+ <div class="compare-cell"><span class="badge badge-green">✓ Globale</span> structure générale</div>
249
+ </div>
250
+ <div class="compare-row">
251
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Objectif discriminatif</div>
252
+ <div class="compare-cell"><span class="badge badge-red">✗ Absent</span></div>
253
+ <div class="compare-cell"><span class="badge badge-green">✓ Naturel</span></div>
254
+ </div>
255
+ <div class="compare-row">
256
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Préservation input</div>
257
+ <div class="compare-cell"><span class="badge badge-green">✓ Forte</span></div>
258
+ <div class="compare-cell"><span class="badge badge-red">✗ Non garantie</span></div>
259
+ </div>
260
+ <div class="compare-row">
261
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Défi principal</div>
262
+ <div class="compare-cell">Définir un bon décodeur</div>
263
+ <div class="compare-cell">Générer des vues augmentées efficaces</div>
264
+ </div>
265
+ <div class="compare-row">
266
+ <div class="compare-cell" style="font-weight:500; color:var(--color-text-primary);">Exemples</div>
267
+ <div class="compare-cell">GAE, VGAE, GraphMAE</div>
268
+ <div class="compare-cell">GraphCL, GRACE, GCA, MVGRL</div>
269
+ </div>
270
+
271
+ <div style="margin-top:1.5rem; display:flex; gap:10px; flex-wrap:wrap;">
272
+ <button class="tab" onclick="sendPrompt('Explique-moi comment fonctionne GraphMAE en détail')">Approfondir GraphMAE ↗</button>
273
+ <button class="tab" onclick="sendPrompt('Comment choisir entre approche generative et contrastive pour mon problème GSSL?')">Aide au choix ↗</button>
274
+ <button class="tab" onclick="sendPrompt('Explique la fonction NT-Xent et son hyperparamètre température τ')">NT-Xent & température ↗</button>
275
+ </div>
276
+ </div>
277
+ </div>
278
+
279
+ <script>
280
+ function show(tab) {
281
+ document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));
282
+ document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
283
+ document.getElementById('panel-' + tab).classList.add('active');
284
+ event.target.classList.add('active');
285
+ }
286
+ </script>