⚓ Eurybia monitor model drift over time and securize model deployment with data validation

Overview

tests pypi pyversion license doc

🔍 Overview

Eurybia is a Python library which aims to help in :

  • Detecting data drift and model drift
  • Validate data before putting a model in production.

Eurybia addresses challenges of industrialisation and maintainability of machine learning models over time. Thus, it contributes for better model monitoring, model auditing and more generally AI governance.

To do so, Eurybia generates an HTML report:

🕐 Quickstart

The 3 steps to display results:

  • Step 1: Declare SmartDrift Object

    you need to pass at least 2 pandas DataFrames in order to instantiate the SmartDrift class (Current or production dataset, baseline or training dataset)

from eurybia import SmartDrift
sd = SmartDrift(
  df_current=df_current,
  df_baseline=df_baseline,
  deployed_model=my_model, # Optional: put in perspective result with importance on deployed model
  encoding=my_encoder # Optional: if deployed_model and encoder to use this model
  )
  • Step 2: Compile Model

    There are different ways to compile the SmartDrift object

sd.compile(
  full_validation=True, # Optional: to save time, leave the default False value. If True, analyze consistency on modalities between columns.
  date_compile_auc='01/01/2022', # Optional: useful when computing the drift for a time that is not now
  datadrift_file="datadrift_auc.csv", # Optional: name of the csv file that contains the performance history of data drift
  )
  • Step 3: Generate report

    The report's content will be enriched if you provided the datascience model (deployed) and its encoder. Note that providing the deployed_model and encoding will only produce useful results if the datasets are both usable by the model (i.e. all features are present, dtypes are correct, etc).

sd.generate_report(
  output_file='output/my_report_name.html',
  title_story="my_report_title",
  title_description="my_report_subtitle", # Optional: add a subtitle to describe report
  project_info_file='project_info.yml' # Optional: add information on report
  )

Report Example

🛠 Installation

Eurybia is intended to work with Python versions 3.7 to 3.9. Installation can be done with pip:

pip install eurybia

If you encounter compatibility issues you may check the corresponding section in the Eurybia documentation here.

🔥 Features

  • Display clear and understandable insightful report :

  • Allow Data Scientists to quickly explore drift thanks to dynamic reports to easily navigate between drift detection and datasets features.

In a nutshell :

  • Monitoring drift using a scheduler (like Airflow)

  • Evaluate level of data drift

  • Facilitate collaboration between data analysts and data scientists, and easily share and discuss results with non-Data users

More precisely :

  • Render data drift and model drift over time through :
    • Feature importance: features that discriminate the most the two datasets
    • Scatter plot: Feature importance relatively to the drift importance
    • Dataset analysis: distribution comparison between variable from the baseline dataset and the newest one
    • Predicted values analysis: distribution comparison between targets from the baseline dataset and the newest one
    • Performance of the data drift classifier
    • Features contribution for the data drift classifier
    • AUC evolution: comparison of data drift classifier at different period.
    • Model performance evolution: your model performances over time

📢 Why we made Eurybia

The visualization of the life cycle of a machine learning model can ease the understanding of Eurybia importance. During their life, ML models go through the following phases: Model learning, Model deployment, Model monitoring.

Let's respectively name features, target and prediction of a model X, Y and P(X, Y). P(X, Y) can be decompose as : P(X, Y) = P(Y|X)P(X), with P(Y|X), the conditional probability of ouput given the model features, and P(X) the probability density of the model features.

Data Validation : Validate that data used for production prediction are similar to training data or test data before deployment. With formulas, P(Xtraining) similar to P(XtoDeploy) Data drift : Evolution of the production data over time compared to training or test data before deployment. With formulas, compare P(Xtraining) to P(XProduction) Model drift : Model performances' evolution over time due to change in the target feature statistical properties (Concept drift), or due to change in data (Data drift). With formulas, when change in P(Y|XProduction) compared to P(Y|Xtraining) is concept drift. And change in P(Y,XProduction) compared to P(Y,Xtraining) is model drift

Eurybia helps data analysts and data scientists to collaborate through a report that allows them to exchange on drift monitoring and data validation before deploying model into production. Eurybia also contributes to data science auditing by displaying usefull information about any model and data in a unique report.

