Add high-performance Golang implementation of SMORe #52
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
SMORe-Go
A Go implementation of the SMORe (Scalable Modularized Optimization for Recommendation Engines) framework for network embedding and recommendation systems.
Overview
SMORe-Go is a modern, high-performance Go port of the original SMORe C++ framework. It provides implementations of state-of-the-art graph embedding, knowledge graph embedding, and recommendation algorithms. The framework is designed for scalability and ease of use, with a modular architecture that makes it simple to add new models.
Requirements
Installation
git clone https://github.com/rainboltz/smore cd smore make -f Makefile.goThis will compile all models and place the executables in the
bin/directory.Build Individual Models
You can build individual models using:
Available Models
Graph Embedding Models
DeepWalk
./bin/deepwalkNode2Vec
./bin/node2vecLINE
./bin/lineFastRP
./bin/fastrpHeterogeneous Graph Models
Metapath2Vec
./bin/metapath2vecHAN (Heterogeneous Attention Network)
./bin/hanTextGCN
./bin/textgcnField types: 0=document, 1=filtered, 2=word
Temporal/Dynamic Graph Models
CTDNE
./bin/ctdneJODIE
./bin/jodieKnowledge Graph Embedding Models
TransE
./bin/transeRotatE
./bin/rotateComplEx
./bin/complexRecommendation Models
BPR (Bayesian Personalized Ranking)
./bin/bprHPE (Heterogeneous Preference Embedding)
./bin/hpeSASRec (Self-Attentive Sequential Recommendation)
./bin/sasrecuser_id item_id(one interaction per line, chronologically ordered)gSASRec
./bin/gsasrecRec-Denoiser
./bin/recdenoiserSkew-Opt
./bin/skewoptCPR (Cross-Domain Preference Ranking)
./bin/cprUser IDs must be consistent across both domains for cross-domain learning.
TPR (Text-aware Preference Ranking)
./bin/tprtext_weight: Balance between collaborative (0.0) and content (1.0) signals (default: 0.5)Signed Network Models
SNE (Signed Network Embedding)
./bin/sneInput Data Format
Standard Edge List Format
Each line represents an edge:
source_vertex target_vertex [weight]Sequential Interaction Format (SASRec, gSASRec)
Each line represents a user-item interaction in chronological order.
Field Metadata Format (TextGCN, HAN)
Field types indicate the vertex type in heterogeneous graphs.
Output Format
The model saves learned embeddings in the following format:
First line: number of vertices and embedding dimension
Following lines: vertex name followed by space-separated embedding values
Package Structure
Common Command-Line Arguments
Most models support the following common arguments:
-train <file>: Input network/graph file (required)-save <file>: Output embeddings file (required)-dimensions <int>: Embedding dimension (default: 64)-threads <int>: Number of parallel threads (default: 1)-alpha <float>: Learning rate (default varies by model)-negative_samples <int>: Number of negative samples (default: 5)-undirected: Treat edges as undirected (default: true)Model-specific arguments can be viewed by running the model without arguments:
Development
Running Tests
make -f Makefile.go testCode Formatting
Installing to GOPATH
Cleaning Build Artifacts
Performance Tips
-threadsto the number of CPU cores for faster training-undirectedto avoid duplicate edgesCitation
If you use SMORe in your research, please cite:
Related Work
For more network embedding methods and resources, see awesome-network-embedding.
License
MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.