This example trains a named entity recognition (NER) model using Blind
Learning. The underlying protocol uses the DistilBERT model architecture
and loads the checkpoint "distilbert/distilbert-base-uncased" from
HuggingFace, located at:
  https://huggingface.co/distilbert/distilbert-base-uncased


The example includes three steps, each in a separate module:

1_position_data.py:
  Load and position the example data "synthetic_data.csv" as an asset.
  The dataset is positioned by the data provider `example_user2` and
  creates an agreement with `example_user3` for the NLP_TRAIN protocol
  used in the next step.

2_model_train.py":
  The researcher represented by `example_user_3` trains a model on data
  owned by example_user_2's organization, selecting the desired training
  hyperparameters.  The training occurs using Blind Learning, protecting
  the privacy of three data owners throughout the process.

3_local_inference.py:
  The researcher retrieves the trained model and runs a local inference
  against a test data example.


In order to use this protocol for NER, the training samples should be
in the following format:
   "text", [[start, end, 'entity_type']]
For example, a single sample could look like the following:
   "Lisinopril was prescribed for John", [[0,9,'DRUG'], [30,33, 'NAME']]

Finally note that the protocol requires the columns in the training data
to be named "text" and "entities" for the columns of unstructured text
and target entities, respectively.  To work with differently named
columns, you can find the data column name in the Data Profile page on
the Router's UI, then perform the renaming in a preprocessor step.