⚙️ How Eurybia detect data drift

Eurybia works mainly with a binary classification model (named datadrift classifier) that tries to predict whether a sample belongs to the training dataset (or baseline dataset) or to the production dataset (or current dataset).

As shown below on the diagram, there are 2 datasets, the baseline and the current one. Those datasets are those we wish to compare in order to assess if data drift occurred. On the first one we create a column named “target”, it will be filled only with 0, on the other hand on the second dataset we also add this column, but this time it will be filled only with 1 values. Our goal is to build a binary classification model on top of those 2 datasets (concatenated). Once trained, this model will be helpful to tell if there is any data drift. To do so we are looking at the model performance through AUC metric. The greater the AUC the greater the drift is. (AUC = 0.5 means no data drift and AUC close to 1 means data drift is occuring)

The explainability of this datadrift classifier allows to prioritise features that are important for drift and to focus on those that have the most impact on the model in production.

To use Eurybia to monitor drift over time, you can use a scheduler to make computations automatically and periodically. One of the schedulers you can use is Apache Airflow. To use it, you can read the official documentation and read blogs like this one: Getting started with Apache Airflow

🔬 Built With

This section list libraries used in Eurybia.

📖 Tutorials

This github repository offers a lot of tutorials to let you to quickly start using Eurybia.

Overview

Validate Data before model deployment

Measure and analyze Data drift

Measure and analyze Model drift

More details about report and plots

🔭 Roadmap

  • Concept Drift

Detecting drift concept and get analyses and explainability of this drift. An issue is open: Add Concept Drift

  • API mode

Adapting Eurybia for models consumed in API mode. An issue is open: Adapt Eurybia to API mode

If you want to contribute, you can contact us in the discussion tab

