# uta-smile/smiles-bert architecture

> Architecture diagram of the GitHub repository uta-smile/smiles-bert, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/uta-smile/smiles-bert
- Repository: https://github.com/uta-smile/smiles-bert

## Overview

SMILES-BERT is a molecular-sequence learning application built on an older fairseq toolkit. Its documented core workflow converts raw SMILES to indexed data, pre-trains a BERT model, then fine-tunes it on labeled molecular properties. The repository also contains SMILES generation and prediction task modules and inference entry points. The graph distinguishes those product stages from fairseq’s shared model, training, and data layers; unsampled module wiring is omitted where it cannot be established.

Main entry points: [`fairseq/trainer.py`](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/trainer.py) (Training engine), [`train.py`](https://github.com/uta-smile/smiles-bert/blob/master/train.py) (Training entry), [`fairseq/data/indexed_dataset.py`](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/data/indexed_dataset.py) (Indexed datasets), [`fairseq/tasks/bert.py`](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/bert.py) (BERT pretraining)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_preparation["SMILES preparation"]
  node_binarize["Binarize data<br/>[binarize_smiles.py]"]
  node_preprocess["Preprocess data<br/>[preprocess.py]"]
  node_indexed_data["Indexed datasets<br/>[indexed_dataset.py]"]
  node_smile_data["SMILES datasets"]
end

subgraph group_learning["Model learning"]
  node_bert_task["BERT pretraining<br/>[bert.py]"]
  node_property_task["Property fine-tuning"]
  node_model["Molecular models<br/>[bert.py]"]
  node_criterion["Learning objectives<br/>[seq3seq.py]"]
end

subgraph group_runtime["Inference and evaluation"]
  node_generation_task["SMILES generation"]
  node_generation["Sequence generation"]
  node_generation_entry["Generate molecules<br/>[generate.py]"]
  node_interactive_entry["Interactive inference<br/>[interactive.py]"]
  node_evaluation["Model evaluation<br/>[eval.py]"]
  node_lm_evaluation["Language-model evaluation<br/>[eval_lm.py]"]
  node_prediction["Property prediction"]
end

subgraph group_framework["Fairseq runtime"]
  node_trainer["Training engine<br/>[trainer.py]"]
  node_optimizer["Optimizers<br/>[adam.py]"]
  node_train_entry["Training entry<br/>[train.py]"]
end

node_researcher(("Model user"))
node_raw_smiles["Raw SMILES"]
node_labeled_smiles["Labeled SMILES"]

node_researcher -->|"provides"| node_raw_smiles
node_raw_smiles -->|"encodes"| node_binarize
node_binarize -->|"writes"| node_indexed_data
node_labeled_smiles -->|"provides"| node_preprocess
node_preprocess -->|"prepares"| node_indexed_data
node_indexed_data -->|"loads"| node_smile_data
node_train_entry -->|"sets up"| node_bert_task
node_train_entry -->|"sets up"| node_property_task
node_train_entry -->|"trains with"| node_trainer
node_bert_task -->|"loads"| node_smile_data
node_property_task -->|"loads"| node_smile_data
node_trainer -->|"updates"| node_model
node_trainer -->|"computes loss"| node_criterion
node_trainer -->|"steps"| node_optimizer
node_researcher -->|"provides"| node_labeled_smiles
node_generation_entry -->|"sets up"| node_generation_task
node_generation_entry -->|"invokes"| node_generation
node_interactive_entry -->|"sets up"| node_generation_task
node_interactive_entry -->|"invokes"| node_generation
node_generation -->|"decodes with"| node_model
node_evaluation -->|"evaluates"| node_property_task
node_lm_evaluation -->|"evaluates"| node_bert_task
node_prediction -->|"predicts with"| node_model

click node_binarize "https://github.com/uta-smile/smiles-bert/blob/master/binarize_smiles.py"
click node_preprocess "https://github.com/uta-smile/smiles-bert/blob/master/preprocess.py"
click node_indexed_data "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/data/indexed_dataset.py"
click node_smile_data "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/data/smile_prediction_dataset.py"
click node_bert_task "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/bert.py"
click node_property_task "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/smile_property_prediction.py"
click node_model "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/models/bert.py"
click node_criterion "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/criterions/seq3seq.py"
click node_trainer "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/trainer.py"
click node_optimizer "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/optim/adam.py"
click node_train_entry "https://github.com/uta-smile/smiles-bert/blob/master/train.py"
click node_generation_task "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/smile_generation.py"
click node_generation "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/sequence_generator.py"
click node_generation_entry "https://github.com/uta-smile/smiles-bert/blob/master/generate.py"
click node_interactive_entry "https://github.com/uta-smile/smiles-bert/blob/master/interactive.py"
click node_evaluation "https://github.com/uta-smile/smiles-bert/blob/master/eval.py"
click node_lm_evaluation "https://github.com/uta-smile/smiles-bert/blob/master/eval_lm.py"
click node_prediction "https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/smile_property_prediction.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_binarize,node_preprocess,node_indexed_data,node_smile_data,node_researcher toneBlue
class node_bert_task,node_property_task,node_model,node_criterion toneAmber
class node_generation_task,node_generation,node_generation_entry,node_interactive_entry,node_evaluation,node_lm_evaluation,node_prediction toneMint
class node_trainer,node_optimizer,node_train_entry toneRose
class node_raw_smiles,node_labeled_smiles toneIndigo
```

## Components

### SMILES preparation

- [Binarize data](https://github.com/uta-smile/smiles-bert/blob/master/binarize_smiles.py): `binarize_smiles.py`
- [Preprocess data](https://github.com/uta-smile/smiles-bert/blob/master/preprocess.py): `preprocess.py`
- [Indexed datasets](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/data/indexed_dataset.py): `fairseq/data/indexed_dataset.py`
- [SMILES datasets](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/data/smile_prediction_dataset.py): `fairseq/data/smile_prediction_dataset.py`

### Model learning

- [BERT pretraining](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/bert.py): `fairseq/tasks/bert.py`
- [Property fine-tuning](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/smile_property_prediction.py): `fairseq/tasks/smile_property_prediction.py`
- [Molecular models](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/models/bert.py): `fairseq/models/bert.py`
- [Learning objectives](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/criterions/seq3seq.py): `fairseq/criterions/seq3seq.py`

### Inference and evaluation

- [SMILES generation](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/smile_generation.py): `fairseq/tasks/smile_generation.py`
- [Sequence generation](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/sequence_generator.py): `fairseq/sequence_generator.py`
- [Generate molecules](https://github.com/uta-smile/smiles-bert/blob/master/generate.py): `generate.py`
- [Interactive inference](https://github.com/uta-smile/smiles-bert/blob/master/interactive.py): `interactive.py`
- [Model evaluation](https://github.com/uta-smile/smiles-bert/blob/master/eval.py): `eval.py`
- [Language-model evaluation](https://github.com/uta-smile/smiles-bert/blob/master/eval_lm.py): `eval_lm.py`
- [Property prediction](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/tasks/smile_property_prediction.py): `fairseq/tasks/smile_property_prediction.py`

### Fairseq runtime

- [Training engine](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/trainer.py): `fairseq/trainer.py`
- [Optimizers](https://github.com/uta-smile/smiles-bert/blob/master/fairseq/optim/adam.py): `fairseq/optim/adam.py`
- [Training entry](https://github.com/uta-smile/smiles-bert/blob/master/train.py): `train.py`

### Other components

- **Model user**
- **Raw SMILES**
- **Labeled SMILES**

## Connections

- Model user → Raw SMILES: provides
- Raw SMILES → Binarize data: encodes
- Binarize data → Indexed datasets: writes
- Labeled SMILES → Preprocess data: provides
- Preprocess data → Indexed datasets: prepares
- Indexed datasets → SMILES datasets: loads
- Training entry → BERT pretraining: sets up
- Training entry → Property fine-tuning: sets up
- Training entry → Training engine: trains with
- BERT pretraining → SMILES datasets: loads
- Property fine-tuning → SMILES datasets: loads
- Training engine → Molecular models: updates
- Training engine → Learning objectives: computes loss
- Training engine → Optimizers: steps
- Model user → Labeled SMILES: provides
- Generate molecules → SMILES generation: sets up
- Generate molecules → Sequence generation: invokes
- Interactive inference → SMILES generation: sets up
- Interactive inference → Sequence generation: invokes
- Sequence generation → Molecular models: decodes with
- Model evaluation → Property fine-tuning: evaluates
- Language-model evaluation → BERT pretraining: evaluates
- Property prediction → Molecular models: predicts with
