From 8675ab4d22836a1eb358d500fe97d9956a0ae988 Mon Sep 17 00:00:00 2001 From: Francesc Campoy Date: Fri, 9 Mar 2018 13:26:01 -0800 Subject: [PATCH 1/2] [WIP] a proposal to document all datasets and models Signed-off-by: Francesc Campoy --- developer-community/datasets-and-models.md | 255 +++++++++++++++++++++ developer-community/graph.png | Bin 0 -> 4553 bytes 2 files changed, 255 insertions(+) create mode 100644 developer-community/datasets-and-models.md create mode 100644 developer-community/graph.png diff --git a/developer-community/datasets-and-models.md b/developer-community/datasets-and-models.md new file mode 100644 index 00000000..ed6fea7b --- /dev/null +++ b/developer-community/datasets-and-models.md @@ -0,0 +1,255 @@ +# Datasets, Kernels, Models, and Problems + +As we start publishing more datasets and models, it is important to keep in mind why we're doing this. + +> We publish datasets because we want to contribute back to the Open Source and Machine Learning communities. + +We consider datasets and models to be good when they are: +- discoverable, +- reproducible, and +- reusable. + +Keeping all of this in mind, let me propose a way to write documentation for these. + +## A Common Vocabulary + +It seems to be quite established that the relationship between datasets, models, and other concepts is somehow expressed in the following graph. + +![dataset graph](graph.png) + + +The following sections get into more detail on each concept, +but let me give a quick intro of all of these concepts. + +### Problems + +Everything we do at source{d} is around solving problems and +making predictions. Problems are the starting motivation +and ending point of most of our Machine Learning processes. + +Problems have a clear objective, and a measure of success that +let us rank different solutions to any problem in an objective +way. Think about accuracy, recall, etc. + +An example problem could be predicting what is the next key +a developer will press given what they've written so far. + +### Models + +Problems are solved using Models. Models are trained +to solve a specific problem by feeding Dataset to a +Kernel that optimizes a set of parameters. +These parameters, once optimized, are what models are made of. + +Models can be considered as a black box, where the only thing +we care about is the input and output formats. This provides +the possibility of reusing a model, to solve the same problem, +or to somehow feed into a different model (by knowledge +transfer or other techniques). + +Given the previous problem of predicting the next key pressed, +a model could get as an input the sequence of all keys pressed +so far, as ASCII codes, and the output could be a single ASCII +code with the prediction. + +A secondary goal of models is to be reproducible, meaning that +someone could try to repeat the same process we went through and +expect to obtain a similar result. If the kernel that generated +the dataset requires metaparameters (such as learning rate), +these values should also be documented. + +This is normally documented in research papers, with references +to what datasets and kernels were used, as well as how much +training time it took to obtain the resulting model. + +### Kernels + +Kernels are algorithms that feed from datasets and +generate models. These algorithms are responsible for describing +the model architecture chosen to solve a problem, e.g. RNN, +CNN, etc, and what metaparamaters were used + +### Datasets + +Datasets contain information retrieved from one or more +data sources, then pre-processed so it can easily be used to +answer questions, solve problems, train models, or even as +the data source to another dataset. + +The most important aspects of a dataset are its format, how to +download it, reproduce it, and what version contains what +exactly. + +Datasets evolve over time, and it's important to have versions +that can be explicitly referred to from trained models. + +### Predictor + +The last piece of the puzzle is what I call a predictor. +A predictor uses a model (sometimes more, sometimes no model +at all) to predict the answer to a question given some input. + +For instance, given a model trained with a large dataset of +the keystrokes of thousands of developers, we could write a +predictor that uses that trained model to create predictions. +That would be a pretty decent predictor. + +But we could also use a simple function that outputs random +ASCII codes, ignoring any other information available. This +predictor would probably have a lower accuracy for the given +problem. + +## Documenting these Artifacts + +So far we've documented models and some datasets to a certain +extent, but I think it's time to provide a framework for all +of these elements to be uniformly documented to improve the +discoverability, reproducibility, and reusability of our +results. + +We will evolve our documentation over time, into something that +hopefully will delight every one of our engineers and users. +But for now, let's keep it realistic and propose a reduced set +of measure we can start applying today to evolve towards that +perfect solution. + +## Current status + +Currently we document only datasets and models in two different +repositories: github.com/src-d/datasets and +github.com/src-d/models. + +We also have a modelforge tool that is intended to provide a way +to discover and download existing models. + +### Datasets + +We currently have only one public dataset: Public Git Archive. +For this dataset we document: + +- how to download the current version of the dataset with the `pga` CLI tool +- how to reproduce the dataset with borges and GHTorrent + +What are we missing? + +- versioning of the resulting dataset, how to download this an previous versions? +- format of the dataset +- what other datasets (and versions) were used to generate this? +- what models have been trained with this dataset +- LICENSE (the tools and scripts are licensed, but not the datasets?) + +### Models + +Models are already documented following some structure, following the +efforts put in place for [modelforge](https://github.com/src-d/modelforge). + +Currently models have an ID, which looks like a long random string like +`f64bacd4-67fb-4c64-8382-399a8e7db52a`. + +Models are accompanied by an example on how to use them, unfortunately the +examples are a bit simpler than expected. They mostly look like this: + +```python +from ast2vec import DocumentFrequencies +df = DocumentFrequencies().load() +print("Number of tokens:", len(df)) +``` + +What are we missing? +- Versioned models, corresponding to versioned datasets. +- Reference to the code (kernel) that was used to generate the model. +- Technical sheet with accuracy, recall, etc for the given model and dataset +- Format of input and output of the model +- At least one example using the model to make a prediction + +## My Proposal + +Since we care about individual versioning of datasets and models, +it seems like it's an obvious choice to use a git repository per dataset, +and model. + +Problems, predictors, and kernels can, for now, be documented directly with +a model. If we see that we start to have too much repetition because we have +many models for a single problem we will reassess this decision. + +### Dataset Repository + +A dataset repository should contain the following information: + +- short description +- long description and links to papers and blog posts +- technical sheet + - size of dataset + - schema(s) of the dataset + - download link +- using the dataset: + - downloading the dataset + - related tools +- reproducing the dataset: + - link to the original data sources + - related tools + +### Model Repository + +A dataset repository should contain the following information: + +- short description +- long description and links to papers and blog posts +- technical sheet + - size of model + - input/output schemas + - download link + - datasets used to train the model (including versions) +- using the model: + - downloading the model + - loading the model + - prerequisites (tensorflow? keras?) + - quick guide: making a prediction +- reproducing the model: + - link to the original dataset + - kernel used to train the model + - training process + - hardware and time spent + - metaparameters if any + - any other relevant details + +### General + +As any other source{d} repository, we need to follow the guidelines in +[Documentation at source{d}](https://github.com/src-d/guide/blob/master/engineering/documentation.md). +This includes having a CONTRIBUTING.md, Code of Conduct, etc. + +Every time a new version of a dataset or model is released a new tag and +associated release should be created in the repository. +The release should include links to anything that has changed since the +previous relaease: such as a new version of the datasets or changes in +the kernel. + +### github.com/src-d/datasest and github.com/src-d/models + +These two repositories should simply contain what is common to all datasets, +or to all models. They will also provide all the tooling build on top of +the documentation for datasets and models. + +Since we imagine these tools extracting information from the repositories +automatically, it is important to keep formatting in mind. + +I'm currently considering whether a `toml` file should be defined containing +the data common to all the datasets and models. +For instance, we could have the download size for each dataset and model, +as well as the associated schemas. A simple tool could then generate +documentation based on these values. \ No newline at end of file diff --git a/developer-community/graph.png b/developer-community/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..484966532e87f6625348558e5c4323cd0ad41160 GIT binary patch literal 4553 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 Date: Wed, 21 Mar 2018 11:50:57 -0700 Subject: [PATCH 2/2] predictor -> inferencer --- developer-community/datasets-and-models.md | 33 +++++++++++---------- developer-community/graph.png | Bin 4553 -> 31329 bytes 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/developer-community/datasets-and-models.md b/developer-community/datasets-and-models.md index ed6fea7b..eb3a84e7 100644 --- a/developer-community/datasets-and-models.md +++ b/developer-community/datasets-and-models.md @@ -27,8 +27,8 @@ digraph G { dataset -> kernel [ label = "feeds" ]; {kernel dataset} -> model [ label = "generates" ]; model -> problem [ label = "solves" ]; - predictor -> model [ label = "uses" ]; - predictor -> problem [ label = "solves" ]; + inferencer -> model [ label = "uses" ]; + inferencer -> problem [ label = "solves" ]; } --> @@ -97,20 +97,20 @@ exactly. Datasets evolve over time, and it's important to have versions that can be explicitly referred to from trained models. -### Predictor +### Inferencers -The last piece of the puzzle is what I call a predictor. -A predictor uses a model (sometimes more, sometimes no model +The last piece of the puzzle is what I call inferencer. +An inferencer uses a model (sometimes more, sometimes no model at all) to predict the answer to a question given some input. For instance, given a model trained with a large dataset of -the keystrokes of thousands of developers, we could write a -predictor that uses that trained model to create predictions. -That would be a pretty decent predictor. +the keystrokes of thousands of developers, we could write an +inferencer that uses that trained model to create predictions. +That would be a pretty decent inferencer. But we could also use a simple function that outputs random ASCII codes, ignoring any other information available. This -predictor would probably have a lower accuracy for the given +inferencer would probably have a lower accuracy for the given problem. ## Documenting these Artifacts @@ -182,10 +182,16 @@ Since we care about individual versioning of datasets and models, it seems like it's an obvious choice to use a git repository per dataset, and model. -Problems, predictors, and kernels can, for now, be documented directly with +Problems, inferencers, and kernels can, for now, be documented directly with a model. If we see that we start to have too much repetition because we have many models for a single problem we will reassess this decision. +As any other source{d} repository, we need to follow the guidelines in +[Documentation at source{d}](https://github.com/src-d/guide/blob/master/engineering/documentation.md). +This includes having a CONTRIBUTING.md, Code of Conduct, etc. + +This is an initial list of the information required per repository. + ### Dataset Repository A dataset repository should contain the following information: @@ -227,14 +233,11 @@ A dataset repository should contain the following information: - metaparameters if any - any other relevant details -### General - -As any other source{d} repository, we need to follow the guidelines in -[Documentation at source{d}](https://github.com/src-d/guide/blob/master/engineering/documentation.md). -This includes having a CONTRIBUTING.md, Code of Conduct, etc. +### Versioning and Releases Every time a new version of a dataset or model is released a new tag and associated release should be created in the repository. + The release should include links to anything that has changed since the previous relaease: such as a new version of the datasets or changes in the kernel. diff --git a/developer-community/graph.png b/developer-community/graph.png index 484966532e87f6625348558e5c4323cd0ad41160..632427868b8a31701b4052ff32ef5f2ff41a6df7 100644 GIT binary patch literal 31329 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 A#{d8T literal 4553 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