Loop de treinamento do LightGCN.
Lê o estado atual do grafo via MeliGraph.LightGCN.Matrix.build/2,
inicializa os embeddings de camada 0 com Xavier, treina via BPR loss
- Adam usando
Nx.Defnpara autodiferenciação, e devolve um binary serializado pronto para ser persistido pela aplicação caller.
Esta lib não persiste nada. O binary retornado deve ser salvo pelo
caller (Postgres / R2 / S3) e recarregado depois via
MeliGraph.LightGCN.EmbeddingStore.load/2.
Hiperparâmetros
| Opção | Default | Referência |
|---|---|---|
:embedding_dim | 64 | paper §4.1.2 |
:layers | 3 | paper §4.2 |
:epochs | 1000 | paper §4.1.2 |
:batch_size | 1024 | paper §4.1.2 |
:learning_rate | 0.001 | Adam default |
:lambda | 1.0e-4 | paper §4.1.2 |
Negative sampling
Usamos sampling uniforme (qualquer item aleatório como negativo). Em grafos esparsos isso pode gerar falsos negativos ocasionais — o paper aceita isso explicitamente como trade-off em troca de simplicidade. Estratégias mais sofisticadas (hard negative, adversarial) ficam para v0.3+.
Summary
Functions
Treina embeddings LightGCN no grafo apontado por conf.
Functions
@spec train(MeliGraph.Config.t(), String.t(), keyword()) :: {:ok, binary()} | {:error, term()}
Treina embeddings LightGCN no grafo apontado por conf.
Retorna {:ok, binary} com o payload serializado:
%{
version: 1,
embeddings: Nx.tensor() {node_count, embedding_dim},
user_index: %{internal_id => row_index},
item_index: %{internal_id => row_index},
user_count: integer,
item_count: integer,
trained_at: unix_timestamp
}Retorna {:error, :empty_graph} quando não há arestas user↔item
suficientes para construir Ã.