Comments
  •  CatBoostError: catboost/libs/train_lib/dir_helper.cpp:20: Can't create train working dir: catboost_info

    CatBoostError: catboost/libs/train_lib/dir_helper.cpp:20: Can't create train working dir: catboost_info

    Problem: when I runing SD.compile() on Databricks cluster I have this issue : CatBoostError: catboost/libs/train_lib/dir_helper.cpp:20: Can't create train working dir: catboost_info. Related to this [issue] (https://github.com/catboost/catboost/issues/1891 ), I add allow_writing_files=False in the definition of datadrift_classifier in SmartDrift Class and the problem disappear.

    Is it possible to add a optionnal parameter to set allow_writing_files=False in the definition of datadrift_classifier in SmartDrift Class ?

    opened by cleclegarcin79 2
  • Feature/python 3.10

    Feature/python 3.10

    Description

    Support Python 3.10 for Eurybia

    Fixes #32

    Type of change

    • [X] New feature (non-breaking change which adds functionality or feature that would cause existing functionality to not work as expected)

    Some details :

    • Update GitHub workflow.
    • Have to upgrade pytest dependencie (source)
    • Update README.md.

    How Has This Been Tested?

    • Local pytest & github action for python 3.7, 3.8, 3.9 & 3.10.

    Test Configuration:

    • OS: Linux
    • Python version: 3.10.6
    • Eurybia version: 1.0.2

    Checklist:

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [x] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes
    • [ ] Any dependent changes have been merged and published in downstream modules
    opened by armgilles 0
  • support for python 3.10

    support for python 3.10

    Description of Problem:

    Python 3.10 is more and more used

    Overview of the Solution:

    Support of 3.10. Check dependencies, run tests, adapt GitHub workflow to 3.10, etc.

    Similair issue for Shapash https://github.com/MAIF/shapash/issues/293

    opened by armgilles 0
  • :arrow_up: upgrade sklearn compatiblity

    :arrow_up: upgrade sklearn compatiblity

    Description

    Upgrade sklearn

    Fixes #30

    Type of change

    Please delete options that are not relevant.

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality or feature that would cause existing functionality to not work as expected)
    • [ ] This change requires a documentation update

    How Has This Been Tested?

    Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

    • pytest

    Test Configuration:

    • OS:Linux
    • Python version:3.8
    • Eurybia version:1.0.2

    Checklist:

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes
    • [ ] Any dependent changes have been merged and published in downstream modules
    opened by armgilles 0
  • Allow datetime columns

    Allow datetime columns

    Description of Problem:

    You can't pass datetime columns in eurybia

    
    ...
    sd = SmartDrift(
      df_current=df_current,   # with datetime column
      df_baseline=df_baseline  # with datetime column
    )
    sd.compile(full_validation=True)
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    File _catboost.pyx:1130, in _catboost._FloatOrNan()
    
    TypeError: float() argument must be a string or a number, not 'Timestamp'
    
    During handling of the above exception, another exception occurred:
    
    TypeError                                 Traceback (most recent call last)
    File _catboost.pyx:2275, in _catboost.get_float_feature()
    
    File _catboost.pyx:1132, in _catboost._FloatOrNan()
    
    TypeError: Cannot convert obj 2022-01-01 00:00:00 to float
    
    During handling of the above exception, another exception occurred:
    
    CatBoostError                             Traceback (most recent call last)
    Cell In [25], line 1
    ----> 1 sd.compile(full_validation=True)
    
    File ~/github/eurybia/eurybia/core/smartdrift.py:305, in SmartDrift.compile(self, full_validation, ignore_cols, sampling, sample_size, datadrift_file, date_compile_auc, hyperparameter, attr_importance)
        302 x_test = test[varz]
        303 y_test = test[self._datadrift_target]
    --> 305 xpl.compile(x=x_test)
        306 xpl.compute_features_import(force=True)
        308 self.xpl = xpl
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/shapash/explainer/smart_explainer.py:267, in SmartExplainer.compile(self, x, contributions, y_pred)
        264 self.x_init = inverse_transform(self.x_encoded, self.preprocessing)
        265 self.y_pred = check_ypred(self.x_init, y_pred)
    --> 267 self._get_contributions_from_backend_or_user(x, contributions)
        268 self.check_contributions()
        270 self.columns_dict = {i: col for i, col in enumerate(self.x_init.columns)}
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/shapash/explainer/smart_explainer.py:288, in SmartExplainer._get_contributions_from_backend_or_user(self, x, contributions)
        285 def _get_contributions_from_backend_or_user(self, x, contributions):
        286     # Computing contributions using backend
        287     if contributions is None:
    --> 288         self.explain_data = self.backend.run_explainer(x=x)
        289         self.contributions = self.backend.get_local_contributions(x=x, explain_data=self.explain_data)
        290     else:
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/shapash/backend/shap_backend.py:34, in ShapBackend.run_explainer(self, x)
         20 def run_explainer(self, x: pd.DataFrame) -> dict:
         21     """
         22     Computes and returns local contributions using Shap explainer
         23 
       (...)
         32         local contributions
         33     """
    ---> 34     contributions = self.explainer(x, **self.explainer_compute_args)
         35     explain_data = dict(contributions=contributions.values)
         36     return explain_data
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/shap/explainers/_tree.py:217, in Tree.__call__(self, X, y, interactions, check_additivity)
        214     feature_names = getattr(self, "data_feature_names", None)
        216 if not interactions:
    --> 217     v = self.shap_values(X, y=y, from_call=True, check_additivity=check_additivity, approximate=self.approximate)
        218     if type(v) is list:
        219         v = np.stack(v, axis=-1) # put outputs at the end
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/shap/explainers/_tree.py:367, in Tree.shap_values(self, X, y, tree_limit, approximate, check_additivity, from_call)
        365     import catboost
        366     if type(X) != catboost.Pool:
    --> 367         X = catboost.Pool(X, cat_features=self.model.cat_feature_indices)
        368     phi = self.model.original_model.get_feature_importance(data=X, fstr_type='ShapValues')
        370 # note we pull off the last column and keep it as our expected_value
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/catboost/core.py:790, in Pool.__init__(self, data, label, cat_features, text_features, embedding_features, embedding_features_data, column_description, pairs, delimiter, has_header, ignore_csv_quoting, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, timestamp, feature_names, feature_tags, thread_count, log_cout, log_cerr)
        784         if isinstance(feature_names, PATH_TYPES):
        785             raise CatBoostError(
        786                 "feature_names must be None or have non-string type when the pool is created from "
        787                 "python objects."
        788             )
    --> 790         self._init(data, label, cat_features, text_features, embedding_features, embedding_features_data, pairs, weight,
        791                    group_id, group_weight, subgroup_id, pairs_weight, baseline, timestamp, feature_names, feature_tags, thread_count)
        792 super(Pool, self).__init__()
    
    File ~/anaconda3/envs/eurybia/lib/python3.8/site-packages/catboost/core.py:1411, in Pool._init(self, data, label, cat_features, text_features, embedding_features, embedding_features_data, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, timestamp, feature_names, feature_tags, thread_count)
       1409 if feature_tags is not None:
       1410     feature_tags = self._check_transform_tags(feature_tags, feature_names)
    -> 1411 self._init_pool(data, label, cat_features, text_features, embedding_features, embedding_features_data, pairs, weight,
       1412                 group_id, group_weight, subgroup_id, pairs_weight, baseline, timestamp, feature_names, feature_tags, thread_count)
    
    File _catboost.pyx:3941, in _catboost._PoolBase._init_pool()
    
    File _catboost.pyx:4008, in _catboost._PoolBase._init_pool()
    
    File _catboost.pyx:3914, in _catboost._PoolBase._init_objects_order_layout_pool()
    
    File _catboost.pyx:3422, in _catboost._set_data()
    
    File _catboost.pyx:3405, in _catboost._set_data_from_generic_matrix()
    
    File _catboost.pyx:2277, in _catboost.get_float_feature()
    
    CatBoostError: Bad value for num_feature[non_default_doc_idx=0,feature_idx=0]="2022-01-01 00:00:00": Cannot convert obj 2022-01-01 00:00:00 to float
    

    But in some use case, Eurybia should be useful to analyse difference between 2 dataset with temporal information (like seasonal information). If users only want to get some analysis about difference between 2 dataset, it should be done (via AUC). But if users want to reuse a model to get importance, this should raise an error (and invite him to drop datetime columns as it can't be done).

    Overview of the Solution:

    • If there are datetime columns in datasets, automatically create years / month / day features based on this column and drop original one.
    • If deployed_model is filled in SmartDrift then raised an error.

    Examples:

    import pandas as pd
    import numpy as np
    from lightgbm import LGBMRegressor
    from eurybia import SmartDrift
    
    # Create random dataset
    date_list = pd.date_range(start='01/01/2022', end='01/30/2022')
    X1 = np.random.rand(len(date_list))
    X2 = np.random.rand(len(date_list))
    
    df_current = pd.DataFrame(date_list, columns=['date'])
    df_current['col1'] = X1 
    df_baseline = pd.DataFrame(date_list, columns=['date'])
    df_baseline['col1'] = X2
    
    sd = SmartDrift(df_current=df_current,
      				df_baseline=df_baseline)
    # Datetime columns will be transform into df_current
    # Datetime columns will be transform into df_baseline
    
    sd.compile(full_validation=True)
    
    # Bloc user when using model
    # Random models
    regressor = LGBMRegressor(n_estimators=2).fit(df_baseline[['col1']], 
                                                  df_baseline[['col1']])
    
    sd = SmartDrift(df_current=df_current,
      				df_baseline=df_baseline,
      				deployed_model=regressor)
    sd.compile(full_validation=True)
    # Error
    # Raising error
    

    Blockers:

    Definition of Done:

    Some tests

    opened by armgilles 0
  • :bug: fix dataset names

    :bug: fix dataset names

    Description

    Fixes #25 Add a unit test Some changes with pre-commit

    Type of change

    • [x] Bug fix (non-breaking change which fixes an issue)

    How Has This Been Tested?

    Test Configuration:

    • OS:Linux
    • Python version:3.9
    • Eurybia version:1.0.1

    Checklist:

    All tests pass

    opened by ThomasBouche 0
  • Bug when use of parameter dataset_names and model

    Bug when use of parameter dataset_names and model

    Bug when use of parameter dataset_names and model, The code has not been adapted to the addition of the "dataset_names" parameter. See the error message below : On SD.compile() image image image

    Fix this bug and look to add unit test

    opened by ThomasBouche 0
  • add description

    add description "dataset_names"

    Add a description to use parameter dataset_names in SmartDrift(): dataset_names={"df_current": "Current dataset Name", "df_baseline": "Baseline dataset Name"} # Optional: Names for outputs

    opened by ThomasBouche 0
  • fix bug and change template default plotly

    fix bug and change template default plotly

    Description

    fix bug and change template default plotly Fixes #18

    How Has This Been Tested?

    Test Configuration:

    • OS:Linux
    • Python version:3.9
    • Eurybia version:1.0.1

    All tests pass

    opened by ThomasBouche 0
  • Feature/lighten tutorials

    Feature/lighten tutorials

    Lightened tutos by temporarily changing plotly outputs to png (not apprent in the tutorials, users will have proper plotly graphs when they execute theh tutos) Fixed seaborn version

    opened by githubyako 0
  • add exeption for stats test

    add exeption for stats test

    Description

    When error during _compute_datadrift_stat_test, display columns in errors for help user to fix error More, add a condition to _compute_datadrift_stat_test, because, method useless without deployed_model

    All test pass

    opened by ThomasBouche 0
  • Getting modulenotfound error while importing eurybia

    Getting modulenotfound error while importing eurybia

    Hi, I'm using Databricks to find data drift for a model, but when I install eurybia and try import, I keep getting ModuleNotFoundError: No module named 'tkinter'. But, I think tkinter in pre intsalled in python, right? image Any help on how I can solve this issue?

    opened by PranavGuptInd 13
  • Univariate analysis column selector back to 1st column

    Univariate analysis column selector back to 1st column

    In report HTML in Univariate analysis, when you select a column to analyse your result, the box (dash line) come back to the first column. This can cause a misunderstanding :

    image

    opened by armgilles 1
  • Colors consistency in datadrift analysis

    Colors consistency in datadrift analysis

    The baseline and current datasets colors are not always consistent from variable to variable (e.g. current dataset is blue for var 1, then brown for var 2)

    opened by githubyako 0
  • Adapt Eurybia to API mode

    Adapt Eurybia to API mode

    Description of Problem: Eurybia is currently designed to detect drift on data built in batch mode. If deployed model consumes and does the data preparation in API mode, we have not yet thought of how to use Eurybia on these data as they come in.

    Overview of the Solution: One answer is to concatenate this data over the API calls and then run Eurybia after a while. One of the limitations is that the compilation may come late to ensure good data quality

    opened by ThomasBouche 0
  • Add Concept Drift

    Add Concept Drift

    Description of Problem: Data drift is not necessarily sufficient to explain evolution of performance of deployed model. The concept drift would complete the explanation of the evolution of performance. And in addition, to project the future behaviour of the model

    Overview of the Solution: A first solution is to re-train the same type of model on df_baseline and df_current. And then compare the explainability of these two models. This comparison can be done with the Shapash library

    opened by ThomasBouche 0
Releases(1.1.0)
Code, Data and Demo for Paper: Controllable Generation from Pre-trained Language Models via Inverse Prompting

InversePrompting Paper: Controllable Generation from Pre-trained Language Models via Inverse Prompting Code: The code is provided in the "chinese_ip"

THUDM 101 Dec 16, 2022
基于pytorch构建cyclegan示例

cyclegan-demo 基于Pytorch构建CycleGAN示例 如何运行 准备数据集 将数据集整理成4个文件,分别命名为 trainA, trainB:训练集,A、B代表两类图片 testA, testB:测试集,A、B代表两类图片 例如 D:\CODE\CYCLEGAN-DEMO\DATA

Koorye 3 Oct 18, 2022
The InterScript dataset contains interactive user feedback on scripts generated by a T5-XXL model.

Interscript The Interscript dataset contains interactive user feedback on a T5-11B model generated scripts. Dataset data.json contains the data in an

AI2 8 Dec 01, 2022
Source code of the paper PatchGraph: In-hand tactile tracking with learned surface normals.

PatchGraph This repository contains the source code of the paper PatchGraph: In-hand tactile tracking with learned surface normals. Installation Creat

Paloma Sodhi 11 Dec 15, 2022
AI Face Mesh: This is a simple face mesh detection program based on Artificial intelligence.

AI Face Mesh: This is a simple face mesh detection program based on Artificial Intelligence which made with Python. It's able to detect 468 different

Md. Rakibul Islam 1 Jan 13, 2022
Understanding Convolutional Neural Networks from Theoretical Perspective via Volterra Convolution

nnvolterra Run Code Compile first: make compile Run all codes: make all Test xconv: make npxconv_test MNIST dataset needs to be downloaded, converted

1 May 24, 2022
MISSFormer: An Effective Medical Image Segmentation Transformer

MISSFormer Code for paper "MISSFormer: An Effective Medical Image Segmentation Transformer". Please read our preprint at the following link: paper_add

Fong 22 Dec 24, 2022
This repository contains several jupyter notebooks to help users learn to use neon, our deep learning framework

neon_course This repository contains several jupyter notebooks to help users learn to use neon, our deep learning framework. For more information, see

Nervana 92 Jan 03, 2023
FastReID is a research platform that implements state-of-the-art re-identification algorithms.

FastReID is a research platform that implements state-of-the-art re-identification algorithms.

JDAI-CV 2.8k Jan 07, 2023
This program automatically runs Python code copied in clipboard

CopyRun This program runs Python code which is copied in clipboard WARNING!! USE AT YOUR OWN RISK! NO GUARANTIES IF ANYTHING GETS BROKEN. DO NOT COPY

vertinski 4 Sep 10, 2021
K-Nearest Neighbor in Pytorch

Pytorch KNN CUDA 2019/11/02 This repository will no longer be maintained as pytorch supports sort() and kthvalue on tensors. git clone https://github.

Chris Choy 65 Dec 01, 2022
An official implementation of "Background-Aware Pooling and Noise-Aware Loss for Weakly-Supervised Semantic Segmentation" (CVPR 2021) in PyTorch.

BANA This is the implementation of the paper "Background-Aware Pooling and Noise-Aware Loss for Weakly-Supervised Semantic Segmentation". For more inf

CV Lab @ Yonsei University 59 Dec 12, 2022
This repository contains the DendroMap implementation for scalable and interactive exploration of image datasets in machine learning.

DendroMap DendroMap is an interactive tool to explore large-scale image datasets used for machine learning. A deep understanding of your data can be v

DIV Lab 33 Dec 30, 2022
Prior-Guided Multi-View 3D Head Reconstruction

Prior-Guided Head MVS This repository includes some reconstruction results of our IEEE TMM 2021 paper, Prior-Guided Multi-View 3D Head Reconstruction.

11 Aug 17, 2022
Safe Model-Based Reinforcement Learning using Robust Control Barrier Functions

README Repository containing the code for the paper "Safe Model-Based Reinforcement Learning using Robust Control Barrier Functions". Specifically, an

Yousef Emam 13 Nov 24, 2022
[ICCV'2021] Image Inpainting via Conditional Texture and Structure Dual Generation

[ICCV'2021] Image Inpainting via Conditional Texture and Structure Dual Generation

Xiefan Guo 122 Dec 11, 2022
BESS: Balanced Evolutionary Semi-Stacking for Disease Detection via Partially Labeled Imbalanced Tongue Data

Balanced-Evolutionary-Semi-Stacking Code for the paper ''BESS: Balanced Evolutionary Semi-Stacking for Disease Detection via Partially Labeled Imbalan

0 Jan 16, 2022
Repo for EMNLP 2021 paper "Beyond Preserved Accuracy: Evaluating Loyalty and Robustness of BERT Compression"

beyond-preserved-accuracy Repo for EMNLP 2021 paper "Beyond Preserved Accuracy: Evaluating Loyalty and Robustness of BERT Compression" How to implemen

Kevin Canwen Xu 10 Dec 23, 2022
This repository contains the code for TABS, a 3D CNN-Transformer hybrid automated brain tissue segmentation algorithm using T1w structural MRI scans

This repository contains the code for TABS, a 3D CNN-Transformer hybrid automated brain tissue segmentation algorithm using T1w structural MRI scans. TABS relies on a Res-Unet backbone, with a Vision

6 Nov 07, 2022
[ICML 2021] DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning | 斗地主AI

[ICML 2021] DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning DouZero is a reinforcement learning framework for DouDizhu (斗地主), t

Kwai Inc. 3.1k Jan 04, 2023