Representation Encoding for Structured Observation Learning with Vector Embeddings
An opinionated torch-based package for predicting sample attributes from compositional data — sets of entities with optional abundances, covariates, and coordinates.
RESOLVE treats compositional data as contextual signal — a rich, structured representation that encodes information about sample-level attributes. Given a set of entities (species in a plot, symptoms in a patient, products in a basket), RESOLVE learns to predict properties of the sample.
Core idea: Compositional data encodes a shared latent representation that simultaneously informs multiple sample attributes.
Species data ─────┐
├──→ SpeciesEncoder ──→ hash embedding + taxonomy IDs
Coordinates ──────┤ + unknown mass features
├──→ PlotEncoder (shared) ──→ latent representation
Covariates ───────┘
│
┌─────────────────┼─────────────────┐
↓ ↓ ↓
TaskHead(area) TaskHead(elev) TaskHead(habitat)
│ │ │
↓ ↓ ↓
regression regression classification
=== “Python”
```python
import resolve_core as rc
# Map your column names onto RESOLVE's semantic roles
roles = rc.RoleMapping()
roles.plot_id = "PlotObservationID"
roles.species_id = "Species"
roles.abundance = "Cover"
dataset = rc.ResolveDataset.from_csv(
"plots.csv",
"species.csv",
roles,
[rc.TargetSpec.regression("Area", rc.TransformType.Log1p),
rc.TargetSpec.classification("Habitat", 5)],
)
# Train
model = rc.ResolveModel(dataset.schema, rc.ModelConfig())
trainer = rc.Trainer(model, rc.TrainConfig())
trainer.prepare_data(dataset, test_size=0.2, seed=42)
trainer.fit()
trainer.save("model.pt")
# Predict
predictor = rc.Predictor.load("model.pt")
predictions = predictor.predict_dataset(new_dataset)
```
=== “R”
```r
library(resolve)
dataset <- resolve.dataset.csv(
header = "plots.csv",
species = "species.csv",
roles = list(plot_id = "PlotObservationID", species_id = "Species",
abundance = "Cover"),
targets = list(
Area = list(column = "Area", task = "regression", transform = "log1p"),
Habitat = list(column = "Habitat", task = "classification", num_classes = 5L)
)
)
trainer <- resolve.train.dataset(dataset, maxEpochs = 200L)
resolve.save(trainer, "model.pt")
predictor <- resolve.load("model.pt")
preds <- resolve.predict.dataset(predictor, dataset)
```
=== “Python”
The engine and its bindings build from source with CMake and an installed
PyTorch:
```bash
git clone https://github.com/gcol33/resolve.git
cd resolve/src/core/python
pip install .
```
=== “R”
```r
install.packages("pak")
pak::pak("gcol33/resolve/r")
```
MIT License - see LICENSE for details.