Observed since 20 Oct, 18:15 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
acleto
A Library for active learning. Supports text classification and sequence tagging tasks.
ALToolbox is a framework for practical active learning in NLP.
Installation | Quick Start | Overview | Docs | Citation
ALToolbox is a framework for active learning annotation in natural language processing. Currently, the framework supports text classification and sequence tagging tasks. ALToolbox provides state-of-the-art query strategies, serverless annotation tool for Jupyter IDE, and a set of tools that help to reduce computational overhead / duration of AL iterations and increase annotated data reusability.
pip install acleto
To annotate instances for active learning in Jupyter Notebook or Jupyter Lab one have to install additional widget after framework installation. In case of Jupyter Notebook usage run:
jupyter nbextension install --py --symlink --sys-prefix text_selector
jupyter nbextension enable --py --sys-prefix text_selector
In case of Jupyter Lab usage run:
jupyter labextension install js
jupyter labextension install text_selector
For quick start, please see the examples of launching an active learning annotation or benchmarking a novel query stategy / unlabeled pool subsampling strategy for sequence tagging and text classification tasks:
| # | Notebook |
|---|---|
| 1 | Launching Active Learning for Token Classification |
| 2 | Launching Active Learning for Text Classification |
| 3 | Benchmarking a novel AL query strategy / unlabeled pool subsampling strategy |
Our framework provides a serverless GUI annotation tool integrated into the Jupyter IDE:
TODO:
The configs folder contains config files with general settings. The experiments folder contains config files with experimental design. To run an experiment with a chosen configuration, specify config file name in HYDRA_CONFIG_NAME variable and run train.sh script (see ./examples/al for details).
For example to launch PLASM on AG-News with ELECTRA as a successor model:
cd PATH_TO_THIS_REPO
HYDRA_CONFIG_PATH=../experiments/ag_news HYDRA_EXP_CONFIG_NAME=ag_plasm python active_learning/run_tasks_on_multiple_gpus.py
cuda_devices: list of CUDA devices to use: one experiment on one CUDA device. cuda_devices=[0,1] means using zero-th and first devices.config_name: name of config from configs folder with general settings: dataset, experiment setting (e.g. LC/ASM/PLASM), model checkpoints, hyperparameters etc.config_path: path to config with general settings.command: .py file to run. For AL experiments, use run_active_learning.py.args: arguments to modify from a general config in the current experiment. acquisition_model.name=xlnet-base-cased means that xlnet-base-cased will be used as an acquisition model.seeds: random seeds to use. seeds=[4837, 23419] means that two separate experiments with the same settings (except for seed) will be run: one with seed == 4837, one with seed == 23419.By default, the results will be present in the folder RUN_DIRECTORY/workdir_run_active_learning/DATE_OF_RUN/${TIME_OF_RUN}_${SEED}_${MODEL_CHECKPOINT}. For instance, when launching from the repository folder: al_nlp_feasible/workdir/run_active_learning/2022-06-11/15-59-31_23419_distilbert_base_uncased_bert_base_uncased.
acquisition_metrics.json.successor_metrics.json.target_tracin_quantile_-1.0_metrics.json (-1.0 stands for the filtering value, meaning adaptive filtering rate; when using a deterministic filtering rate (e.g. 0.1), the file will be named target_tracin_quantile_0.1_metrics.json). The file with the metrics of the model without filtering is target_metrics.json.Our framework provides tools for effective data post-processing for its re-usability and a possibility to build powerful models on it.
PLASM, which aims to alleviate the acquisition-successor mismatch problem and allow to build a model of an
arbitrary type using the labeled data without performance degradation, is implemented in post_processing/pipeline_plasm.
It uses the config cls_plasm / ner_plasm (from `jupyterlab_demo/configs). A brief explanation of the config structure:
labeling_model;successor_model;post_processing:
label_smoothing: str / float / None, a parameter for label smoothing (LS) for pseudo-labeled instances. Accepts several options:
labeled_weight: int / float, weight for the labeled-by-human data. 1 < value < +infuse_subsample_for_pl: int / float / None, the size of the subsample used for pseudo-labeling
(float means taking the share of the unlabeled data). None means that no subsampling is used.uncertainty_threshold: float / None, the value of the threshold for filtering by uncertainty. If None,
no filtering by uncertainty is used.filter_by_quantile: bool, only used for classification, ignored if uncertainty_threshold is None. If True, uncertainty_threshold
most uncertain instances are filtered. Otherwise, all instances whose (1 - max_prob) < uncertainty_threshold are filtered.tracin:
use: bool, whether to use TracIn for filteringmax_num_processes: int, value > 0, maximum number of processes per one GPUquantile: str / float (0 < value < 1), share of unlabeled data instances to filter using the TracIn score.num_model_checkpoints: int, value > 0, how many model checkpoints to save and use for TracIn.nu: float / int, value for TracIn algorithm.An AL query strategy should be designed as a function that:
model of inherited class TransformersBaseWrapper or PytorchEncoderWrapper or FlairModelWrapper: model wrapper;
- X_pool of class Dataset or TransformersDataset: dataset with the unlabeled instances;
- n_instances of class int: number of instances to query;
- kwargs: additional strategy-specific arguments.query_idx of class array-like: array with the indices of the queried instances;query of class Dataset or TransformersDataset: dataset with the queried instances;uncertainty_estimates of class np.ndarray: uncertainty estimates of the instances from X_pool. The higher the value - the more uncertain the model is in the instance.The function with the strategy should be named the same as the file where it is placed (e.g. function def my_strategy inside a file path_to_strategy/my_strategy.py).
Use your strategy, setting al.strategy=PATH_TO_FILE_YOUR_STRATEGY in the experiment config.
The example is presented in examples/benchmark_custom_strategy.ipynb
The addition of a new pool subsampling query strategy is similar to the addition of an AL query strategy. A subsampling strategy should be designed as a function that:
uncertainty_estimates of class np.ndarray: uncertainty estimates of the instances in the order they are stored in the unlabeled data;
- gamma_or_k_confident_to_save of class float or int: either a share / number of instances to save (as in random / naive subsampling) or an internal parameter (as in UPS);
- kwargs: additional subsampling strategy specific arguments.np.ndarray.The function with the strategy should be named the same as the file where it is placed (e.g. function def my_subsampling_strategy inside a file path_to_strategy/my_subsampling_strategy.py).
Use your subsampling strategy, setting al.sampling_type=PATH_TO_FILE_YOUR_SUBSAMPLING_STRATEGY in the experiment config.
The example is presented in examples/benchmark_custom_strategy.ipynb
The research has employed 2 Token Classification datasets (CoNLL-2003, OntoNotes-2012) and 2 Text Classification datasets (AG-News, IMDB). If one wants to launch an experiment on a custom dataset, they need to use one of the following ways to add it:
config.data.path=datasets, config.data.dataset_name=DATASET_NAME, config.data.text_name=COLUMN_WITH_TEXT_OR_TOKENS_NAME, config.data.label_name=COLUMN_WITH_LABELS_OR_NER_TAGS_NAMEconfig.data.path=PATH_TO_THIS_REPO/data, config.data.dataset_name=DATASET_NAME, config.data.text_name=COLUMN_WITH_TEXT_OR_TOKENS_NAME, config.data.label_name=COLUMN_WITH_LABELS_OR_NER_TAGS_NAME* - only for Token Classification datasets
** - only for Text Classification datasets
The current version of the repository supports all models from HuggingFace Transformers, which can be used with AutoModelForSequenceClassification / AutoModelForTokenClassification classes (for Text / Token classification). For CNN-based / BiLSTM-CRF models, please see the al_cls_cnn.yaml / al_ner_bilstm_crf_flair.yaml configs from ./configs folder for details.
By default, the tests will be run on the cuda:0 device if CUDA is available or on CPU, otherwise. If one wants to manually specify the device for running the tests:
CUDA_VISIBLE_DEVICES="" python -m pytest PATH_TO_REPO/tests;CUDA_VISIBLE_DEVICES="DEVICE_OR_DEVICES_NUMBER" python -m pytest PATH_TO_REPO/tests.We recommend to use CPU for the robustness of the results. The tests for CUDA are written under Tesla V100-SXM3 32GB, CUDA V.10.1.243.
FAMIE, Small-Text, modAL, ALiPy, libact
В© 2022 Autonomous Non-Profit Organization "Artificial Intelligence Research Institute" (AIRI). All rights reserved.
Licensed under the MIT License.
Download counts and popularity will appear here as the collector receives them.
Declarations describe requirements; they are not a resolved dependency graph.
sdist · 169.12 KB · Python source
Observed since 20 Oct, 18:15 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:1f4bad2cd52afe2c17cf2d138fb369b5853edf159d645c2dbb15309b7b6813b4