# Table of Contents - [Cleanlab Studio | Cleanlab Documentation](#cleanlab-studio-cleanlab-documentation) - [Python API Reference for Cleanlab Studio | Cleanlab Documentation](#python-api-reference-for-cleanlab-studio-cleanlab-documentation) - [Docs | Cleanlab Documentation](#docs-cleanlab-documentation) - [Getting Started with Cleanlab Studio Python API | Cleanlab Documentation](#getting-started-with-cleanlab-studio-python-api-cleanlab-documentation) - [Getting Started with Cleanlab Studio CLI | Cleanlab Documentation](#getting-started-with-cleanlab-studio-cli-cleanlab-documentation) - [Cleanlab Studio Documentation](#cleanlab-studio-documentation) - [Datasets | Cleanlab Documentation](#datasets-cleanlab-documentation) - [Concepts | Cleanlab Documentation](#concepts-cleanlab-documentation) - [Projects | Cleanlab Documentation](#projects-cleanlab-documentation) - [Models | Cleanlab Documentation](#models-cleanlab-documentation) - [Cleanlab Columns | Cleanlab Documentation](#cleanlab-columns-cleanlab-documentation) - [Resolver | Cleanlab Documentation](#resolver-cleanlab-documentation) - [Welcome to the Cleanlab Studio tutorials! | Cleanlab Documentation](#welcome-to-the-cleanlab-studio-tutorials-cleanlab-documentation) - [Using Filters and Analytics to Understand Your data | Cleanlab Documentation](#using-filters-and-analytics-to-understand-your-data-cleanlab-documentation) - [AI Automated Data Labeling with Cleanlab Studio](#ai-automated-data-labeling-with-cleanlab-studio) - [Cleanset | Cleanlab Documentation](#cleanset-cleanlab-documentation) - [Overview | Cleanlab Documentation](#overview-cleanlab-documentation) - [Datasets | Cleanlab Documentation](#datasets-cleanlab-documentation) - [Frequently Asked Questions | Cleanlab Documentation](#frequently-asked-questions-cleanlab-documentation) - [Data Curation with Train vs Test Splits](#data-curation-with-train-vs-test-splits) - [Trustworthy Language Model (TLM) | Cleanlab Documentation](#trustworthy-language-model-tlm-cleanlab-documentation) - [How to Automatically Curate Multi-Label Datasets](#how-to-automatically-curate-multi-label-datasets) - [Instant ML Model Training + Deployment for Multi-Label Data](#instant-ml-model-training-deployment-for-multi-label-data) - [Dynamically evolve your classification datasets by adding new classes](#dynamically-evolve-your-classification-datasets-by-adding-new-classes) - [Automatically Find and Fix Issues in Any Text Dataset](#automatically-find-and-fix-issues-in-any-text-dataset) - [Automatically Find and Fix Issues in Any Tabular Dataset](#automatically-find-and-fix-issues-in-any-tabular-dataset) - [Curating Heterogeneous Document Datasets with Data-Centric AI](#curating-heterogeneous-document-datasets-with-data-centric-ai) - [AI to Detect Data Entry Errors (and Impute Missing Values) in any Tabular Dataset](#ai-to-detect-data-entry-errors-and-impute-missing-values-in-any-tabular-dataset) - [Catching Issues in a Product Catalog (Multimodal Dataset)](#catching-issues-in-a-product-catalog-multimodal-dataset-) - [How to Produce Better-Quality Data 10x Faster in any Data Annotation Platform](#how-to-produce-better-quality-data-10x-faster-in-any-data-annotation-platform) - [Automated Data Quality for Large-Scale Image Datasets](#automated-data-quality-for-large-scale-image-datasets) - [Formatting common types of Python text datasets | Cleanlab Documentation](#formatting-common-types-of-python-text-datasets-cleanlab-documentation) - [Detecting Issues in Named Entity Recognition Datasets](#detecting-issues-in-named-entity-recognition-datasets) - [Automatically Detect Erroneous Values in Numerical Data via AI](#automatically-detect-erroneous-values-in-numerical-data-via-ai) - [How to detect issues in datasets without labels (unsupervised learning)](#how-to-detect-issues-in-datasets-without-labels-unsupervised-learning-) --- # Cleanlab Studio | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [Cleanlab Studio](https://app.cleanlab.ai/) is an AI-powered data curation tool used by thousands of analysts, data scientists, and engineers to improve the quality of their data and resulting model/analytics. Quickly get started via [tutorials](/studio/tutorials/) that cover specific use-cases. Learn more about Cleanlab Studio features via the [Concepts](/studio/concepts/) guide. Getting Started[​](#getting-started "Direct link to Getting Started") ---------------------------------------------------------------------- Cleanlab Studio offers three workflows, so you have the ability to choose how you’d like to improve your data. ### Cleanlab Studio Web Interface[​](#cleanlab-studio-web-interface "Direct link to Cleanlab Studio Web Interface") Web-based [interface](https://app.cleanlab.ai/) that facilitates quick data curation without you having to write any code. Get started [here](/studio/quickstart/web/) . ![Cleanlab Studio Project View](/assets/images/web-c363051d37026566b48495ff2393e16d.png) ### Cleanlab Studio Python API[​](#cleanlab-studio-python-api "Direct link to Cleanlab Studio Python API") Python API for programmatic data curation that offers additional capabilities beyond the Web Interface. Get started [here](/studio/quickstart/api/) . ![Cleanlab Studio API view](/assets/images/api-fefb558f428f86e2ff223a883a574e94.jpg) ### Cleanlab Studio Command Line (CLI)[​](#cleanlab-studio-command-line-cli "Direct link to Cleanlab Studio Command Line (CLI)") Minimal command line interface for direct access to the smart metadata [columns](/studio/concepts/cleanlab_columns/) that Cleanlab Studio produces for your data. Get started [here](/studio/quickstart/cli/) . ![Cleanlab Studio CLI view](/assets/images/cli-5959ff54e5f2d3abc04e662e39e78e48.png) Need help?[​](#need-help "Direct link to Need help?") ------------------------------------------------------ Our team of experts is here to support your Data/AI projects! See various ways to get help on our [Community](/community/) page. Remember: Cleanlab Studio works for image, text, and structured/tabular datasets! Some Cleanlab functionalities may be demonstrated here for say an image dataset, but you can apply the same functionality to data from the other two modalities. * [Getting Started](#getting-started) * [Cleanlab Studio Web Interface](#cleanlab-studio-web-interface) * [Cleanlab Studio Python API](#cleanlab-studio-python-api) * [Cleanlab Studio Command Line (CLI)](#cleanlab-studio-command-line-cli) * [Need help?](#need-help) --- # Python API Reference for Cleanlab Studio | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) [📄️ studio\ ----------\ \ Python API for Cleanlab Studio.](/studio/api/python/studio/) [📄️ enrichment\ --------------\ \ Methods for interfacing with Enrichment Projects.](/studio/api/python/enrichment/) [📄️ inference\ -------------\ \ Methods for interfacing with deployed ML models (to produce predictions).](/studio/api/python/inference/) [📄️ utils.synthetic\ -------------------\ \ Collection of utility functions for Cleanlab Studio Python API](/studio/api/python/utils.synthetic/) --- # Docs | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) Build with Cleanlab. ==================== Find tutorials, sample code, developer guides, and API references. Explore documentation by product. [![Cleanlab Logo](/assets/images/cleanlab-codex-black-0795fae28bb9b0ed86750c04f2b7fef7.png)![Cleanlab Logo](/assets/images/cleanlab-codex-white-c29193c0d87dd9c12d52c1384a2efc6e.png)\ \ Automated detection and resolution of RAG inaccuracies. Identify and fill knowledge gaps and more in your RAG system.\ \ Explore docs](/codex/) [![Cleanlab Logo](data:image/png;base64,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)![Cleanlab Logo](/assets/images/cleanlab-tlm-white-41737ec556e91e1bc5f719e0ee2dd9cd.png)\ \ Automated evaluation and hallucination detection. Get trustworthiness scores and explanations for your LLM outputs.\ \ Explore docs](/tlm/) [![Cleanlab Logo](/assets/images/cleanlab-studio-black-548e50640c7e501c29935bba6b67a0c9.png)![Cleanlab Logo](/assets/images/cleanlab-studio-white-57c0a3d0598cb8fece08c801f93ceab8.png)\ \ Automatically find and fix errors in your real-world data. Turn unreliable data into reliable models and insights.\ \ Explore docs](/studio/quickstart/) RESOURCES Looking for support? -------------------- Cleanlab has a large network of engaged scientists who are actively using our products, as well as a team of support engineers ready to answer any question you might have about the Cleanlab suite of products. [Contact support](mailto:support@cleanlab.ai) [Contact sales](mailto:sales@cleanlab.ai) [Cleanlab Slack Community\ \ Join the conversation on Slack.\ \ Join](https://cleanlab-community.slack.com/) --- # Getting Started with Cleanlab Studio Python API | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page Instead of the [web application](https://app.cleanlab.ai/) interface, you can also use Cleanlab Studio programmatically via the [Python API](/studio/api/python/studio/) , which unlocks many additional capabilities. This requires: 1. Python >= 3.8 2. A [Cleanlab account](https://app.cleanlab.ai/) Installation[​](#installation "Direct link to Installation") ------------------------------------------------------------- Install the Cleanlab Studio client [from PyPI](https://pypi.org/project/cleanlab-studio/) with: pip install cleanlab-studio If you already have the client installed and wish to upgrade to the latest version, run: pip install --upgrade cleanlab-studio Some of the recently added tutorials in this documentation may not work unless you have upgraded to the latest version of the client. In case you’re curious, the source code for the client is available on [GitHub](https://github.com/cleanlab/cleanlab-studio) . API Key[​](#api-key "Direct link to API Key") ---------------------------------------------- To use Cleanlab Studio programmatically, you must get your API key. First, open your [account page in the Cleanlab Studio web application](https://app.cleanlab.ai/account) . If you’re not already logged in, do so now. The API key can be copied from your account page. Running Cleanlab Studio programmatically[​](#running-cleanlab-studio-programmatically "Direct link to Running Cleanlab Studio programmatically") ------------------------------------------------------------------------------------------------------------------------------------------------- The starting point for using Cleanlab Studio is loading a [Dataset](/studio/concepts/datasets/) and then creating a [Project](/studio/concepts/projects/) . When you do these actions programmatically via the [Python API](/studio/api/python/studio/) , you can access the resulting data/results both from your Python session and the [web application](https://app.cleanlab.ai/) . The generally available version of Cleanlab Studio can be used for image, text, and structured/tabular datasets. Here are introductory tutorials to start using the application programmatically for data from each modality: * [image data quickstart tutorial](/studio/tutorials/cleanlab-studio-api/image_data_quickstart/) * [text data quickstart tutorial](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) * [tabular data quickstart tutorial](/studio/tutorials/cleanlab-studio-api/tabular_data_quickstart/) (+ a [2nd tabular data tutorial](/studio/tutorials/cleanlab-studio-api/data_entry/) ) We recommend starting with one of these tutorials, and then you can find the most relevant [tutorial](/studio/tutorials/) for your Data/AI application. Unless explicitly specified, most of our tutorials can be followed for all data modalities. So don’t be discouraged if you have say text data, but see the tutorial closest to your use-case features image data – this tutorial likely also works for text data. Even if you don’t find a similar dataset/application amongst our tutorials, Cleanlab Studio is an extremely general platform that can likely work for your dataset as long as it’s properly formatted. * [Installation](#installation) * [API Key](#api-key) * [Running Cleanlab Studio programmatically](#running-cleanlab-studio-programmatically) --- # Getting Started with Cleanlab Studio CLI | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page This guide steps through how to use Cleanlab Studio programmatically via the command line. This workflow is primarily for those who want to quickly access the [cleanlab columns](/studio/concepts/cleanlab_columns/) produced by Cleanlab Studio without having to use the [web interface](/studio/quickstart/web/) or [Python API](/studio/quickstart/api/) . Following this guide requires: 1. Python >= 3.8 2. A [Cleanlab account](https://app.cleanlab.ai/) Installation[​](#installation "Direct link to Installation") ------------------------------------------------------------- You can install the Cleanlab Studio client [from PyPI](https://pypi.org/project/cleanlab-studio/) with: pip install cleanlab-studio If you already have the client installed and wish to upgrade to the latest version, run: pip install --upgrade cleanlab-studio API Key Authentication[​](#api-key-authentication "Direct link to API Key Authentication") ------------------------------------------------------------------------------------------- To upload datasets, create projects, and more, you need an API key. 1. Log in (if you’re not already) and open your [account page](https://app.cleanlab.ai/account) in Cleanlab Studio. 2. Copy the API key from your account page. 3. Authenticate yourself (if you haven’t already) by running: cleanlab login 4. Paste your API key when prompted. Upload Dataset[​](#upload-dataset "Direct link to Upload Dataset") ------------------------------------------------------------------- The starting point for using Cleanlab Studio is uploading a [Dataset](/studio/concepts/datasets/) . ### Upload File[​](#upload-file "Direct link to Upload File") If you have a dataset saved to your filesystem in one of Cleanlab Studio’s [supported formats](/studio/concepts/datasets/) , you can upload it from a filepath. cleanlab dataset upload Export[​](#export "Direct link to Export") ------------------------------------------- ### Download Cleanlab Columns[​](#download-cleanlab-columns "Direct link to Download Cleanlab Columns") You can download the cleanlab columns from your project by providing the cleanset ID and path to the output CSV file where you want to save your results. This output CSV file will contain per-row information about each data point in your dataset, along with the corrections you’ve made. Ensure that the output file has the `.csv` file extension. cleanlab cleanset download --id --output --all ### Apply Corrections[​](#apply-corrections "Direct link to Apply Corrections") You can apply the corrections from your project given a copy of your dataset in file form and the cleanset ID. This will yield an output file of the corrections applied to your dataset. cleanlab cleanset download --id --filepath --output --all The Cleanlab Studio command line interface does not offer as much functionality as the [Python API](/studio/quickstart/api/) , so check that out to see what else you can do programmatically with this tool! * [Installation](#installation) * [API Key Authentication](#api-key-authentication) * [Upload Dataset](#upload-dataset) * [Upload File](#upload-file) * [Export](#export) * [Download Cleanlab Columns](#download-cleanlab-columns) * [Apply Corrections](#apply-corrections) --- # Cleanlab Studio Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page Welcome to [Cleanlab Studio](https://app.cleanlab.ai/) ! This guide introduces how an end-to-end use of Cleanlab Studio can look: 1. [Upload a dataset](#upload-a-dataset) 2. [Create a project](#create-a-project-to-detect-data-and-label-issues) (our AI analyzes your data) 3. [Review detected data issues](#review-issues-detected-in-your-dataset-and-correct-them) 4. [Export a _cleanset_](#export-a-cleanset) (the cleaned dataset) Cleanlab Studio offers the fastest path for turning your unreliable/messy data into reliable models/analytics via automated detection/correction of data issues! Easily improve the quality of your dataset in the web browser – no code required as seen in the rest of this guide. While the rest of this guide steps through how to use Cleanlab Studio via the no-code [web interface](https://app.cleanlab.ai/) , you can alternatively use this tool programmatically via [the Python API](/studio/quickstart/api/) or [Command Line Interface (CLI)](/studio/quickstart/cli/) . Both unlock even greater Cleanlab Studio capabilities than are available in the web interface (but we recommend exploring the simple web interface first). The generally available public version of Cleanlab Studio supports many other tasks/workflows; refer to our [tutorials](/studio/tutorials/) for specific examples. Many additional capabilities are available to users on an [Enterprise subscription plan](https://cleanlab.ai/sales/) . If you are interested in building AI Assistants connected to your company’s data sources and other Retrieval-Augmented Generation applications, [reach out](https://cleanlab.ai/sales/) to learn how Cleanlab can help. Demo Datasets[​](#demo-datasets "Direct link to Demo Datasets") ---------------------------------------------------------------- Cleanlab Studio comes pre-loaded with several demo datasets and projects, so you can check those out in your account after signing in. Alternatively, if you’d like to go through the entire workflow using a demo dataset, here are some you can use to get started: * **Text: [amazon-text-demo.csv](https://s.cleanlab.ai/amazon-text-demo.csv) ** * **Tabular/CSV: [grades-tabular-demo.csv](https://s.cleanlab.ai/grades-tabular-demo.csv) ** * **Image: [mnist.tar.gz](https://s.cleanlab.ai/mnist.tar.gz) ** (please unzip this folder before uploading it to Cleanlab Studio) * This tutorial’s dataset: **[tweets.csv](https://s.cleanlab.ai/Tweets.csv) ** Upload a Dataset[​](#upload-a-dataset "Direct link to Upload a Dataset") ------------------------------------------------------------------------- Cleanlab Studio offers a variety of ways to upload your data to best suit your needs. You can upload data from your computer, via URL, via command line, or via our Python API. We also offer Data Warehouse and Cloud Storage options for Enterprise Users! ### How to format your dataset[​](#how-to-format-your-dataset "Direct link to How to format your dataset") Cleanlab Studio supports text, image, and tabular datasets (we’re constantly adding new modalities) in multiple formats. The free tier supports CSV, JSON, Excel, Dataframes, and Zip Files. If you’re uploading your own dataset, you can use the _How to format your dataset_ wizard on the upload page to get a walkthrough of the best way to upload your specific type of data. ### Once you upload a dataset…[​](#once-you-upload-a-dataset "Direct link to Once you upload a dataset…") Cleanlab Studio will automatically infer its [schema](https://github.com/cleanlab/cleanlab-studio#schema) (the data types and feature types of all the fields). You can review this schema and make any corrections before clicking “Confirm schema.” Cleanlab Studio will then analyze and display any processing issues or missing data cells in your dataset immediately. Create a Project to detect data and label issues[​](#create-a-project-to-detect-data-and-label-issues "Direct link to Create a Project to detect data and label issues") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- To analyze a dataset for [data issues](/studio/concepts/cleanlab_columns/) , you first need to create a [project](/studio/concepts/projects/) . There are a few options to configure when creating a project: * **Machine Learning Task:** What type of task are you training a model to accomplish? Currently, we support Classification for _text_, _tabular_ and _image_ datasets. * **Type of Classification:** Classification tasks are either _multi-class_ (a datapoint is assigned to 1 of K classes) or _multi-label_ (each datapoint can be part of 0 to K of K classes). * **Label Column:** The column in your dataset that you want us to find label errors in and suggest label corrections on. Some examples in the dataset may be unlabeled. * **Predictive Columns / Text Column:** Depending on your machine learning task, you’ll be asked to specify which columns we should use to train our classification models on. * **Model Type:** _Fast mode_ runs quicker analyses of your data but may produce lower quality results, while _regular mode_ will produce the best results but could take up to 24 hours for larger datasets. We’ll send you an email when analysis is complete. It takes some time for our cutting-edge AI system to train on the dataset. Review issues detected in your dataset and correct them[​](#review-issues-detected-in-your-dataset-and-correct-them "Direct link to Review issues detected in your dataset and correct them") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Cleanlab Studio automatically flags examples that have [data issues](/studio/concepts/cleanlab_columns/) . For each identified label issue, Cleanlab Studio suggests a better label that may be more appropriate for this example. You can accept all of the suggestions with the “Auto-fix top issues” button, but for best results, we recommend reviewing the flagged issues. Cleanlab Studio’s data/label error correction interface makes this easy — data is ranked by quality so that your time is spent on the data that needs review (no need to review already-clean data). Additionally, you can choose to exclude data points — which is our recommended action for outliers: data points that appear to not be part of any of the classes in your dataset. After reviewing flagged issues and taking actions to fix the data, you have produced a cleaned version of your dataset, which we call a [cleanset](/studio/concepts/cleanset/) . ### Project Analytics[​](#project-analytics "Direct link to Project Analytics") Along with the review interface, Cleanlab Studio offers analytics information about the data and label issues in your dataset. From the Analytics tab, you can view information about the classes with the most label issues, the data corrections that we most commonly suggest, and more! This tab can give you a high level summary of your data, or offer a direct view into the specific issues that we’ve detected — click on any bar or square in the Analytics chart and we’ll show you the exact examples exhibiting the specific issue summarized in the chart. Export a cleanset[​](#export-a-cleanset "Direct link to Export a cleanset") ---------------------------------------------------------------------------- Cleanlab Studio supports exporting a [cleanset](/studio/concepts/cleanset/) from the web app or the [cleanlab-studio](https://github.com/cleanlab/cleanlab-studio) CLI / Python client library. The cleaned labels are available in the `cleanlab_corrected_label` column. The export also includes other metadata from Cleanlab Studio; look through the column headers to see what’s there. Data columns generated by Cleanlab Studio are prefixed with `cleanlab_`. You can also re-run Cleanlab on the [cleanset](/studio/concepts/cleanset/) . This will re-analyze the new version of your dataset, now with ML models trained on the cleaner data which will often give even better results. Next steps[​](#next-steps "Direct link to Next steps") ------------------------------------------------------- Once you are happy with the quality of your [cleanset](/studio/concepts/cleanset/) (e.g. you’ve skimmed all the detected data issues), you can use it in place of your original dataset in your downstream workflows. Immediately get better predictions/conclusions without changing any of your modeling code or analytics workflows. Better data -> better results! If your goal is to deploy a machine learning model to serve predictions on new data, Cleanlab Studio can do this for you in just a few clicks. The model will be trained on the final [cleanset](/studio/concepts/cleanset/) you produced, and will be the same cutting-edge combination of AutoML and Foundation models that detected the data issues originally. This guide covered a no-code workflow to improve your data via your [web browser](https://app.cleanlab.ai/) . The other pages on this documentation website cover [our Python API](/studio/quickstart/api/) to use Cleanlab Studio programatically and unlock more capabilities. Remember: Cleanlab Studio works for text, image, and tabular datasets! Some Cleanlab functionalities may be demonstrated here for say an image dataset, but you can apply the same functionality to data from the other two modalities. Need help?[​](#need-help "Direct link to Need help?") ------------------------------------------------------ Our team of experts is here to support your Data/AI projects! See various ways to get help on our [Community](/community/) page. * [Demo Datasets](#demo-datasets) * [Upload a Dataset](#upload-a-dataset) * [How to format your dataset](#how-to-format-your-dataset) * [Once you upload a dataset...](#once-you-upload-a-dataset) * [Create a Project to detect data and label issues](#create-a-project-to-detect-data-and-label-issues) * [Review issues detected in your dataset and correct them](#review-issues-detected-in-your-dataset-and-correct-them) * [Project Analytics](#project-analytics) * [Export a cleanset](#export-a-cleanset) * [Next steps](#next-steps) * [Need help?](#need-help) --- # Datasets | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page A `Dataset` corresponds to your original text/image/tabular data. Cleanlab Studio can analyze and train/deploy models on diverse types of datasets. This page outlines how to format your data and the available options. Refer to our [tutorials](/studio/tutorials/) for specific examples. If you are unsure about anything, just ask: [support@cleanlab.ai](mailto:support@cleanlab.ai) ![Upload Dataset interface.](/img/datasets-guide/dataset-upload.png) Modalities[​](#modalities "Direct link to Modalities") ------------------------------------------------------- Cleanlab Studio supports datasets of the following modalities: * **Tabular** (structured data stored in tables with numeric/categorical/string columns, e.g. financial information, sensor measurements, customer records) * **Text** (e.g. documents, customer requests, descriptions, LLM outputs) * **Image** (e.g. photographs, product images, satellite imagery) ### Text/Tabular[​](#texttabular "Direct link to Text/Tabular") Text/tabular datasets are structured datasets composed of rows and columns, with each row representing an individual data point. Text/tabular datasets can be loaded in multiple formats, including [CSV](#csv) , [JSON](#json) , [Excel](#excel) , and [DataFrame](#dataframe) . Cleanlab’s analysis of text datasets focuses on a **single text field** for each data point (i.e. row), while Cleanlab can consider many columns of tabular datasets. Internally, Cleanlab’s AutoML system will predict a provided label column based on the single text field for a text datset, or based on all columns designated as predictive features for a tabular dataset. For more information on how to use text/tabular datasets, see our [tabular](/studio/tutorials/cleanlab-studio-api/tabular_data_quickstart/) and [text](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) quickstart tutorials. #### Document Datasets[​](#document-datasets "Direct link to Document Datasets") Cleanlab Studio also supports loading a text dataset as a heterogeneous collection of document files. Cleanlab Studio supports many document file types, including: `csv`, `doc`, `docx`, `pdf`, `ppt`, `pptx`, `xls`, `xlsx`. Your dataset can simultaneously contain many of these file types, it does not need to be homogeneous. Document datasets can be loaded in multiple formats. If your document files are stored locally, you can use a [ZIP format](#zip) . If your document files are hosted (on an Internet-accessible web server or storage platform, like S3 or Google Drive), you can load your dataset by including links to your external documents via an [external document](#external-document) column in a [CSV](#csv) , [JSON](#json) , [Excel](#excel) , or [DataFrame](#dataframe) dataset. Cleanlab automatically extracts the text from your documents into a column named `text` when you load your dataset. From there, you can subsequently work with it as a standard text dataset. Cleanlab’s results can be mapped back to the original documents via the column that specifies the file name (relative path) of each document. **Important:** When loading a document dataset, ensure you do not have a column named `text` in either your metadata file (for [Metadata ZIP formatted data](#metadata-zip) ) or your dataset file (for [externally hosted document formatted data](#external-document) ). ### Image[​](#image "Direct link to Image") Image datasets are datasets composed of rows of images with attached metadata (including but not limited to labels). Image datasets can be loaded in multiple formats. If your image files are stored locally, you can use one of the [ZIP formats](#zip) . If your image files are hosted (on an Internet-accessible web server or storage platform, like S3 or Google Drive), you can load your dataset by including links to your external images via an [external image](#external-image) column in a [CSV](#csv) , [JSON](#json) , [Excel](#excel) , or [DataFrame](#dataframe) dataset. For more information on how to use image datasets, see our \[image quickstart tutorial\]tutorials/image\_data\_quickstart). Machine Learning Task[​](#machine-learning-task "Direct link to Machine Learning Task") ---------------------------------------------------------------------------------------- Although you do not need to select a machine learning task type when loading data into Cleanlab Studio, different tasks require different data formatting. To make sure you don’t have problems creating Projects or producing the best results, you should first investigate the different task types and format your dataset accordingly. For more information on ML task types, see our \[projects guide\]guide/concepts/projects/#machine-learning-task–dataset-type). ### Multi-class[​](#multi-class "Direct link to Multi-class") In a [multi-class classification task](/studio/concepts/projects/#machine-learning-task--dataset-type) , the objective is to categorize data points into one of K distinct classes, e.g. classifying animals as one of “cat”, “dog”, “bird”. To format your dataset for multi-class classification, ensure your dataset includes a column containing the class each row belongs to and follow the appropriate structure for your [modality](#modalities) and [file format](#file-formats) . **Unlabeled data** To include unlabeled rows (i.e. rows without annotations) in your multi-class dataset, simply leave their values in the label column empty/blank. ### Multi-label[​](#multi-label "Direct link to Multi-label") In a [multi-label classification task](/studio/concepts/projects/#machine-learning-task--dataset-type) , each data point can belong to multiple (or no) classes, e.g. assigning non-disjoint tags to news articles. For multi-label classification, your dataset’s label column should be formatted as a comma-separated string of classes, e.g. “politics,economics” (there should be no whitespace between labels). Note: for image datasets, you must use the [Metadata](#metadata-zip) or [External Media](#external-image) formats. #### Unlabeled data vs. Empty labels[​](#unlabeled-data-vs-empty-labels "Direct link to Unlabeled data vs. Empty labels") For multi-label datasets, there’s an important distinction between unlabeled rows and rows with empty labels. **Unlabeled** rows are data points where the label(s) are _unknown_. You can use Cleanlab Studio to determine whether these rows belong to any of your dataset’s classes. Rows with **empty labels** are data points that have no labels – they have been annotated to indicate that they don’t belong to any of your dataset’s classes. When loading a `CSV` or `Excel` dataset, any empty values in your label column will be interpreted as _unlabeled_ rows rather than rows with _empty labels_. To distinguish between the two in your dataset, you must use [`JSON` file format](#json) or [`DataFrame` format](#dataframe) . You can represent these two types of data points in the `JSON` file format using the following values: * **empty labels:** `""` (empty string) * **unlabeled:** `null` You can represent these two types of data points in a `DataFrame` dataset using the following values: * **empty labels:** `""` (empty string) * **unlabeled:** `None`, `pd.NA` Note: If you only have empty labels (but no unlabeled data) you still need to provide the file in `JSON` format and set the labels to `""`. Empty string labels in `CSV` or `Excel` format will be interpreted as unlabeled. ### Regression[​](#regression "Direct link to Regression") In a [regression task](/studio/concepts/projects/#machine-learning-task--dataset-type) , the objective is to label each data point with a continuous numerical value, e.g. price, income, or age, rather than a discrete category. To format your dataset for regression, ensure your dataset includes a label column containing the continuous numeric value you’d like to predict and follow the appropriate structure for your [modality](#modalities) and [file format](#file-formats) . **Note:** you’ll need to set the column type for your label column to [float](#float) before creating a regression project. See the [Schema Updates](#schema-updates) section for information on how to do this. **Unlabeled data** To include unlabeled rows (i.e. rows without annotations) in your regression dataset, simply leave their values in the label column empty/blank. See our [regression tutorial](/studio/tutorials/cleanlab-studio-api/regression/) for an example of using Cleanlab Studio for a regression task. ### Unsupervised[​](#unsupervised "Direct link to Unsupervised") For an [unsupervised task](/studio/concepts/projects/#machine-learning-task--dataset-type) , there is no target variable to predict for data points. This task type might be appropriate for your data if there is no clear “label column”. Follow the appropriate structure for your [modality](#modalities) and [file format](#file-formats) . See our [unsupervised tutorial](/studio/tutorials/cleanlab-studio-api/unsupervised/) for an example of using Cleanlab Studio for an unsupervised task. File Formats[​](#file-formats "Direct link to File Formats") ------------------------------------------------------------- Cleanlab Studio natively supports datasets in CSV, JSON, Excel, or ZIP file formats. In addition, the [Python API](/studio/api/python/studio/#method-upload_dataset) supports data stored in [Pandas](https://pandas.pydata.org/docs/reference/frame.html) , [PySpark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.html#pyspark.sql.DataFrame) , and [Snowpark](https://docs.snowflake.com/en/developer-guide/snowpark/reference/python/latest/dataframe) DataFrames (for Databricks and Snowflake users). We also offer tutorials to convert other [text](/studio/tutorials/cleanlab-studio-api/format_text_data/) and [image](/studio/tutorials/cleanlab-studio-api/format_image_data/) Python data formats into one of Cleanlab’s natively supported formats (Huggingface, Tensorflow, Torchvision, Scikit-learn, …). ### CSV[​](#csv "Direct link to CSV") CSV is a standard file format for storing text/tabular data, where each row represents a data record and consists of one or more fields (columns) separated by a delimiter. Make sure your CSV dataset follows these formatting requirements: * Each row is represented by a single line of text with fields separated by a `,` delimiter. * String values containing the delimiter character (`,`) or special characters (e.g. newline characters) should be enclosed within double quotes (`” “`). * The first row should be a header containing the names of all columns in the dataset. * Empty fields are represented by consecutive delimiter characters with no value in between or empty double quotes (`""`). * Each row should contain the same number of columns, with missing values represented as empty fields. * Each row should be separated by a newline. **Unlabeled data.** You can indicate if a data point is not yet annotated/labeled by leaving its value in the label column empty. **Note:** for [multi-label](#multi-label) tasks, if you need data points with [empty labels](#unlabeled-data-vs-empty-labels) , you must use the [JSON file format](#json) . Example CSV text dataset review_id,review,labelf3ac,The sales rep was fantastic!,positived7c4,He was a bit wishy-washy.,negative439a,They kept using the word "obviously," which was off-putting.,positivea53f,,negative ### JSON[​](#json "Direct link to JSON") JSON is a standard file format for storing and exchanging structured data organized using key-value pairs. In a JSON dataset, each row is represented by an object where keys correspond to column names. Your JSON dataset should follow these formatting requirements: * Each row is represented as a JSON object consisting of key-value pairs (separated by colons `:`) enclosed in curly braces `{}`. Each key is a string (enclosed in double quotes `" "`) that uniquely identifies the value associated with it. * The rows of your dataset are enclosed in a JSON array (square brackets `[]`) and separated by commas `,`. * Valid types for values in your dataset include strings, numbers, booleans, and null values. * Your dataset cannot contain nested array or object values. Ensure these are flattened. * Every key is present in every row of your dataset. **Unlabeled data** If you’re formatting a dataset for a [multi-class](#multi-class) or [regression](#regression) task, you can indicate if a data point is not yet annotated/labeled using a `""` or `null` value. For [multi-label](#multi-label) tasks, you must use `null` values to indicate data points that are not yet annotated/labeled. This allows us to distinguish between data points where no class applies (indicated by `""`) and data points that are not yet annotated (see [here](#unlabeled-data-vs-empty-labels) for more information on the difference between these). Example JSON multi-label text dataset In this example dataset each data point is a text review. The first data point `f3ac` is a data point with an empty label (has been annotated as belonging to none of the classes), while the last review `a53f` is an unlabeled data point (that has not yet been annotated). Note the difference between their label values to distinguish these cases. [ { "review_id": "f3ac", "review": "The message was sent yesterday.", "label": "" }, { "review_id": "d7c4", "review": "He was a bit rude to the staff.", "label": "negative,rude,mean" }, { "review_id": "439a", "review": "They provided a wonderful experience that made us very happy.", "label": "positive,happy,joy" }, { "review_id": "a53f", "review": "Please let her know I appreciated the hospitality.", "label": null }] ### Excel[​](#excel "Direct link to Excel") Excel is a popular file format for spreadsheets. Cleanlab Studio supports both `.xls` and `.xlsx` files. Your Excel dataset should follow these formatting requirements: * Only the first sheet of your spreadsheet will be imported as your dataset. * The first row of your sheet should contain names for all of the columns. **Unlabeled data** You can indicate if a data point is not yet annotated/labeled by leaving its value in the label column empty. **Note:** for [multi-label](#multi-label) tasks, if you need data points with [empty labels](#unlabeled-data-vs-empty-labels) , you must use the [JSON file format](#json) . Example Excel text dataset | \_ | review\_id | review | label | | --- | --- | --- | --- | | 0 | f3ac | The sales rep was fantastic! | positive | | 1 | d7c4 | He was a bit wishy-washy. | negative | | 2 | 439a | They kept using the word “obviously,” which wa… | positive | | 3 | a53f | | negative | ### DataFrame[​](#dataframe "Direct link to DataFrame") Cleanlab Studio’s Python API supports a number of DataFrame formats, including [Pandas](https://pandas.pydata.org/docs/reference/frame.html) , [PySpark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.html#pyspark.sql.DataFrame) DataFrames, and [Snowpark](https://docs.snowflake.com/en/developer-guide/snowpark/reference/python/latest/dataframe) DataFrames. You can load data directly from a DataFrame in a Python script or Jupyter notebook. See our [Databricks integration](/studio/tutorials/cleanlab-studio-api/databricks/) and [Snowflake integration](/studio/tutorials/cleanlab-studio-api/snowflake/) for more details on loading data from PySpark and Snowpark DataFrames. **Unlabeled data** If you’re formatting a dataset for a [multi-class](#multi-class) or [regression](#regression) task, you can indicate if a data point is not yet annotated/labeled using a `""`, `None`, or `pd.NA` value (or the equivalent null value for PySpark/Snowpark). For [multi-label](#multi-label) tasks, you must use `None` or `pd.NA` values to indicate data points that are not yet annotated/labeled. This allows us to distinguish between data points where no class applies (indicated by `""`) and data points that are not yet annotated (see [here](#unlabeled-data-vs-empty-labels) for more information on the difference between these). Example DataFrame text dataset | \_ | review\_id | review | label | | --- | --- | --- | --- | | 0 | f3ac | The sales rep was fantastic! | positive | | 1 | d7c4 | He was a bit wishy-washy. | negative | | 2 | 439a | They kept using the word “obviously,” which wa… | positive | | 3 | a53f | | negative | ### ZIP[​](#zip "Direct link to ZIP") ZIP files are commonly used for storing and transferring multiple files/directories as a single compressed file. You can run Cleanlab Studio on a dataset with [image](#image) OR [document](#document-datasets) files by including them all within one ZIP file. Supported ways to organize your ZIP file are outlined below. #### Simple ZIP[​](#simple-zip "Direct link to Simple ZIP") **Note:** Simple ZIP format is only supported for [multi-class](#multi-class) datasets. To format a simple ZIP dataset: 1. Create a top-level folder for your dataset. 2. Inside the top-level folder, create a folder for each class in your dataset. The name of each folder will be used as the class label for images or documents within the folder. 3. Inside each class folder, add image/document files belonging to the class. 4. ZIP the top-level folder. ![Simple Zip Folder](/img/datasets-guide/simple_zip_folder.png) #### Metadata ZIP[​](#metadata-zip "Direct link to Metadata ZIP") If you are loading an image/document dataset for a [multi-label](#multi-label) , [regression](#regression) , or [unsupervised](#unsupervised) task or would like to include metadata associated with examples (i.e. rows) in your dataset, you can include either a `metadata.csv` or `metadata.json` file in your ZIP dataset. To format your dataset as a ZIP with metadata: 1. Create a top-level folder for your dataset. 2. Add image/document files for your dataset to the folder. These files can optionally be organized within subfolders. 3. Add a `metadata.csv` or `metadata.json` file inside your top-level folder. 4. ZIP the top-level folder. Your metadata file (`metadata.csv` or `metadata.json`) should follow these formatting requirements: * The file should contain a column named `image` (if loading an image dataset) or `document` (if loading a document dataset). The values in this column should correspond to the **relative** paths to images/documents from your `metadata.csv` or `metadata.json` file. Do not include another column with this special name in your metadata. * If loading a dataset for a [multi-class](#multi-class) , [multi-label](#multi-label) , or [regression](#regression) task, the file should include a column for the labels corresponding to each image/document (some entries of this column may be missing if there are unlabeled examples in your dataset). Do _not_ rely on file paths in the `image` or `document` column to specify how your data is labeled, that must be encoded in a separate label column of `metadata.csv` or `metadata.json`. * The file can optionally include other columns with additional metadata about each data point that you would like to view or filter by in Cleanlab Studio (these columns will not be considered by Cleanlab’s AutoML system and thus will not directly affect Project results). * See the [CSV](#csv) and [JSON](#json) file format sections for more details on each file type. **Note**: If your dataset contains any unlabeled data, you must use the metadata ZIP format rather than the simple ZIP format. Ensure that in the `metadata.csv` file, your image or documents that are unlabeled have empty values in the label column (e.g. empty string: `""`). ![Metadata Zip Folder](/img/datasets-guide/metadata_zip_folder_new.png) Schemas[​](#schemas "Direct link to Schemas") ---------------------------------------------- Schemas define the type of each column in your dataset. This allows Cleanlab Studio to understand the structure of your data and provide the best possible analysis and model training experience. Cleanlab Studio supports the following column types: | Column Type | Sub-types | Override Name | | --- | --- | --- | | Untyped | \- | `untyped` | | Integer | \- | `integer` | | Float | \- | `float` | | Boolean | \- | `boolean` | | String | \- | `string` | | Image | \- | \- | | External Image | \- | `image_external` | | Document | \- | \- | | External Document | \- | `document_external` | | Date | **Seconds** (epoch)
**Milliseconds** (epoch)
**Microseconds** (epoch)
**Nanoseconds** (epoch)
**Parse** | `date_epoch_s`
`date_epoch_ms`
`date_epoch_us`
`date_epoch_ns`
`date_parse` | | Datetime | **Seconds** (epoch)
**Milliseconds** (epoch)
**Microseconds** (epoch)
**Nanoseconds** (epoch)
**Parse** | `datetime_epoch_s`
`datetime_epoch_ms`
`datetime_epoch_us`
`datetime_epoch_ns`
`datetime_parse` | | Time | **Seconds** (epoch)
**Milliseconds** (epoch)
**Microseconds** (epoch)
**Nanoseconds** (epoch)
**Parse** | `time_epoch_s`
`time_epoch_ms`
`time_epoch_us`
`time_epoch_ns`
`time_parse` | By default, Cleanlab Studio sets all columns to `Untyped`, which will defer data type inference internally to Cleanlab’s AutoML system. If you want to enforce the type of certain columns, this can be overridden by: * In the Web Application, updating the dataset schema after loading your dataset * In the Python API, providing the `schema_overrides` argument when [loading your dataset](/studio/api/python/studio/#method-upload_dataset) See [Schema Updates section](#schema-updates) for more information. ### Column Types[​](#column-types "Direct link to Column Types") #### Untyped[​](#untyped "Direct link to Untyped") This is the default type for columns in Cleanlab Studio. It is used when the type of a column is not specified. Columns with type `Untyped` are interpreted as text. #### Integer[​](#integer "Direct link to Integer") Columns with type `Integer` are interpreted as 64-bit integer numbers. #### Float[​](#float "Direct link to Float") Columns with type `Float` are interpreted as 64-bit floating point numbers. #### Boolean[​](#boolean "Direct link to Boolean") Columns with type `Boolean` are interpreted as boolean values. The following values are interpreted as `True`: `true`, `yes`, `on`, `1`. The following values are interpreted as `False`: `false`, `no`, `off`, `0`. Unique prefixes of these strings are also accepted, for example `t` or `n`. Leading or trailing whitespace is ignored, and case does not matter. #### String[​](#string "Direct link to String") Columns with type `String` are interpreted as text. #### Image[​](#image-1 "Direct link to Image") Columns with type `Image` are interpreted as image references. This type is used for ZIP image datasets, and cannot be set manually. The column type for a column with type `Image` also cannot be updated. #### External Image[​](#external-image "Direct link to External Image") Columns with type `External Image` are interpreted as URLs to external images. This type is used for external media image datasets. Example external media image dataset | \_ | img | label | | --- | --- | --- | | 0 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | c | | 1 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | h | | 2 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | y | | 3 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | p | | 4 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | j | #### Document[​](#document "Direct link to Document") Columns with type `Document` are interpreted as document references. This type is used for ZIP document datasets, and cannot be set manually. The column type for a column with type `Document` also cannot be updated. Such a column is used to track which extracted text and Cleanlab results correspond to which document in a document dataset. #### External Document[​](#external-document "Direct link to External Document") Column with type `External Document` are interpreted as URLs to external documents. This type is used for external media document datasets. #### Date[​](#date "Direct link to Date") Columns with type `Date` are interpreted as dates. The column sub-types specify how the data is converted into a date. For example, `date_epoch_s` specifies that the column contains Unix timestamps in seconds. `date_parse` specifies that the column contains dates in a custom format, which is parsed from the following formats: | Format | Example | Description | | --- | --- | --- | | `%Y-%m-%d` | 1999-02-15 | ISO 8601 format | | `%Y/%m/%d` | 1999/02/15 | | | `%B %d, %Y` | February 15, 1999 | | | `%Y-%b-%d` | 1999-Feb-15 | | | `%d-%m-%Y` | 15-02-1999 | | | `%d/%m/%Y` | 15/02/1999 | | | `%d-%b-%Y` | 15-Feb-1999 | | | `%b-%d-%Y` | Feb-15-1999 | | | `%d-%b-%y` | 15-Feb-99 | | | `%b-%d-%y` | Feb-15-99 | | | `%Y%m%d` | 19990215 | | | `%y%m%d` | 990215 | | | `%Y.%j` | 1999.46 | year and day of year | | `%m-%d-%Y` | 02-15-1999 | | | `%m/%d/%Y` | 02/15/1999 | | For more information on format codes, see the [Python documentation](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) . #### Time[​](#time "Direct link to Time") Columns with type `Time` are interpreted as times. The column sub-types specify how the data is converted to a time. For example, `time_epoch_us` specifies that the column contains Unix timestamps in microseconds. `time_parse` specifies that the column contains times in a custom format, which is parsed from the following formats: | Format | Example | Description | | --- | --- | --- | | `%H:%M:%S.%f` | 04:05:06.789 | ISO 8601 format | | `%H:%M:%S` | 04:05:06 | ISO 8601 format | | `%H:%M` | 04:05 | ISO 8601 format | | `%H%M%S` | 040506 | | | `%H%M` | 0405 | | | `%H%M%S.%f` | 040506.789 | | | `%I:%M %p` | 04:05 AM | | | `%I:%M:%S %p` | 04:05:06 PM | | | `%H:%M:%S.%f%z` | 04:05:06.789-08:00 | ISO 8601 format with UTC offset for PST timezone | | `%H:%M:%S%z` | 04:05:06-08:00 | | | `%H:%M%z` | 04:05-08:00 | | | `%H%M%S.%f%z` | 040506.789-08:00 | | | `%H:%M:%S.%f %Z` | 04:05:06.789 PST | Note: most common timezone abbreviations are supported, but not all. See full list in section below. | | `%H:%M:%S %Z` | 04:05:06 PST | | | `%H:%M %Z` | 04:05 PST | | | `%H%M %Z` | 0405 PST | | | `%H%M%S.%f` | 040506.789 PST | | | `%I:%M %p %Z` | 04:05 AM PST | | | `%I:%M:%S %p %Z` | 04:05:06 PM PST | | For more information on format codes, see the [Python documentation](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) . Supported Time Zone Abbreviations | Time Zone | UTC Offset | Description | | --- | --- | --- | | NZDT | +13:00 | New Zealand Daylight Time | | IDLE | +12:00 | International Date Line, East | | NZST | +12:00 | New Zealand Standard Time | | NZT | +12:00 | New Zealand Time | | AESST | +11:00 | Australia Eastern Summer Standard Time | | ACSST | +10:30 | Central Australia Summer Standard Time | | CADT | +10:30 | Central Australia Daylight Savings Time | | SADT | +10:30 | South Australian Daylight Time | | AEST | +10:00 | Australia Eastern Standard Time | | EAST | +10:00 | East Australian Standard Time | | GST | +10:00 | Guam Standard Time | | LIGT | +10:00 | Melbourne, Australia | | SAST | +09:30 | South Australia Standard Time | | CAST | +09:30 | Central Australia Standard Time | | AWSST | +09:00 | Australia Western Summer Standard Time | | JST | +09:00 | Japan Standard Time | | KST | +09:00 | Korea Standard Time | | MHT | +09:00 | Kwajalein Time | | WDT | +09:00 | West Australian Daylight Time | | MT | +08:30 | Moluccas Time | | AWST | +08:00 | Australia Western Standard Time | | CCT | +08:00 | China Coastal Time | | WADT | +08:00 | West Australian Daylight Time | | WST | +08:00 | West Australian Standard Time | | JT | +07:30 | Java Time | | ALMST | +07:00 | Almaty Summer Time | | WAST | +07:00 | West Australian Standard Time | | CXT | +07:00 | Christmas (Island) Time | | ALMT | +06:00 | Almaty Time | | MAWT | +06:00 | Mawson (Antarctica) Time | | IOT | +05:00 | Indian Chagos Time | | MVT | +05:00 | Maldives Island Time | | TFT | +05:00 | Kerguelen Time | | AFT | +04:30 | Afganistan Time | | EAST | +04:00 | Antananarivo Savings Time | | MUT | +04:00 | Mauritius Island Time | | RET | +04:00 | Reunion Island Time | | SCT | +04:00 | Mahe Island Time | | IT | +03:30 | Iran Time | | EAT | +03:00 | Antananarivo, Comoro Time | | BT | +03:00 | Baghdad Time | | EETDST | +03:00 | Eastern Europe Daylight Savings Time | | HMT | +03:00 | Hellas Mediterranean Time (?) | | BDST | +02:00 | British Double Standard Time | | CEST | +02:00 | Central European Savings Time | | CETDST | +02:00 | Central European Daylight Savings Time | | EET | +02:00 | Eastern Europe, USSR Zone 1 | | FWT | +02:00 | French Winter Time | | IST | +02:00 | Israel Standard Time | | MEST | +02:00 | Middle Europe Summer Time | | METDST | +02:00 | Middle Europe Daylight Time | | SST | +02:00 | Swedish Summer Time | | BST | +01:00 | British Summer Time | | CET | +01:00 | Central European Time | | DNT | +01:00 | Dansk Normal Tid | | FST | +01:00 | French Summer Time | | MET | +01:00 | Middle Europe Time | | MEWT | +01:00 | Middle Europe Winter Time | | MEZ | +01:00 | Middle Europe Zone | | NOR | +01:00 | Norway Standard Time | | SET | +01:00 | Seychelles Time | | SWT | +01:00 | Swedish Winter Time | | WETDST | +01:00 | Western Europe Daylight Savings Time | | GMT | +00:00 | Greenwich Mean Time | | UT | +00:00 | Universal Time | | UTC | +00:00 | Universal Time, Coordinated | | Z | +00:00 | Same as UTC | | ZULU | +00:00 | Same as UTC | | WET | +00:00 | Western Europe | | WAT | \-01:00 | West Africa Time | | NDT | \-02:30 | Newfoundland Daylight Time | | ADT | \-03:00 | Atlantic Daylight Time | | AWT | \-03:00 | (unknown) | | NFT | \-03:30 | Newfoundland Standard Time | | NST | \-03:30 | Newfoundland Standard Time | | AST | \-04:00 | Atlantic Standard Time (Canada) | | ACST | \-04:00 | Atlantic/Porto Acre Summer Time | | ACT | \-05:00 | Atlantic/Porto Acre Standard Time | | EDT | \-04:00 | Eastern Daylight Time | | CDT | \-05:00 | Central Daylight Time | | EST | \-05:00 | Eastern Standard Time | | CST | \-06:00 | Central Standard Time | | MDT | \-06:00 | Mountain Daylight Time | | MST | \-07:00 | Mountain Standard Time | | PDT | \-07:00 | Pacific Daylight Time | | AKDT | \-08:00 | Alaska Daylight Time | | PST | \-08:00 | Pacific Standard Time | | YDT | \-08:00 | Yukon Daylight Time | | AKST | \-09:00 | Alaska Standard Time | | HDT | \-09:00 | Hawaii/Alaska Daylight Time | | YST | \-09:00 | Yukon Standard Time | | AHST | \-10:00 | Alaska-Hawaii Standard Time | | HST | \-10:00 | Hawaii Standard Time | | CAT | \-10:00 | Central Alaska Time | | NT | \-11:00 | Nome Time | | IDLW | \-12:00 | International Date Line, West | #### Datetime[​](#datetime "Direct link to Datetime") Columns with type `Datetime` are interpreted as datetimes. The column sub-types specify how the data is converted to a datetime. For example, `datetime_epoch_ms` specifies that the column contains Unix timestamps in milliseconds. `datetime_parse` specifies that the column contains datetimes in a custom format. Some examples of supported formats are listed below (we support any combination of the date and time formats): | Format | Example | | --- | --- | | `%Y-%m-%dT%H:%M:%S.%f` | 1999-02-15T04:05:06.789 | | `%Y/%m/%d %H:%M` | 1999/02/15 04:05 | | `%B %d, %Y %I:%M %p %Z` | February 15, 1999 04:05 AM PST | | `%Y%m%dT%H%M%S` | 19990215T040506 | For more information on format codes, see the [Python documentation](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) . ### Schema Updates[​](#schema-updates "Direct link to Schema Updates") If you do nothing, Cleanlab Studio will automatically infer the column types in your dataset that lead to the best results. However you sometimes may wish to enforce certain column types (e.g. to specify that a column of integers actually represents discrete categories rather than numeric data). There are two ways to enforce a particular schema (column types) for your dataset: 1. Using the Web Application after loading your dataset. ![Schema Update User Interface](/img/datasets-guide/schema_update_ui.png) 2. Providing a schema override when [programmatically loading your dataset via Python API](/studio/api/python/studio/#method-upload_dataset) . You can provide partial schema overrides by specifying column types for a subset of columns. You do not need to provide overrides for all columns in your dataset. [ { "name": "", "column_type": "" }] For an example of using schema overrides in the Python API, see our [regression tutorial](/studio/tutorials/cleanlab-studio-api/regression/) . Data Ingestion[​](#data-ingestion "Direct link to Data Ingestion") ------------------------------------------------------------------- You can load your data into Cleanlab Studio from various sources: local files, cloud storage, using the Python API, etc. ### Dataset Ingestion via Signed URL[​](#dataset-ingestion-via-signed-url "Direct link to Dataset Ingestion via Signed URL") If you are trying to ingest your private data into Cleanlab Studio via a URL, you can do so using a signed URL from the external cloud provider you are using. For example, you may have a bucket in your cloud provider containing image data. You can create a signed URL that will give temporary access to this bucket of images, so that you are able to ingest the images into Cleanlab Studio. The signed URL you create will have an expiration time that only allows access to the data it is connected to for a limited time within your cloud environment. You only need an amount of time that is necessary to ingest the data into Cleanlab Studio, so we suggest starting with a 1-2 hour limit that you can adjust accordingly. Once the data from your bucket is ingested into Cleanlab Studio via the signed URL, the data will still be available within Cleanlab Studio even if the URL (access to the bucket) expires. Whether you are creating a URL for images or another data modality, you will need to format the data in your private cloud bucket properly first depending on the modality and you can refer to the `Modalities` section on this page for more details. To actually generate the signed URL, you can refer to [this page](https://cloud.google.com/storage/docs/access-control/signed-urls) for a reference on how to do this from Google Cloud Platform (GCP) or [this page](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html) for a reference on how to do this from Amazon Web Services (AWS). Once you have generated the URL, simply copy and paste it into the `Upload via URL` option in the Cleanlab Studio data ingestion page. This is a simple way to run Cleanlab Studio on data in your private GCP/AWS storage. Alternate ways are available on the [Enterprise plan](https://cleanlab.ai/sales/) . * [Modalities](#modalities) * [Text/Tabular](#texttabular) * [Image](#image) * [Machine Learning Task](#machine-learning-task) * [Multi-class](#multi-class) * [Multi-label](#multi-label) * [Regression](#regression) * [Unsupervised](#unsupervised) * [File Formats](#file-formats) * [CSV](#csv) * [JSON](#json) * [Excel](#excel) * [DataFrame](#dataframe) * [ZIP](#zip) * [Schemas](#schemas) * [Column Types](#column-types) * [Schema Updates](#schema-updates) * [Data Ingestion](#data-ingestion) * [Dataset Ingestion via Signed URL](#dataset-ingestion-via-signed-url) --- # Concepts | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) [📄️ Datasets\ ------------\ \ What datasets Cleanlab Studio supports.](/studio/concepts/datasets/) [📄️ Projects\ ------------\ \ Use Projects to analyze your data.](/studio/concepts/projects/) [📄️ Cleanlab Columns\ --------------------\ \ Learn about issues found in your data.](/studio/concepts/cleanlab_columns/) [📄️ Resolver\ ------------\ \ How to correct data issues.](/studio/concepts/resolver/) [📄️ Cleanset\ ------------\ \ Get cleaned version of your dataset.](/studio/concepts/cleanset/) [📄️ Models\ ----------\ \ Deploy robust ML models in one click.](/studio/concepts/models/) [📄️ Datasets\ ------------\ \ What datasets Cleanlab Studio supports.](/studio/concepts/datasets_v1/) --- # Projects | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page A `Project` corresponds to an automated Cleanlab analysis of your [Dataset](/studio/concepts/datasets/) as well as corrections to improve the Dataset. Once your dataset is successfully ingested, it will populate in the “Datasets” section. The next step is to select `Create Project` under the Action column. ![Dashboard with arrow to Create Project](/img/projects-guide/project-show-dataset.png) As soon as you create a Project, Cleanlab Studio automatically trains ML models to analyze your data. This may take some time (you will get an email when the results are ready). Once the Project Status shows “Ready for review”, you can click the Project to review the [issues in your dataset](/studio/concepts/cleanlab_columns/) and start correcting them. Creating a project to improve your data requires few selections that are explained below. Refer to our [tutorials](/studio/tutorials/) for specific examples. If you are unsure about anything, just ask: [support@cleanlab.ai](mailto:support@cleanlab.ai) Machine Learning Task / Dataset Type[​](#machine-learning-task--dataset-type "Direct link to Machine Learning Task / Dataset Type") ------------------------------------------------------------------------------------------------------------------------------------ ![List of ML tasks.](/img/projects-guide/project-ml-task.png) This selection corresponds to the modality of your data. Cleanlab Studio supports the following data modalities: * **Text** — create a project to analyze a single column of text data (e.g. customer service requests) * **Tabular** — create a project to analyze multiple columns of data (e.g. financial reports) * **Image** — create a project to analyze image data (e.g. e-commerce products) Each Project uses AI to analyze your data, which involves training certain types of ML models appropriate for your dataset and the specific information you are interested in. Cleanlab Studio supports the following ML tasks: * **Multi-class classification** (`"multi-class"`) : A single example belongs to exactly one of the classes – the classes are mutually exclusive. * **Multi-label classification** (`"multi-label"`) : A single example can belong to one or more classes simultaneously or none of the classes at all – the classes are not mutually exclusive (each class either applies to the example or not). ![List of ML task types supported.](/img/projects-guide/project-type.png) Additionally, the following ML tasks are supported through Cleanlab Studio’s Python API only: * **Regression** (`"regression"`) : Each data point has a target variable with continuous/numeric values (i.e. price, income, age) that we’d like to predict/impute or detect errors in. Currently only supported for _text_ and _tabular_ datasets. * **Unsupervised/No Task** (`None` or `"unsupervised"`) : There are no labels associated with data points (note: this is _not_ the same as an unlabeled dataset you wish to get labeled). Currently only supported for _text_ and _image_ datasets. The above enumerates what is currently supported in the generally available version of Cleanlab Studio. Other types of datasets and machine learning tasks are supported in private [Enterprise plans](https://cleanlab.ai/sales/) (documents, audio, video, image segmentation, object detection, …). **Help:** Don’t fret if you are not a Machine Learning expert! Which ML task to choose simply depends on what information in the dataset (e.g. which column of a table) you would like to predict/impute values of or detect erroneous values in. We call entries in this column the **label** for each data point (row). * If there is **no** specific _label_ column/variable of interest in your dataset, select “unsupervised” as the ML task type. * If the _label_ for your dataset is **numeric** values (e.g. price, income, age), select “regression” as the ML task type. * If the _label_ for your dataset is **categorical** (e.g. yes/no binary variable, or one of say 7 possible values for each data point), select: “multi-class” (classification) as the task type. * If the _label_ for your dataset is a **list of multiple categories** (e.g. image/document tagging where there are say 7 possible classes and each data point belongs to some subset of the classes simultaneously), select: “multi-class” (classification) as the task type. * If the _label_ for your dataset is **arbitrary open-ended text** (e.g. LLM instruction-tuning datasets and other sequence-to-sequence tasks with input+output text pairs), you should instead use Cleanlab’s [Trustworthy Language Model](/tlm/tutorials/tlm/) . We emphasize the choice of ML task is just about choosing what piece of information in your data you are specifically interested in analyzing more closely (i.e. what form of information your chosen _label_ corresponds to). For structured/tabular datasets, you have the option to select which columns Cleanlab will use as predictors of this _label_ when training ML models. Cleanlab Studio is so easy to use, even non-ML experts can apply highly-accurate Machine Learning. Using the `Model Deployment` feature of a Project, you can use Cleanlab’s ML model to predict the value of labels for new data points (via a drag-n-drop interface in the Web Application, or in real-time via a REST API and our Python API). Model Type[​](#model-type "Direct link to Model Type") ------------------------------------------------------- Cleanlab trains many different ML models on your data and automatically identifies the best in order to detect [data issues](/studio/concepts/cleanlab_columns/) in your dataset. This process can take some time to deliver the best results. You have a choice between two settings: * **Fast** — trains faster but less accurate ML models * **Regular** — trains more accurate ML models and runs more data analyses ![List of model types supported.](/img/projects-guide/project-model-button.png) We recommend using **Regular** mode, except when you have a tight deadline to meet. After making your selections, click `Clean my data!` to kick-off project training. You will get an email when training completes. At that point, the auto-detected [data issues](/studio/concepts/cleanlab_columns/) are presented in an intuitive data correction interface for you to quickly clean up your dataset. Custom model training time-limits for bigger datasets are supported in private [Enterprise plans](https://cleanlab.ai/sales/) . * [Machine Learning Task / Dataset Type](#machine-learning-task--dataset-type) * [Model Type](#model-type) --- # Models | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page A `Model` is a machine learning model automatically trained and optimized for your dataset. Cleanlab Studio identifies the most appropriate model to detect [issues](/studio/concepts/cleanlab_columns/) in your dataset. After cleaning up the issues detected in your dataset, you can use your improved [cleanset](/studio/concepts/cleanset/) to re-train a highly accurate and robust version of the model (with a single click). !['Models interface.'](/assets/images/models-b3014affc1a491117715aa37629614b6.jpg) Deploy a Model[​](#deploy-a-model "Direct link to Deploy a Model") ------------------------------------------------------------------- You can use your trained model for making predictions on new data (model inference). To get started, click the `Deploy Model` button at the bottom of your [project](/studio/concepts/projects/) and enter a model name. This will automatically identify and train the best type of ML model on the [cleanset](/studio/concepts/cleanset/) (i.e. current version of your dataset with all of your latest corrections applied). Training make take a while – once it completes the status wheel will change to a `View model` button (you will also receive an email so you don’t have to actively monitor this). After that, you can inspect the model’s performance (prediction accuracy estimated via cross-validation) and get predictions for new data. Below we show an example of model deployment with a multi-class classification dataset. Model deployment is also available for multi-label classification, and the steps involved are identical to the process shown below. Using a Model to Make Predictions[​](#using-a-model-to-make-predictions "Direct link to Using a Model to Make Predictions") ---------------------------------------------------------------------------------------------------------------------------- To make predictions directly in the web interface: 1. Select `View Model`. 2. Select `Predict New Labels` in the upper right hand corner. 3. Upload your CSV with new data and select `Predict New Labels` 4. Once the status says “Ready for export”, select `Export` to download your predictions. **IMPORTANT:** The column name(s) in the file used for predictions must match the column name(s) of the target variable(s) in your original dataset used for the project. In this example, the target (text) column is named `Review_text` which is also the column name in the CSV uploaded for predictions (below). !['Prediction examples.'](/assets/images/prediction-examples-b5c1ba256152640bb6cde234eefaba23.jpg) Alternatively learn how to make predictions via Python API in our tutorial: [Deploying Reliable Models in Production](/studio/tutorials/cleanlab-studio-api/inference_api/) . Inference Results[​](#inference-results "Direct link to Inference Results") ---------------------------------------------------------------------------- Selecting the `Inference Results` tab (at the top of the web interface) shows all of the datasets you have produced predictions for using this model. Here you can can `Export` or `Delete` each set of predictions. !['Inference results.'](/assets/images/results-0f27e546680a9a53d4cb983fb2133f69.jpg) For example, below is a CSV file of exported predictions opened in Google Sheets. In this particular export, each row corresponds to the respective example found in the uploaded `amazon-model-deploy-test.csv` data file. The possible classes that the model can predict are listed as column headers (`negative` and `positive` for this example dataset) with the corresponding **predicted probability** of each class listed in the rows. This file also lists the `Suggested Label` which is the **predicted class** for each row (i.e. the class with the highest predicted probability). !['Model predictions.'](/assets/images/predictions-8bc4545cd538d4589b8c0f3f2df5db32.jpg) For multi-label classification, the output also has columns representing the predicted probabilities of each label, along with a `Suggested Label` column. In the case of multi-label classification, the probability for each label represents the likelihood of that label being present, so the sum of probabilities in one row may exceed $1$ if multiple labels are present for that data point. The `Suggested Label` consists of the predicted labels for each data point, which will be returned as a comma-separated string, e.g. “wearing\_hat,has\_glasses” (with no whitespaces). Model Details[​](#model-details "Direct link to Model Details") ---------------------------------------------------------------- Selecting the `Model Details` tab at the top displays information about the `Model`. Your deployed model was automatically created by training and ensembling the listed types of ML models. Your deployed model is the one with the highest accuracy, shown in the first row. Here you can see these statistics: * **Model:** Type of ML model trained (**Ensemble Predictor** corresponds to a combination of the other models listed below). * **Held-out Accuracy:** Accuracy of the deployed model, trained on your improved [cleanset](/studio/concepts/cleanset/) * **Original Accuracy:** Accuracy of the model trained on your original unmodified dataset, estimated via cross-validation. * **Inference Time:** Time it took (in seconds) to complete cross-validated inference for this model. * **Training Time:** Time it took (in seconds) to complete model training for this model. !['Model details.'](/assets/images/model-details-41bea01121cc4196ba43d7ab4e89f6e7.jpg) * [Deploy a Model](#deploy-a-model) * [Using a Model to Make Predictions](#using-a-model-to-make-predictions) * [Inference Results](#inference-results) * [Model Details](#model-details) --- # Cleanlab Columns | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page Cleanlab Studio runs many analyses of your dataset to find data issues and provide other useful metadata, including detection of: [label issues](/studio/concepts/cleanlab_columns/#label-issues) , [outliers](/studio/concepts/cleanlab_columns/#outliers) , [ambiguous examples](/studio/concepts/cleanlab_columns/#ambiguous) , [well-labeled examples](/studio/concepts/cleanlab_columns/#well-labeled) , and more. New metadata columns are being continuously added to Cleanlab Studio, both in the web app as well as the API, where they are available through [`download_cleanlab_columns()`](/studio/api/python/studio/#method-download_cleanlab_columns) . Read this page to learn about all of the different types of data issues that Cleanlab Studio is able to automatically detect in your datasets. Most Cleanlab analyses (label issue, outlier, etc.) produce two columns: * A numeric score between 0 and 1 indicating the magnitude of the attribute. For example, an **outlier** score of `0.99` is an extreme outlier (such data points warrant your attention), and a **label issue** score of `0.01` is not a severe label issue (such data points do not warrant your attention). Sort your dataset by these scores to identify the most important data points to focus on. The raw magnitude of these scores is less important than their relative ordering across your dataset. Example: [`label_issue_score`](#label_issue_score) . * A boolean flag indicating whether the attribute is estimated to be true or not. When both the score and boolean are present, the boolean is computed based on thresholding the score, with the threshold chosen intelligently by Cleanlab Studio (we’ve extensively benchmarked these scores on a large number of datasets). For example, a data point with the outlier value `True` is likely an outlier that warrants your attention (as it may have an outsized impact on downstream models or indicate problems with the data sources). Example: [`is_label_issue`](#is_label_issue) . For most applications, start by sorting your data points by the score you care about, then consider the corresponding boolean flag attribute, and finally consider a different score threshold if appropriate for your application. All analyses run independently (so e.g. a data point can be flagged as both a label issue and an outlier). More Cleanlab columns may be computed in Projects created in `Regular` vs. `Fast` mode. | Analysis Type | Column Name | Type | | --- | --- | --- | | [Label Issues](/studio/concepts/cleanlab_columns/#label-issues) | [is\_label\_issue](#is_label_issue)

[label\_issue\_score](#label_issue_score)

[suggested\_label](#suggested_label)

[suggested\_label\_confidence\_score](#suggested_label_confidence_score) | Boolean
Float
String or Integer
Float | | [Ambiguous Examples](/studio/concepts/cleanlab_columns/#ambiguous) | [is\_ambiguous](#is_ambiguous)

[ambiguous\_score](#ambiguous_score) | Boolean
Float | | [Well-labeled Examples](/studio/concepts/cleanlab_columns/#well-labeled) | [is\_well\_labeled](#is_well_labeled) | Boolean | | [Near Duplicates](/studio/concepts/cleanlab_columns/#near-duplicates) | [is\_near\_duplicate](#is_near_duplicate)

[near\_duplicate\_score](#near_duplicate_score)

[near\_duplicate\_cluster\_id](#near_duplicate_cluster_id) | Boolean
Float
Integer | | [Outliers](/studio/concepts/cleanlab_columns/#outliers) | [is\_outlier](#is_outlier)

[outlier\_score](#outlier_score) | Boolean
Float | The following analyses are only run on text data: | Analysis Type | Column Name | Type | Example | | --- | --- | --- | --- | | [Personally Identifiable Information](/studio/concepts/cleanlab_columns/#personally-identifiable-information-pii) | [is\_PII](#is_pii)

[PII\_score](#pii_score)

[PII\_types](#pii_types)

[PII\_items](#pii_items) | Boolean
Float
List
List | [hello@cleanlab.com](mailto:hello@cleanlab.com)
, 242-123-4567 | | [Non-English Text](/studio/concepts/cleanlab_columns/#non-english-text) | [is\_non\_english](#is_non_english)

[non\_english\_score](#non_english_score)

[predicted\_language](#predicted_language) | Boolean
Float
String | 404Error

InvalidUsername

InvalidPIN | | [Informal Text](/studio/concepts/cleanlab_columns/#informal-text) | [is\_informal](#is_informal)

[informal\_score](#informal_score)

[spelling\_issue\_score](#spelling_issue_score)

[grammar\_issue\_score](#grammar_issue_score)

[slang\_issue\_score](#slang_issue_score) | Boolean
Float
Float
Float
Float | ’sup my bro! how was the weekend at d beach? | | [Toxic Language](/studio/concepts/cleanlab_columns/#toxic-language) | [is\_toxic](#is_toxic)

[toxic\_score](#toxic_score) | Boolean
Float | F\*\*k you! | | [Text Sentiment](/studio/concepts/cleanlab_columns/#text-sentiment) | [sentiment\_score](#sentiment_score) | Float | | | [Biased Language](/studio/concepts/cleanlab_columns/#biased-language) | [is\_biased](#is_biased)

[bias\_score](#bias_score)

[gender\_bias\_score](#gender_bias_score)

[racial\_bias\_score](#racial_bias_score)

[sexual\_orientation\_bias\_score](#sexual_orientation_bias_score) | Boolean
Float
Float
Float
Float | He can’t be a nurse, nursing is a profession for women. | | [Text Length](/studio/concepts/cleanlab_columns/#text-length) | [is\_empty\_text](#is_empty_text)

[text\_num\_characters](#text_num_characters) | Boolean
Integer | | The following analyses are only run on image data: | Analysis Type | Column Name | Type | Example | | --- | --- | --- | --- | | [Dark images](/studio/concepts/cleanlab_columns/#dark-images) | [is\_dark](#is_dark)

[dark\_score](#dark_score) | Boolean
Float | ![dark](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/dark.jpg) | | [Light images](/studio/concepts/cleanlab_columns/#light-images) | [is\_light](#is_light)

[light\_score](#light_score) | Boolean
Float | ![light](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/light.jpg) | | [Blurry images](/studio/concepts/cleanlab_columns/#blurry-images) | [is\_blurry](#is_blurry)

[blurry\_score](#blurry_score) | Boolean
Float | ![blurry](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/blurry.png) | | [Low information images](/studio/concepts/cleanlab_columns/#low-information-images) | [is\_low\_information](#is_low_information)

[low\_information\_score](#low_information_score) | Boolean
Float | ![lowinfo](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/low_information.png) | | [Odd aspect ratio images](/studio/concepts/cleanlab_columns/#odd-aspect-ratio-images) | [is\_odd\_aspect\_ratio](#is_odd_aspect_ratio)

[odd\_aspect\_ratio\_score](#odd_aspect_ratio_score) | Boolean
Float | ![oddaspect](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/odd_aspect_ratio.jpg) | | [Grayscale images](/studio/concepts/cleanlab_columns/#grayscale-images) | [is\_grayscale](#is_grayscale) | Boolean | ![grayscale](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/grayscale.jpg) | | [Oddly sized images](/studio/concepts/cleanlab_columns/#odd-sized-images) | [is\_odd\_size](#is_odd_size)

[odd\_size\_score](#odd_size_score) | Boolean
Float | ![oddsize](https://raw.githubusercontent.com/cleanlab/assets/master/cleanvision/example_issue_images/odd_size.png) | | [Aesthetic images](/studio/concepts/cleanlab_columns/#aesthetic-images) | [aesthetic\_score](#aesthetic_score) | Float | ![aesthetic](https://raw.githubusercontent.com/cleanlab/assets/master/studio_image_issues/aesthetic.png) | | [NSFW images](/studio/concepts/cleanlab_columns/#nsfw-images) | [is\_NSFW](#is_nsfw)

[NSFW\_score](#nsfw_score) | Boolean
Float | ![nsfw](https://raw.githubusercontent.com/cleanlab/assets/master/studio_image_issues/nsfw.png) | | [Not Analyzed](/studio/concepts/cleanlab_columns/#not-analyzed) | [is\_not\_analyzed](#is_not_analyzed) | Boolean | | ### Label Issues[​](#label-issues "Direct link to Label Issues") Label issues are data points that are likely mislabeled. [Learn more](https://jair.org/index.php/jair/article/view/12125) . #### `is_label_issue`[​](#is_label_issue "Direct link to is_label_issue") Contains a boolean value, with `True` indicating that the data point is likely has been labeled incorrectly in the original dataset. #### `label_issue_score`[​](#label_issue_score "Direct link to label_issue_score") Contains a score between 0 and 1. The higher the score of a data point, the more likely it is mislabeled in the original dataset. Mathematically, `is_label_issue` is estimated via [Confident Learning](https://jair.org/index.php/jair/article/view/12125) algorithms, with `label_issue_score` defined based on the _normalized\_margin_ method defined in the Confident Learning paper. The determination of `is_label_issue` is not a simple cutoff applied to the `label_issue_score` because different classes have different estimated label error rates and model prediction error rates, which Confident Learning accounts for. #### `suggested_label`[​](#suggested_label "Direct link to suggested_label") Contains an alternative suggested label that appears more appropriate for the data point than the original given label. For multi-class classification and regression projects, the suggested label will be null for data points not flagged with any issues (i.e. `is_label_issue`, `is_outlier`, `is_ambiguous`, `is_near_duplicate` are all `False`). The type of this column matches the type of the given label column (string or integer). #### `suggested_label_confidence_score`[​](#suggested_label_confidence_score "Direct link to suggested_label_confidence_score") Contains a score between 0 and 1 for data points that have a `suggested_label`. The higher the score, the more confident we are in the suggested label. While the `label_issue_score` quantifies the likelihood that a given label in the original dataset is incorrect (higher values correspond to data points that are more likely incorrectly annotated), the `suggested_label_confidence_score` quantifies the likelihood that Cleanlab’s predicted label for a data point is correct (higher values correspond to data points you can more confidently auto-fix / auto-label with Cleanlab). Unlabeled data points thus do not receive a `label_issue_score` but they do receive a `suggested_label_confidence_score`. For multi-class classification datasets, this score is the predicted class probability of the class deemed most likely by Cleanlab’s ML model. For multi-label datasets, the confidence score for each data point is aggregated over all the possible classes for this data point. ### Ambiguous[​](#ambiguous "Direct link to Ambiguous") Ambiguous data points are not well-described by any class in a dataset. Even many different human annotators may disagree on the best class label for such data points. Such data might be appropriate to exclude from a dataset or have your experts review. The presence of ambiguous data points may also indicate the class definitions were not very clear in the original data annotation instructions – consider more clearly defining the distinction between certain classes with many data points flagged as ambiguous. [Read](https://pub.towardsai.net/a-simple-adjustment-improves-out-of-distribution-detection-for-any-classifier-5e96bbb2d627) about how ambiguity is scored. #### `is_ambiguous`[​](#is_ambiguous "Direct link to is_ambiguous") Contains a boolean value, with `True` indicating that the data point appears ambiguous. #### `ambiguous_score`[​](#ambiguous_score "Direct link to ambiguous_score") Contains a score between 0 and 1. The higher the score of a data point, the more ambiguous the data point (i.e. the more we anticipate multiple human annotators would disagree on how to properly label this data point). Mathematically, this score is proportional to the normalized entropy of predicted class probabilities for each data point output by Cleanlab’s AutoML system. ### Well-Labeled[​](#well-labeled "Direct link to Well-Labeled") Well-labeled data points are confidently estimated to already have the correct given label in the original dataset. These are good representative examples of their given class. Well-labeled examples can safely be used in downstream tasks where high quality is required. If manually reviewing a dataset to ensure the highest quality, you can safely skip reviewing these Well-labeled data points, which have already been validated by Cleanlab’s AI. [Learn more](https://cleanlab.ai/blog/well-labeled/) . #### `is_well_labeled`[​](#is_well_labeled "Direct link to is_well_labeled") Contains a boolean value, with `True` indicating that the given label of the data point is highly likely to be correct. ### Outliers[​](#outliers "Direct link to Outliers") Outliers are atypical data points that significantly differ from other data. Such anomalous data might be appropriate to exclude from a dataset. Outliers may otherwise have outsized impact on your modeling/analyses or indicate problems with the data sources. [Learn more](https://arxiv.org/abs/2207.03061) . For images/text, outliers are detected based on how semantically similar the content is to any other content in the dataset. For text data, the length of the text is also taken into account. #### `is_outlier`[​](#is_outlier "Direct link to is_outlier") Contains a boolean value, with `True` indicating that the data point is identifed as an outlier. #### `outlier_score`[​](#outlier_score "Direct link to outlier_score") Contains a score between 0 and 1. The higher the score of a data point, the more atypical it appears to be compared to the rest of the dataset (more extreme outlier). ### Near Duplicates[​](#near-duplicates "Direct link to Near Duplicates") Near duplicate data points are those that are identical or near-identical to other examples in the dataset. Extra duplicate copies of data might be appropriate to exclude from a dataset. They may otherwise have outsized impact on your modeling/analyses or indicate problems with the data sources. #### `is_near_duplicate`[​](#is_near_duplicate "Direct link to is_near_duplicate") Contains a boolean value, with `True` indicating that this data point is a (near or exact) duplicate of another data point in the dataset. #### `near_duplicate_score`[​](#near_duplicate_score "Direct link to near_duplicate_score") Contains a score between 0 and 1. The higher the score of a data point, the more similar it is to some other data point in the dataset. Exact duplicates will have score equal to 1. For images/text, near duplicates are scored based on how semantically similar the content is to any other content in the dataset. #### `near_duplicate_cluster_id`[​](#near_duplicate_cluster_id "Direct link to near_duplicate_cluster_id") Contains a cluster ID for each data point, where data points with the same ID belong to the same set of near duplicates. Use this to determine which data points are near duplicates of one another. The cluster IDs are sequential integers: 0, 1, 2, … Data points that do not have near duplicates (where `is_near_duplicate` is `False`) are assigned an ID of `__`. Columns specific to Text Data[​](#columns-specific-to-text-data "Direct link to Columns specific to Text Data") ---------------------------------------------------------------------------------------------------------------- Each of the values listed in this section is independently computed for each text field (does not depend on other text fields in the dataset, unlike say duplicates or label issues which depend on statistics of the full dataset). [Learn more](https://cleanlab.ai/blog/text-content-moderation/) . ### Personally Identifiable Information (PII)[​](#personally-identifiable-information-pii "Direct link to Personally Identifiable Information (PII)") Personally Identifiable Information (PII) is information that could be used to identify an individual or is otherwise sensitive. Names, addresses, phone numbers are examples of common PII. _Note: PII detection is currently only provided for text datasets from Projects run in Regular mode._ #### `is_PII`[​](#is_pii "Direct link to is_pii") Contains a boolean value, with `True` indicating that the text contains PII. #### `PII_score`[​](#pii_score "Direct link to pii_score") Contains a score between 0 and 1. The higher the score of a data point, the more sensitive the PII detected. * Low sensitivity: URL, social media username * Moderate sensitivity: phone number, email address * High sensitivity: social security number, credit card number #### `PII_types`[​](#pii_types "Direct link to pii_types") Contains a comma separated list of the types of PII detected in this text. Possible types include: social security number, credit card number, phone number, email, social media username, URL. #### `PII_items`[​](#pii_items "Direct link to pii_items") Contains a comma separated list of the PII items detected in the text. For example: [abc@gmail.com](mailto:abc@gmail.com) , 242-139-4346, etc. ### Non-English Text[​](#non-english-text "Direct link to Non-English Text") Non-English text may include **foreign languages** or be **unreadable** due to nonsensical characters and other indecipherable gibberish. Examples of text detected as non-English: * `{{Answer}}\n \n {{nextStep}}\n\n {{followUp}}\n\n {{addInfo}}\n \n {{cusFeedback}}\n \n {{faq}}\n \n{{EOM}}` * `404Error\
\InvalidUsername\\InvalidPIN\\` * `la trasferenza al mio conto non è stata consentita` _Note: Non-English text detection is currently only provided for text datasets from Projects run in Regular mode._ #### `is_non_english`[​](#is_non_english "Direct link to is_non_english") Contains a boolean value, with `True` indicating that the text is not written in English. #### `non_english_score`[​](#non_english_score "Direct link to non_english_score") Contains a score between 0 and 1 (defined as 1 minus the probability that this text is English estimated by a language detection model). The higher the score of a data point, the less the text resembles proper English language. High scores may correspond to text from other languages, or text contaminated by non-language strings (eg. HTML/XML tags, identifiers, hashes, random character combinations that are not meaningfully readable). #### `predicted_language`[​](#predicted_language "Direct link to predicted_language") Contains the predicted language of the text if it is identified to be non-English. The language will only be predicted if Cleanlab is confident that the text is written in another language (ie. it is not nonsensical characters), otherwise it will be assigned `__`. ### Informal Text[​](#informal-text "Direct link to Informal Text") Informal text is **poorly written** either due to casual language or writing errors such as improper grammar or spelling. _Note: Informal text detection is currently only provided for text datasets from Projects run in Regular mode._ #### `is_informal`[​](#is_informal "Direct link to is_informal") Contains a boolean value, with `True` indicating that the text contains informal language and is not well written. #### `informal_score`[​](#informal_score "Direct link to informal_score") Contains a score between 0 and 1. Data points with lower scores correspond to text written in a more formal style with fewer grammar/spelling errors. This score aggregates the `spelling_issue_score`, `grammar_issue_score`, `slang_issue_score` defined below. The highest values of the `informal_score` (near 1.0) correspond to text that is poorly written with many obvious writing mistakes issues (many grammatical errors, spelling errors, slang terms throughout). #### `spelling_issue_score`[​](#spelling_issue_score "Direct link to spelling_issue_score") Contains a score between 0 and 1. Higher scores correspond to text with more misspelled words. #### `grammar_issue_score`[​](#grammar_issue_score "Direct link to grammar_issue_score") Contains a score between 0 and 1. Higher scores correspond to text with more severe grammatical errors. #### `slang_issue_score`[​](#slang_issue_score "Direct link to slang_issue_score") Contains a score between 0 and 1. Higher scores correspond to less formally written text with more slang and colloquial language. ### Toxic Language[​](#toxic-language "Direct link to Toxic Language") Text that contains hateful speech, harmful language, aggression, or related toxic elements. _Note: Toxicity detection is currently only provided for text datasets from Projects run in Regular mode._ #### `is_toxic`[​](#is_toxic "Direct link to is_toxic") Contains a boolean value, with `True` indicating that the given text likely contains toxic language. #### `toxic_score`[​](#toxic_score "Direct link to toxic_score") Contains a score between 0 and 1. The higher the score of a data point, the more hateful the text appears. ### Text Sentiment[​](#text-sentiment "Direct link to Text Sentiment") Sentiment refers to how positive or negative the tone conveyed in some text sounds (i.e. how the author seems to feel about the topic). _Note: Sentiment is only estimated for text datasets from Projects run in Regular mode._ #### `sentiment_score`[​](#sentiment_score "Direct link to sentiment_score") Contains a score between 0 and 1. Higher scores correspond to text with stronger positive sentiments (positive opinions conveyed about the topic), while lower scores correspond to text with stronger negative sentiments. Text conveying a neutral opinion will receive sentiment scores around 0.5. _Note: Unlike many of Cleanlab’s other issue scores, higher sentiment scores may correspond to better text examples in your dataset._ ### Biased Language[​](#biased-language "Direct link to Biased Language") Text that contains biased language, prejudiced expressions, stereotypes, or promotes discrimination/unfair treatment. Specific types of bias detected include discrimination against: gender, race, or sexual orientation. _Note: Bias detection is currently only provided for text datasets from Projects run in Regular mode._ #### `is_biased`[​](#is_biased "Direct link to is_biased") Contains a boolean value, with `True` indicating that the given text contains language likely to be perceived as biased. Since bias is inherently subjective, the `bias_score` thresholds used to determine `True` values here are stringently selected. Just use a lower threshold yourself if you find biased text that is not flagged by this boolean. #### `bias_score`[​](#bias_score "Direct link to bias_score") Contains a score between 0 and 1. The higher the score of a data point, the more likely the text might be perceived as biased. This score is an aggregation of the following sub-scores into an overall bias measure. #### `gender_bias_score`[​](#gender_bias_score "Direct link to gender_bias_score") Contains a score between 0 and 1, with higher scores indicating that the given text contains language more likely to be perceived as discriminating against one’s gender. #### `racial_bias_score`[​](#racial_bias_score "Direct link to racial_bias_score") Contains a score between 0 and 1, with higher scores indicating that the given text contains language more likely to be perceived as discriminating against one’s race. #### `sexual_orientation_bias_score`[​](#sexual_orientation_bias_score "Direct link to sexual_orientation_bias_score") Contains a score between 0 and 1, with higher scores indicating that the given text contains language more likely to be perceived as discriminating against one’s sexual orientation. ### Text Length[​](#text-length "Direct link to Text Length") Texts that are unusually short or long could be anomalies in a dataset. For text datasets, Cleanlab Studio’s outlier score already accounts for the length of each text field, but we explicitly provide this information as well. #### `is_empty_text`[​](#is_empty_text "Direct link to is_empty_text") Contains a boolean value, with `True` indicating that the given text field is empty (there is no text associated with this data point). #### `text_num_characters`[​](#text_num_characters "Direct link to text_num_characters") The length of each text field (how many characters in each row). Any trailing white spaces are **not** considered in the character count. Columns specific to Image Data[​](#columns-specific-to-image-data "Direct link to Columns specific to Image Data") ------------------------------------------------------------------------------------------------------------------- Cleanlab Studio performs various types of image-specific analyses that are independent of the machine learning task, annotations, and other factors. These analyses focus solely on the images within the dataset. This metadata plays a crucial role in identifying and removing low-quality or corrupted images from your dataset, which can adversely affect model performance. [Learn more](https://cleanlab.ai/blog/image-issues/) . ### Dark images[​](#dark-images "Direct link to Dark images") These refer to images with insufficient brightness, appearing dim or underexposed, resulting in a lack of detail and clarity. #### `is_dark`[​](#is_dark "Direct link to is_dark") Boolean value. True indicates that the image is classified as a dark image. #### `dark_score`[​](#dark_score "Direct link to dark_score") A score between 0 and 1, representing the darkness of the image. Higher scores indicate darker images. ### Light images[​](#light-images "Direct link to Light images") These are images that are excessively overexposed or washed out due to an abundance of light or high brightness levels. #### `is_light`[​](#is_light "Direct link to is_light") Boolean value. True indicates that the image is classified as a light image. #### `light_score`[​](#light_score "Direct link to light_score") A score between 0 and 1, indicating the brightness level of the image. Higher scores suggest brighter images. ### Blurry images[​](#blurry-images "Direct link to Blurry images") These are images that lack sharpness and clarity, causing the subjects or details to appear hazy, out of focus, or indistinct. #### `is_blurry`[​](#is_blurry "Direct link to is_blurry") Boolean value. True indicates that the image is classified as a blurry image. #### `blurry_score`[​](#blurry_score "Direct link to blurry_score") A score between 0 and 1, representing the degree of blurriness in the image. Higher scores indicate a more blurry image. ### Low information images[​](#low-information-images "Direct link to Low information images") These are images lacking content (low entropy in values of their pixels). #### `is_low_information`[​](#is_low_information "Direct link to is_low_information") Boolean value. True indicates that the image is classified as a low information image. #### `low_information_score`[​](#low_information_score "Direct link to low_information_score") A score between 0 and 1, representing the severity of the image’s lack of information. Higher scores correspond to images containing less information. ### Grayscale images[​](#grayscale-images "Direct link to Grayscale images") These are images lacking color. #### `is_grayscale`[​](#is_grayscale "Direct link to is_grayscale") Boolean value. True indicates that the image is classified as a grayscale image. ### Odd Aspect Ratio images[​](#odd-aspect-ratio-images "Direct link to Odd Aspect Ratio images") These are images with unusually long width or height (asymmetric dimensions). #### `is_odd_aspect_ratio`[​](#is_odd_aspect_ratio "Direct link to is_odd_aspect_ratio") Boolean value. True indicates that the image is classified as having an odd aspect ratio. #### `odd_aspect_ratio_score`[​](#odd_aspect_ratio_score "Direct link to odd_aspect_ratio_score") A score between 0 and 1, representing the degree of irregularity in the image’s aspect ratio. Higher scores correspond to images whose aspect ratio is more extreme. ### Odd sized images[​](#odd-sized-images "Direct link to Odd sized images") These are images that are unusually small relative to the rest of the images in the dataset. #### `is_odd_size`[​](#is_odd_size "Direct link to is_odd_size") Boolean value. True indicates that the image is classified as an image with an odd size. #### `odd_size_score`[​](#odd_size_score "Direct link to odd_size_score") A score between 0 and 1, indicating the degree of irregularity in the image’s size. Higher scores indicate images whose size is more unusual compared to the other images in the dataset. ### Aesthetic images[​](#aesthetic-images "Direct link to Aesthetic images") These are images which are visually appealing (as rated by most people, although this is highly subjective). They might be artistic, beautiful photographs, or contain otherwise interesting content. _Note: Aesthetic scores are currently only provided for image datasets from Projects run in Regular mode._ #### `aesthetic_score`[​](#aesthetic_score "Direct link to aesthetic_score") A score between 0 and 1, representing how aesthetic the image is estimated to be. If training Generative AI models on your dataset, consider first filtering out the images with low `aesthetic_score`. _Note: Higher aesthetic scores correspond to higher-quality images in the dataset (unlike many of Cleanlab’s other issue scores)._ ### NSFW images[​](#nsfw-images "Direct link to NSFW images") NSFW (Not Safe For Work) images refer to any visual content that is not suitable for viewing in a professional or public environment, typically due to its explicit, pornographic, or graphic nature. These images may contain nudity, sexual acts, or other content that is considered inappropriate for certain settings, such as workplaces or public spaces. _Note: NSFW detection is currently only provided for image datasets from Projects run in Regular mode._ #### `is_NSFW`[​](#is_nsfw "Direct link to is_nsfw") Boolean value. True indicates that the image depicts NSFW content. #### `NSFW_score`[​](#nsfw_score "Direct link to nsfw_score") A score between 0 and 1, representing the severity of the issue. Higher scores correspond to images more likely to be considered inappropriate. ### Not Analyzed[​](#not-analyzed "Direct link to Not Analyzed") For image projects only, a few of the images in the dataset might fail to be processed due to reasons such as poorly formatted data or invalid image file paths. None of our other analyses will be run on such images, and all the other Cleanlab columns will be filled with default values (e.g. `False` for all the boolean issue columns). Thus we provide a boolean column so such rows can be easily filtered out. #### `is_not_analyzed`[​](#is_not_analyzed "Direct link to is_not_analyzed") Contains a boolean value, with `True` indicating that this data point was not analyzed because its image failed to be processed. Images may fail to process because of their file format or being corrupted. Consider using a more standard file format for each image that failed to be processed. * [Label Issues](#label-issues) * [Ambiguous](#ambiguous) * [Well-Labeled](#well-labeled) * [Outliers](#outliers) * [Near Duplicates](#near-duplicates) * [Columns specific to Text Data](#columns-specific-to-text-data) * [Personally Identifiable Information (PII)](#personally-identifiable-information-pii) * [Non-English Text](#non-english-text) * [Informal Text](#informal-text) * [Toxic Language](#toxic-language) * [Text Sentiment](#text-sentiment) * [Biased Language](#biased-language) * [Text Length](#text-length) * [Columns specific to Image Data](#columns-specific-to-image-data) * [Dark images](#dark-images) * [Light images](#light-images) * [Blurry images](#blurry-images) * [Low information images](#low-information-images) * [Grayscale images](#grayscale-images) * [Odd Aspect Ratio images](#odd-aspect-ratio-images) * [Odd sized images](#odd-sized-images) * [Aesthetic images](#aesthetic-images) * [NSFW images](#nsfw-images) * [Not Analyzed](#not-analyzed) --- # Resolver | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page The `Resolver` window zooms in on a specific example in the dataset, with tools to manually correct aspects of this data point. To open the window, click any row in an open `Project`. Use the `Resolver` to understand the given label of a data point, what (if anything) Cleanlab thinks is wrong with it, and take actions to edit/improve your dataset. Data and Task Specific View[​](#data-and-task-specific-view "Direct link to Data and Task Specific View") ---------------------------------------------------------------------------------------------------------- The `Resolver` window differs depending on your data modality and machine learning task. ### Multi-Class Classification[​](#multi-class-classification "Direct link to Multi-Class Classification") For multi-class classification data (where each data point belongs to exactly one class), the `Resolver` lists all of the classes. You can select any of them to correct the label of this data point from the given one to a more appropriate clas. The classes are ordered by their estimated likelihood for being the true label for this data point. No action is required for data points that already look good to you, be careful with your dataset edits! ![Multi-class resolver window.](/assets/images/multi-class-resolver-f135fde94b3c4b69d3c800e1740603f9.jpg) ### Multi-Label Classification[​](#multi-label-classification "Direct link to Multi-Label Classification") For multi-label classification data (where one data point can simultaneously belong to multiple classes), the `Resolver` window will have additional information to handle selecting multiple classes (or none at all) for a particular data point. Refer to our tutorial on multi-label classification to understand how to interpret the original given label and Cleanlab’s suggested alternative label. ![Multi-class resolver window.](/assets/images/multi-label-resolver-f472d342a02bc9c51d7959308371a7fe.jpg) Keyboard Shortcuts[​](#keyboard-shortcuts "Direct link to Keyboard Shortcuts") ------------------------------------------------------------------------------- You can use hotkeys to more quickly correct data points without having to click around. Most hotkeys are shown next to each of their corresponding actions. Select the `Help` button to see additional hotkeys. Available hotkeys: * N: Tag data point as “Needs Review” * E: “Exclude” this data point from the dataset (omit it) * Q: Keep the given label for this data point * W: Re-label this data point using Cleanlab’s auto-suggested label (or “Exclude” it when that is the auto-suggested action) * 1, 2, …, n: Re-label this data point as one of the other classes * Escape: Close `Resolver` window * ↑↓: Toggle previous/next example to iterate through the dataset * H: Toggle help menu * Tab: Disable hotkeys (so you can use them to type words) ![Showing hotkeys.](/assets/images/hotkeys-help-82af1f7f59a24031832ea72304a96fe6.jpg) * [Data and Task Specific View](#data-and-task-specific-view) * [Multi-Class Classification](#multi-class-classification) * [Multi-Label Classification](#multi-label-classification) * [Keyboard Shortcuts](#keyboard-shortcuts) --- # Welcome to the Cleanlab Studio tutorials! | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) Here you can find step-by-step tutorials to apply Cleanlab Studio to specific types of datasets and business problems. On the left you will find the individual tutorials organized by workflow: Web Interface, Python API. The Web Interface tutorials are very simple and no-code. The Python API tutorials are runnable Jupyter notebooks. Unless one data modality is specified in the title, every tutorial is applicable to all types of data that Cleanlab Studio supports: image, text, and structured/tabular datasets. --- # Using Filters and Analytics to Understand Your data | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page In this tutorial, you will learn how to utilize Filters and Analytics within [Cleanlab Studio](https://app.cleanlab.ai/) to understand your data so that you can fix [issues](/studio/concepts/cleanlab_columns/) in the dataset and the processes responsible for introducing these data issues. This tutorial uses an E-Commerce dataset with images of boots, sandals, and shoes. Download it [here](https://s.cleanlab.ai/footwear-demo.zip) . While we use image data as an example here, the steps in this tutorial can be applied to text and structured/tabular datasets as well. To get started, [upload your dataset](/studio/quickstart/web/#upload-a-dataset) to Cleanlab Studio. Then [create a Project](/studio/quickstart/web/#create-a-project-to-detect-data-and-label-issues) , which is an automated Cleanlab analysis of your dataset that includes suggested corrections to improve the dataset. For help with these steps, check out the [Web Quickstart guide](/studio/quickstart/web/) . Overview[​](#overview "Direct link to Overview") ------------------------------------------------- Inside of your [Project](/studio/concepts/projects/) you will find the Filter bar above the dataset and the Analytics tab at the top of the page. The Analytics page provides you with visual representations of your dataset in the form of **clickable** graphs and charts while the Filter tab enables you to display subsets of your data by filtering by values in each of the columns. You can use them in combination to learn about your dataset. ![Showing Filter bar and Analytics page](/assets/images/interface-27c36b61bb94a4734a85b6d66b77d883.jpg) Here’s the recommended workflow: 1. Use the Analytics tab to gain a deeper understanding of your data and the issues within. You may find useful insights such as a specific class that is commonly mistaken for another. 2. Using this knowledge, focus your attention on specific subsets of the data using the Filters. This allows you to work on correcting similar errors which produces faster and more accurate corrections as you’re not context-switching between different classes and issues. Using the Analytics Page[​](#using-the-analytics-page "Direct link to Using the Analytics Page") ------------------------------------------------------------------------------------------------- To get started, click `Analytics` at the top of the page. Each of the graphics includes a detailed explanation on what they are representing. Let’s take a closer look at the `Most Frequently Suggested Label Corrections` graph which breaks down the different types of potential label errors in your dataset. Each row shows the number of examples which have a `Given` Label in your dataset that Cleanlab Studio believes should be corrected to the `Suggested` Label. ![Suggested label correction graph.](/assets/images/label-corrections-7d8374e2eaadcef2bc49843210eced77.jpg) This graph is a great place to understand the relationship of label errors between classes. You can see above that the most common suggested correction is images labeled as `shoe` but should actually be `boot`, with 16 data points. This means that your dataset has many images of boots that are improperly labeled as shoes. Now that you know a bunch of the `shoe`\->`boot` errors exist, simply click on the bar in the chart to automatically filter your dataset to display those specific errors. Note: This produces the same results as setting the `Given` filter to `shoe` and the `Suggested` filter to `boot`. You can now focus your attention on correcting issues which you know are highly prevalent in your dataset. For the majority of corrections you make on this subset of the data, you will only have to answer the question “Is this a boot or a shoe?” and not “Is this a boot, shoe, or sandal?“. For this dataset with only 3 classes, this might not be a huge time-saver, but for a dataset with 10+ classes you can easily imagine the efficiency gained by narrowing down the choices per correction. You have the ability to click any bar or chart on the analytics page to view the individual data points that are exhibiting the issue being summarized. Using the Filters Tab[​](#using-the-filters-tab "Direct link to Using the Filters Tab") ---------------------------------------------------------------------------------------- Although the Analytics page enables you to filter the data in meaningful ways by clicking in certain bars, you may also want to set more complex filters to view custom subsets of the data (perhaps to correct a subset all at once). By default, on the Filter bar you can filter the data based on their `Given` or `Suggested` label, as well as which data are detected to exhibit which `Issues`. If you want to set an additional filter (or multiple) click `Add New Filter` and select the desired filter. Imagine you wanted to see all of the images of shoes that have been mislabeled with a high confidence (> 0.7). This translates to a filter with the following settings: * `Suggested`: shoe * `Issues`: label issue * `Label Issue Score`, `Greater than`: 0.7 If you want to clear a single filter, click the filter and select `Clear`. If you want to clear all of the filters, just click `Clear` on the left hand side of the Filter bar. Next Steps[​](#next-steps "Direct link to Next Steps") ------------------------------------------------------- Now that you have a more thorough understanding of your data and know how to view specific subsets, its now time to make the corrections and improve your dataset! If you are uncertain how to do so, take a look at our [how to correct issues](/studio/quickstart/web/#review-issues-detected-in-your-dataset-and-correct-them) in our quickstart guide. * [Overview](#overview) * [Using the Analytics Page](#using-the-analytics-page) * [Using the Filters Tab](#using-the-filters-tab) * [Next Steps](#next-steps) --- # AI Automated Data Labeling with Cleanlab Studio [Skip to main content](#__docusaurus_skipToContent_fallback) On this page This tutorial shows how to use [Cleanlab Studio](https://app.cleanlab.ai/) for labeling a classification dataset, when only a subset of the data is labeled. Cleanlab Studio expedites this process by predicting labels for your unlabeled data and reporting confidence scores for each prediction, so you know which subset of the data can be reliably auto-labeled by our AI. Cleanlab’s predictions come from combining Foundation models (that rely on pre-trained world knowledge) with supervised ML models trained on your existing labeled data (that learn domain-specific patterns in your data). The Web Inferface supports a human-in-the-loop data labeling workflow, where you can review and accept proposed labels from Cleanlab’s ML model, and with one click, retrain the ML model to learn from the additional supervision information provided in your latest labels. The retrained ML model becomes more confident and accurate as more data is labeled, so iterating this labeling/retraining process enables a single user to label large datasets. We recommend starting with at least 5 labeled examples per class. For datasets that are under 50% labeled, a special _auto-labeling wizard_ will automatically guide you through the first cycle of data labeling + model retraining (if you run a **Regular** mode Project). After this initial round of auto-labeling, Cleanlab Studio will also automatically detect [data and labeling issues](/studio/concepts/cleanlab_columns/) that you can address while continuing to label more data. Get the Dataset[​](#get-the-dataset "Direct link to Get the Dataset") ---------------------------------------------------------------------- This tutorial uses a version of the agnews dataset which you can download here: [ag\_news.csv](https://cleanlab-public.s3.amazonaws.com/Datasets/ag_news.csv) . This dataset is composed of news articles from 4 classes: `World`, `Sports`, `Business` and `Sci/Tech`. 99.5% of the examples in this dataset are not yet labeled. Here are some of the labeled examples from this dataset: | text | label | | --- | --- | | Bahrain boils in summer power cut Bahrainis swelter in 50-degree temperatures without air conditioning as a fault cuts electricity across the island. | World | | Peete Completes Rally Rodney Peete found Walter Young for an 18-yard touchdown pass with 1:48 to play, rallying the Panthers past the Patriots, 20-17, Saturday. | Sports | | Sears, Kmart merge Kmart Holding Corp., the US retailer which emerged from bankruptcy protection only 18 months ago, announced a 11 billion dollar merger with Sears, Roebuck amp; Co, on Nov. 17, 2004. | Business | | Microsoft Updates Its IBM Connectivity Server Microsoft on Tuesday unveiled the 2004 version of its Host Integration Server (HIS) product, which is designed to integrate IBM mainframes and servers with Windows systems. | Sci/Tech | We use a text dataset as an example here, but the steps from this tutorial can also be applied to image or structured/tabular datasets. While ag\_news is a multi-class text classification dataset, the process is similar for a [multi-label dataset](https://cleanlab.ai/blog/studio-multi-label/#how-does-multi-label-differ-from-multi-class) . Learn how to format such datasets [here](/studio/concepts/datasets/#multi-label) . Learn about formatting unlabeled data [here](/studio/concepts/datasets/) . Note the difference between **unlabeled** data points in a dataset that has associated labels, and an **unsupervised** project in which there are no labels to speak of (this tutorial covers the former, not the latter). Load your Dataset[​](#load-your-dataset "Direct link to Load your Dataset") ---------------------------------------------------------------------------- To load your local dataset into Cleanlab Studio, click on `Upload Dataset` button and go through the steps under `Upload from your computer`: 1. Click `Upload Dataset` 2. Select `Upload from your computer` 3. Select or drag-and-drop the provided `ag_news.csv` 4. Click `Next` 5. Cleanlab Studio automatically infers the dataset’s schema. You can leave this as-is and click `Confirm` For many Cleanlab users, this will be the most common way of loading datasets. Datasets can alternatively be loaded from URLs (for publicly hosted datasets), or via command line or the Python API (for integrating Cleanlab into your data processing and QA pipeline). [Python API](/studio/quickstart/api/) instructions **(click to expand)** To instead (optionally) load your data into Cleanlab Studio via the Python API, use the [`upload_dataset`](/studio/api/python/studio/#method-upload_dataset) method: from cleanlab_studio import Studioimport pandas as pdstudio = Studio('YOUR_API_KEY')df = pd.read_csv('ag_news.csv')studio.upload_dataset(dataset=df, dataset_name = "Data Labeling Tutorial") Create a Project[​](#create-a-project "Direct link to Create a Project") ------------------------------------------------------------------------- Once your dataset is loaded into the application, click `Create Project` from the dataset page or the home dashboard. The project creation page offers several settings: * **Machine Learning Task:** select `Text Classification` — we’re working with a text classification task in this tutorial (classifying text snippets into disjoint categories like _Sports_ or _Business_). * **Type of Classification:** select `Multi-Class` (the default) — the ag\_news dataset is for a single-label classification task, where each text example belongs to exactly one class. * **Text column:** select `text` (which is auto-detected) — the name of the column from your dataset that contains the text, on which predictions/labels are based. * **Label column:** select `label` (which is auto-detected) — the name of the column from your dataset that contains the labels. Keep the default `Use Cleanlab Auto-ML` setting, and choose `Regular` mode, which will train better ML models (and is **necessary for using Cleanlab’s auto-labeling wizard**). Finally, click `Clean my data!` to start the data analysis! The video below shows us loading the dataset and creating a project. When you launch a project, Cleanlab Studio trains cutting-edge ML models to analyze your data, which can take some time (about 15min for this tutorial dataset). You’ll get an email once the analysis is complete. By clicking on the e-mail link or `Ready for review` on the home dashboard, you can view the Project results. Initial data labeling via the Auto-Labeling Wizard[​](#initial-data-labeling-via-the-auto-labeling-wizard "Direct link to Initial data labeling via the Auto-Labeling Wizard") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When the majority of your data is unlabeled (less than 50%), Cleanlab’s auto-labeling wizard gets activated to help you bulk-label a large subset of your data that our AI can confidently handle. If the majority of your data is originally labeled, the auto-labeling wizard will not appear and you can skip to the subsequent [Labeling More Data](#labeling-more-data-and-resolving-data-issues) section of this tutorial. The auto-labeling wizard walks you through two simple steps. ### Step 1: Auto-label data points with confidently predicted labels[​](#step-1-auto-label-data-points-with-confidently-predicted-labels "Direct link to Step 1: Auto-label data points with confidently predicted labels") The first step involves bulk labeling the subset of data points that our AI can accurately predict labels for. Each data point receives a confidence score indicating how much the AI-suggested label can be trusted. The wizard will automatically estimate a reasonable confidence score threshold, above which all data points can be labeled with their predicted label via just one click. In the below video, the blue line indicates this automatically estimated threshold. The estimated threshold may be imperfect, so consider adjusting it prior to auto-labeling. Inspect some rows above and below the threshold. Decrease the threshold value if the suggested labels for rows below the threshold look correct; increase it if suggested labels for rows above the threshold don’t look correct. Adjust the threshold by changing the row number in `Threshold Row` box above the data table or using the `Set as threshold` button. For our tutorial dataset, we confidently auto-label 1326 examples in the dataset, as shown in the video below. ### Step 2: Label additional data points that will be most informative[​](#step-2-label-additional-data-points-that-will-be-most-informative "Direct link to Step 2: Label additional data points that will be most informative") After using Cleanlab’s ML model to auto-label data receiving high-confidence predictions, optionally label some additional data yourself. Here we recommend labeling some of the lowest-confidence examples in the dataset. These data points will be most informative for re-training Cleanlab’s ML model, which can be then be used to auto-label more data with greater accuracy/confidence. The more data you label, the better Cleanlab’s ML system will get after re-training. You can use the `Skip` button if you don’t want to label any data yourself. The below video demonstrates this second step, where we label a few low confidence data points ourselves. Once you’ve gone through the auto-labeling wizard, Cleanlab will re-train its ML model on the resulting labeled dataset (which may take a while, you’ll receive an email when results are ready). This model is then used to detect data/label issues and suggest labels for remaining unlabeled examples. This subsequent part of the workflow is equivalent to a regular Cleanlab Studio Project for datasets that are over 50% labeled. The following sections walk through this regular Cleanlab Studio Project workflow, showing how you can iteratively auto-label more of your data and auto-detect label errors, until your entire dataset is accurately labeled and issue-free. In this regular Cleanlab Studio Project workflow: any labels that were added in the auto-labeling wizard (in Steps 1 and 2 above) will appear as `Given` labels in the subsequent Project view. You can also also skip the following sections and directly `Export` your labeled dataset produced via the auto-labeling wizard. Labeling more data and resolving data issues[​](#labeling-more-data-and-resolving-data-issues "Direct link to Labeling more data and resolving data issues") ------------------------------------------------------------------------------------------------------------------------------------------------------------- Here we cover data labeling in the regular Cleanlab Studio Project workflow. Start from this section if the majority of your dataset was originally labeled (in which case the auto-labeling wizard will not appear). This section also covers the workflow to iteratively label more data after you’ve gone through the auto-labeling wizard. Once there are sufficiently many labeled examples from each class, Cleanlab’s ML model will be able to predict that class much better, such that you can accurately auto-label more data. In addition, Cleanlab’s data-centric AI system can also uncover various issues in your dataset (like previously mislabeled data points) that you can fix in the Web Interface. While Cleanlab Studio can be used to quickly re-label data detected as being originally mislabeled (see [other tutorials](/studio/tutorials/cleanlab-studio-web/train_test/#manually-review-and-address-issues-in-test-data) ), here let’s focus on labeling originally **unlabeled data**. You can solely view the unlabeled data within a dataset by selecting `Unlabeled` in the Filter bar. Unlabeled data takes value `-` in the `Given` label column (to indicate no label has been given yet). For each unlabeled data point, Cleanlab Studio automatically predicts an appropriate label in the `Suggested` label column, along with a confidence score for this prediction. ### Labeling individual examples[​](#labeling-individual-examples "Direct link to Labeling individual examples") If you’d prefer to review data points one-at-a-time, click on a row of data to open the Resolver panel where you can select a class label for this data point. Even though you’re going through the data points one-by-one, you’ll benefit from Cleanlab’s suggested label(s) in the Resolver window. #### Basic row-by-row labeling workflow[​](#basic-row-by-row-labeling-workflow "Direct link to Basic row-by-row labeling workflow") The video below demonstrates using the Resolver panel to manually label individual data points that Cleanlab is less confident about. To label, select a data point by clicking on it and use keyboard shortcuts to take actions like: label, exclude, tag, etc. Or use the mouse and click on the label buttons! * `W` to auto-fix (apply Cleanlab Studio’s recommended action, such as a suggested label for unlabeled data) * `N` to add the “Needs Review” tag (so your team revisits this data point later) * `Q` to keep the given label * `E` to exclude the data point from the dataset * `1`…`9` to label as a particular class, amongst top 9 most likely class labels for this data point ### Batch Labeling[​](#batch-labeling "Direct link to Batch Labeling") Cleanlab Studio supports both labeling each row in the dataset one by one, as well as batch labeling a set of rows. Batch labeling allows you to label thousands of data points at once, while simultaneously correcting label errors. To batch label, first use filter/sort the data to pull up the data points you’d like to label simultaneously. Once you have retrieved the desired data, open the `Clean Top K` dialog to take a batch action on the top _K_ data points in your current table view. Available actions are _Auto-fix_ (apply our suggested label), _Exclude_ (remove from dataset), _Label_ (apply one label to the selected points), and _Needs Review_ (add a tag to revisit this data later) Batch labeling can be very powerful when combined with Cleanlab Studio’s filter/sort operations. For instance, consider sorting your data by the `Confidence Score` column prior to `Clean Top K` to auto-label the data with most confident predictions. Alternatively, consider sorting your data by the `Label Issue Score` column prior to `Clean Top K` to automatically correct data that was likely mislabeled. Batch labeling / auto-labeling provides a good starting point that can be rapidly iterated on. Individual labeling is good option for those last few examples Cleanlab indicates low-confidence in. In the video below, we batch label the top 25 unlabeled examples that received a suggested label for the `Business` class. ### Other useful actions[​](#other-useful-actions "Direct link to Other useful actions") **Multi-select.** Beyond individual/batch-labeling, you can alternatively click-and-drag / multi-select to highlight multiple data points and simultaneously label or otherwise act upon them. This is helpful in filtered/sorted data views where you want to apply the same action to a few adjacent data points. In the below video, we filter for data points exhibiting the `Non-English` issue, select them all, and _Exclude_ these selected rows from our dataset. **Analytics.** Amongst other things, the Analytics page shows which types of label errors are most common in your dataset, as well as which data sources are the most error prone. In the below video, we see there are overall label errors in `Sci/Tech` class of the dataset, and click on this bar to see which data points these are specifically. One powerful workflow is: using the Analytics page to jump into a particularly informative filtered view of the data and applying batch actions in this view. **Needs Review.** If you spot data points that you’re unsure how to handle, use the `Needs Review` tag to mark them. Your team can later revisit them by filtering for the tag. ![needs_review_callout.png](/assets/images/needs_review-481f962f79b059a71c630d1d816797e7.png) Improve the Quality of Suggested Labels and Detected Data Issues[​](#improve-the-quality-of-suggested-labels-and-detected-data-issues "Direct link to Improve the Quality of Suggested Labels and Detected Data Issues") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- After making some changes to the dataset, you can (optionally) improve the quality of suggested labels and detected data issues by clicking the `Improve Issues Found` button (shown below). ![improve_issues.png](/assets/images/improve_issues-341a631d7d5d9e3a507eac3feeea6a33.png) This will retrain Cleanlab Studio’s ML model on the updated dataset (with new labels you just added/corrected as well as excluding bad data you marked). Trained with better data, the resulting model can more accurately/confidently suggest labels for any data that still remains unlabeled as well as better detect remaining data issues. Once the Project is again Ready for Review, the labels corrected and assigned in previous runs will now appear in the `Given` column. A new version of the dataset is snapshotted, and any further labels you add will appear in the `Corrected` column. View previous versions of the dataset under the `Versions` tab, and see the [Cleanset guide](/studio/concepts/cleanset/) for more details. For the best end-result, you can **iteratively** repeat this human-in-the-loop AI workflow in multiple rounds – each time labeling a bit more data and curating the dataset before retraining the ML model to learn from your latest supervision. For instance, an end-to-end labeling effort might look like this: * First manually label 0.1% of your data * Launch a Cleanlab Studio Project and auto-label 5% of the data in the auto-labeling wizard * Manually label another 0.1% in the auto-labeling wizard * Auto-label 10% in the subsequent regular Cleanlab Studio Project workflow * Manually label and correct another 0.1% of the data via the Resolver panel * Hit `Improve Issues Found` to retrain the AI system and then auto-label the remaining 85% of the data, now that the AI has become accurate enough. ### Export your labeled dataset[​](#export-your-labeled-dataset "Direct link to Export your labeled dataset") Now that you’ve labeled the dataset and possibly also resolved data issues, export your [cleanset](/studio/concepts/cleanset/) (cleaned dataset) via `Export Cleanset` button. ![export_cleanset_auto_labeling.png](/assets/images/export_cleanset_dl-df930e0788c7c183a6a51ff90d695a23.png) Python API instructions (optional) You can alternatively export programmatically via our Python API. Retrieve the Cleanset ID from the `Export with API` option in the `Export Cleanset` dialog box, and then use the [`download_cleanlab_columns`](/studio/api/python/studio/#method-download_cleanlab_columns) method: from cleanlab_studio import Studioimport pandas as pdstudio = Studio('YOUR_API_KEY')df = studio.download_cleanlab_columns('YOUR_CLEANSET_ID') The cleanset is exported as a CSV file. Here, labels assigned via the auto-labeling wizard can be found in the column you designated as the `label` when creating your Project. New labels assigned (and any label corrections) in the regular Cleanlab Studio Project workflow can be found in the `cleanlab_corrected_label` column. The screenshot below shows the exported CSV and the relevant columns that can be used to construct your final labeled and cleaned dataset. ![exported_cleanset_v2.png](/assets/images/exported_cleanset_v2-b597bbaa746b5b21d318c0d1efa3db87.png) To obtain a final labeled dataset after (re)labeling data in both the auto-labeling wizard and regular Cleanlab Studio Project workflow, update the values in the column you had designated as the `label` with any corresponding values appearing in the `cleanlab_corrected_label` column. Data points with Null label value and no corresponding value in the `cleanlab_corrected_label` column remain unlabeled. Using Python, you can obtain your final dataset labels as follows: cleanlab_columns = pd.read_csv("cleanlab_columns.csv")cleanlab_columns["final_label"] = cleanlab_columns['cleanlab_corrected_label'].fillna(cleanlab_columns['label']) Bonus: Making the most of your labeled data with the Cleanlab’s ML model deployment[​](#bonus-making-the-most-of-your-labeled-data-with-the-cleanlabs-ml-model-deployment "Direct link to Bonus: Making the most of your labeled data with the Cleanlab’s ML model deployment") -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- You’ve labeled your dataset — now what? In addition to using your cleaned and labeled data for all the tasks you were previously tackling with the smaller/noisier original dataset, Cleanlab Studio can also immediately use your data for training a state-of-the-art ML model. With one click, you can deploy this model to serve accurate predictions for new data. This is great if you have **even more** unlabeled data to handle (say, some that came in after you generated your initial dataset). Click `Train Improved Model` on the bottom of the page, and Cleanlab Studio will automatically train a model on your cleaned data and deploy it for use in production. Learn more via our [inference API tutorial](/studio/tutorials/cleanlab-studio-api/inference_api/) , and note you can also get predictions for new data simply by dragging a file of test data to your deployed model in our Web Interface. Cleanlab Studio offers the fastest path to label data, curate/clean it, and train/deploy accurate ML. ![train_and_deploy.png](/assets/images/train_and_deploy-285bf0502cb25fe1fcd69d557c824b05.png) * [Get the Dataset](#get-the-dataset) * [Load your Dataset](#load-your-dataset) * [Create a Project](#create-a-project) * [Initial data labeling via the Auto-Labeling Wizard](#initial-data-labeling-via-the-auto-labeling-wizard) * [Step 1: Auto-label data points with confidently predicted labels](#step-1-auto-label-data-points-with-confidently-predicted-labels) * [Step 2: Label additional data points that will be most informative](#step-2-label-additional-data-points-that-will-be-most-informative) * [Labeling more data and resolving data issues](#labeling-more-data-and-resolving-data-issues) * [Labeling individual examples](#labeling-individual-examples) * [Batch Labeling](#batch-labeling) * [Other useful actions](#other-useful-actions) * [Improve the Quality of Suggested Labels and Detected Data Issues](#improve-the-quality-of-suggested-labels-and-detected-data-issues) * [Export your labeled dataset](#export-your-labeled-dataset) * [Bonus: Making the most of your labeled data with the Cleanlab's ML model deployment](#bonus-making-the-most-of-your-labeled-data-with-the-cleanlabs-ml-model-deployment) --- # Cleanset | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page A `Cleanset` is an improved version of your original dataset. You create one by labeling unlabed data or fixing detected [data issues](/studio/concepts/cleanlab_columns/) in your dataset, such as correcting erroneous labels or excluding examples that are outliers/duplicates. Use the [Resolver](/studio/concepts/resolver/) to correct individual data points or `Clean Top K` button (at the bottom of a [Project](/studio/concepts/projects/) ) to auto-fix many data points simultaneously. The resulting improved dataset has the same format as your original dataset and can be used as a plug-in replacement to get more reliable downstream modeling and analytics. After making your data improvements, obtain the Cleanset by **exporting** it from the [web interface](/studio/quickstart/web/#export-a-cleanset) or [Python API](/studio/api/python/studio/#method-download_cleanlab_columns) . !['Cleanlab Studio turns datasets into cleansets.'](/assets/images/cleanset-9870e2fed6d6085c1f9c9fbbe0c8282d.jpg) Exporting Cleanset[​](#exporting-cleanset "Direct link to Exporting Cleanset") ------------------------------------------------------------------------------- ### Web version[​](#web-version "Direct link to Web version") You can export your Cleanset by using the `Export Cleanset` button in the Web UI. !['Cleanlab Studio turns datasets into cleansets.'](/assets/images/export_cleanset-ab8c835905e9b73917f01d25c11861cc.png) ### Python API[​](#python-api "Direct link to Python API") Alternatively, you can export your cleanset programmatically. Retrieve the Cleanset ID by selecting `Export Cleanset` and then `Export Using API`. Then, use the [download\_cleanlab\_columns](/studio/api/python/studio/#method-download_cleanlab_columns) method from the API. Here’s a code snippet showing how to do this. from cleanlab_studio import Studiostudio = Studio('YOUR_API_KEY')cleanlab_columns = studio.download_cleanlab_columns('YOUR_CLEANSET_ID') The Cleanset is exported with the same structure as your original dataset, making it a drop-in replacement with little effort. The exported Cleanset contains many [columns of smart metadata](/studio/concepts/cleanlab_columns/) that can be used to further make informed decisions. It contains the original label column (if your dataset had labels), columns specific to issues found in the dataset, and additional metadata columns related to model training and dataset provided by Cleanlab’s AutoML. Please note that the content of all these columns is collected from the Cleanlab Studio Project run. Label column[​](#label-column "Direct link to Label column") ------------------------------------------------------------- This column is specific to your dataset and has the same name as the label column in the dataset. These are the labels present in the dataset before running Cleanlab analysis. Issue Specific columns[​](#issue-specific-columns "Direct link to Issue Specific columns") ------------------------------------------------------------------------------------------- These are columns related to issues detected by Cleanlab like label issues, outliers, etc. The detailed descriptions of issue related columns can be found in [Cleanlab Columns guide](/studio/concepts/cleanlab_columns/) . Other Metadata columns[​](#other-metadata-columns "Direct link to Other Metadata columns") ------------------------------------------------------------------------------------------- Apart from issue columns, the Cleanset also contains some metadata columns related to model training and dataset. ### `cleanlab_corrected_label`[​](#cleanlab_corrected_label "Direct link to cleanlab_corrected_label") This column contains the corrected labels and the labels assigned to unlabeled rows in the dataset. ### `cleanlab_action`[​](#cleanlab_action "Direct link to cleanlab_action") This column indicates the state of action. For rows where there was no suggested action it is empty. For other rows where an action is suggested, it shows whether it is `unresolved` or the action taken on that row, for example `auto-fix` or `exclude`. ### `cleanlab_given_label_prob`[​](#cleanlab_given_label_prob "Direct link to cleanlab_given_label_prob") This column contains the probability of the given label as determined by Cleanlab’s AutoML. ### `cleanlab_has_rare_class`[​](#cleanlab_has_rare_class "Direct link to cleanlab_has_rare_class") This is a boolean column indicating whether the specific row lies belongs to a rare class. Here, a rare class refers to a class that has less than 5 samples in the dataset. ### `cleanlab_is_initially_unlabeled`[​](#cleanlab_is_initially_unlabeled "Direct link to cleanlab_is_initially_unlabeled") This is a boolean column indicating whether the specific row was initially unlabeled in the dataset. ### `cleanlab_predicted_label`[​](#cleanlab_predicted_label "Direct link to cleanlab_predicted_label") This column contains the label predicted by Cleanlab’s AutoML. ### `cleanlab_predicted_label_prob` [​](#cleanlab_predicted_label_prob-- "Direct link to cleanlab_predicted_label_prob--") This column contains the probability of the label predicted by Cleanlab’s AutoML. ### `cleanlab_top_labels`[​](#cleanlab_top_labels "Direct link to cleanlab_top_labels") This column contains the top suggested labels for the each row in descending order. ### `cleanlab_top_probs`[​](#cleanlab_top_probs "Direct link to cleanlab_top_probs") This column contains the probabilities of top suggested labels for each row in descending order. Creating Improved dataset from Cleanset[​](#creating-improved-dataset-from-cleanset "Direct link to Creating Improved dataset from Cleanset") ---------------------------------------------------------------------------------------------------------------------------------------------- import pandas as pdcleanlab_columns = pd.read_csv("cleanlab_ag_news.csv")# Construct final labels using original labels, auto-labeled and corrected labelscleanlab_columns["label"] = cleanlab_columns["label"].fillna( cleanlab_columns["cleanlab_corrected_label"])# Set the index of cleanlab columns same as the index of the datasetcleanlab_columns["cleanlab_row_ID"] = cleanlab_columns["cleanlab_row_ID"] - 1cleanlab_columns.set_index("cleanlab_row_ID", inplace=True)cleanlab_columns.index.name = None# Merge cleanlab columns with the original dataset# This will automatically handle excluded rowsdf = pd.read_csv("ag_news.csv")new_df = df.merge( cleanlab_columns[["label"]], left_index=True, right_index=True, suffixes=("_original", "_cleaned"),)# Drop unnecessary columns and save the cleaned datasetnew_df = new_df.drop(columns=["label_original"])new_df = new_df.rename(columns={"label_cleaned": "label"})new_df.to_csv("ag_news_cleaned.csv", index=False) Improve Results[​](#improve-results "Direct link to Improve Results") ---------------------------------------------------------------------- Cleanlab Studio learns to iteratively improve results as you fix issues and label unlabeled examples in the dataset. Once you’ve improved more than 5% of your dataset, click `Improve Issues Found` to obtain further improved data quality analysis and suggested actions. Selecting `Improve Issues Found` re-runs Cleanlab Studio to incorporate the corrected issues and labeled examples you added. This allows Cleanlab Studio to **learn from your corrections** which yields _more accurate_ detection of [data issues](/studio/concepts/cleanlab_columns/) and suggested labels. A recommended workflow is: 1. Run Cleanlab Studio on your original dataset 2. Correct 5%-50% of the detected issues 3. Run `Improve Issues Found` 4. Repeat steps 2 and 3 until you achieve desired data quality or ML model deployment accuracy. !['Cleanlab Studio with an arrow pointing to improve results button.'](/assets/images/improve_issues-583ade529e61c9412a191787a11a229f.png) Dataset Versions[​](#dataset-versions "Direct link to Dataset Versions") ------------------------------------------------------------------------- Cleanlab Studio creates a dataset snapshot each time you run analyses on your dataset (or Cleanset) via `Improve Issues Found`. These versions are accessible via the `Versions` button. The snapshot saves your dataset corrections and labels that were made at that point in time. This allows you to revisit the state of the dataset at each re-run of the Project. !['Cleanlab Studio with an arrow pointing to version history button.'](/assets/images/versions_button-c678598f289557095765207c13700d9b.png) Here you can view each stage of dataset correction, with recent data corrections that produced the newest Cleanset version building on top of older data corrections from previous Cleansets. Use this to export an older dataset version and track which stage of dataset corrections produce the best downstream results. !['Cleanlab Studio version history page.'](/assets/images/versions-72f62d6151a123883758b6fb99522675.png) * [Exporting Cleanset](#exporting-cleanset) * [Web version](#web-version) * [Python API](#python-api) * [Label column](#label-column) * [Issue Specific columns](#issue-specific-columns) * [Other Metadata columns](#other-metadata-columns) * [`cleanlab_corrected_label`](#cleanlab_corrected_label) * [`cleanlab_action`](#cleanlab_action) * [`cleanlab_given_label_prob`](#cleanlab_given_label_prob) * [`cleanlab_has_rare_class`](#cleanlab_has_rare_class) * [`cleanlab_is_initially_unlabeled`](#cleanlab_is_initially_unlabeled) * [`cleanlab_predicted_label`](#cleanlab_predicted_label) * [`cleanlab_predicted_label_prob`](#cleanlab_predicted_label_prob--) * [`cleanlab_top_labels`](#cleanlab_top_labels) * [`cleanlab_top_probs`](#cleanlab_top_probs) * [Creating Improved dataset from Cleanset](#creating-improved-dataset-from-cleanset) * [Improve Results](#improve-results) * [Dataset Versions](#dataset-versions) --- # Overview | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page Codex allows nontechnical Subject Matter Experts (SMEs) to directly improve _any_ RAG application. If your RAG system is producing inaccurate/unhelpful responses to common user queries, then Codex is the tool for you! Easily integrated into any RAG application, Codex detects inaccurate/unhelpful responses from your AI. Such queries are logged and prioritized in the Codex Web Interface, where your SMEs can enter desired answers. As soon as a query is answered in the Codex Interface, your RAG application will provide this answer to all similar queries going forward. Codex is the leading platform to **detect, prioritize, resolve, and prevent bad responses from _any_ RAG (or Agents) application**. ![Codex in action](/assets/images/rag_w_codex-f6062a2b06e2bc67e6470aeb56a384b5.png) Key Advantages with Codex[​](#key-advantages-with-codex "Direct link to Key Advantages with Codex") ---------------------------------------------------------------------------------------------------- * Watch the rate of inaccurate/unhelpful/IDK responses from your AI continuously fall after integrating Codex (bridge knowledge gaps, fix wrong responses, ensure policy adherence). * Improvements to your AI no longer 100% fall on Engineering (no back-n-forth between SMEs and Engineering required either). * Detect inaccurate/unhelpful responses from your AI automatically (no manual work). * Fix bad AI responses once and for all. * Track SME tasks and output quality (unlike ad hoc documentation work). * Reduce SME time spent to only the highest ROI work that maximally improves your AI. Get Started[​](#get-started "Direct link to Get Started") ---------------------------------------------------------- Codex involves multiple [personas](/codex/concepts/user_personas/) , including a **Developer** who integrates Codex into your existing RAG application, and a **Subject Matter Expert (SME)** who provides desired answers to queries the RAG app does not handle correctly. Using Codex is easy for SMEs, see the [Using Codex as a SME](/codex/web_tutorials/codex_as_sme/) tutorial. The rest of this documentation is for Developers. Quickly integrate Codex into your RAG app by following the most relevant [Integration Tutorials](/codex/tutorials/) (minimal code required). Then go through the [Concepts](/codex/concepts/) and [Web App Tutorials](/codex/web_tutorials/) to learn about using the Codex platform. To unlock reliable AI, create a [Codex account](https://codex.cleanlab.ai/) . * [Key Advantages with Codex](#key-advantages-with-codex) * [Get Started](#get-started) --- # Datasets | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page A `Dataset` corresponds to your original text/image/tabular data. Cleanlab Studio can analyze and train/deploy models on diverse types of datasets. This page outlines how to format your data and the available options. ![Upload Dataset interface.](/img/datasets-guide/dataset-upload.png) Modalities[​](#modalities "Direct link to Modalities") ------------------------------------------------------- Cleanlab Studio supports datasets of the following modalities: * **Tabular** (structured data stored in tables with numeric/categorical/string columns, e.g. financial reports, sensor measurements) * **Text** (e.g. customer service requests, reports, LLM outputs) * **Image** (e.g. product images, photographs, satellite imagery) ### Text/Tabular[​](#texttabular "Direct link to Text/Tabular") Text/tabular datasets are structured datasets composed of rows and columns, with each row representing an individual data point. Text datasets contain a single text sample for each data point, while tabular datasets can have many predictive columns present for each data point. Text/tabular datasets can be uploaded in multiple formats, including [CSV](#csv) , [JSON](#json) , [Excel](#excel) , and [DataFrame](#dataframe) . For more information on how to use text/tabular datasets, see our [tabular](/studio/tutorials/cleanlab-studio-api/tabular_data_quickstart/) and [text](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) quickstart tutorials. ### Image[​](#image "Direct link to Image") Image datasets are datasets composed of rows of images with attached metadata (including but not limited to labels). Image datasets can be uploaded in multiple formats. If your image files are stored locally, you can use one of the [ZIP upload formats](#zip) . If your image files are hosted (on an Internet-accessible web server or storage platform, like S3 or Google Drive), you can upload your dataset by including links to your external images via an [external image](#external-image) column in a [CSV](#csv) , [JSON](#json) , [Excel](#excel) , or [DataFrame](#dataframe) upload. For more information on how to use image datasets, see our [image quickstart tutorial](/studio/tutorials/cleanlab-studio-api/image_data_quickstart/) . Machine Learning Task[​](#machine-learning-task "Direct link to Machine Learning Task") ---------------------------------------------------------------------------------------- Although you do not need to select a machine learning task type when uploading a dataset to Cleanlab Studio, different tasks require different formatting. To make sure you format your dataset correctly, we recommend that you first investigate teh different task types and format your dataset to match your desired task ahead of time. For more information on ML task types, see our [projects guide](/studio/concepts/projects/#machine-learning-task--dataset-type) . ### Multi-class[​](#multi-class "Direct link to Multi-class") In a [multi-class classification task](/studio/concepts/projects/#machine-learning-task--dataset-type) , the objective is to categorize data points into one of K distinct classes, e.g. classifying animals as one of “cat”, “dog”, “bird”. To format your dataset for multi-class classification, ensure your dataset includes a column containing the class each row belongs to and follow the appropriate structure for your [modality](#modalities) and [file format](#file-formats) . **Unlabeled data** To include unlabeled rows (i.e. rows without annotations) in your multi-class dataset, simply leave their values in the label column empty/blank. ### Multi-label[​](#multi-label "Direct link to Multi-label") In a [multi-label classification task](/studio/concepts/projects/#machine-learning-task--dataset-type) , each data point can belong to multiple (or no) classes, e.g. assigning multiple categories to news articles. For multi-label classification, your dataset’s label column should be formatted as a comma-separated string of classes, e.g. “politics,economics” (there should be no whitespace between labels). Note: for image datasets, you must use the [Metadata](#metadata-zip) or [External Media](#external-image) upload formats. #### Unlabeled data vs. Empty labels[​](#unlabeled-data-vs-empty-labels "Direct link to Unlabeled data vs. Empty labels") For multi-label datasets, there’s an important distinction between unlabeled rows and rows with empty labels. **Unlabeled** rows are data points where the label(s) are _unknown_. You can use Cleanlab Studio to determine whether these rows belong to any of your dataset’s classes. Rows with **empty labels** are data points that have no labels – they have been annotated to indicate that they don’t belong to any of your dataset’s classes. When uploading a `CSV` or `Excel` dataset, any empty values in your label column will be interpreted as _unlabeled_ rows rather than rows with _empty labels_. To distinguish between the two in your dataset, you must use [`JSON` file format](#json) or [`DataFrame` format](#dataframe) . You can represent these two types of data points in the `JSON` file format using the following values: * **empty labels:** `""` (empty string) * **unlabeled:** `null` You can represent these two types of data points in a `DataFrame` upload using the following values: * **empty labels:** `""` (empty string) * **unlabeled:** `None`, `pd.NA` Note: If you only have empty labels (but no unlabeled data) you still need to provide the file in `JSON` format and set the labels to `""`. Empty string labels in `CSV` or `Excel` format will be interpreted as unlabeled. ### Regression[​](#regression "Direct link to Regression") In a [regression task](/studio/concepts/projects/#machine-learning-task--dataset-type) , the objective is to label each data point with a continuous numerical value, e.g. price, income, or age, rather than a discrete category. To format your dataset for regression, ensure your dataset includes a label column containing the continuous numeric value you’d like to predict and follow the appropriate structure for your [modality](#modalities) and [file format](#file-formats) . **Note:** you’ll need to set the column type for your label column to [float](#float) before creating a regression project. See the [Schema Updates](#schema-updates) section for information on how to do this. **Unlabeled data** To include unlabeled rows (i.e. rows without annotations) in your regression dataset, simply leave their values in the label column empty/blank. See our [regression tutorial](/studio/tutorials/cleanlab-studio-api/regression/) for an example of using Cleanlab Studio for a regression task. ### Unsupervised[​](#unsupervised "Direct link to Unsupervised") For an [unsupervised task](/studio/concepts/projects/#machine-learning-task--dataset-type) , there is no target variable to predict for data points. This task type might be appropriate for your data if there is no clear “label column”. Follow the appropriate structure for your [modality](#modalities) and [file format](#file-formats) . See our [unsupervised tutorial](/studio/tutorials/cleanlab-studio-api/unsupervised/) for an example of using Cleanlab Studio for an unsupervised task. File Formats[​](#file-formats "Direct link to File Formats") ------------------------------------------------------------- Cleanlab Studio natively supports CSV, JSON, Excel, and ZIP file formats for uploading datasets. In addition, the [Python API](/studio/api/python/studio/#method-upload_dataset) supports uploading data through [Pandas](https://pandas.pydata.org/docs/reference/frame.html) , [PySpark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.html#pyspark.sql.DataFrame) , and [Snowpark](https://docs.snowflake.com/en/developer-guide/snowpark/reference/python/latest/dataframe) DataFrames. For other common formats, see our tutorials for converting common [text](/studio/tutorials/cleanlab-studio-api/format_text_data/) and [image](/studio/tutorials/cleanlab-studio-api/format_image_data/) dataset formats into one of our natively supported formats. ### CSV[​](#csv "Direct link to CSV") CSV is a standard file format for storing text/tabular data, where each row represents a data record and consists of one or more fields (columns) separated by a delimiter. Make sure your CSV dataset follows these formatting requirements: * Each row is represented by a single line of text with fields separated by a `,` delimiter. * String values containing the delimiter character (`,`) or special characters (e.g. newline characters) should be enclosed within double quotes (`” “`). * The first row should be a header containing the names of all columns in the dataset. * Empty fields are represented by consecutive delimiter characters with no value in between or empty double quotes (`""`). * Each row should contain the same number of columns, with missing values represented as empty fields. * Each row should be separated by a newline. **Unlabeled data.** You can indicate if a data point is not yet annotated/labeled by leaving its value in the label column empty. **Note:** for [multi-label](#multi-label) tasks, if you need data points with [empty labels](#unlabeled-data-vs-empty-labels) , you must use the [JSON file format](#json) . Example CSV text dataset review_id,review,labelf3ac,The sales rep was fantastic!,positived7c4,He was a bit wishy-washy.,negative439a,They kept using the word "obviously," which was off-putting.,positivea53f,,negative ### JSON[​](#json "Direct link to JSON") JSON is a standard file format for storing and exchanging structured data organized using key-value pairs. In a JSON dataset, each row is represented by an object where keys correspond to column names. Your JSON dataset should follow these formatting requirements: * Each row is represented as a JSON object consisting of key-value pairs (separated by colons `:`) enclosed in curly braces `{}`. Each key is a string (enclosed in double quotes `" "`) that uniquely identifies the value associated with it. * The rows of your dataset are enclosed in a JSON array (square brackets `[]`) and separated by commas `,`. * Valid types for values in your dataset include strings, numbers, booleans, and null values. * Your dataset cannot contain nested array or object values. Ensure these are flattened before uploading to Cleanlab Studio. * Every key is present in every row of your dataset. **Unlabeled data** If you’re formatting a dataset for a [multi-class](#multi-class) or [regression](#regression) task, you can indicate if a data point is not yet annotated/labeled using a `""` or `null` value. For [multi-label](#multi-label) tasks, you must use `null` values to indicate data points that are not yet annotated/labeled. This allows us to distinguish between data points where no class applies (indicated by `""`) and data points that are not yet annotated (see [here](#unlabeled-data-vs-empty-labels) for more information on the difference between these). Example JSON multi-label text dataset In this example dataset each data point is a text review. The first data point `f3ac` is a data point with an empty label (has been annotated as belonging to none of the classes), while the last review `a53f` is an unlabeled data point (that has not yet been annotated). Note the difference between their label values to distinguish these cases. [ { "review_id": "f3ac", "review": "The message was sent yesterday.", "label": "" }, { "review_id": "d7c4", "review": "He was a bit rude to the staff.", "label": "negative,rude,mean" }, { "review_id": "439a", "review": "They provided a wonderful experience that made us very happy.", "label": "positive,happy,joy" }, { "review_id": "a53f", "review": "Please let her know I appreciated the hospitality.", "label": null }] ### Excel[​](#excel "Direct link to Excel") Excel is a popular file format for spreadsheets. Cleanlab Studio supports both `.xls` and `.xlsx` files. Your Excel dataset should follow these formatting requirements: * Only the first sheet of your spreadsheet will be imported as your dataset. * The first row of your sheet should contain names for all of the columns. **Unlabeled data** You can indicate if a data point is not yet annotated/labeled by leaving its value in the label column empty. **Note:** for [multi-label](#multi-label) tasks, if you need data points with [empty labels](#unlabeled-data-vs-empty-labels) , you must use the [JSON file format](#json) . Example Excel text dataset | \_ | review\_id | review | label | | --- | --- | --- | --- | | 0 | f3ac | The sales rep was fantastic! | positive | | 1 | d7c4 | He was a bit wishy-washy. | negative | | 2 | 439a | They kept using the word “obviously,” which wa… | positive | | 3 | a53f | | negative | ### DataFrame[​](#dataframe "Direct link to DataFrame") Cleanlab Studio’s Python API supports a number of DataFrame formats, including [Pandas](https://pandas.pydata.org/docs/reference/frame.html) , [PySpark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.html#pyspark.sql.DataFrame) DataFrames, and [Snowpark](https://docs.snowflake.com/en/developer-guide/snowpark/reference/python/latest/dataframe) DataFrames. You can upload directly from a DataFrame in a Python script or Jupyter notebook. See our [Databricks integration](/studio/tutorials/cleanlab-studio-api/databricks/) and [Snowflake integration](/studio/tutorials/cleanlab-studio-api/snowflake/) for more details on uploading from PySpark and Snowpark DataFrames. **Unlabeled data** If you’re formatting a dataset for a [multi-class](#multi-class) or [regression](#regression) task, you can indicate if a data point is not yet annotated/labeled using a `""`, `None`, or `pd.NA` value (or the equivalent null value for PySpark/Snowpark). For [multi-label](#multi-label) tasks, you must use `None` or `pd.NA` values to indicate data points that are not yet annotated/labeled. This allows us to distinguish between data points where no class applies (indicated by `""`) and data points that are not yet annotated (see [here](#unlabeled-data-vs-empty-labels) for more information on the difference between these). Example DataFrame text dataset | \_ | review\_id | review | label | | --- | --- | --- | --- | | 0 | f3ac | The sales rep was fantastic! | positive | | 1 | d7c4 | He was a bit wishy-washy. | negative | | 2 | 439a | They kept using the word “obviously,” which wa… | positive | | 3 | a53f | | negative | ### ZIP[​](#zip "Direct link to ZIP") ZIP files are commonly used for storing and transferring multiple files/directories as a single compressed file. You can upload a dataset with image files to Cleanlab Studio using a ZIP file. Supported structures for organizing your ZIP file are outlined below. #### Simple ZIP[​](#simple-zip "Direct link to Simple ZIP") **Note:** Simple ZIP format is only supported for [multi-class](#multi-class) datasets. To format your dataset as a simple ZIP upload: 1. Create a top-level folder for your dataset. 2. Inside the top-level folder, create a folder for each class in your dataset. The name of each folder will be used as the class label for images within the folder. 3. Inside each class folder, add image files belonging to the class. 4. ZIP the top-level folder. ![Simple Zip Folder](/img/datasets-guide/simple_zip_folder.png) #### Metadata ZIP[​](#metadata-zip "Direct link to Metadata ZIP") If you are uploading an image dataset for a [multi-label](#multi-label) , [regression](#regression) , or [unsupervised](#unsupervised) task or would like to include metadata associated with images in your dataset, you can include either a `metadata.csv` or `metadata.json` file in your ZIP dataset. To format your dataset as a ZIP with metadata upload: 1. Create a top-level folder for your dataset. 2. Add image files for your dataset to the folder. These files can optionally be organized within subfolders. 3. Add a `metadata.csv` or `metadata.json` file inside your top-level folder. 4. ZIP the top-level folder. Your metadata file (`metadata.csv` or `metadata.json`) should follow these formatting requirements: * The file should contain a column named `image`. The values in this column should correspond to the **relative** paths to images from your `metadata.csv` or `metadata.json` file. * If uploading a dataset for a [multi-class](#multi-class) , [multi-label](#multi-label) , or [regression](#regression) task, the file should include a column for the labels corresponding to each image. * The file can optionally include other columns with additional metadata that you would like to view or filter by in Cleanlab Studio (these columns will not be used for project training). * See the [CSV](#csv) and [JSON](#json) file format sections for more details specific to each file type. ![Metadata Zip Folder](/img/datasets-guide/metadata_zip_folder_new.png) Schemas[​](#schemas "Direct link to Schemas") ---------------------------------------------- Schemas define the type of each column in your dataset. This allows Cleanlab Studio to understand the structure of your data and provide the best possible analysis and model training experience. Cleanlab Studio supports the following column types: | Column Type | Sub-types | Override Name | | --- | --- | --- | | Untyped | \- | `untyped` | | Integer | \- | `integer` | | Float | \- | `float` | | Boolean | \- | `boolean` | | String | \- | `string` | | Image | \- | \- | | External Image | \- | `image_external` | | Date | **Seconds** (epoch)
**Milliseconds** (epoch)
**Microseconds** (epoch)
**Nanoseconds** (epoch)
**Parse** | `date_epoch_s`
`date_epoch_ms`
`date_epoch_us`
`date_epoch_ns`
`date_parse` | | Datetime | **Seconds** (epoch)
**Milliseconds** (epoch)
**Microseconds** (epoch)
**Nanoseconds** (epoch)
**Parse** | `datetime_epoch_s`
`datetime_epoch_ms`
`datetime_epoch_us`
`datetime_epoch_ns`
`datetime_parse` | | Time | **Seconds** (epoch)
**Milliseconds** (epoch)
**Microseconds** (epoch)
**Nanoseconds** (epoch)
**Parse** | `time_epoch_s`
`time_epoch_ms`
`time_epoch_us`
`time_epoch_ns`
`time_parse` | By default, Cleanlab Studio sets all columns to `Untyped`, which interprets all columns as text. This can be overriden by: * Updating the schema in the UI after uploading your dataset * Providing a schema override when [uploading your dataset (via Python Client)](/studio/api/python/studio/#method-upload_dataset) See [Schema Updates section](#schema-updates) for more information. ### Column Types[​](#column-types "Direct link to Column Types") #### Untyped[​](#untyped "Direct link to Untyped") This is the default type for columns in Cleanlab Studio. It is used when the type of a column is not specified. Columns with type `Untyped` are interpreted as text. #### Integer[​](#integer "Direct link to Integer") Columns with type `Integer` are interpreted as 64-bit integer numbers. #### Float[​](#float "Direct link to Float") Columns with type `Float` are interpreted as 64-bit floating point numbers. #### Boolean[​](#boolean "Direct link to Boolean") Columns with type `Boolean` are interpreted as boolean values. The following values are interpreted as `True`: `true`, `yes`, `on`, `1`. The following values are interpreted as `False`: `false`, `no`, `off`, `0`. Unique prefixes of these strings are also accepted, for example t or n. Leading or trailing whitespace is ignored, and case does not matter. #### String[​](#string "Direct link to String") Columns with type `String` are interpreted as text. #### Image[​](#image-1 "Direct link to Image") Columns with type `Image` are interpreted as image references. This type is used for ZIP image datasets, and cannot be set manually. The column type for a column with type `Image` also cannot be updated. #### External Image[​](#external-image "Direct link to External Image") Columns with type `External Image` are interpreted as URLs to external images. This type is used for external media image datasets. Example external media image dataset | \_ | img | label | | --- | --- | --- | | 0 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | c | | 1 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | h | | 2 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | y | | 3 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | p | | 4 | `https://s.cleanlab.ai/DCA_Competition_2023_Dat`… | j | #### Date[​](#date "Direct link to Date") Columns with type `Date` are interpreted as dates. The column sub-types specify how the data is converted into a date. For example, `date_epoch_s` specifies that the column contains Unix timestamps in seconds. `date_parse` specifies that the column contains dates in a custom format, which is parsed from the following formats: | Format | Example | Description | | --- | --- | --- | | `%Y-%m-%d` | 1999-02-15 | ISO 8601 format | | `%Y/%m/%d` | 1999/02/15 | | | `%B %d, %Y` | February 15, 1999 | | | `%Y-%b-%d` | 1999-Feb-15 | | | `%d-%m-%Y` | 15-02-1999 | | | `%d/%m/%Y` | 15/02/1999 | | | `%d-%b-%Y` | 15-Feb-1999 | | | `%b-%d-%Y` | Feb-15-1999 | | | `%d-%b-%y` | 15-Feb-99 | | | `%b-%d-%y` | Feb-15-99 | | | `%Y%m%d` | 19990215 | | | `%y%m%d` | 990215 | | | `%Y.%j` | 1999.46 | year and day of year | | `%m-%d-%Y` | 02-15-1999 | | | `%m/%d/%Y` | 02/15/1999 | | For more information on format codes, see the [Python documentation](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) . #### Time[​](#time "Direct link to Time") Columns with type `Time` are interpreted as times. The column sub-types specify how the data is converted to a time. For example, `time_epoch_us` specifies that the column contains Unix timestamps in microseconds. `time_parse` specifies that the column contains times in a custom format, which is parsed from the following formats: | Format | Example | Description | | --- | --- | --- | | `%H:%M:%S.%f` | 04:05:06.789 | ISO 8601 format | | `%H:%M:%S` | 04:05:06 | ISO 8601 format | | `%H:%M` | 04:05 | ISO 8601 format | | `%H%M%S` | 040506 | | | `%H%M` | 0405 | | | `%H%M%S.%f` | 040506.789 | | | `%I:%M %p` | 04:05 AM | | | `%I:%M:%S %p` | 04:05:06 PM | | | `%H:%M:%S.%f%z` | 04:05:06.789-08:00 | ISO 8601 format with UTC offset for PST timezone | | `%H:%M:%S%z` | 04:05:06-08:00 | | | `%H:%M%z` | 04:05-08:00 | | | `%H%M%S.%f%z` | 040506.789-08:00 | | | `%H:%M:%S.%f %Z` | 04:05:06.789 PST | Note: most common timezone abbreviations are supported, but not all. See full list in section below. | | `%H:%M:%S %Z` | 04:05:06 PST | | | `%H:%M %Z` | 04:05 PST | | | `%H%M %Z` | 0405 PST | | | `%H%M%S.%f` | 040506.789 PST | | | `%I:%M %p %Z` | 04:05 AM PST | | | `%I:%M:%S %p %Z` | 04:05:06 PM PST | | For more information on format codes, see the [Python documentation](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) . Supported Time Zone Abbreviations | Time Zone | UTC Offset | Description | | --- | --- | --- | | NZDT | +13:00 | New Zealand Daylight Time | | IDLE | +12:00 | International Date Line, East | | NZST | +12:00 | New Zealand Standard Time | | NZT | +12:00 | New Zealand Time | | AESST | +11:00 | Australia Eastern Summer Standard Time | | ACSST | +10:30 | Central Australia Summer Standard Time | | CADT | +10:30 | Central Australia Daylight Savings Time | | SADT | +10:30 | South Australian Daylight Time | | AEST | +10:00 | Australia Eastern Standard Time | | EAST | +10:00 | East Australian Standard Time | | GST | +10:00 | Guam Standard Time | | LIGT | +10:00 | Melbourne, Australia | | SAST | +09:30 | South Australia Standard Time | | CAST | +09:30 | Central Australia Standard Time | | AWSST | +09:00 | Australia Western Summer Standard Time | | JST | +09:00 | Japan Standard Time | | KST | +09:00 | Korea Standard Time | | MHT | +09:00 | Kwajalein Time | | WDT | +09:00 | West Australian Daylight Time | | MT | +08:30 | Moluccas Time | | AWST | +08:00 | Australia Western Standard Time | | CCT | +08:00 | China Coastal Time | | WADT | +08:00 | West Australian Daylight Time | | WST | +08:00 | West Australian Standard Time | | JT | +07:30 | Java Time | | ALMST | +07:00 | Almaty Summer Time | | WAST | +07:00 | West Australian Standard Time | | CXT | +07:00 | Christmas (Island) Time | | ALMT | +06:00 | Almaty Time | | MAWT | +06:00 | Mawson (Antarctica) Time | | IOT | +05:00 | Indian Chagos Time | | MVT | +05:00 | Maldives Island Time | | TFT | +05:00 | Kerguelen Time | | AFT | +04:30 | Afganistan Time | | EAST | +04:00 | Antananarivo Savings Time | | MUT | +04:00 | Mauritius Island Time | | RET | +04:00 | Reunion Island Time | | SCT | +04:00 | Mahe Island Time | | IT | +03:30 | Iran Time | | EAT | +03:00 | Antananarivo, Comoro Time | | BT | +03:00 | Baghdad Time | | EETDST | +03:00 | Eastern Europe Daylight Savings Time | | HMT | +03:00 | Hellas Mediterranean Time (?) | | BDST | +02:00 | British Double Standard Time | | CEST | +02:00 | Central European Savings Time | | CETDST | +02:00 | Central European Daylight Savings Time | | EET | +02:00 | Eastern Europe, USSR Zone 1 | | FWT | +02:00 | French Winter Time | | IST | +02:00 | Israel Standard Time | | MEST | +02:00 | Middle Europe Summer Time | | METDST | +02:00 | Middle Europe Daylight Time | | SST | +02:00 | Swedish Summer Time | | BST | +01:00 | British Summer Time | | CET | +01:00 | Central European Time | | DNT | +01:00 | Dansk Normal Tid | | FST | +01:00 | French Summer Time | | MET | +01:00 | Middle Europe Time | | MEWT | +01:00 | Middle Europe Winter Time | | MEZ | +01:00 | Middle Europe Zone | | NOR | +01:00 | Norway Standard Time | | SET | +01:00 | Seychelles Time | | SWT | +01:00 | Swedish Winter Time | | WETDST | +01:00 | Western Europe Daylight Savings Time | | GMT | +00:00 | Greenwich Mean Time | | UT | +00:00 | Universal Time | | UTC | +00:00 | Universal Time, Coordinated | | Z | +00:00 | Same as UTC | | ZULU | +00:00 | Same as UTC | | WET | +00:00 | Western Europe | | WAT | \-01:00 | West Africa Time | | NDT | \-02:30 | Newfoundland Daylight Time | | ADT | \-03:00 | Atlantic Daylight Time | | AWT | \-03:00 | (unknown) | | NFT | \-03:30 | Newfoundland Standard Time | | NST | \-03:30 | Newfoundland Standard Time | | AST | \-04:00 | Atlantic Standard Time (Canada) | | ACST | \-04:00 | Atlantic/Porto Acre Summer Time | | ACT | \-05:00 | Atlantic/Porto Acre Standard Time | | EDT | \-04:00 | Eastern Daylight Time | | CDT | \-05:00 | Central Daylight Time | | EST | \-05:00 | Eastern Standard Time | | CST | \-06:00 | Central Standard Time | | MDT | \-06:00 | Mountain Daylight Time | | MST | \-07:00 | Mountain Standard Time | | PDT | \-07:00 | Pacific Daylight Time | | AKDT | \-08:00 | Alaska Daylight Time | | PST | \-08:00 | Pacific Standard Time | | YDT | \-08:00 | Yukon Daylight Time | | AKST | \-09:00 | Alaska Standard Time | | HDT | \-09:00 | Hawaii/Alaska Daylight Time | | YST | \-09:00 | Yukon Standard Time | | AHST | \-10:00 | Alaska-Hawaii Standard Time | | HST | \-10:00 | Hawaii Standard Time | | CAT | \-10:00 | Central Alaska Time | | NT | \-11:00 | Nome Time | | IDLW | \-12:00 | International Date Line, West | #### Datetime[​](#datetime "Direct link to Datetime") Columns with type `Datetime` are interpreted as datetimes. The column sub-types specify how the data is converted to a datetime. For example, `datetime_epoch_ms` specifies that the column contains Unix timestamps in milliseconds. `datetime_parse` specifies that the column contains datetimes in a custom format. Some examples of supported formats are listed below (we support any combination of the date and time formats): | Format | Example | | --- | --- | | `%Y-%m-%dT%H:%M:%S.%f` | 1999-02-15T04:05:06.789 | | `%Y/%m/%d %H:%M` | 1999/02/15 04:05 | | `%B %d, %Y %I:%M %p %Z` | February 15, 1999 04:05 AM PST | | `%Y%m%dT%H%M%S` | 19990215T040506 | For more information on format codes, see the [Python documentation](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) . ### Schema Updates[​](#schema-updates "Direct link to Schema Updates") There are two ways to update the schema for your dataset: 1. Using the Studio UI after uploading your dataset. ![Schema Update User Interface](/img/datasets-guide/schema_update_ui.png) 2. Providing a schema override when [uploading your dataset (via Python Client)](/studio/api/python/studio/#method-upload_dataset) . You can provide partial schema overrides by specifying column types for a subset of columns. You do not need to provide overrides for all columns in your dataset. [ { "name": "", "column_type": "" }] * [Modalities](#modalities) * [Text/Tabular](#texttabular) * [Image](#image) * [Machine Learning Task](#machine-learning-task) * [Multi-class](#multi-class) * [Multi-label](#multi-label) * [Regression](#regression) * [Unsupervised](#unsupervised) * [File Formats](#file-formats) * [CSV](#csv) * [JSON](#json) * [Excel](#excel) * [DataFrame](#dataframe) * [ZIP](#zip) * [Schemas](#schemas) * [Column Types](#column-types) * [Schema Updates](#schema-updates) --- # Frequently Asked Questions | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page Welcome to the Cleanlab Studio FAQ page! Here you can find answers to common questions. Can’t find the answer? Join our [Slack community](https://cleanlab.ai/slack) for live support or contact us at [support@cleanlab.ai](mailto:support@cleanlab.ai) . General[​](#general "Direct link to General") ---------------------------------------------- **What types of data does Cleanlab Studio handle?** Cleanlab Studio currently supports: * Text data * Image data * Structured tabular data (Excel, CSV, JSON, SQL, etc) Video, Audio, and other formats are supported in [Cleanlab Studio for Enterprise](https://cleanlab.ai/sales/) . A tutorial on this site may demonstrate some Cleanlab functionality for say an image dataset, but you can apply the same functionality to text or tabular data. Just try to find the tutorial that covers the functionality you are interested in (regardless of the data modality used as an example in the tutorial), it should be straightforward to apply the same tutorial to your own data (even if it’s a different data modality). **What types of machine learning tasks does Cleanlab Studio support?** Cleanlab Studio currently supports: * Multi-Class Classification * [Multi-Label Classification](/studio/tutorials/cleanlab-studio-web/multilabel/) * [Entity Recognition](/studio/tutorials/cleanlab-studio-api/named_entity_recognition/) * [Sequence-to-Sequence (Text Generation)](/tlm/tutorials/tlm/) Regression, Image Segmentation, (2D/3D) Object Detection, and other ML tasks are supported in [Cleanlab Studio for Enterprise](https://cleanlab.ai/sales/) . **How does Cleanlab Studio detect label and data issues in my datasets?** Cleanlab Studio automatically trains many state-of-the-art ML models based on your dataset’s features and label column (including Foundation models with extensive world-knowledge), and combines the outputs from these models with novel algorithms to estimate data and label quality. This is the culmination of years of [research from our scientists](https://cleanlab.ai/research/) . After you’ve cleaned up your dataset, you can re-train the same AutoML system that was used to detect data issues on the higher-quality data with one click. With another click, you can [deploy this ML model](/studio/tutorials/cleanlab-studio-api/inference_api/) to serve accurate predictions in your application. Beyond deploying it for prediction and using it to detect data isuses, the same AutoML system can also be used confidently label large subsets of data automatically. Thus Cleanlab Studio is far more than a data quality and data cleaning tool. This data-centric AI platform automates all of the steps of a real-world ML project, from data labeling, characterizing data quality, data cleaning, model training/tuning/selection, and model deployment to serve predictions. This is the quickest way to go from raw data to reliable ML deployment, all without having to write code! **What makes Cleanlab Studio unique?** 1. Cleanlab Studio works for both structured (tabular) and unstructured (image, text) datasets. 2. Cleanlab Studio auto-detects label and data issues via AI (rather than user-specified rules) and auto-suggests how to **fix** these issues to produce a higher quality dataset. Cleanlab Studio can simultaneously detect many types of common issues, most of which can only be auto-detected by an AI system that understands the information content in each data point. 3. Cleanlab Studio provides a quick interface to improve the quality of your existing data - no code required! 4. Cleanlab Studio supports end-to-end ML Model Deployment, so you can go from data correction to solution all in one interface. With a few clicks, automatically train the same ML models (used to detect issues in your original dataset) on the improved version of your dataset, and deploy them to serve predictions in your applications. This is the fastest way to go from messy raw data to highly accurate deployed ML. 5. Cleanlab Studio also allows you to use these same ML models to automatically label a dataset from scratch. This is the fastest way to create a high-quality dataset for supervised learning applications, or to get a bunch of documents/images tagged. With auto-labeling + automated label error detection, one person can now label a huge dataset! **Why do the buttons in the Cleanlab Studio application look different than in the tutorial?** We are continuously adding/deleting/renaming buttons to improve Cleanlab Studio. Thus what you see in the Tutorials may sometimes be an older version of the [application](https://app.cleanlab.ai/) . If anything is unclear, please ask for help in our [Slack community](https://cleanlab.ai/slack) and somebody will resolve your issue promptly. **I can’t find a particular Cleanlab column computed for my dataset?** More Cleanlab columns may be computed in Projects created in `Regular` vs. `Fast` mode. If you are missing a column of interest in a `Fast` mode Project, first try creating another Project in `Regular` mode. If the column is still missing, consider reformatting your dataset. Certain columns may not be returned in the Project results if their computation failed (likely due to dataset formatting). Otherwise you can also try decreasing the size of your dataset. Certain columns may not be returned in the Project results if their computation took too long. If your dataset is too large, you will need to get on an [Enterprise plan](https://cleanlab.ai/sales/) in order to get the best results with Cleanlab Studio. Reach out for additional help: **[support@cleanlab.ai](mailto:support@cleanlab.ai) ** **When should I choose Text vs Tabular dataset? How to handle multiple text fields?** While a text dataset can have multiple columns, the subsequent Cleanlab Studio project can only focus on one specific text column. Cleanlab’s AI will only consider this column when determining issues in your dataset and predicting labels. If you have multiple text columns that are important, please combine them all into a single text column (one long string, perhaps including the column names and some delimeter to separate the concatenated columns) and then re-upload your dataset. For instance, you might format one row in a dataset that had 3 text columns like this: Column 1 name: Text from this row of column 1. \n Column 2 name: Text from this row of column 2. \n Column 3 name: Text from this row of column 3. Here is a Python function you can use to combine columns of your choosing into a single text column (as shown above): def combine_columns_into_text(filepath, column_names, output_filepath = "output.csv", name_of_text_column = "text", delimiter = ' \n '): """ Takes in location of your CSV file (`filepath`) and list of strings (`column_names`) specifying which columns to merge. Writes dataset as new file: `output_filepath` with the specified columns merged into one string column. Name of the merged column will be: `name_of_text_column` (optional choice), select this as the Text column in Cleanlab Studio. Merged columns will be separated by (optionally) provided `delimiter`. """ df = pd.read_csv(filepath) df[name_of_text_column] = df.apply(lambda row: delimiter.join([f"{col}: {str(row[col])}" for col in column_names]), axis=1) df.to_csv(output_filepath, index=False) print(f"Dataset with merged columns saved as: {output_filepath}. Load this file in Cleanlab Studio and select '{name_of_text_column}' as the Text column in your Project.") return df Alternatively you can run Cleanlab Studio on such a dataset by treating it as a tabular dataset. For tabular data, Cleanlab’s AI will consider all columns when determining issues in your dataset and predicting labels (even if there are multiple columns containing text). So what’s the difference between running a Text Project or a Tabular Project? In a Text Project, your data will be run through pretrained Foundation models (that are able to contextualize your data with broader world knowledge), and various other Transformer models will be fit to your data. So Text Projects will be better for applications where predicting labels or detecting data issues requires deep semantic understanding of the information in the text. In a Tabular Project, each column will be appropriately featurized for supervised ML models to be applied. For instance, numeric columns are rescaled, categorical columns are encoded, and text columns are encoded via N-gram and TF-IDF word/phrase count vectors. Thus Tabular Projects will be better for applications where: the numeric/categorical information in your dataset is important, being able to learn relationships across multiple columns is important, or the relevant information in the text fields can be encoded into relatively simple patterns (keywords/phrases) rather than requiring semantic understanding of the full meaning of the text. For example, suppose you have a product dataset with feature columns: Name, Description, Price, Weight, … If your label is say whether or not each product is age-restricted (e.g. if it contains alcohol), then a Text Project may be better. If your label is say whether or not each product is expensive relative to similar products, then a Tabular Project may be better. Since Cleanlab Studio is so easy to use, you can just try both approaches and see which works better for your data! **Why is the suggested label sometimes missing?** **Note:** If you’d like to obtain the predictions (and predicted class probabilities) output by Cleanlab’s AutoML system for _every_ data point, use the `download_pred_probs()` method in the Python API. You can always use these predictions to get suggested labels for every data point, even if some suggestions are missing in the Cleanlab columns. These predictions are out-of-sample (obtained via cross-validation) and can be used for unbiased model evaluation estimates for your dataset. Cleanlab’s suggested labels are simply based on these predictions. You can apply your own thresholds to the predicted class probabilities to form your own predictions (and suggested labels) with different levels of precision/recall. #### For Multi-Class Classification Projects[​](#for-multi-class-classification-projects "Direct link to For Multi-Class Classification Projects") Cleanlab’s suggested label will be null for data points not flagged with a label issue (`is_label_issue` column is `False`). Suggested labels may also be null for data points simultaneously flagged with other types of issues as well. The idea is you can rely on the suggested label column for automated data correction, so Cleanlab leaves it empty in cases where there is not an alternative label that is confidently better. In such cases, you can either leave the label as it was originally given, or manually review a data point and determine how to best re-label it. #### For Multi-Label Classification Projects[​](#for-multi-label-classification-projects "Direct link to For Multi-Label Classification Projects") Cleanlab’s suggested label will always exist for each data point in a multi-label classification project. This is to facilitate interpretable comparison between the given label and the predicted label (especially because there can be empty labels in muti-label datasets, for instance an image/document to which none of the tags apply). Thus in multi-label classification, you should not always rely on the suggested label column for automated data correction. Only rely on this suggested label for data points flagged as a label issue. Cleanlab Studio Web App[​](#cleanlab-studio-web-app "Direct link to Cleanlab Studio Web App") ---------------------------------------------------------------------------------------------- **My image dataset won’t upload properly.** Image data must be formatted in a specific way. To learn how: 1. Go to [Upload](https://app.cleanlab.ai/upload) page 2. Select “How to format your dataset” or press H 3. Select your desired Machine Learning task 4. Select `Image` Here you will find how to format your image data depending on where it is stored and how it is structured. You can also read more in the [Image Data Quickstart](/studio/tutorials/cleanlab-studio-api/image_data_quickstart/#dataset-folder-structure) tutorial or our [Datasets guide](/studio/concepts/datasets/#image) . **Where is my `cleanset_id`?** You can find your `cleanset_id` inside of the project you want to export: 1. Select `Export Cleanset` 2. Select `Export using API` 3. Copy `cleanset_id` by clicking the copy icon on the right Cleanlab Studio Python API[​](#cleanlab-studio-python-api "Direct link to Cleanlab Studio Python API") ------------------------------------------------------------------------------------------------------- **Why am I getting an error when running a tutorial notebook?** The tutorial notebooks require the latest version of the `cleanlab-studio` library, which is continuously being improved. Please upgrade to the latest version via: `pip install cleanlab-studio --upgrade` If you are experiencing this issue in `Google Colab` or a `Jupyter notebook`, make sure you refresh your kernel after upgrading. If you are still encountering an error after that, ask for help in our [Slack community](https://cleanlab.ai/slack) and somebody will resolve your issue promptly. **Where is my API key?** You can find your API key in two ways: * On the Cleanlab [Account](https://app.cleanlab.ai/account) page * From the [Upload](https://app.cleanlab.ai/upload) page, select `Upload Dataset` and then `Upload via command line` **Where is my `cleanset_id`?** You can retrieve your latest `cleanset_id` by running the code below. If you need a different one, instructions for getting the `cleanset_id` from the Web app can be found above. from cleanlab_studio import Studiostudio = Studio(API_KEY)cleanset_id = studio.get_latest_cleanset_id(project_id) **My notebook timed out after I created a project.** When you create a project in Cleanlab Studio, it takes some time for the analytics to finish running. You can check the status of the project using the `project_id`: from cleanlab_studio import StudioAPI_KEY = ""studio = Studio(API_KEY)cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")project_status = studio.wait_until_cleanset_ready(cleanset_id) **Note: DO NOT create a new project.** **My notebook timed out while my dataset was uploading.** You can try a few things to check if the dataset was uploaded successfully: 1. Check if the `dataset_id` was printed in your notebook before time out (this is returned from `upload_dataset` [method](/studio/api/python/studio/#method-upload_dataset) ) 2. Check the [Cleanlab Studio](https://app.cleanlab.ai/) Web Application to see if your dataset is shown, and copy down its `dataset_id`. If you cannot find the dataset or its ID, then re-execute the `upload_dataset` command and ensure your notebook stays connected for sufficiently long. Otherwise, once you restart your notebook, skip past the `upload_dataset` command and move onto Project creation based on the `dataset_id`. **How do I handle (near) duplicates?** From each set of nearly duplicated data points that share a common `near_duplicate_cluster_id`, you might only want to keep one of the data points, so that the resulting dataset will no longer contain any near duplicates. You can use this code to select rows of duplicate data and then remove them from your original dataframe: near_duplicates_to_exclude = df['is_near_duplicate'] & df['cleanlab_near_duplicate_cluster_id'].duplicated(keep='first')df_fixed = df[~near_duplicates_to_exclude] You might find Cleanlab’s near duplicate determination in `is_near_duplicate` is too loose/stringent. The `near_duplicate_score` column quantifies how similar each data point is to its nearest neighbor in the dataset. Exactly duplicated data points will have a score of 1. You can these scores do apply a different threshold to determine which data points are considered near duplicates. For instance here is the code to only consider exact duplicates, and remove extra copies of exact duplicates from the dataset: df['is_exact_duplicate'] = df['cleanlab_near_duplicate_score'] == 1.0exact_duplicates_to_exclude = df['is_exact_duplicate'] & df['cleanlab_near_duplicate_cluster_id'].duplicated(keep='first')df_fixed = df[~exact_duplicates_to_exclude] **How do I format the labels for a multi-label dataset?** To run Cleanlab Studio on a multi-label dataset (where each data point can belong to more than one class or none of the classes), you will want to make sure the values in your label column are formatted as a string that contains no whitespaces and in which each label value is separated by a comma. If we are say using Python with a multi-label dataset in Pandas DataFrame where the possible classes are `1`, `2`, `3`, then we could format the label column like this: labels = ['2,3', '2,3', '1,2,3', '2,3', '2,3', '1,2,3', '1,2,3', '2,3', '3', '']df["label"] = labels This example shows specifically how to do multi-label formatting with a Python Pandas DataFrame, but many other data formats are supported. Here is a detailed [tutorial](https://help.cleanlab.ai/studio/tutorials/cleanlab-studio-web/multilabel/) on how to prepare and format multi-label data in Cleanlab Studio, and you should also refer to the [Datasets guide](https://help.cleanlab.ai/studio/concepts/datasets/#multi-label) . Pay particular attention to the subtle formatting difference between unlabeled data points (that have not yet been labeled) and data points that have been labeled but do not belong to any of the classes. **I got a \`ValueError: CLI is out of date and must be updated.** Please upgrade to the latest version via: `pip install cleanlab-studio --upgrade` If you are experiencing this issue in `Google Colab` or a `Jupyter notebook`, make sure you refresh your kernel after upgrading. If you are still encountering an error after that, ask for help in our [Slack community](https://cleanlab.ai/slack) and somebody will resolve your issue promptly. Cleanlab Studio CLI[​](#cleanlab-studio-cli "Direct link to Cleanlab Studio CLI") ---------------------------------------------------------------------------------- **I got a `No file exists at: {filename}` error** Ensure you are calling `cleanlab dataset upload` from the same directory where your file is located. **I got `Error: Resource Not Found`** Ensure you are calling `cleanlab cleanset download` with the `cleanset_ID`. This can be copied by: 1. Inside the project you want to export from, select `Export Cleanset` 2. Select `Export using API` 3. Click the copy icon next to your `cleanset_ID` * [General](#general) * [Cleanlab Studio Web App](#cleanlab-studio-web-app) * [Cleanlab Studio Python API](#cleanlab-studio-python-api) * [Cleanlab Studio CLI](#cleanlab-studio-cli) --- # Data Curation with Train vs Test Splits [Skip to main content](#__docusaurus_skipToContent_fallback) On this page In typical Machine Learning projects, we split our dataset into training data for fitting models and test data to evaluate model performance. For noisy real-world datasets, detecting/correcting errors in the training data is important to train robust models, but it’s less recognized that the test set can also be noisy. For accurate model evaluation, it is vital to find and fix issues in the test data as well. Some evaluation metrics are particularly sensitive to outliers and noisy labels. This tutorial demonstrates a way to use [Cleanlab Studio](https://app.cleanlab.ai/) to curate cleaner versions of your training and test data, ensuring **robust** model training and **reliable** performance evaluation. ![Model deployment using Cleanlab Studio](/assets/images/mlimprovement-00177d88671da37d304a1083312b23a7.png) Here’s how we recommend handling noisy training and test data with Cleanlab Studio: * First focus on detecting issues in the test data. For the best detection, we recommend that you merge your training and test data and then run a Cleanlab Studio Project (which will benefit from more data) – but only focus on project results for the test data. * Manually review/correct Cleanlab-detected issues in your test data. To avoid bias, we caution against automated correction of test data. Instead, test data changes should be individually verified to ensure they will lead to more accurate model evaluation. * Run a separate Cleanlab Studio project on the training data alone to detect issues in the training data (without any test set information leakage). * Optionally, use automated Cleanlab suggestions to algorithmically refine the training data (or manually review/correct Cleanlab-detected issues in your training data). * Estimate the final model’s performance on the cleaned test data. **Do not compare the performance of different ML models estimated across different versions of your test data.** These estimates are incomparable. Even if you effectively clean noisy training data, the resulting model may not appear to be better, unless you properly clean the noisy test data as well. Thus we recommend curating clean test data to first establish reliable model evaluation, before curating the training data for improved model training. Automated data correction of test data may bias model evaluation, so we recommend that you manually correct test data issues reported by Cleanlab. You can rely on automated correction of training data once you have trustworthy model evaluation in place. Consider this tutorial as a blueprint for using Cleanlab Studio in ML projects spanning various data modalities and tasks. Let’s get started! Load the data[​](#load-the-data "Direct link to Load the data") ---------------------------------------------------------------- First install and import required dependencies for this tutorial. pip install xgboost scikit-learn pandas from xgboost import XGBClassifierfrom sklearn import preprocessingfrom sklearn.metrics import accuracy_scoreimport pandas as pd This tutorial demonstrates our strategy on a tabular dataset of student grades which has some data entry errors. The same idea can be applied to any dataset, whether structured or unstructured (images/text). Our student grades dataset records three exam scores (numerical features), a written note (a categorical feature with missing values), and a potentially erroneous letter grade (categorical label to predict) for each student. Let’s load the [training data](https://cleanlab-public.s3.amazonaws.com/Datasets/student-grades/train.csv) for fitting our ML model and [test data](https://cleanlab-public.s3.amazonaws.com/Datasets/student-grades/test.csv) for model evaluation. df_train = pd.read_csv( "https://cleanlab-public.s3.amazonaws.com/Datasets/student-grades/train.csv")df_test = pd.read_csv( "https://cleanlab-public.s3.amazonaws.com/Datasets/student-grades/test.csv")df_train.head() | | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | noisy\_letter\_grade | | --- | --- | --- | --- | --- | --- | --- | | 0 | 37fd76 | 99 | 59 | 70 | missed class frequently -10 | D | | 1 | 018bff | 94 | 41 | 91 | great participation +10 | B | | 2 | b3c9a0 | 91 | 74 | 88 | NaN | B | | 3 | 076d92 | 0 | 79 | 65 | cheated on exam, gets 0pts | F | | 4 | 68827d | 91 | 98 | 75 | missed class frequently -10 | C | Curate clean test data[​](#curate-clean-test-data "Direct link to Curate clean test data") ------------------------------------------------------------------------------------------- We first demonstrate the process of improving the quality of noisy test data to facilitate more accurate model evaluation. ### Merge train and test data[​](#merge-train-and-test-data "Direct link to Merge train and test data") We merge our training and test data into a larger dataset that will better enable Cleanlab Studio to detect issues (remember Cleanlab’s AI is trained on the provided data and performs better with more data). In the merged dataset, we add a column _is\_train_ to distinguish between samples from the training vs test set. We’ll use this column to focus on reviewing issues detected in the test data only. df_train_c = df_train.copy()df_test_c = df_test.copy()df_train_c["is_train"] = Truedf_test_c["is_train"] = Falsedf_full = pd.concat([df_train_c, df_test_c]).reset_index(drop=True)df_full.head() | | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | noisy\_letter\_grade | is\_train | | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 37fd76 | 99 | 59 | 70 | missed class frequently -10 | D | True | | 1 | 018bff | 94 | 41 | 91 | great participation +10 | B | True | | 2 | b3c9a0 | 91 | 74 | 88 | NaN | B | True | | 3 | 076d92 | 0 | 79 | 65 | cheated on exam, gets 0pts | F | True | | 4 | 68827d | 91 | 98 | 75 | missed class frequently -10 | C | True | We save the merged dataset as a CSV file. df_full.to_csv("full.csv", index=None) ### Create a Project[​](#create-a-project "Direct link to Create a Project") Let’s launch a project in Cleanlab Studio to auto-detect issues in this dataset. Below is a video demonstrating how to load your dataset and run a project to analyze it. When loading the data, you can optionally override the inferred column types for your dataset (for our tutorial dataset, we specify _stud\_ID_ as an identifier column and the exam columns as numeric). After loading the data, we create a Cleanlab Studio Project. During project setup, we specify the label column as _noisy\_letter\_grade_, and _exam\_1_, _exam\_2_, _exam\_3_, and _notes_ as predictive columns used by Cleanlab’s AI to estimate label issues. Note we ignore the ID column and the `is_train` boolean that we added. ### Manually review and address issues in test data[​](#manually-review-and-address-issues-in-test-data "Direct link to Manually review and address issues in test data") The Project will take a while for Cleanlab’s AI to train on your data and analyze it. When finished running, it will be marked Ready for Review and you’ll get an email. In the project, you can quickly review the issues detected in your data. We focus solely on the test data by setting the filter `is_train=True` and then manually review individual test data examples. It is important _not_ to auto-correct training data at this point in order to prevent test set information leakage. Beware that automated curation of the test data can introduce unforeseen biases in model evaluation. Thus, we recommend carefully reviewing the test data detected to have issues and only making corrections in cases where you are confident the changed test data will provide more reliable model evaluation. For instance, do not re-label a test data point unless you are certain the new label is right and do not exclude test data unless you are certain it is unrepresentative of the setting in which the model will be deployed. The video below demonstrates how this manual data correction process might be conducted for our tutorial dataset. During this process, we re-label certain test data points that Cleanlab Studio correctly identified as mislabeled. To expedite this data correction process, utilize the Analytics tab to review similar types of mislabeled data points. For example, all of the students annotated as _F_’s which Cleanlab Studio estimates should have been annotated as _A_’s instead. After addressing Label Issues detected by Cleanlab, you might also review examples flagged as Ambiguous or Outliers. Once we have addressed the detected issues in our test data, we export the cleaned dataset with Cleanlab-generated metadata columns back into CSV format. ### Construct a clean version of the test data[​](#construct-a-clean-version-of-the-test-data "Direct link to Construct a clean version of the test data") To construct our cleaned test dataset, we filter out the train rows and only keep the relevant columns. # You should generally create your own cleanlab_columns_full.csv file by curating your dataset in Cleanlab Studio and exporting it.# For this tutorial, you can fetch the export file that we used here: https://cleanlab-public.s3.amazonaws.com/Datasets/student-grades/cleanlab_columns_full.csvcleanlab_columns = pd.read_csv("cleanlab_columns_full.csv")df_test_cleaned = cleanlab_columns[cleanlab_columns["is_train"] == False].copy() The `cleanlab_corrected_label` column contains corrected labels for rows that were mislabeled and corrected in the Cleanlab Studio interface. For rows without any issues, we backfill this column with the original labels. df_test_cleaned["cleanlab_corrected_label"] = df_test_cleaned[ "cleanlab_corrected_label"].fillna(df_test_cleaned["noisy_letter_grade"])df_test_cleaned = df_test_cleaned[ [ "stud_ID", "exam_1", "exam_2", "exam_3", "notes", "cleanlab_corrected_label", ]] Our cleaned test dataset is shown below. By correcting badly annotated data, we can more reliably evaluate any ML models on this test set (and determine important decisions like when to deploy an updated model). Clean test labels are particularly important for sensitive evaluation metrics like precision/recall with imbalanced class frequencies. df_test_cleaned.head() | | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | cleanlab\_corrected\_label | | --- | --- | --- | --- | --- | --- | --- | | 1 | 0094d7 | 94 | 91 | 93 | great participation +10 | A | | 9 | 01dd6e | 92 | 99 | 87 | missed homework frequently -10 | B | | 12 | 02c7df | 90 | 73 | 91 | NaN | B | | 14 | 03d6b7 | 93 | 47 | 79 | great participation +10 | B | | 15 | 042686 | 87 | 74 | 95 | missed class frequently -10 | C | Evaluate model performance on clean test data[​](#evaluate-model-performance-on-clean-test-data "Direct link to Evaluate model performance on clean test data") ---------------------------------------------------------------------------------------------------------------------------------------------------------------- The data curation principles demonstrated here can be applied to enhance model evaluation and training, **irrespective of the specific type of ML model you’re using**. Here we choose an XGBoost model, an popular implementation of gradient-boosting decision trees (GBDT) for tabular data. XGBoost (>v1.6) is able to handle mixed data types (numerical and categorical) by setting `enable_categorical=True`, thereby simplifying the modeling process. Preprocess the dataset[​](#preprocess-the-dataset "Direct link to Preprocess the dataset") ------------------------------------------------------------------------------------------- Before training an XGBoost model, we preprocess the _notes_ and _noisy\_letter\_grade_ columns into categorical columns. # Create label encoders for the grade and notes columnsgrade_le = preprocessing.LabelEncoder()notes_le = preprocessing.LabelEncoder()# Prepare the feature columnstrain_features = df_train.drop(["stud_ID", "noisy_letter_grade"], axis=1).copy()train_features["notes"] = notes_le.fit_transform(train_features["notes"])train_features["notes"] = train_features["notes"].astype("category")# Encode the label column into a cateogorical featuretrain_labels = grade_le.fit_transform(df_train["noisy_letter_grade"].copy()) Let’s view the training set features after preprocessing. train_features.head() | | exam\_1 | exam\_2 | exam\_3 | notes | | --- | --- | --- | --- | --- | | 0 | 99 | 59 | 70 | 3 | | 1 | 94 | 41 | 91 | 2 | | 2 | 91 | 74 | 88 | 5 | | 3 | 0 | 79 | 65 | 0 | | 4 | 91 | 98 | 75 | 3 | Next we repeat the same preprocessing steps for our clean test data. test_features = df_test_cleaned.drop( ["stud_ID", "cleanlab_corrected_label"], axis=1).copy()test_features["notes"] = notes_le.transform(test_features["notes"])test_features["notes"] = test_features["notes"].astype("category")test_labels = grade_le.transform(df_test_cleaned["cleanlab_corrected_label"].copy()) ### Train model with original (noisy) training data[​](#train-model-with-original-noisy-training-data "Direct link to Train model with original (noisy) training data") model = XGBClassifier(tree_method="hist", enable_categorical=True)model.fit(train_features, train_labels) ### Using clean test data to evaluate the performance of model trained on noisy training data[​](#using-clean-test-data-to-evaluate-the-performance-of-model-trained-on-noisy-training-data "Direct link to Using clean test data to evaluate the performance of model trained on noisy training data") Although curating clean test data does not directly help train a better ML model, more reliable model evaluation can improve our overall ML project. For instance, clean test data can enable better informed decisions regarding when to deploy a model and better model/hyperparameter selection. preds = model.predict(test_features)acc_original = accuracy_score(test_labels, preds)print( f"Accuracy of model fit to noisy training data, measured on clean test data: {round(acc_original*100,1)}%") Accuracy of model fit to noisy training data, measured on clean test data: 79.2% Curate clean training data[​](#curate-clean-training-data "Direct link to Curate clean training data") ------------------------------------------------------------------------------------------------------- To actually improve our model, we’ll want to improve the quality of our noisy training data. We follow the same steps as before, but this time, we **only use the train data** to detect issues. This prevents information from the test data from potentially influencing the training data (and subsequently trained ML models), which is critical for unbiased model evaluation. Here we simply load the `train.csv` file into Cleanlab Studio and create a project as demonstrated previously. For the training data, feel free to rely on Cleanlab’s automated suggestions to more efficiently fix issues in the dataset. After curating clean training data, we export it in the same way as before. The video below demonstrates how this process might look for our tutorial training data. Here Cleanlab Studio has identified a large number of mislabeled examples, which can be time-consuming to address individually. To expedite the data correction process for our training set, we use the `Analytics` tab to pinpoint subsets of the data suitable for automated correction. In this specific video, we automatically correct all data points for which Cleanlab Studio estimated a grade F was mislabeled as a grade A. Subsequently, we individually examine examples flagged as Ambiguous. We exclude some particularly confusing examples that might hamper our model’s learning. Excluding and relabeling data can be done more freely/automatically in the training data, because as long as we have reliable model evaluation in place, we will see when we have poorly altered the training data and are producing worse models. Cleanlab’s automated suggestions can be useful for correcting many data points at once in large training datasets. # You should generally create your own cleanlab_columns_full.csv file by curating your dataset in Cleanlab Studio and exporting it.# For this tutorial, you can fetch the export file that we used here: https://cleanlab-public.s3.amazonaws.com/Datasets/student-grades/cleanlab_columns.csvdf_train_cleaned = pd.read_csv("cleanlab_columns.csv") To construct our clean training set, we again backfill the `cleanlab_corrected_label` column with the original labels for training rows where no issues were detected. df_train_cleaned["cleanlab_corrected_label"] = df_train_cleaned[ "cleanlab_corrected_label"].fillna(df_train_cleaned["noisy_letter_grade"]) df_train_cleaned = df_train_cleaned[ [ "stud_ID", "exam_1", "exam_2", "exam_3", "notes", "cleanlab_corrected_label", ]] df_train_cleaned.head() | | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | cleanlab\_corrected\_label | | --- | --- | --- | --- | --- | --- | --- | | 0 | 5686d8 | 65 | 0 | 57 | cheated on exam, gets 0pts | F | | 1 | 6fd557 | 97 | 98 | 92 | NaN | A | | 2 | 96968e | 90 | 84 | 97 | great participation +10 | A | | 3 | ccd8c8 | 53 | 0 | 76 | cheated on exam, gets 0pts | F | | 4 | 50bebd | 54 | 80 | 81 | NaN | A | ### Preprocess the clean training data[​](#preprocess-the-clean-training-data "Direct link to Preprocess the clean training data") cleaned_train_features = df_train_cleaned.drop( ["stud_ID", "cleanlab_corrected_label"], axis=1).copy()cleaned_train_features["notes"] = notes_le.transform(cleaned_train_features["notes"])cleaned_train_features["notes"] = cleaned_train_features["notes"].astype("category")cleaned_train_labels = grade_le.transform( df_train_cleaned["cleanlab_corrected_label"].copy()) ### Train model with clean training data[​](#train-model-with-clean-training-data "Direct link to Train model with clean training data") cleaned_model = XGBClassifier(tree_method="hist", enable_categorical=True)cleaned_model.fit(cleaned_train_features, cleaned_train_labels) ### Using clean test data to evaluate the performance of model trained on the clean training data[​](#using-clean-test-data-to-evaluate-the-performance-of-model-trained-on-the-clean-training-data "Direct link to Using clean test data to evaluate the performance of model trained on the clean training data") preds = cleaned_model.predict(test_features)acc_original = accuracy_score(test_labels, preds)print( f"Accuracy of model fit to clean training data, measured on clean test data: {round(acc_original*100,1)}%") Accuracy of model fit to clean training data, measured on clean test data: 91.5% We see that for our tutorial dataset, finding and fixing issues in the training data significantly improved ML model performance. The automated corrections suggested by Cleanlab Studio have allowed us to easily improve our ML model. Furthermore, such training data corrections should directly improve various different types of ML models in case we decide to switch the model later on. **Note: We are reliably evaluating performance here based on clean test data.** If you only make training data improvements but have a noisy test set, you may fail to realize when you have actually improved your model. In fact, only correcting the training data may make model performance appear go down on the original test data in datasets with systematic errors (even if the training data corrections were actually beneficial, they may introduce a distribution shift in such cases). Review performance on noisy test data[​](#review-performance-on-noisy-test-data "Direct link to Review performance on noisy test data") ---------------------------------------------------------------------------------------------------------------------------------------- For completeness, let’s see what the above model performances would be estimated as if we had used original (noisy) test data instead of our cleaned test data. We first preprocess the features of the original test data. noisy_test_features = df_test.drop( [ "stud_ID", "noisy_letter_grade", ], axis=1,).copy()noisy_test_features["notes"] = notes_le.transform(noisy_test_features["notes"])noisy_test_features["notes"] = noisy_test_features["notes"].astype("category")noisy_test_labels = grade_le.transform(df_test["noisy_letter_grade"].copy()) ### Using noisy test data to evaluate the performance of model trained on noisy training data[​](#using-noisy-test-data-to-evaluate-the-performance-of-model-trained-on-noisy-training-data "Direct link to Using noisy test data to evaluate the performance of model trained on noisy training data") preds = model.predict(noisy_test_features)acc_original = accuracy_score(noisy_test_labels, preds)print( f"Accuracy of model fit to noisy training data, measured on noisy test data: {round(acc_original*100,1)}%") Accuracy of model fit to noisy training data, measured on noisy test data: 69.1% ### Using noisy test data to evaluate the performance of model trained on clean training data[​](#using-noisy-test-data-to-evaluate-the-performance-of-model-trained-on-clean-training-data "Direct link to Using noisy test data to evaluate the performance of model trained on clean training data") preds = cleaned_model.predict(noisy_test_features)acc_original = accuracy_score(noisy_test_labels, preds)print( f"Accuracy of model fit to clean training data, measured on noisy test data: {round(acc_original*100,1)}%") Accuracy of model fit to clean training data, measured on noisy test data: 75.0% It’s evident how curating clean test data can significantly affect model performance evaluations. Relying on noisy test data can be misleading and lead to bad decisions. We again emphasize that **even if you effectively clean noisy training data, the resulting model may not appear to be better, unless you properly clean the noisy test data as well.** This tutorial demonstrated a strategy to curate clean test data for reliable model evaluation as well as clean training data for improved model training. Remember that **automated data correction of test data may bias model evaluation**, so manually correct test data issues reported by Cleanlab. You can rely on automated correction of training data once you have trustworthy model evaluation in place, since then you can reliably measure the resulting effect on models fit to the altered training data. If you have any questions, feel free to ask in our [Slack community](https://cleanlab.ai/slack) . * [Load the data](#load-the-data) * [Curate clean test data](#curate-clean-test-data) * [Merge train and test data](#merge-train-and-test-data) * [Create a Project](#create-a-project) * [Manually review and address issues in test data](#manually-review-and-address-issues-in-test-data) * [Construct a clean version of the test data](#construct-a-clean-version-of-the-test-data) * [Evaluate model performance on clean test data](#evaluate-model-performance-on-clean-test-data) * [Preprocess the dataset](#preprocess-the-dataset) * [Train model with original (noisy) training data](#train-model-with-original-noisy-training-data) * [Using clean test data to evaluate the performance of model trained on noisy training data](#using-clean-test-data-to-evaluate-the-performance-of-model-trained-on-noisy-training-data) * [Curate clean training data](#curate-clean-training-data) * [Preprocess the clean training data](#preprocess-the-clean-training-data) * [Train model with clean training data](#train-model-with-clean-training-data) * [Using clean test data to evaluate the performance of model trained on the clean training data](#using-clean-test-data-to-evaluate-the-performance-of-model-trained-on-the-clean-training-data) * [Review performance on noisy test data](#review-performance-on-noisy-test-data) * [Using noisy test data to evaluate the performance of model trained on noisy training data](#using-noisy-test-data-to-evaluate-the-performance-of-model-trained-on-noisy-training-data) * [Using noisy test data to evaluate the performance of model trained on clean training data](#using-noisy-test-data-to-evaluate-the-performance-of-model-trained-on-clean-training-data) --- # Trustworthy Language Model (TLM) | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page Even today’s best Large Language Models (LLMs) still produce “hallucinations”, occasional incorrect answers that can undermine your business. To help you achieve reliable AI, Cleanlab’s Trustworthy Language Model scores the trustworthiness of responses from _any_ LLM in real-time. This lets you know which outputs are reliable and which ones need extra scrutiny. Get started using the TLM API via our [quickstart tutorial](/tlm/tutorials/tlm/) . ![TLM in action](/assets/images/gpt-hallucinate-tlm-6614de01f6e9670417511e38f4f3b21e.png) ### Key Features[​](#key-features "Direct link to Key Features") * **Trustworthiness Scores**: TLM provides [state-of-the-art](https://towardsdatascience.com/benchmarking-hallucination-detection-methods-in-rag-6a03c555f063) trustworthiness scores for _any_ LLM application (Q&A, RAG, Classification, Summarization, Data Extraction, Structured Outputs, Data Annotation, …). You can [score](/tlm/tutorials/tlm/#scoring-the-trustworthiness-of-a-given-response) responses from your existing model (works for _any_ LLM) or even those written by humans. * **Improved LLM Responses**: You can alternatively use TLM in place of your own LLM to [produce higher accuracy outputs](/tlm/tutorials/tlm_advanced/#quality-presets) (along with trustworthiness scores). TLM can [outperform every frontier model](https://cleanlab.ai/blog/trustworthy-language-model/) , because it is built on top of these models, refining their generation process via trustworthiness scoring. * **Scalable Real-Time API**: Designed to handle large datasets, TLM is suitable for most enterprise applications and offers flexible configurations to control costs/latency, as well as [private deployment options](https://cleanlab.ai/sales/) . ### Unlocking Enterprise Use Cases[​](#unlocking-enterprise-use-cases "Direct link to Unlocking Enterprise Use Cases") * **Retrieval-Augmented Generation**: TLM automatically flags potentially incorrect responses in any RAG application. Ensure users don’t lose trust in your Q&A system. * **Chatbots**: TLM informs you which LLM outputs you can directly rely on and which LLM outputs you might escalate for human review. With standard LLM APIs, you do not know which outputs to trust. * **Data Labeling**: TLM auto-labels data with high accuracy and reliable confidence scores. Let the LLM automatically handle 99% of cases where it is trustworthy, and manually handle the remaining 1%. * **Data Extraction and Structured Outputs**: TLM tells you which data auto-extracted from documents, databases, transcripts is worth double checking to ensure accuracy. Transform raw unstructured data into structured data, with less errors and 90% less time reviewing results. * **Evals**: Use TLM to quickly find bad LLM responses in your logs, the key step in determining how to improve your AI application. TLM [outperforms](https://cleanlab.ai/blog/trustworthy-language-model/) LLM-as-judge, and can account for [custom evaluation criteria and human feedback](https://help.cleanlab.ai/tlm/tutorials/tlm_custom_eval/) . TLM is effective in _any_ LLM application where reliability is key, including many more use-cases: summarization, classification, function calling, code generation, … Key Advantages[​](#key-advantages "Direct link to Key Advantages") ------------------------------------------------------------------- * **State-of-the-art accuracy.** [Benchmarks](https://cleanlab.ai/blog/trustworthy-language-model/) reveal that TLM can reduce the rate of incorrect answers: of GPT-4o by 27%, of o1 by 20%, and of Claude 3.5 Sonnet by 20%. For RAG applications, TLM detects incorrect answers with [3x greater precision](https://towardsdatascience.com/benchmarking-hallucination-detection-methods-in-rag-6a03c555f063) than alternatives including: RAGAS, LLM-as-judge, G-Eval, DeepEval, HHEM, Lynx, Prometheus-2, or Logprobs. * **Works out of the box.** TLM does **not** need to be trained on your data, which means you don’t need to do _any_ dataset preparation/labeling, nor worry about data drift or whether your AI task will evolve over time. * **Flexibility not complexity.** Easily adjust TLM’s latency/costs to meet the needs of any use-case. Or contact us and we’ll do it for you! * **Future-proof solution.** TLM is compatible with _any_ LLM model (including reasoning models), and by design will remain applicable for all future frontier models (including Agents, etc). Whenever a major LLM provider releases a better/faster/cheaper model, TLM will improve by relying on this as its base model. Start using TLM in under a minute via our [quickstart tutorial](/tlm/tutorials/tlm/) . * [Key Features](#key-features) * [Unlocking Enterprise Use Cases](#unlocking-enterprise-use-cases) * [Key Advantages](#key-advantages) --- # How to Automatically Curate Multi-Label Datasets [Skip to main content](#__docusaurus_skipToContent_fallback) On this page In this tutorial, you will prepare and format a multi-label dataset for use in [Cleanlab Studio](https://app.cleanlab.ai/) , walk through some of the analyses Cleanlab Studio runs and how they help improve data quality, and finally export your cleaned dataset for downstream use. ![Thumbnail showing errors found with Cleanlab Studio.](/assets/images/thumbnail-1e11616f0a17e633569f8e00dc627b1e.jpg) In multi-label classification datasets, each data point can simultaneously belong to multiple of K possible classes (or none of them). This is different than multi-class classification, where each data point is assigned to exactly one class. Examples of multi-label classification applications include: listing the objects depicted within an image, tagging a product with multiple attributes, or describing the emotions expressed in a paragraph. Each label in a multi-label dataset comes with increased potential for annotation errors, and Cleanlab Studio adeptly mitigates those risks. In the popular CelebA image tagging dataset, Cleanlab Studio identified errors in **18% of the images**. Learn more in [our blogpost](https://cleanlab.ai/blog/studio-multi-label) . Preparing your dataset[​](#preparing-your-dataset "Direct link to Preparing your dataset") ------------------------------------------------------------------------------------------- This tutorial uses the [CelebA image tagging dataset](https://www.kaggle.com/datasets/jessicali9530/celeba-dataset?resource=download) . While this tutorial focuses on image data, Cleanlab Studio enables you to do all of the same things demonstrated here for multi-label text or structured/tabular datasets as well. This tutorial uses the “images with metadata” format for uploading data to Cleanlab Studio, where data is formatted as a ZIP file containing: * Image folder: collection of images stored in a directory * `metadata.csv`: file containing filepath and labels for each of the images (requires specific format for multi-label data) The next few sections will walk through how to transform the Kaggle version of CelebA, specifically the attributes dataset (`list_attr_celeba.csv`), into the required format using [Google Sheets](https://docs.google.com/spreadsheets/) , a spreadsheet editor. Note that this process can be applied to any multi-label dataset by adapting the formatting to your specific data. If you want to skip ahead, you can download the dataset formatted for Cleanlab Studio [here](https://cleanlab-public.s3.amazonaws.com/Datasets/celeba.zip) . ### Overview[​](#overview "Direct link to Overview") The `list_attr_celeba.csv` file from Kaggle is structured in a _one-hot-encoding_ format. Each column represents a specific class label (e.g. `Smiling`, `Black_Hair`). A value of `1` indicates that the class applies to the given image, while a `-1` signifies that it does not. In order for Cleanlab Studio to analyze multi-label data, your class labels must be formatted as a comma-separated list of applicable attributes. ![Change in format of multi-label data.](/assets/images/data-formatting-a19edf6c84d1d120e505f73733205531.jpg) Above is a simplified version of how you are required to reformat this multi-label dataset. In the original dataset on the left, each of the class labels `Male`, `Glasses`, `Smiling` are represented as columns, with `1`s and `-1`s indicating if they apply to the given image. Looking at image C (row 3), all three of the class labels have `1`s, which means all three of them apply to the image of the smiling man wearing glasses. To format this properly, combine all of the applicable class labels for each image and separate them with commas (no spaces in between) like this `Male,Glasses,Smiling`. Following these steps will transform the original dataset from Kaggle to a format understood by Cleanlab Studio: * Apply formula to convert from `1`s and `-1`s to list of class labels * Apply formula to add the parent folder name to the `image_id` to create a filepath * Remove unnecessary columns * Export CSV as `metadata.csv` * Add `metadata.csv` inside of the images folder * Zip the images folder ### Convert from one-hot-encoding to list format[​](#convert-from-one-hot-encoding-to-list-format "Direct link to Convert from one-hot-encoding to list format") You can also use Python instead of Google Sheets to reformat `list_attr_celeba.csv` in just a few lines **(click to expand)** # Read in CSV.df = pd.read_csv("list_attr_celeba.csv")# Transform one-hot-encoding into list of attributes.df['label'] = df.apply(lambda row: ','.join(row.index[row == 1].tolist()), axis=1)# Select column, rename, and export.df = df[['image_id', 'label']]# For metadata ZIP upload, the image column must be named "image"df = df.rename(columns={"image_id": "image"})df.to_csv('metadata.csv') If you use this method, you can skip to [here](/studio/tutorials/cleanlab-studio-web/multilabel/#export-and-zip) . Open up `list_attr_celeba.csv` in Google Sheets. Column A should contain all of the `image_id`s, and columns B-AO should have all of the class labels at the top with 1 and -1 values below. ![Spreadsheet screenshot.](/assets/images/spreadsheet-ab993da7424a379e1e4ceeb606dde8e0.jpg) **Step 1:** Right click on the header of column A and select “Insert 1 column right”. You should now have an empty column B. ![Empty column B.](/assets/images/emptycolumnb-ef60f2992c2fcd819f6b75a2400b5803.jpg) **Step 2:** Select cell B2 and paste this formula: `=ARRAYFORMULA(TEXTJOIN(",", TRUE, IF(C2:AP2=1, $C$1:$AP$1, "")))` and press ⏎ Enter. Give it a few seconds and you should see all of the applicable class labels appended together with commas. If you want to learn what this formula is doing, you can read more in the [appendix](#appendix) at the bottom. ![Class labels all combined together.](/assets/images/combinedclasslabels-59e01693962e358828bb074b45534630.jpg) **Step 3:** Apply the above formula to the remainder of column B. This can be done in two ways: Method 1 (slow): 1. Click cell B2. 2. Click and hold the small blue circle in the bottom right corner. 3. Drag the dotted rectangle all the way to the bottom up column B. Wait ~30s for it to apply (see progress bar in upper right). Method 2 (fast, shown below): 1. Click cell B2. 2. Scroll all the way to the bottom of the sheet (use side scroll bar). Be careful not to click on any cells in the table on the way down. 3. While holding ⇧ Shift, click the last cell in column B (B202600). This should highlight all of column B. 4. Press ⌘ Command + ⏎ Enter to apply the formula to all of column B. Wait ~30s for it to apply (see progress bar in upper right). **Step 4 - IMPORTANT:** Convert the formula-computed values in column B to text. 1. Right click the header of column B. 2. Click “Copy”. Be patient. 3. Right click the header of column B again. 4. Click “Paste special -> Values only”. ![All entries are now text.](/assets/images/converttotext-9e8c039a46399f2bc1134b46b3986eeb.jpg) Confirm this worked by clicking one of the cells in column B, making sure you see text in the formula (fx) section and not the actual formula we used above. ### Remove and rename columns[​](#remove-and-rename-columns "Direct link to Remove and rename columns") **Step 1:** Delete all of the individual class labels, columns C through AP. 1. Click the header of column C. 2. Scroll all the way right to column AP. 3. While holding ⇧ Shift, click the header of column AP. 4. Right click the header (blue area) and select “Delete columns C - AP” **Step 2:** Rename column A (“image\_id) to “image” by single clicking A1 and typing “image”. **Step 3:** Add names to your two columns. Type “filepath” in A1 and “labels” in B1. You should be left with a spreadsheet like this. ![Final spreadsheet.](/assets/images/final-spreadsheet-new-d11b26b68a8a613e05826c2eb9c9f91a.png)[​](#final-spreadsheet "Direct link to final-spreadsheet") ----------------------------------------------------------------------------------------------------------------------------------------------------------- ### Export and Zip[​](#export-and-zip "Direct link to Export and Zip") **Step 1:** Rename the file at the top by double clicking the name and typing “metadata”. **Step 2:** Export this sheet to CSV by clicking “File -> Download -> Comma Separated Values (.csv)“. Ensure the filename is **`metadata.csv`**. If you do not use this name, Cleanlab Studio will not recognize this CSV. **Step 3:** Navigate to the folder that contains the images (probably at `img_align_celeba/img_align_celeba/`), move in `metadata.csv`, and zip the folder up. You are now ready to utilize Cleanlab Studio to correct issues in your multi-label data! Using Cleanlab Studio’s Multi-Label Interface[​](#using-cleanlab-studios-multi-label-interface "Direct link to Using Cleanlab Studio’s Multi-Label Interface") --------------------------------------------------------------------------------------------------------------------------------------------------------------- It only takes a few clicks for you to improve your data and train more robust models with Cleanlab Studio. ### Upload[​](#upload "Direct link to Upload") In the Cleanlab Studio app, click on `Upload Dataset`, and then select `Upload from your computer`. Upload the `.zip` file. If you click the “Notify me” button, Cleanlab Studio will send you an email once your dataset has been imported, so you can feel free to come back once importing is done. ### Create a Multi-Label Project[​](#create-a-multi-label-project "Direct link to Create a Multi-Label Project") Once your dataset is uploaded to the app, select `Create Project`. Next, you have the option to choose: the name of your project, which columns to include, and which model type to use (fast for speed and regular for quality). **Make sure you choose `Multi-Label` under `Type of Classification`:** ![!Multi-class versus multi-label button on Cleanlab Studio interface.](/assets/images/multiclassorlabelbuttons-ee895bc52e8dcf75665370894bafc0b7.png) The project will automatically run and take some time (depending on dataset size) to complete while Cleanlab’s AI is trained to analyze your data. You’ll get an email when it is complete. Understanding the Interface[​](#understanding-the-interface "Direct link to Understanding the Interface") ---------------------------------------------------------------------------------------------------------- Once it is ready for review, open up your project! The project view contains many powerful tools and added metadata to help you find and fix many [data issues](/studio/concepts/cleanlab_columns/) that may be lurking in your data. You should see something like this: ![Interface of Cleanlab Studio](/assets/images/multilabel_project-cbb2e4fb5a9d99cec0569223f43ec03d.png) _Tip: if a symbol or button looks unfamiliar, hover over it to display a descriptive tooltip._ Each image from the original dataset is represented here, ranked in decreasing order by its label issue score. The **light gray header** denotes columns present in the dataset while the **dark grey header** denotes columns that Cleanlab added. Each of the columns provides a unique piece of information: * **Given**: set of labels provided in the original dataset * **Suggested**: an alternate set of labels that Cleanlab predicted to be more accurate * **Corrected**: the label(s) you chose to apply while correcting the data * **Issues**: lists types of [data issues](/studio/concepts/cleanlab_columns/) each image exhibits (e.g., label issue, outlier, ambiguous, (near) duplicate) * **Score Columns**: estimates how confident Cleanlab is that the given image exhibits a specific issue. See full list of score columns and their details [here](/studio/concepts/cleanlab_columns/) . * **Action**: describes how each issue has been resolved, or unresolved if the corresponding data point has not been corrected yet. * **Tags**: indicates miscellaneous properties, such as data points marked as `Needs Review` Finding and Correcting Data Issues[​](#finding-and-correcting-data-issues "Direct link to Finding and Correcting Data Issues") ------------------------------------------------------------------------------------------------------------------------------- It’s now time to harness the power of Cleanlab Studio to fix the issues in your dataset. Cleanlab Studio has several ways you can improve data quality problems that it discovers from within the app. Many quality improvement workflows are shared between multi-class and multi-label projects (see our [Quickstart guide](/studio/quickstart/web/) for an introduction to the most commonly used workflows in Cleanlab Studio). To start correction, click on any row to open the resolver panel (red box below). There, the image selected is shown along with useful metadata and buttons you can use to make corrections. ![Cleanlab Studio's resolver panel is used to correct issues auto-detected in the data.](/assets/images/resolver-window-d819b056ff016dc843d908ff0bad2729.png) On the right side of the resolver window, the labels with a **red-colored** suggestion have been predicted to have incorrect annotations while the labels **without** any suggestions have been predicted to have correct annotations. The **highlighted True/False buttons** show the current state of the annotation (initially showing, for each label, whether or not it was present in the original annotation for the data point). It also contains how confident Cleanlab’s AI is about this label for this example. The **Suggested: Boolean** is used to show the Cleanlab-predicted decision. If “True”, then the label is suggested to be included for this image. Otherwise, if “False”, then the label is suggested to be omitted for this image. ![Deeper explanation of the Cleanlab Studio interface for data correction.](/assets/images/resolver-exploded-2f94c5742432c48c5a04a8704c1ea8d3.png) For this specific image, Cleanlab Studio has predicted that the labels `Bald`, and `Narrow_Eyes` should **not** be included, while the remaining labels should be. Notice in the original dataset, the given labels for this image included both of these, denoted by classes `4` & `23` respectively, and Cleanlab Studio found that these should **not** be included. The ones that should be included are `Bags_Under_Eyes` & `Receding_Hairline` (which were **originally** not included), in addition to the already included `Big_Nose`, `Double_Chin` & `Chubby`. Looking at the image, you can see that Cleanlab Studio was perfectly correct! The person shown doesn’t have `Narrow_Eyes`, and is not `Bald`. To make the necessary corrections, all you need to do is click the “Auto-fix” button (or press W) so that the corrections are applied to this image. ![The suggested and corrected columns are equivalent after correction if the Cleanlab suggested labels were used.](/assets/images/corrected-02df37fc1d7e0734d27ee30bc87b4468.png) If you auto-fix a data point, the Corrected column will be filled with the values from the Suggested column. This means the labels predicted by Cleanlab for this data point will be used as the Corrected labels. It is important to understand that the Suggested labels represent Cleanlab’s prediction for how this data point should be labeled. This list doesn’t just suggest adjustments to the given labels; it’s the complete list of predicted classes that apply to this data point. For instance, if the Suggested column is empty for a data point, Cleanlab predicts that none of the classes apply to it. ### Samples without any issues[​](#samples-without-any-issues "Direct link to Samples without any issues") The data samples that doesn’t have anything in the `Issues` column are free of issues. For these data samples, the Suggested and Given labels are the same, and highlighted in blue. ![The suggested and corrected columns are equivalent if the sample doesn't have label issue](/assets/images/correct-labels-75d636272a1318f1795950534acbc856.png) Speeding Up Data Correction[​](#speeding-up-data-correction "Direct link to Speeding Up Data Correction") ---------------------------------------------------------------------------------------------------------- ### Filtering[​](#filtering "Direct link to Filtering") Just like in multi-class projects, you can use the filter bar to sort through your data for specific kinds of issues. This speeds up the quality improvement process by focusing your attention to specific subsets of data. For example, let’s select images that are marked as an issue (`Issues: Label Issue`) and contain `5_o_Clock_Shadow`. ![Example of filtering data by issue type and given label.](/assets/images/select_5_oclock-301b7a64393f314bad9827f8efabdf2b.png) ### Auto-Fix[​](#auto-fix "Direct link to Auto-Fix") To speed up your cleaning even further, you have the option to automatically apply the Cleanlab-predicted set of labels to a single image or many images at a time. For a single image, just click the yellow `Auto-fix` icon. After verifying the accuracy of the Cleanlab suggested label set, this is the quickest way to make the correction instead of toggling each of the labels one-by-one. ![Use the clean-top-k feature to fix many images all at the same time.](/assets/images/autofix_5_oclock-be8eda2647b630217d13d071b567a0fc.png) For multiple images, you can use the `Clean Top K` feature. Select the icon at the bottom and select Auto-fix, as shown above. Then, enter how many data points you want automatically corrected to the Cleanlab-suggested set of labels. Note that this will not override your manual corrections. Auto-fixing multiple images at once is much faster than individual correction, but it might not be as accurate. You should use your knowledge of the data combined with the analytics and filters to determine the balance of manual and automatic corrections necessary. Export your improved data![​](#export-your-improved-data "Direct link to Export your improved data!") ------------------------------------------------------------------------------------------------------ Once you are happy with your project, you can export it to use your improved data in downstream applications like modeling and analytics. You can choose from: * **Default**: All rows except those marked with the `exclude` action will be included. All columns will be included. * **Custom**: Only rows and columns shown by the current table settings will be included. * **Everything**: Export all rows and columns. For example, if you’d like to export the subset of data you filtered above (marked as an issue, contains `5_o_Clock_Shadow`) you would select **Custom**. ![Export interface.](/assets/images/export-32df5a740f43860c339185a33ac615d0.png) Utilizing Your New Data ======================= Here’s the exported [cleanset](/studio/concepts/cleanset/) in Google Sheets with all of the added [Cleanlab columns](/studio/concepts/cleanlab_columns/) . You can use the corrected multi-label dataset in place of your original dataset to produce more reliable machine learning and analytics without any change in your existing pipelines/code. With just a few clicks, you can also deploy the cutting-edge ML that Cleanlab Studio originally used to audit your dataset to predict the tags of new data with high accuracy, directly in the web interface or via Python API. Check out more details [here](https://cleanlab.ai/blog/model-deployment/#deploy-models-for-prediction-in-cleanlab-studio) . ![Exported CSV file.](/assets/images/exported_csv-fbae135f7580bc6497b575ca1e3d81f0.jpg) Appendix[​](#appendix "Direct link to Appendix") ------------------------------------------------- Breaking down the formula: `=ARRAYFORMULA(TEXTJOIN(",", TRUE, IF(C2:AP2=1, $C$1:$AP$1, "")))}}` 1. **ARRAYFORMULA(function)**: * This function allows you to apply a function or formula over a range (an array) rather than a single cell. However, in this specific formula, it’s not being fully utilized to process multiple rows at once, but rather to ensure that the inner functions handle arrays properly. 2. **TEXTJOIN(delimiter, ignore\_empty, array1, …)**: * This function joins multiple values (from arrays or ranges) into one string. * `delimiter`: Specifies the character or string to insert between each text item in the resulting string. Here, we’re using `","`, which means we want to separate the values with a comma (with no space in between). * `ignore_empty`: If `TRUE`, the function will skip any empty values or arrays. This ensures that we don’t have unnecessary commas in the result. * `array1, ...`: The arrays or ranges to join. In this formula, the array is produced by the `IF` function. 3. **IF(test, value\_if\_true, value\_if\_false)**: * This function returns one value if a logical test is `TRUE` and another value if it’s `FALSE`. * `test`: The logical test we’re checking. In this case, we’re testing if each cell in the range `C2:AP2` equals 1. * `value_if_true`: The value to return if the test is true. Here, we’re returning the corresponding header from the range `$C$1:$AP$1`. * `value_if_false`: The value to return if the test is false. We’re returning an empty string (`""`), meaning if the cell doesn’t contain a 1, it doesn’t contribute to the final output. So, in simpler terms, here’s how the formula operates: * For each cell in `C2:AP2`, it checks if the value is 1. * If the value is 1, it captures the corresponding header from `C1:AP1`. * It then takes all the captured headers and joins them into a single string, separated by a comma. * The result is a comma-separated list of headers where the values in `C2:AP2` are 1. For instance, if `C2` has a value of 1 and its corresponding header in `C1` is “Male”, and if `D2` doesn’t have a value of 1, but `E2` does and its header in `E1` is “Tall”, the formula’s output for row 2 will be “Male,Tall”. * [Preparing your dataset](#preparing-your-dataset) * [Overview](#overview) * [Convert from one-hot-encoding to list format](#convert-from-one-hot-encoding-to-list-format) * [Remove and rename columns](#remove-and-rename-columns) * [Final spreadsheet.](#final-spreadsheet) * [Export and Zip](#export-and-zip) * [Using Cleanlab Studio’s Multi-Label Interface](#using-cleanlab-studios-multi-label-interface) * [Upload](#upload) * [Create a Multi-Label Project](#create-a-multi-label-project) * [Understanding the Interface](#understanding-the-interface) * [Finding and Correcting Data Issues](#finding-and-correcting-data-issues) * [Samples without any issues](#samples-without-any-issues) * [Speeding Up Data Correction](#speeding-up-data-correction) * [Filtering](#filtering) * [Auto-Fix](#auto-fix) * [Export your improved data!](#export-your-improved-data) * [Appendix](#appendix) --- # Instant ML Model Training + Deployment for Multi-Label Data [Skip to main content](#__docusaurus_skipToContent_fallback) This tutorial demonstrates how to use [Cleanlab Studio](https://app.cleanlab.ai/) to train a model on a multi-label dataset and deploy it in a single click. Using the deployed model, you can make predictions on new data points in the Cleanlab Studio web app. The same steps can also be used to deploy models for multi-class datasets. Model inference is also supported through the [Python API](/studio/tutorials/cleanlab-studio-api/inference_api/) . ![Model deployment using Cleanlab Studio](/assets/images/mldeployment-533d93be8887878447c7d2fa27e3f1a0.png) We will use the the GoEmotions dataset ([link](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/goemotions/goemotions_train.csv) , which contains Reddit comments tagged with one or more emotions like “love” or “gratitude”. Below is what the dataset looks like. The important columns are the `text` column, which has the comment texts, and the `label` column, which has comma-separated strings containing the labels. The labels indicate the sentiments associated with the comment. Some data points can have more than one associated sentiment, e.g. “admiration,gratitude”. ![goemotions data](/assets/images/initial_df-00e56fce1d5d16183fd9d0366d72ac55.png) We will train a model that takes the `text` column as input and predicts the associated sentiment labels. We will use a train-test split to demo model inference. You can download the test data [here.](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/goemotions/goemotions_test.csv) We renamed the downloaded training dataset created above to `goemotions_train.csv`, and now we upload the dataset to Cleanlab Studio and create a project. This step can also be accomplished through the [Python API](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) . The project creation step is shown in the video below. Since the main predictive column is the column `text` only, we choose to train a text model with `text` as the text column. If you have a tabular dataset (with multiple predictive columns), you should train a tabular model instead. Once the project completes, you can use the web interface to fix any issues you see (see this [guide](/studio/quickstart/web/#review-issues-detected-in-your-dataset-and-correct-them) for how to fix issues), and deploy a model by clicking the `Deploy Model` button at the bottom of your [project](/studio/concepts/projects/) . Since fixing issues is not the focus of this tutorial, we will simply use the `Clean Top K` button to auto-fix the issues, and then deploy a model on the cleaned data. These steps are shown in the video below. **Warning:** in general, we do not recommend blindly auto-fixing the entire dataset; generally, a human-in-the-loop approach gives superior results. Once the deployed model finishes training, we are ready to create the test dataset to be used for inference. As for the test dataset `goemotions_test.csv`, so we will create a new file for these rows with their labels removed. These steps are shown in the video below. With the test dataset created, we can use the deployed model to run inference by clicking the `Predict New Labels` button, as shown below. **Note**: If you run model inference on a large test dataset and experience errors, split the test data into multiple batches and separately run inference on each batch. Finally, when inference finishes, we can click export and get the predicted probabilities and suggested labels for our test dataset, as shown below. The final exported results can be seen in the screenshot below. ![Result table](/assets/images/final_results-83216006fe18d7bf2690b7f0fb01a14b.png) As shown, the result contains a column for each label, showing the predicted probability of that label being present. There is also a `Suggested Label` column, which contains the likely labels for a data point, gathered in a comma-separated string. Here is a screenshot that shows the first few of the test examples, along with their `Suggested Label`. ![Labels Comparison](/assets/images/label_comparison-9be2306612f0b18cabe23fc2c38c8ee3.png) After we have predictions, it is natural to assess how accurate they are for test data with available labels (ideally clean labels). Labels are available for the test data used here, so we evaluated the F1 score of the model predictions for each class, macro-averaging these scores over classes into an overall evaluation performance measure. This is a standard performance measure for multi-label classification tasks. We also separately trained a scikit-learn model on featurized text (same dataset as used for Cleanlab training) and evaluated its performance on the (same) test set, as well as evaluating the performance of a OpenAI GPT Large Language model used as a multi-label classifier. Here are the Macro F1 scores on the same test set achieved by three ML models – OpenAI, sklearn, and Cleanlab Studio. ![Models Comparision](/assets/images/accuracy_comparison_plot-d4571d1e7d15b8975a01ff02967257c9.png) --- # Dynamically evolve your classification datasets by adding new classes [Skip to main content](#__docusaurus_skipToContent_fallback) On this page In classification datasets, a common problem arises when there are hidden classes — categories that exist within the data but were not identified or labeled during the initial dataset creation. [Cleanlab Studio](https://app.cleanlab.ai/) offers a feature that streamlines the process of identifying and labeling these hidden classes. This feature enables efficient categorization with minimal manual effort, allowing you to dynamically improve your datasets for better machine learning performance. ![create_label_main.png](/assets/images/create_label_main-7e162d2fe5223ec7acb4336594013885.png) For this demonstration, we will use a [Shoes Dataset](https://cleanlab-public.s3.amazonaws.com/Datasets/shoes.zip) from a retailer, which contains around 1300 examples across five categories: `boots`, `flip_flops`, `sandals`, `sneakers`, and `soccer_shoes`. These steps can be applied to _any_ multi-class classification dataset. First, create a project in Cleanlab Studio using this dataset. You can download the dataset and upload it, or use the `Import via URL` option for direct upload. Next, set up a multi-class image classification project in _fast_ mode. ![select_task_type.png](/assets/images/select_task_type-d54ebb22157c37391d56e894b3e1dfd9.png) Creating a label for a new category in your dataset[​](#creating-a-label-for-a-new-category-in-your-dataset "Direct link to Creating a label for a new category in your dataset") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Once the project is `Ready for Review`, review the detected issues. **You may find data points that don’t fit into the existing categories**. For example, some shoes may belong to the casual category of _loafers_ instead of `sneakers` or `sandals` ![resolver_view](/assets/images/resolver_view-cfa3233e643cf4ea127e94d339d4a338.png) Creating a new label for such cases is straightforward. This feature is also useful for **splitting overarching labels into more fine-grained categories**, like dividing `sandals` into `flats` and `heels`. Watch the video below to see how to create a new label. Here, we sort the rows in descending order of label issue score and go over the data points. After creating the new label, you can start labeling data points that belong to this new category. This helps Cleanlab Studio learn from these examples and find more similar data points when you re-run the analysis. You can label examples individually or in batches using filters. Creating a label for irrelevant data points[​](#creating-a-label-for-irrelevant-data-points "Direct link to Creating a label for irrelevant data points") ---------------------------------------------------------------------------------------------------------------------------------------------------------- For ambiguous or outlier images, such as those focusing on the person rather than the shoe, you can create a label like _people_. This ensures these images are categorized appropriately without being excluded or tagged as issues. This scenario is quite common in classification datasets, where a **data point may belong to a class that is not relevant at the moment**. These classes could be labeled as miscellaneous, other, unknown, or simply clutter. Find more data points belonging to the new class[​](#find-more-data-points-belonging-to-the-new-class "Direct link to Find more data points belonging to the new class") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Once you have labeled a few images for the new class, hit `Improve Issues Found` to re-run Cleanlab Studio’s analysis. This process will identify more data points that belong to the new class, allowing for quick and efficient labeling. After the analyis is complete, and the Project is _Ready for Review_, we can now see more data points with suggested label l_oafers_ using the filter, and use _auto-fix_ batch action to correct labels for all of them. Similarly we label images with suggested label _people._ * [Creating a label for a new category in your dataset](#creating-a-label-for-a-new-category-in-your-dataset) * [Creating a label for irrelevant data points](#creating-a-label-for-irrelevant-data-points) * [Find more data points belonging to the new class](#find-more-data-points-belonging-to-the-new-class) --- # Automatically Find and Fix Issues in Any Text Dataset [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/text_data_quickstart.ipynb) This is the recommended quickstart tutorial for analyzing text datasets via the Cleanlab Studio’s [Python API](/studio/quickstart/api/) . In this tutorial, we demonstrate the metadata Cleanlab Studio automatically generates for any text classification dataset. This metadata (returned as [Cleanlab Columns](/studio/concepts/cleanlab_columns/) ) helps you discover various problems in your dataset and understand their severity. This entire notebook is run using the `cleanlab_studio` Python package, so you can audit your datasets programmatically. Install and import dependencies[​](#install-and-import-dependencies "Direct link to Install and import dependencies") ---------------------------------------------------------------------------------------------------------------------- Make sure you have `wget` installed to run this tutorial. You can use pip to install all other packages required for this tutorial as follows: %pip install cleanlab-studio import numpy as npimport pandas as pdimport osfrom IPython.display import display, Markdownpd.set_option("display.max_colwidth", None) Fetch and view dataset[​](#fetch-and-view-dataset "Direct link to Fetch and view dataset") ------------------------------------------------------------------------------------------- Fetch the dataset for this tutorial. mkdir -p data/wget -nc https://cleanlab-public.s3.amazonaws.com/Datasets/banking-text-quickstart-v1.csv -O data/banking-text-quickstart.csv Here we’ll use a variant of the [BANKING77](https://paperswithcode.com/dataset/banking77-oos) text dataset. This is a **multi-class classification** dataset where customer service requests are labeled as belonging to one of _K_ classes (intent categories). We can view the first few rows of our dataset below: BASE_PATH = os.getcwd()dataset_path = os.path.join(BASE_PATH, "data/banking-text-quickstart.csv") data = pd.read_csv(dataset_path)data.head() | | text | label | | --- | --- | --- | | 0 | i need to cancel my recent transfer as soon as possible. i made an error there. please help before it goes through. | cancel\_transfer | | 1 | why is there a fee when i thought there would be no fees? | card\_payment\_fee\_charged | | 2 | why can't my beneficiary access my account? | beneficiary\_not\_allowed | | 3 | does it cost extra to send out more than one card? | getting\_spare\_card | | 4 | can i change my pin at an atm? | change\_pin | ### Dataset Structure[​](#dataset-structure "Direct link to Dataset Structure") The data used in the tutorial is stored in a standard CSV file containing the following columns: text,label,"",... You can similarly format any other text dataset and run the rest of this tutorial. Details on how to format your dataset can be found in [this guide](/studio/concepts/datasets/) , which also outlines other format options. Load dataset into Cleanlab Studio[​](#load-dataset-into-cleanlab-studio "Direct link to Load dataset into Cleanlab Studio") ---------------------------------------------------------------------------------------------------------------------------- Now that we have our dataset, let’s load it into Cleanlab Studio and conduct our analysis. Use your API key to instantiate a `studio` object, which analyzes your dataset. from cleanlab_studio import Studio# you can find your Cleanlab Studio API key by going to app.cleanlab.ai/upload,# clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# initialize studio objectstudio = Studio(API_KEY) Load the data into Cleanlab Studio (more details/options can be found in [this guide](/studio/concepts/datasets/) ). This may take a while for big datasets. dataset_id = studio.upload_dataset(dataset_path, dataset_name="banking-text-quickstart")print(f"Dataset ID: {dataset_id}") Launch a Project[​](#launch-a-project "Direct link to Launch a Project") ------------------------------------------------------------------------- A Cleanlab Studio project automatically trains ML models to provide AI-based analysis of your dataset. Let’s launch one. **Note**: For our `label_column` and `text_column` specified below, they happened to be called `label` and `text` for this example. The values for these arguments should be the name of the columns pertaining to your label and containing the text field in your dataset. If you have multiple text columns, please merge them into a single column as demonstrated in our [FAQ](/studio/FAQ/) . project_id = studio.create_project( dataset_id=dataset_id, project_name="banking-text-quickstart-project", modality="text", task_type="multi-class", model_type="regular", label_column="label", text_column="text",)print(f"Project successfully created and training has begun! project_id: {project_id}") Once the project has been launched successfully and you see your `project_id` you can feel free to close this notebook. It will take some time for Cleanlab’s AI to train on your data and analyze it. Come back after training is complete (you will receive an email) and continue with the notebook to review your results. You should only execute the above cell once per dataset. After launching the project, you can poll for its status to programmatically wait until the results are ready for review. Each project creates a [cleanset](/studio/concepts/cleanset/) , an improved version of your original dataset that contains additional metadata for helping you clean up the data. The next code cell simply waits until this [cleanset](/studio/concepts/cleanset/) has been created. **Warning!** For big datasets, this next cell may take a long time to execute while Cleanlab’s AI model is training. If your Jupyter notebook has timed out during this process, you can resume work by re-running the below cell (which should return instantly if the project has completed training). **Do not** create a new project. cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")project_status = studio.wait_until_cleanset_ready(cleanset_id) Once the above cell completes execution, your project results are ready for review! At this point, you can optionally view your project in the [Cleanlab Studio web interface](https://app.cleanlab.ai/) and interactively improve your dataset. However this tutorial will stick with a fully programmatic workflow. Download Cleanlab columns[​](#download-cleanlab-columns "Direct link to Download Cleanlab columns") ---------------------------------------------------------------------------------------------------- We can fetch [Cleanlab columns](/studio/concepts/cleanlab_columns/) that store metadata for this [cleanset](/studio/concepts/cleanset/) using its `cleanset_id`. These columns have the same length as your original dataset and provide metadata about each individual data point, like what types of issues it exhibits and how severely. If at any point you want to re-run the remaining parts of this notebook (without creating another project), simply call `studio.download_cleanlab_columns(cleanset_id)` with the `cleanset_id` printed from the previous cell. cleanlab_columns_df = studio.download_cleanlab_columns(cleanset_id)cleanlab_columns_df.head() | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | suggested\_label\_confidence\_score | is\_ambiguous | ambiguous\_score | is\_well\_labeled | is\_near\_duplicate | ... | non\_english\_score | predicted\_language | is\_toxic | toxic\_score | sentiment\_score | bias\_score | is\_biased | gender\_bias\_score | racial\_bias\_score | sexual\_orientation\_bias\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1 | | False | 0.250695 | | 0.581173 | False | 0.850463 | True | False | ... | 0.004226 | | False | 0.101501 | 0.326050 | 0.122986 | False | 0.000000 | 0.122986 | 0.000018 | | 1 | 2 | | False | 0.207495 | | 0.648213 | False | 0.842312 | True | False | ... | 0.007218 | | False | 0.184326 | 0.134735 | 0.395068 | False | 0.395068 | 0.232788 | 0.144897 | | 2 | 3 | | False | 0.155370 | | 0.731616 | False | 0.780281 | True | False | ... | 0.008784 | | False | 0.061584 | 0.159088 | 0.259082 | False | 0.259082 | 0.093872 | 0.025330 | | 3 | 4 | | False | 0.399957 | | 0.391870 | False | 0.895436 | False | False | ... | 0.004739 | | False | 0.181763 | 0.377625 | 0.241504 | False | 0.241504 | 0.131836 | 0.013489 | | 4 | 5 | | False | 0.258581 | | 0.571155 | False | 0.837926 | True | False | ... | 0.058934 | | False | 0.115234 | 0.543762 | 0.381641 | False | 0.381641 | 0.112732 | 0.012970 | 5 rows × 38 columns Review data issues[​](#review-data-issues "Direct link to Review data issues") ------------------------------------------------------------------------------- Details about all of the Cleanlab columns and their meanings can be found in [this guide](/studio/concepts/cleanlab_columns/) . Here we briefly showcase some of the Cleanlab columns that correspond to issues detected in our tutorial dataset: * **Label issue** indicates the given label of this data point is likely wrong. For such data, consider correcting their label to the `suggested_label` if it seems more appropriate. * **Ambiguous** indicates this data point does not clearly belong to any of the classes (e.g. a borderline case). Multiple human annotators might disagree on how to label this data point, so you might consider refining your annotation instructions to clarify how to handle data points like this. * **Outlier** indicates this data point is very different from the rest of the data (looks atypical). The presence of outliers may indicate problems in your data sources, consider deleting such data from your dataset if appropriate. * **Near duplicate** indicates there are other data points that are (exactly or nearly) identical to this data point. Duplicated data points can have an outsized impact on models/analytics, so consider deleting the extra copies from your dataset if appropriate. The data points exhibiting each type of issue are indicated with boolean values in the respective `is_` column, and the severity of this issue in each data point is quantified in the respective `_score` column (on a scale of 0-1 with 1 indicating the most severe instances of the issue). Let’s go through some of the Cleanlab columns and types of data issues, starting with label issues (i.e. mislabeled data). We first create a `given_label` column in our dataframe to clearly indicate the original class label originally assigned to each data point (customer service request). import warningswarnings.filterwarnings('ignore') # Load the dataset into a DataFramedf = pd.read_csv(dataset_path)# Combine the dataset with the cleanlab columnscombined_dataset_df = df.merge(cleanlab_columns_df, left_index=True, right_index=True)# Set a "given_label" column to the original labelcombined_dataset_df.rename(columns={"label": "given_label"}, inplace=True) To see which text examples are estimated to be mislabeled, we filter by `is_label_issue`. We sort by `label_issue_score` to see which of these data points are _most likely_ mislabeled. samples_ranked_by_label_issue_score = combined_dataset_df.query("is_label_issue").sort_values("label_issue_score", ascending=False)columns_to_display = ["text", "label_issue_score", "is_label_issue", "given_label", "suggested_label"]display(samples_ranked_by_label_issue_score.head(5)[columns_to_display]) | | text | label\_issue\_score | is\_label\_issue | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | | 874 | why am i being charge a fee when using an atm? | 0.857160 | True | card\_about\_to\_expire | card\_payment\_fee\_charged | | 988 | i was charged for getting cash. | 0.837559 | True | card\_about\_to\_expire | card\_payment\_fee\_charged | | 490 | which currencies can i used to add funds to my account? | 0.792916 | True | cancel\_transfer | supported\_cards\_and\_currencies | | 77 | how do i find my new pin? | 0.788946 | True | visa\_or\_mastercard | change\_pin | | 8 | can i change my pin on holiday? | 0.773169 | True | beneficiary\_not\_allowed | change\_pin | Note that in each of these examples, the `given_label` really does seem wrong (the annotated intent in the original dataset does not appear appropriate for the customer request). Data labeling is an error-prone process and annotators make mistakes! Luckily we can easily correct these data points by just using Cleanlab’s `suggested_label` above, which seems like a much more suitable label in most cases. While the boolean flags above can help estimate the overall label error rate, the numeric scores help decide what data to prioritize for review. You can alternatively ignore these boolean `is_label_issue` flags and filter the data by thresholding the `label_issue_score` yourself (if say you find the default thresholds produce false positives/negatives). Next, let’s look at the ambiguous examples detected in the dataset. samples_ranked_by_ambiguous_score = combined_dataset_df.query("is_ambiguous").sort_values("ambiguous_score", ascending=False)columns_to_display = ["text", "ambiguous_score", "is_ambiguous", "given_label", "suggested_label"]display(samples_ranked_by_ambiguous_score.head(5)[columns_to_display]) | | text | ambiguous\_score | is\_ambiguous | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | | 652 | i just made a top-up but it shows as pending! i use your service all the time and have never had a problem before. why does it keep showing up as pending? | 0.989361 | True | cancel\_transfer | | | 337 | my money didnt go through after i transferred. | 0.985214 | True | beneficiary\_not\_allowed | lost\_or\_stolen\_phone | | 783 | how do i avoid charges in the future | 0.981678 | True | card\_payment\_fee\_charged | | | 898 | hi, one of payment is still coming as pending for which i have already paid by card. i guess it did not processed, could you please check and update me. | 0.975506 | True | lost\_or\_stolen\_phone | | | 841 | the card payment didn't work | 0.974473 | True | change\_pin | | Next, let’s look at the outliers detected in the dataset. samples_ranked_by_outlier_score = combined_dataset_df.query("is_outlier").sort_values("outlier_score", ascending=False)columns_to_display = ["text", "outlier_score", "is_empty_text", "text_num_characters", "is_outlier", "given_label", "suggested_label"]display(samples_ranked_by_outlier_score.head(5)[columns_to_display]) | | text | outlier\_score | is\_empty\_text | text\_num\_characters | is\_outlier | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | | 180 | p | 0.989873 | False | 1 | True | getting\_spare\_card | | | 770 | la trasferenza al mio conto non è stata consentita. | 0.969794 | False | 51 | True | beneficiary\_not\_allowed | | | 676 | 750 credit score | 0.966779 | False | 16 | True | getting\_spare\_card | | | 528 | my sc | 0.964187 | False | 5 | True | apple\_pay\_or\_google\_pay | | | 755 | 404Error

InvalidUsername

InvalidPIN

| 0.963091 | False | 61 | True | change\_pin | | Next, let’s look at the near duplicates detected in the dataset. n_near_duplicate_sets = len(set(combined_dataset_df.loc[combined_dataset_df["near_duplicate_cluster_id"].notna(), "near_duplicate_cluster_id"]))print(f"There are {n_near_duplicate_sets} sets of near duplicate texts in the dataset.") There are 13 sets of near duplicate texts in the dataset. Note that the near duplicate data points each have an associated `near_duplicate_cluster_id` integer. Data points that share the same IDs are near duplicates of each other, so you can use this column to find the near duplicates of any data point. And remember the near duplicates also include _exact_ duplicates as well (which have `near_duplicate_score` = 1). # Sort the combined dataset by near_duplicate_cluster_idsorted_combined_dataset_df = combined_dataset_df[combined_dataset_df['is_near_duplicate']].sort_values(by="near_duplicate_cluster_id")columns_to_display = ["text", "near_duplicate_score", 'near_duplicate_cluster_id', "is_near_duplicate", "given_label"]sorted_combined_dataset_df[columns_to_display] | | text | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_near\_duplicate | given\_label | | --- | --- | --- | --- | --- | --- | | 54 | what happens after my card expires? | 0.894769 | 0 | True | card\_about\_to\_expire | | 250 | what will happen after my card expires? | 0.894769 | 0 | True | card\_about\_to\_expire | | 127 | i have one other credit card from the us. do you take it? | 0.914963 | 1 | True | supported\_cards\_and\_currencies | | 759 | i have one other credit card from the us. do you take that? | 0.914963 | 1 | True | supported\_cards\_and\_currencies | | 710 | which type of card will i receive? | 0.978388 | 2 | True | visa\_or\_mastercard | | 197 | what type of card will i receive? | 0.978388 | 2 | True | visa\_or\_mastercard | | 921 | i can't use the app because i got mugged yesterday and they took everything. please help. | 0.909358 | 3 | True | lost\_or\_stolen\_phone | | 350 | i can't use the app because i got mugged yesterday and they took everything. i need some help. | 0.909358 | 3 | True | lost\_or\_stolen\_phone | | 374 | what do i do if my phone is stolen? | 0.962170 | 4 | True | lost\_or\_stolen\_phone | | 965 | what do i do if my phone was stolen? | 0.962170 | 4 | True | lost\_or\_stolen\_phone | | 396 | which currencies do you accept for adding money? | 0.975470 | 5 | True | supported\_cards\_and\_currencies | | 932 | what currencies do you accept for adding money? | 0.975470 | 5 | True | supported\_cards\_and\_currencies | | 549 | will i get visa or mastercard? | 0.884869 | 6 | True | visa\_or\_mastercard | | 423 | would i get a visa or mastercard? | 0.884869 | 6 | True | visa\_or\_mastercard | | 431 | my card is going to expire, what do i do? | 0.917732 | 7 | True | card\_about\_to\_expire | | 445 | my card is about to expire, what do i do? | 0.917732 | 7 | True | card\_about\_to\_expire | | 596 | can i top up using my apple watch? | 0.879197 | 8 | True | apple\_pay\_or\_google\_pay | | 721 | can i use my apple watch to top up? | 0.879197 | 8 | True | apple\_pay\_or\_google\_pay | | 947 | i'd prefer a mastercard. | 0.919696 | 9 | True | visa\_or\_mastercard | | 718 | i would prefer a mastercard. | 0.919696 | 9 | True | visa\_or\_mastercard | | 864 | what to do if my card is about to expire? | 0.945380 | 10 | True | card\_about\_to\_expire | | 753 | what do i do if my card is about to expire? | 0.945380 | 10 | True | card\_about\_to\_expire | | 804 | which atms allow me to change my pin? | 0.921094 | 11 | True | change\_pin | | 808 | what atms will allow me to change my pin? | 0.921094 | 11 | True | beneficiary\_not\_allowed | | 813 | i paid with my card and i was charged a fee | 0.929191 | 12 | True | card\_payment\_fee\_charged | | 877 | i paid with card and i was charged a fee | 0.929191 | 12 | True | card\_payment\_fee\_charged | Text issues[​](#text-issues "Direct link to Text issues") ---------------------------------------------------------- Cleanlab Studio can also detect potential problems in any text in your dataset, such as the occurrence of toxic language, personally identifiable information (PII), or nonsensical language (e.g. HTML/XML tags and other random strings contaminating text descriptions). The following Cleanlab columns are specific to the text fields in your dataset (see [here](/studio/concepts/cleanlab_columns/#columns-specific-to-text-data) for details). Similar to above, the `is_` column contains boolean values indicating if a text field has been identified to exhibit a particular issue, and the `_score` column contains numeric scores between 0 and 1 indicating the severity of this particular issue (1 indicates the most severe instance of the issue). Let’s take a closer look at some text issues that have been flagged in our dataset: note Text issues detection is currently only provided for _text_ modality projects running in _regular_ mode. Text that contains **toxic language** may have elements of hateful speech and language others may find harmful or aggressive. Identifying toxic language is vital in tasks such as content moderation and LLM training/evaluation, where appropriate action should be taken to ensure safe platforms, chatbots, or other applications depending on this dataset. Here are some examples in this dataset detected to contain toxic language: toxic_samples = combined_dataset_df.query("is_toxic").sort_values("toxic_score", ascending=False)columns_to_display = ["text", "toxic_score", "is_toxic"]display(toxic_samples.head(5)[columns_to_display]) | | text | toxic\_score | is\_toxic | | --- | --- | --- | --- | | 852 | help me change my pin your garbage app is broken, the most pathetic bank and absolute worst customer service ever | 0.851074 | True | | 773 | i'm really sick of your stupid requirements, just issue me the damn credit card! | 0.832520 | True | | 416 | some f-ing lowlife mugged me, they stole everything including my phone. i can't use your app anymore, what can i do? | 0.825195 | True | **Personally Identifiable Information (PII)** is information that could be used to identify an individual or is otherwise sensitive. Exposing PII can compromise an individual’s security and hence should be safeguarded and anonymized/removed if discovered in publicly shared data. Cleanlab’s [PII detection](/studio/concepts/cleanlab_columns/#personally-identifiable-information-pii) also returns two extra columns, `PII_items` and `PII_types`, which list the specific PII detected in the text and its type. Possible types of PII that can be detected are detailed in the [guide](/studio/concepts/cleanlab_columns/#personally-identifiable-information-pii) and scored according to how sensitive each type of information is. Here are some examples of PII detected in the dataset: PII_samples = combined_dataset_df.query("is_PII").sort_values("PII_score", ascending=False)columns_to_display = ["text", "PII_score", "is_PII", "PII_types", "PII_items"]display(PII_samples.head(5)[columns_to_display]) | | text | PII\_score | is\_PII | PII\_types | PII\_items | | --- | --- | --- | --- | --- | --- | | 68 | my card number is 4012888888881881 how do I know if it is mastercard or visa? | 1.0 | True | \["credit card"\] | \["4012888888881881"\] | | 235 | i just replaced my phone, do i have to make a new account? my username is gavdlin@gmail.com new phone number is 212-978-1213 | 0.5 | True | \["email", "phone number"\] | \["gavdlin@gmail.com", "212-978-1213"\] | | 485 | i no longer have my phone number +44 20 8356 1167, what should i do? | 0.5 | True | \["phone number"\] | \["+44 20 8356 1167"\] | | 760 | i wish to cancel a transfer sent to judmunz@yahoo.com | 0.5 | True | \["email"\] | \["judmunz@yahoo.com"\] | | 243 | i want to choose a new pin, name on account is alvin weber and dob 2/10/1967 | 0.4 | True | \["date of birth"\] | \["2/10/1967"\] | **Non-English** text includes text written in a foreign language or containing nonsensical characters (such as HTML/XML tags, identifiers, hashes, random characters). These are important to identify and remove in situations where we want to ensure the text fields in our data are understandable (e.g. if they are text descriptions intended to be read). If a text datapoint is detected to be non-English, Cleanlab Studio will predicted its language in the `predicted_language` column. If an alternative langauge cannot be predicted (this could either represent that the text contains more than one langauge, or that it contains nonsensical characters), the `predicted_language` will contain a null value. Here are some non-English examples detected in the dataset: non_english_samples = combined_dataset_df.query("is_non_english").sort_values("non_english_score", ascending=False)columns_to_display = ["text", "non_english_score", "is_non_english", "predicted_language"]display(non_english_samples.head(5)[columns_to_display]) | | text | non\_english\_score | is\_non\_english | predicted\_language | | --- | --- | --- | --- | --- | | 180 | p | 0.991476 | True | | | 755 | 404Error

InvalidUsername

InvalidPIN

| 0.979175 | True | | | 770 | la trasferenza al mio conto non è stata consentita. | 0.866523 | True | Italian | | 220 | qué necesito hacer para cancelar una transacción? | 0.828047 | True | Spanish | **Informal** text contains casual language, slang, or poor writing such as improper grammar or spelling. It’s presence may be noteworthy if you are expecting the text in your dataset to be well-written. Here are some examples of informal text detected in the dataset: informal_samples = combined_dataset_df.query("is_informal").sort_values("informal_score", ascending=False)columns_to_display = ["text", "informal_score", "spelling_issue_score", "grammar_issue_score", "slang_issue_score", "is_informal"]display(informal_samples.head(5)[columns_to_display]) | | text | informal\_score | spelling\_issue\_score | grammar\_issue\_score | slang\_issue\_score | is\_informal | | --- | --- | --- | --- | --- | --- | --- | | 528 | my sc | 0.701533 | 0.500000 | 0.615330 | 0.888503 | True | | 720 | google pay top up not working. | 0.700279 | 0.000000 | 0.881408 | 0.869290 | True | | 192 | which atm's am i able to change my pin? | 0.694062 | 0.111111 | 0.811346 | 0.868254 | True | | 564 | i do i top up from my apple watch? | 0.674827 | 0.000000 | 0.925408 | 0.761659 | True | | 476 | google play top up help? | 0.671472 | 0.000000 | 0.807158 | 0.871522 | True | Improve the dataset based on the detected issues[​](#improve-the-dataset-based-on-the-detected-issues "Direct link to Improve the dataset based on the detected issues") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Since the results of this analysis appear reasonable, let’s use the Cleanlab columns to improve the quality of our dataset. For your own datasets, which actions you should take to remedy the detected issues will depend on what you are using the data for. No action may be the best choice for certain datasets, we caution against blindly copying the actions we perform below. For data marked as `label_issue`, we create a new `corrected_label` column, which will be the given label for data without detected label issues, and the `suggested_label` for data with detected label issues. corrected_label = np.where(combined_dataset_df["is_label_issue"], combined_dataset_df["suggested_label"], combined_dataset_df["given_label"]) For data marked as outlier or ambiguous, we will simply exclude them from our dataset. Here we create a boolean vector `rows_to_exclude` to track which data points will be excluded. # create an exclude column to keep track of the excluded datarows_to_exclude = combined_dataset_df["is_outlier"] | combined_dataset_df["is_ambiguous"] For each set of near duplicates, we only want to keep one of the data points that share a common `near_duplicate_cluster_id` (so that the resulting dataset will no longer contain any near duplicates). near_duplicates_to_exclude = combined_dataset_df['is_near_duplicate'] & combined_dataset_df['near_duplicate_cluster_id'].duplicated(keep='first')rows_to_exclude |= near_duplicates_to_exclude Note we didn’t exclude the data with text issues here but you might want to in your applications. We can check the total amount of excluded data: print(f"Excluding {rows_to_exclude.sum()} text examples (out of {len(combined_dataset_df)})") Excluding 34 text examples (out of 1000) Finally, let’s actually make a new version of our dataset with these changes. We craft a new dataframe from the original, applying corrections and exclusions, and then use this dataframe to save the new dataset in a separate CSV file. The new dataset is a CSV file that has the same format as our original dataset – you can use it as a plug-in replacement to get more reliable results in your ML and Analytics pipelines, without any change in your existing modeling code. new_dataset_filename = "improved_dataset.csv" # Fetch the original datasetfixed_dataset = combined_dataset_df[["text"]].copy()# Add the corrected label column fixed_dataset["label"] = corrected_label# Automatically exclude selected rowsfixed_dataset = fixed_dataset[~rows_to_exclude]# Check if the file exists before savingif os.path.exists(new_dataset_filename): raise ValueError(f"File {new_dataset_filename} already exists. Cannot overwite so please delete it first, or specify a different new_dataset_filename.")else: # Save the adjusted dataset to a CSV file fixed_dataset.to_csv(new_dataset_filename, index=False) print(f"Adjusted dataset saved to {new_dataset_filename}") Adjusted dataset saved to improved_dataset.csv If you want to curate a text dataset for better LLM fine-tuning, here’s an [example](https://github.com/cleanlab/cleanlab-tools/blob/main/fine_tuning_classification/fine_tuning_LLM_with_noisy_labels.ipynb) . If you are interested in building AI Assistants connected to your company’s data sources and other Retrieval-Augmented Generation applications, [reach out](https://cleanlab.ai/sales/) to learn how Cleanlab can help. * [Install and import dependencies](#install-and-import-dependencies) * [Fetch and view dataset](#fetch-and-view-dataset) * [Dataset Structure](#dataset-structure) * [Load dataset into Cleanlab Studio](#load-dataset-into-cleanlab-studio) * [Launch a Project](#launch-a-project) * [Download Cleanlab columns](#download-cleanlab-columns) * [Review data issues](#review-data-issues) * [Text issues](#text-issues) * [Improve the dataset based on the detected issues](#improve-the-dataset-based-on-the-detected-issues) --- # Automatically Find and Fix Issues in Any Tabular Dataset [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/tabular_data_quickstart.ipynb) This is the recommended quickstart tutorial for using Cleanlab Studio’s [Python API](/studio/quickstart/api/) to analyze tabular datasets (Excel/database files with columns of numeric/string values). In this tutorial, we demonstrate the metadata Cleanlab Studio automatically generates for any classification dataset stored as a data table. This metadata (returned as [Cleanlab Columns](/studio/concepts/cleanlab_columns/) ) helps you discover various problems in your dataset and understand their severity. This entire notebook is run using the `cleanlab_studio` Python package, so you can audit your datasets programmatically. Install and import dependencies[​](#install-and-import-dependencies "Direct link to Install and import dependencies") ---------------------------------------------------------------------------------------------------------------------- Make sure you have `wget` installed to run this tutorial. You can use pip to install all other packages required for this tutorial as follows: %pip install matplotlib cleanlab-studio import numpy as npimport pandas as pdimport os Dataset structure[​](#dataset-structure "Direct link to Dataset structure") ---------------------------------------------------------------------------- Fetch the dataset for this tutorial, which is stored as a standard data table in CSV format. wget -nc https://s.cleanlab.ai/grades-tabular-demo.csv -P data The CSV file contains the following columns: stud_ID,exam_1,exam_2,exam_3,notes,letter_gradef48f73,53,77,93,,C0bd4e7,81,64,80,great participation +10,Be1795d,74,88,97,,B,,,,,... You can similarly format any other tabular dataset and run the rest of this tutorial. Details on how to format your dataset can be found in [this guide](/studio/concepts/datasets/) , which also outlines other format options. Cleanlab Studio works out-of-the-box for messy tabular datasets with arbitrary numeric/string columns that may contain missing values. Our dataset for this tutorial is a collection of student grades and other information about each student. Suppose we are interested detecting incorrect values (data entry errors) in students’ final `letter_grade`, which belongs to one of five categories: **A**, **B**, **C**, **D**, **F**. In machine learning terminology, this can be considered a **multi-class classification** dataset, where the `letter_grade` column is viewed as **class label** for each row (student) in the table. If you were say aiming to detect miscategorized products in an e-commerce dataset, you would select the product-category column as the class label. Cleanlab Studio can auto-detect erroneous values not only in categorical columns but also in any numeric column, as demonstrated in our [regression tutorial](/studio/tutorials/cleanlab-studio-api/regression/) . Refer to our [data entry errors tutorial](/studio/tutorials/cleanlab-studio-api/data_entry/) for a general example of how to auto-detect errors in multiple heterogeneous columns of an arbitrary tabular dataset. BASE_PATH = os.getcwd()dataset_path = os.path.join(BASE_PATH, "data/grades-tabular-demo.csv") Load dataset into Cleanlab Studio[​](#load-dataset-into-cleanlab-studio "Direct link to Load dataset into Cleanlab Studio") ---------------------------------------------------------------------------------------------------------------------------- Use your API key to instantiate a `Studio` object, which can be used to analyze your dataset. from cleanlab_studio import Studio# you can find your Cleanlab Studio API key by going to app.cleanlab.ai/upload,# clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# initialize studio objectstudio = Studio(API_KEY) Next load the dataset into Cleanlab Studio (more details/options can be found in [this guide](/studio/concepts/datasets/) ). This may take a while for big datasets. dataset_id = studio.upload_dataset(dataset_path, dataset_name="student-grades")print(f"Dataset ID: {dataset_id}") Launch a Project[​](#launch-a-project "Direct link to Launch a Project") ------------------------------------------------------------------------- Let’s now create a project using this dataset. A Cleanlab Studio project will automatically train ML models to provide AI-based analysis of your dataset. By default Cleanlab Studio uses all columns as predictive features except the label column. But since `stud_ID` is not a predictive feature, we explicitly specify the columns that will be used as input variables for the model `(exam_1, exam_2, exam_3, notes)` columns in this dataset. We also specify the column containing the class labels for each data point (`letter_grade` column in this dataset). project_id = studio.create_project( dataset_id=dataset_id, project_name="student-grades project", modality="tabular", task_type="multi-class", model_type="regular", label_column="letter_grade", feature_columns=['exam_1', 'exam_2', 'exam_3', 'notes'])print(f"Project successfully created and training has begun! project_id: {project_id}") Once the project has been launched successfully and you see your `project_id` you can feel free to close this notebook. It will take some time for Cleanlab’s AI to train on your data and analyze it. Come back after training is complete (you will receive an email) and continue with the notebook to review your results. You should only execute the above cell once per dataset. After launching the project, you can poll for its status to programmatically wait until the results are ready for review. Each project creates a [cleanset](/studio/concepts/cleanset/) , an improved version of your original dataset that contains additional metadata for helping you clean up the data. The next code cell simply waits until this _cleanset_ has been created. **Warning!** For big datasets, this next cell may take a long time to execute while Cleanlab’s AI model is training. If your notebook has timed out during this process, then you can resume work by re-running the below cell (which should return the `cleanset_id` instantly if the project has completed training). Do not re-run the above cell and create a new project. cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")project_status = studio.poll_cleanset_status(cleanset_id) Once the above cell completes execution, your project results are ready for review! At this point, you can optionally view your project in the [Cleanlab Studio web interface](https://app.cleanlab.ai/) and interactively improve your dataset. However this tutorial will stick with a fully programmatic workflow. Download Cleanlab columns[​](#download-cleanlab-columns "Direct link to Download Cleanlab columns") ---------------------------------------------------------------------------------------------------- We can fetch the [Cleanlab columns](/studio/concepts/cleanlab_columns/) that contain the metadata of this _cleanset_ using its `cleanset_id`. These columns have the same length as your original dataset and provide metadata about each individual data point, like what types of issues it exhibits and severe these issues are. If at any point you want to re-run the remaining parts of this notebook (without creating another project), simply call `studio.download_cleanlab_columns(cleanset_id)` with the `cleanset_id` printed from the previous cell. cleanlab_columns_df = studio.download_cleanlab_columns(cleanset_id)cleanlab_columns_df.head() | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | suggested\_label\_confidence\_score | is\_ambiguous | ambiguous\_score | is\_well\_labeled | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_outlier | outlier\_score | is\_initially\_unlabeled | has\_rare\_class | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1 | | False | 0.178143 | | 0.740559 | False | 0.848316 | False | False | 0.431745 | | False | 0.019050 | False | False | | 1 | 2 | | False | 0.154428 | | 0.766985 | False | 0.756479 | False | False | 0.001234 | | False | 0.125321 | False | False | | 2 | 3 | | False | 0.185642 | | 0.753580 | False | 0.722060 | False | False | 0.550396 | | False | 0.021067 | False | False | | 3 | 4 | | False | 0.296633 | | 0.629907 | False | 0.887160 | False | False | 0.458981 | | False | 0.039498 | False | False | | 4 | 5 | | False | 0.329882 | | 0.516878 | False | 0.933320 | False | False | 0.107241 | | False | 0.033416 | False | False | Optional: Initialize visualization helper functions We define some rule-based coloring functions below to better visualize the numeric and string columns in this dataset. Coloring helps us clearly understand data entry errors for this particular tutorial dataset, but is optional for your own datasets. from typing import Callable, Dict, Optionalfrom IPython.core.display import HTMLimport matplotlib.colorsdef color_calc(value: int): """ Calculate color based on the given value. Intended for the range of 0 to 100. No error checking is done. Parameters: value (int or float): Value based on which the color is determined. Returns: str: Hexadecimal color code. """ if value <= 50: r = 1.0 g = (value / 50) * 194.0 / 255.0 + 61.0 / 255.0 b = 61.0 / 255.0 else: r = (100 - value) / 50 g = 1.0 b = 0.0 hex_color = matplotlib.colors.to_hex((r, g, b)) return hex_colordef grade_to_color(value: int): """ Format numerical grade value with background color. Intended for the range of 0 to 100. No error checking is done. Parameters: value (int or float): Numerical grade value. Returns: str: HTML div string with background color based on grade value. """ hex_color = color_calc(value) return f'
{value}
'def letter_grade_to_color(grade: str): """ Format letter grade with background color to match the numerical grade. No error checking is done. Parameters: grade (str): Letter grade. Returns: str: HTML div string with background color based on letter grade. """ grade_map = {'A': 100, 'B': 75, 'C': 50, 'D': 25, 'F': 0} value = grade_map.get(grade, 0) # default to 0 if grade is not found hex_color = color_calc(value) return f'
{grade}
'def highlight_notes(note: str): """ Format notes with background color based on keywords. Notes are returned as is if no keywords are found. Parameters: note (str): Text of notes. Returns: str: HTML div string with background color based on keywords found in notes. """ if 'missed' in note: value = 40 elif 'cheated' in note: value = 0 elif 'great participation' in note: value = 100 else: return note # default (no color) hex_color = color_calc(value) return f'
{note}
'_TUTORIAL_FORMATTERS = { 'exam_1': grade_to_color, 'exam_2': grade_to_color, 'exam_3': grade_to_color, 'given_label': letter_grade_to_color, 'suggested_label': letter_grade_to_color, 'notes': highlight_notes} def display(df, formatters: Optional[Dict[str, Callable]] = None): """ Display DataFrame with formatted columns. Parameters: df (pd.DataFrame): DataFrame to display. Returns: IPython.core.display.HTML: HTML representation of formatted DataFrame. """ if formatters is None: formatters = {} return HTML(df.fillna("").to_html(escape=False, formatters=formatters, index=False))disable_pretty_print = False # set to True to disable pretty printing when displaying DataFramesoptional_df_display_formatters = None if disable_pretty_print else _TUTORIAL_FORMATTERS Review detected data issues[​](#review-detected-data-issues "Direct link to Review detected data issues") ---------------------------------------------------------------------------------------------------------- Details about all of the returned Cleanlab columns and their meanings can be found in [this guide](/studio/concepts/cleanlab_columns/) . Here we briefly showcase some of the Cleanlab columns that correspond to issues detected in our tutorial dataset: * **Label issue** indicates the original value in the column you chose as the class label appears incorrect for this row (perhaps due to data entry error, or accidental mislabeling). For such data, consider correcting this value to the `suggested_label` value if it seems more appropriate. * **Ambiguous** indicates this data point is a _borderline case_, which might be appropriately described by more than one class label or none of the options at all. Multiple people might disagree on how to label this data point, so you might consider refining your annotation instructions to clarify how to handle data points like this if your data are human-labeled. * **Outlier** indicates this row is very different from the rest of the rows in your dataset (looks atypical). The presence of outliers may indicate problems in your data sources, consider deleting such data from your dataset if appropriate. The rows exhibiting each type of issue are indicated with boolean values in the respective `is_` column, and the severity of this issue in each row is quantified in the respective `_score` column (on a scale of 0-1 with 1 indicating the most severe instances of the issue). Let’s go through some of the Cleanlab columns and types of data issues, starting with label issues. We first create a `given_label` column in our dataframe to clearly indicate the class label originally assigned to each data point in this dataset. # Load the dataset into a DataFramedf = pd.read_csv(dataset_path)# Combine the dataset with the cleanlab columnscombined_dataset_df = df.merge(cleanlab_columns_df, left_index=True, right_index=True)# Set a "given_label" column to the original labelcombined_dataset_df.rename(columns={"letter_grade": "given_label"}, inplace=True)# Store the column names of the dataset for visualizationDATASET_COLUMNS = df.columns.drop("letter_grade").tolist() ### Finding label issues[​](#finding-label-issues "Direct link to Finding label issues") To see which data points are estimated to be mislabeled (i.e. have potentially erroneous values in the class label column), we filter by `is_label_issue`. We sort by `label_issue_score` to see which of these data points are _most likely_ mislabeled. samples_ranked_by_label_issue_score = combined_dataset_df.sort_values("label_issue_score", ascending=False)columns_to_display = DATASET_COLUMNS + ["label_issue_score", "is_label_issue", "given_label", "suggested_label"]display(samples_ranked_by_label_issue_score.head(5)[columns_to_display], formatters=optional_df_display_formatters) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | label\_issue\_score | is\_label\_issue | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ee538b | 100 | 100 | 99 | NaN | 0.967053 | True | F | A | | db4bcf | 72 | 93 | 98 | great participation +10 | 0.960134 | True | F | A | | 8a0a87 | 66 | 0 | 78 | cheated on exam, gets 0pts | 0.957181 | True | A | F | | 0bdad5 | 71 | 0 | 82 | cheated on exam, gets 0pts | 0.944614 | True | A | F | | 34ccdd | 90 | 100 | 89 | great participation +10 | 0.944509 | True | F | A | Note that in each of these rows, the `given_label` (i.e. final letter grade) really does seem wrong. Data entry and labeling is an error-prone process and mistakes are made! Luckily we can easily correct these data points by just using Cleanlab’s `suggested_label` above, which seems like a much more suitable final `letter_grade` value in most cases. While the boolean flags above can help estimate the overall label error rate, the numeric scores help decide what data to prioritize for review. You can alternatively ignore these boolean `is_label_issue` flags and filter the data by thresholding the `label_issue_score` yourself (if say you find the default thresholds produce false positives/negatives). ### Ambiguous samples[​](#ambiguous-samples "Direct link to Ambiguous samples") Next, let’s look at the ambiguous examples in the dataset. Many of these students perform well in at least 2 out of 3 subjects, and their grade is brought down by poor performance in one of the subjects or missing homework frequently. samples_ranked_by_ambiguous_score = combined_dataset_df.sort_values("ambiguous_score", ascending=False)columns_to_display = DATASET_COLUMNS + ["ambiguous_score", "is_ambiguous", "given_label", "suggested_label"]display(samples_ranked_by_ambiguous_score.head(10)[columns_to_display], formatters=optional_df_display_formatters) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | ambiguous\_score | is\_ambiguous | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 9f7f44 | 61 | 65 | 100 | missed homework frequently -10 | 0.983134 | True | D | | | 600f0b | 55 | 71 | 98 | missed homework frequently -10 | 0.975925 | False | A | | | 5d086b | 82 | 94 | 99 | missed class frequently -10 | 0.972961 | True | B | | | 5b2f76 | 99 | 86 | 95 | missed class frequently -10 | 0.972619 | False | B | | | 5b2d9a | 94 | 95 | 90 | missed class frequently -10 | 0.961089 | False | B | | | a93747 | 100 | 80 | 78 | missed class frequently -10 | 0.952505 | False | C | | | 42155a | 56 | 80 | 79 | NaN | 0.952427 | True | F | C | | e8901f | 69 | 90 | 86 | missed homework frequently -10 | 0.949782 | False | C | | | b2a3ca | 59 | 94 | 80 | missed homework frequently -10 | 0.944547 | True | B | D | | 612ebd | 65 | 81 | 75 | NaN | 0.944378 | False | C | | ### Outliers[​](#outliers "Direct link to Outliers") Next, let’s look at the outlier examples in the dataset. Many of these students fall right on the border between two final letter grades. samples_ranked_by_outlier_score = combined_dataset_df.sort_values("outlier_score", ascending=False)columns_to_display = DATASET_COLUMNS + ["outlier_score", "is_outlier", "given_label", "suggested_label"]display(samples_ranked_by_outlier_score.head(10)[columns_to_display], formatters=optional_df_display_formatters) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | outlier\_score | is\_outlier | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 4787de | 73 | 84 | 68 | great participation +10 | 0.180820 | True | D | B | | 228dc0 | 65 | 85 | 80 | great participation +10 | 0.179532 | True | B | | | 93af9d | 76 | 70 | 73 | great participation +10 | 0.170726 | True | B | | | 8bfb9a | 75 | 91 | 68 | great final presentation +10 | 0.170343 | True | B | | | fd8db2 | 90 | 67 | 77 | missed class frequently -10 | 0.165090 | True | D | | | 7f6511 | 90 | 67 | 77 | missed class frequently -10 | 0.165090 | True | D | | | b4a1fe | 52 | 95 | 72 | great participation +10 | 0.161698 | True | B | | | e1ac6f | 93 | 58 | 70 | great final presentation +10 | 0.161023 | True | D | B | | 8d904d | 73 | 73 | 76 | missed class frequently -10 | 0.160402 | True | D | | | 10ed39 | 83 | 71 | 70 | great participation +10 | 0.154319 | False | D | B | ### Near duplicates[​](#near-duplicates "Direct link to Near duplicates") Now let’s look at near duplicates. Some of these examples have really almost identical, but the `given_label` is different. Note that the near duplicate data points each have an associated `near_duplicate_cluster_id` integer. Data points that share the same IDs are near duplicates of each other, so you can use this column to find the near duplicates of any data point. n_near_duplicate_sets = len(set(combined_dataset_df.loc[combined_dataset_df["near_duplicate_cluster_id"].notna(), "near_duplicate_cluster_id"]))print(f"There are {n_near_duplicate_sets} sets of near duplicate rows in the dataset.") There are 42 sets of near duplicate rows in the dataset. Let’s check out the near duplicates with cluster IDs 0 and 1: near_duplicate_cluster_id = 0 # play with this value to see other sets of near duplicatesselected_samples_by_near_duplicate_cluster_id = combined_dataset_df.query("near_duplicate_cluster_id == @near_duplicate_cluster_id")columns_to_display = ["stud_ID","exam_1","exam_2","exam_3","notes", "near_duplicate_score", "is_near_duplicate", "given_label"]display(selected_samples_by_near_duplicate_cluster_id[columns_to_display]) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | near\_duplicate\_score | is\_near\_duplicate | given\_label | | --- | --- | --- | --- | --- | --- | --- | --- | | 745c23 | 89 | 95 | 72 | NaN | 0.89761 | True | B | | 6be392 | 89 | 95 | 73 | NaN | 0.89761 | True | D | near_duplicate_cluster_id = 1 # play with this value to see other sets of near duplicatesselected_samples_by_near_duplicate_cluster_id = combined_dataset_df.query("near_duplicate_cluster_id == @near_duplicate_cluster_id")columns_to_display = ["stud_ID","exam_1","exam_2","exam_3","notes", "near_duplicate_score", "is_near_duplicate", "given_label"]display(selected_samples_by_near_duplicate_cluster_id[columns_to_display]) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | near\_duplicate\_score | is\_near\_duplicate | given\_label | | --- | --- | --- | --- | --- | --- | --- | --- | | 24d6f2 | 0 | 83 | 97 | cheated on exam, gets 0pts | 0.953227 | True | D | | 7630c7 | 0 | 81 | 99 | cheated on exam, gets 0pts | 0.949133 | True | B | | d4d286 | 0 | 81 | 97 | cheated on exam, gets 0pts | 0.953227 | True | B | | 1c1ee0 | 0 | 79 | 96 | cheated on exam, gets 0pts | 0.938130 | True | D | Improve the dataset based on the detected issues[​](#improve-the-dataset-based-on-the-detected-issues "Direct link to Improve the dataset based on the detected issues") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Since the results of this analysis appear reasonable, let’s use the Cleanlab columns to improve the quality of our dataset. For your own datasets, which actions you should take to remedy the detected issues will depend on what you are using the data for. No single action is going to be the best choice across all datasets, so we caution against blindly copying the actions we perform below. For data marked as `label_issue`, we create a new `corrected_label` column, which will be the given label for data without detected label issues, and the `suggested_label` for data with detected label issues. corrected_label = np.where(combined_dataset_df["is_label_issue"], combined_dataset_df["suggested_label"], combined_dataset_df["given_label"]) For data marked as outlier or ambiguous, we will exclude them from our dataset here for demonstration purposes. Here we create a boolean vector `rows_to_exclude` to track which data points will be excluded. rows_to_exclude = combined_dataset_df["is_outlier"] | combined_dataset_df["is_ambiguous"] For each set of near duplicates, we only want to keep one of the data points that share a common `near_duplicate_cluster_id` (so that the resulting dataset will no longer contain any near duplicates). near_duplicates_to_exclude = combined_dataset_df['is_near_duplicate'] & combined_dataset_df['near_duplicate_cluster_id'].duplicated(keep='first')rows_to_exclude |= near_duplicates_to_exclude We can check the total amount of excluded data: print(f"Excluding {rows_to_exclude.sum()} examples (out of {len(combined_dataset_df)})") Excluding 114 examples (out of 941) Finally, let’s actually make a new version of our dataset with these changes. We craft a new dataframe from the original, applying corrections and exclusions, and then use this dataframe to save the new dataset in a separate CSV file. The new dataset is a CSV file that looks just like our original dataset – you can use it as a plug-in replacement to get more reliable results in your ML and Analytics pipelines, without any change in your existing modeling code. new_dataset_filename = "improved_dataset.csv" # Fetch the original datasetfixed_dataset = combined_dataset_df[DATASET_COLUMNS].copy()# Add the corrected label column fixed_dataset["letter_grade"] = corrected_label# Automatically exclude selected rowsfixed_dataset = fixed_dataset[~rows_to_exclude]# Save improved dataset to new CSV filefixed_dataset.to_csv(new_dataset_filename, index=False)print(f"Adjusted dataset saved to {new_dataset_filename}") Adjusted dataset saved to improved_dataset.csv **Note:** Cleanlab Studio is not just for labeled datasets. You can follow this tutorial to auto-detect erroneous values in _any_ categorical column of a table, as well as impute all missing values in this column, by selecting it as the label column in your Cleanlab Studio Project. Refer to our [data entry errors tutorial](/studio/tutorials/cleanlab-studio-api/data_entry/) for a general example of auto-detecting errors (and imputing missing values) across multiple heterogeneous columns of an arbitrary tabular dataset. * [Install and import dependencies](#install-and-import-dependencies) * [Dataset structure](#dataset-structure) * [Load dataset into Cleanlab Studio](#load-dataset-into-cleanlab-studio) * [Launch a Project](#launch-a-project) * [Download Cleanlab columns](#download-cleanlab-columns) * [Review detected data issues](#review-detected-data-issues) * [Finding label issues](#finding-label-issues) * [Ambiguous samples](#ambiguous-samples) * [Outliers](#outliers) * [Near duplicates](#near-duplicates) * [Improve the dataset based on the detected issues](#improve-the-dataset-based-on-the-detected-issues) --- # Curating Heterogeneous Document Datasets with Data-Centric AI [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/document_data_quickstart.ipynb) This is the recommended quickstart tutorial for analyzing _document_ datasets/collections via Cleanlab Studio’s [Python API](/studio/quickstart/api/) . This tutorial demonstrates how to run Cleanlab Studio on diverse document file types like: `csv`, `doc`, `docx`, `pdf`, `ppt`, `pptx`, `xls`, `xlsx`. We first recommend completing our [Text Data Quickstart Tutorial](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) to understand how Cleanlab Studio works with text datasets. Here we only demonstrate how to process your document collection into a text dataset within Cleanlab Studio, refer to the [Text Data Quickstart Tutorial](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) for next steps after that. You can alternatively extract text from the documents yourself and run Cleanlab Studio on the resulting text dataset. Install and import required dependencies[​](#install-and-import-required-dependencies "Direct link to Install and import required dependencies") ------------------------------------------------------------------------------------------------------------------------------------------------- Cleanlab’s Python client can be installed using pip: %pip install --upgrade cleanlab-studio from cleanlab_studio import Studio Prepare Dataset[​](#prepare-dataset "Direct link to Prepare Dataset") ---------------------------------------------------------------------- This tutorial considers an example dataset of around 500 business documents of several file types (`ppt`, `pdf`, `docx`). We want to categorize each document into one of these 5 _topics_: **HR**, **IT**, **Finance**, **Sales**, **Product** (this is a _multi-class classification_ task). Let’s download the dataset in an [appropriate format](/studio/concepts/datasets/#metadata-zip) with the following terminal command: wget -nc 'https://cleanlab-public.s3.amazonaws.com/Datasets/documents_cl_labeled.zip' ### Format Your Own Dataset[​](#format-your-own-dataset "Direct link to Format Your Own Dataset") The same ideas from this tutorial apply to document datasets with other file types and class labels or document tags. You can follow along with your own dataset as long as it is formatted similarly or in other acceptable formats listed in the [Document Datasets guide](/studio/concepts/datasets/#document-datasets) . Below are some more details on how to format a document dataset like the one used in this tutorial. #### Dataset Structure[​](#dataset-structure "Direct link to Dataset Structure") You can directly run Cleanlab Studio on a document dataset, where each document lives in its own file, and the files are organized in a particular directory shown below. In addition to the documents, your top-level directory should contain a file `metadata.csv`, containing metadata about each document, including any annotated class labels or tags. Here’s how the directory structure and `metadata.csv` file should look: documents_cl├── metadata.csv├── file_0.pdf└── documents ├── optional_subdirectory │ ├── file_1.ppt │ └── file_2.pdf ├──file_3.docx ⋮ └──file_4.pdf ⋮metadata.csv┌──────────────────────────────────────────────────────┐│filename │label │├──────────────────────────────────────────────────────┤│file_0.ppf │hr │├──────────────────────────────────────────────────────┤│documents/optional_subdirectory/file_1.ppt │ │ <── unlabeled example├──────────────────────────────────────────────────────┤│documents/optional_subdirectory/file_2.pdf │sales │├──────────────────────────────────────────────────────┤│documents/file_3.docx │it │├──────────────────────────────────────────────────────┤│documents/file_4.pdf │ │ <── unlabeled example├──────────────────────────────────────────────────────┤│... │... │└─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ─┘ * **Parent Directory**: In our tutorial, `documents_cl/` serves as the top-level directory. It holds all document files and the `metadata.csv` file. * **metadata.csv**: This manifest must be named `metadata.csv` and placed at the top-level directory. It contains mappings between relative filepaths to the documents and metadata about each document in the dataset (such as labels). While the document files in the directory can be of mixed media formats with an arbitrary layout, the metadata must be formatted as a standard CSV file (e.g. use `,` as the delimiter and `"` as the quote character). * **Data Directories (Optional)**: Optional divisions between document files, such as the `optional_subdirectory/` and `documents/` sub-directories shown above, may be included for organizational purposes. As long as the metadata file correctly points to the location of the documents (relative paths within these subdirectories), it does not matter how these sub-directories are organized within the top-level directory. * **Unlabeled Data**: If there are unlabeled documents you would like labeled: add these files into the folder, and specify their filenames in `metadata.csv` with their corresponding `label` column taking a value Cleanlab will interpret as unlabeled. For multi-class classification datasets, such values include: empty string (`""`) or None (`None`, `np.nan`)). For tagging rather than classifying documents, follow the \[multi-label classification guide\]((/studio/concepts/datasets/#multi-label) on how to represent unlabeled data. We recommend at least 5 documents labeled for each possible class, in order for Cleanlab’s AutoML system to effectively learn about your data. #### Create ZIP file[​](#create-zip-file "Direct link to Create ZIP file") After it is properly structured, simply zip the your top-level directory. For example, we produced the ZIP file used in this tutorial using the following terminal command: zip -r documents_cl.zip documents_cl/ Load Dataset into Cleanlab Studio[​](#load-dataset-into-cleanlab-studio "Direct link to Load Dataset into Cleanlab Studio") ---------------------------------------------------------------------------------------------------------------------------- Now that the data is in an appropriately formatted zip file, let’s load it into Cleanlab Studio. First use your API key to instantiate a `studio` object. # Get API key from here: https://app.cleanlab.ai/account after creating an accountAPI_KEY = ""studio = Studio(API_KEY) Next let’s load the dataset into Cleanlab Studio, which will require that it has been properly formatted. dataset_id = studio.upload_dataset(dataset='documents_cl_labeled.zip', dataset_name='document_quickstart_dataset')print(f"Dataset ID: {dataset_id}") Begin Document Curation[​](#begin-document-curation "Direct link to Begin Document Curation") ---------------------------------------------------------------------------------------------- After your dataset is successfully loaded, it will appear under the **Datasets** tab in the [Cleanlab Studio Web Inferface](https://app.cleanlab.ai/) . The document dataset appears as a text dataset with the text extracted from each document, such that it can be handled like any other text dataset in Cleanlab Studio. Each document is represented as a row in this text dataset, with the document file name listed in a **Document** column, the **Topic** column containing the annotations specified in `metadata.csv`, and a **Text** column containing the extracted text from this document. ![Loaded document dataset as text dataset](/assets/images/dataset-upload-img-068edc945f764a59eaa8b3c7df4ab24f.png) At this point, you can treat your document collection as a text dataset within Cleanlab Studio and run Projects like you would for text datasets. Refer to the [Text Data Quickstart Tutorial](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) to understand next steps regarding how Cleanlab Studio works with text datasets and how to obtain/understand the results. You can map each Cleanlab result back to the corresponding document via the **Document** column. Applications[​](#applications "Direct link to Applications") ------------------------------------------------------------- One common application of Cleanlab Studio to documents is: curating a document collection to prepare for Retrieval-Augmented Generation – learn about this via our [instructional video](https://www.youtube.com/watch?v=-VXKmMKBjhU) . Other applications include: * automated labeling/categorization/tagging of documents * catching mis-categorized / mis-tagged documents / other bad document annotations * catching near duplicate documents, outliers, as well as documents containing low-quality (poorly-written) text, foreign languages, or unsafe content (toxicity, PII, etc). To learn how to accomplish these tasks, follow the analogous text data tutorials. Other Document Types[​](#other-document-types "Direct link to Other Document Types") ------------------------------------------------------------------------------------- Have documents of a file type not covered in the above list of supported file types? You can either: convert your documents to a supported file type, extract the text from them yourself, or [contact us](https://cleanlab.ai/sales/) if you want to run Cleanlab Studio directly on other types of documents. If you are interested in building AI Assistants connected to your company’s data sources and other Retrieval-Augmented Generation applications, [reach out](https://cleanlab.ai/sales/) to learn how Cleanlab can help. * [Install and import required dependencies](#install-and-import-required-dependencies) * [Prepare Dataset](#prepare-dataset) * [Format Your Own Dataset](#format-your-own-dataset) * [Load Dataset into Cleanlab Studio](#load-dataset-into-cleanlab-studio) * [Begin Document Curation](#begin-document-curation) * [Applications](#applications) * [Other Document Types](#other-document-types) --- # AI to Detect Data Entry Errors (and Impute Missing Values) in any Tabular Dataset [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/data_entry.ipynb) This is the recommended tutorial for programmatically identifying erroneous values (or imputing missing values) in a structured dataset via the Cleanlab Studio [Python API](/studio/quickstart/api/) . Cleanlab’s AI automatically detects entries in any data table (e.g. CSV/Excel file or Database) that are likely incorrect, perhaps due to: data entry or measurement error (e.g. sensor noise). Simply provide any data table (including columns that are: text, numeric, or categorical — even with missing values), and state-of-the-art ML models will be trained to score the quality of each datapoint (row) and flag any entry (cell value) that is likely erroneous. These same ML models can produce predictions to accurately impute missing entries in the table. Unlike traditional data validation or data quality tools, Cleanlab is not simply based on manual rules (e.g. ‘this column only contains positive values in a certain range’). Instead Cleanlab uses AI that accounts for all of the available information in your dataset to flag suspicious entries which may be erroneous. Thus Cleanlab can automatically detect not only atypical values in a column (like traditional data quality tools), but also **atypical combinations of values across columns** (e.g. multiple values that are jointly incompatible). ![Data entry issues](/assets/images/data-entry-issues-05b4109a4d9b291bda80905a775a3fee.png) Install and import dependencies[​](#install-and-import-dependencies "Direct link to Install and import dependencies") ---------------------------------------------------------------------------------------------------------------------- You can use `pip` to install all other packages required for this tutorial as follows: %pip install cleanlab-studio import numpy as npimport pandas as pdimport osimport randomfrom IPython.display import display, Markdownpd.set_option("display.max_colwidth", None) Fetch and view dataset[​](#fetch-and-view-dataset "Direct link to Fetch and view dataset") ------------------------------------------------------------------------------------------- This tutorial considers a structured dataset of medical records. To fetch this dataset, make sure you have `wget` installed. wget -nc https://cleanlab-public.s3.amazonaws.com/Datasets/data_entry.csv -P data BASE_PATH = os.getcwd()dataset_path = os.path.join(BASE_PATH, "data/")data = pd.read_csv(os.path.join(dataset_path, 'data_entry.csv'))data.head() | | patient\_id | diagnosis | medication | dosage | note | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 90235 | Bronchitis | Dextromethorphan | 10mg | Adjusting dosage of Dextromethorphan for Bronchitis. | 2.0 | 40.0 | | 1 | 34227 | Pneumonia | Amoxicillin | 500mg | Reviewing patient's response to Amoxicillin therapy for Pneumonia. | 35.0 | 300.0 | | 2 | 21253 | Hypertension | Hydrochlorothiazide | 25mg | Recommending additional tests to monitor efficacy of Hydrochlorothiazide for Hypertension. | 3.0 | 300.0 | | 3 | 44136 | Pneumonia | Levofloxacin | 10 IU | Advised patient on importance of adherence to Levofloxacin regimen for Pneumonia. | 5.0 | 300.0 | | 4 | 76265 | Bronchitis | Guaifenesin | 200mg | Patient treated for Bronchitis using Guaifenesin. | 4.0 | 80.0 | We can check if the dataset is complete or if there are missing entries. missing_data = data[data.isnull().any(axis=1)]missing_data | | patient\_id | diagnosis | medication | dosage | note | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | --- | --- | | 102 | 10322 | Hypertension | Losartan | NaN | Patient presenting with Hypertension symptoms despite Losartan therapy. | 4.0 | 400.0 | | 129 | 53909 | Pneumonia | Azithromycin | 250mg | NaN | 5.0 | 300.0 | | 256 | 68289 | Bronchitis | Guaifenesin | 200mg | Patient responding well to Guaifenesin for Bronchitis. | 5.0 | NaN | | 397 | 81520 | Diabetes mellitus | Insulin | 10 IU | Considering alternative treatments for Diabetes mellitus due to patient's intolerance to Insulin. | 2.0 | NaN | | 473 | 61117 | Diabetes mellitus | Insulin | 10 IU | Instructed patient on proper administration of Insulin for Diabetes mellitus. | NaN | 80.0 | | 655 | 64952 | Influenza | Rimantadine | 100mg | Patient presenting with Influenza symptoms despite Rimantadine therapy. | NaN | 80.0 | | 816 | 15877 | Bronchitis | NaN | 10mg | Scheduled follow-up appointment to evaluate Bronchitis. | 1.0 | 20.0 | | 966 | 49846 | Bronchitis | NaN | 10mg | NaN | 1.0 | 20.0 | Cleanlab Studio automatically deals with missing values, so we don’t have to specially handle them. Load data into Cleanlab Studio[​](#load-data-into-cleanlab-studio "Direct link to Load data into Cleanlab Studio") ------------------------------------------------------------------------------------------------------------------- Our data analysis starts by loading the data, which may take a while for big datasets. First use your API key to instantiate a `Studio` object. from cleanlab_studio import Studio# You can find your Cleanlab Studio API key by going to app.cleanlab.ai/upload,# clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# Initialize studio objectstudio = Studio(API_KEY) A unique ID column allows us to better track and visualize results. If such a column is not present in your dataset, you can uncomment the following code to create one. Here we’ll use the ‘patient\_id’ column which has unique values for all entries in our dataset. # Alternatively you can create an ID column of sequential integers# identifier_col = 'unique_id'# data[identifier_col] = range(0, len(data)) identifier_col = 'patient_id' # unique ID columndata[identifier_col].is_unique True When loading data into Cleanlab Studio, the application will automatically infer the schema of your dataset. However in order to analyze specific numeric columns later on, we’ll override the default schema here to explicitly declare these as numeric columns. You don’t need to do this for all numeric columns, only certain columns you wish to specifically analyze/predict within a later Cleanlab Studio Project. dataset_id = studio.upload_dataset( data, dataset_name="tabular-data-entry", schema_overrides=[ {"name": "visiting_hours", "column_type": "float"}, {"name": "invoice", "column_type": "float"}, ],)print(f"Dataset ID: {dataset_id}") After it’s loaded, we can use the dataset’s `id` to create a _Project_ in Cleanlab Studio, which automatically trains ML models to provide AI-based analysis of your dataset. Launch projects[​](#launch-projects "Direct link to Launch projects") ---------------------------------------------------------------------- To find erroneous values in this dataset, we launch Cleanlab Studio project for each numeric/categorical column which may contain errors. Each project uses ML to analyze a particular column of the dataset by treating that column as the label (dependent variable), and the rest as predictive features (independent variables). The predictions for each entry in the label column are thus based on all of the other available information in the same row, and can be used to impute missing entries and detect erroneous entries. We first define helper functions to determine the type of each column and launch Cleanlab Studio projects for a column (based on its determined type). Optional: Helper functions to determine the type of a column, in terms of the Cleanlab project to find erroneous values in it. def is_categorical_column(col, unique_threshold = 0.05, min_na_values = 100): """ Check if a column is categorical and can be used as the labels for a Cleanlab Studio's classification project. Parameters: col (pd.Series or pd.DataFrame): Values in this column (extracted from the original DataFrame). unique_threshold (float): Threshold to check uniqueness of categories in the column. If the ratio of (unique categories in the column / total number of data samples) is too high, return False. min_na_values (int): Minimum number of non-null values in this column in order to train a reliable AI model (must be above this to return True). Returns: bool: Whether the column is categorical and can be used as label in Cleanlab Studio project. """ num_unique_vals = col.nunique() # Check if column have all identical values if num_unique_vals == 1: return False # Check if column can be considered to be categorical unique_ratio = num_unique_vals / len(col) if unique_ratio > unique_threshold: return False # Check the minimum class count for any class to be at least 5 if any(col.value_counts() < 5): return False # Check if too many NaN values to be worth training a model to predict if sum(col.notna()) < min_na_values: return False if len(col) < 101 and sum(col.isna()) > 0: return False return Truedef is_numeric_column(col, min_na_values = 100): """ Check if a column is numeric and if it can be used as the labels for a Cleanlab Studio regression project. Parameters: col (pd.Series or pd.DataFrame): Values in this column (extracted from the original DataFrame). min_na_values (int): Minimum number of non-null values in this column in order to train a reliable AI model (must be above this to return True). Returns: bool: Whether the column is numeric and can be used as label in Cleanlab Studio project. """ if col.dtype not in (float, int): return False # Check if too many NaN values to be worth training a model to predict if sum(col.notna()) < min_na_values: return False if len(col) < 101 and sum(col.isna()) > 0: return False return Truedef filter_column_types(data, identifier_col, columns_to_exclude = []): """ Determine each column's type: categorical or numerical, to determine which type of Cleanlab Studio project to run for this column. Parameters: data (pd.DataFrame): Original dataset. identifier_col (str): Unique identifier column (will not be considered). columns_to_exclude (list[str]): List of names of columns to not consider. Returns: categorical_columns (list): List of names of columns identified as categorical numeric_columns (list): List of names of columns identified as numeric skip_columns (list): List of names of columns that are neither categorical nor numerical (e.g. contain arbitrary text or strings). """ categorical_columns = [] numeric_columns = [] skip_columns = [] all_columns = data.columns.to_list() # List of columns to analyse columns_to_analyze = [column for column in all_columns if column not in columns_to_exclude] # Remove identifier_col as it doesn't require any analysis columns_to_analyze.remove(identifier_col) for col_name in columns_to_analyze: col = data[col_name] if is_categorical_column(col): categorical_columns.append(col_name) elif is_numeric_column(col): numeric_columns.append(col_name) else: skip_columns.append(col_name) if len(categorical_columns + numeric_columns) == 0: print("No columns to find errors in.") return categorical_columns, numeric_columns, skip_columns# Helper function to launch Cleanlab project to detect errors in a columndef create_column_project(dataset_id, project_name, input_columns, audit_column, task_type, model_type="regular"): """ Launch Cleanlab Studio project based on the type of the column to be audited. Parameters: dataset_id (str): Cleanlab Studio dataset ID. project_name (str): Name of the Cleanlab Studio project. input_columns (list[str]): List of names of columns to use as predictive features for training Cleanlab AI model to analyze the `audit_column`. audit_column (str): Name of the column to audit i.e. use as label for training Cleanlab AI model. task_type (str): Type of ML task - 'multi-class' for classification or 'regression' for regression. model_type (str): Type of ML model - 'regular' or 'fast' mode. Returns: project_id (str): Unique ID of this Cleanlab Studio project that can be used to programmatically fetch results. """ predictive_columns = input_columns.copy() # Remove audit_column from the list of input predictive features predictive_columns.remove(audit_column) project_id = studio.create_project( dataset_id=dataset_id, project_name=f"{project_name}-{audit_column}", modality="tabular", task_type=task_type, model_type=model_type, label_column=audit_column, feature_columns=predictive_columns ) print(f"Project for auditing '{audit_column}' created and training has begun! project_id: {project_id}") return project_id Not all columns may be susceptible to data entry errors. To save time, you can specify `columns_to_exclude` to skip these columns in the error checks (these columns may still be used as predictive features for inferring whether other columns have erroneous values). In our dataset, we’ll skip the ‘diagnosis’ column. Note that any identifier column you previously declared for the dataset (in our case ‘patient\_id’) will be ignored (neither being checked for errors nor used as a predictive feature). The following code determines which categorical and numeric columns we will check for errors (i.e. run a project for). # List of columns to excludecolumns_to_exclude = ['diagnosis']categorical_columns, numeric_columns, skip_columns = filter_column_types(data, identifier_col, columns_to_exclude)print("Categorical columns to audit:", categorical_columns, "\nNumeric columns to audit:", numeric_columns, "\nNot categorical or numeric (not audited):", skip_columns) Categorical columns to audit: ['medication', 'dosage'] Numeric columns to audit: ['visiting_hours', 'invoice'] Not categorical or numeric (not audited): ['note'] We only audit numeric or categorical columns for errors (the ‘note’ column in our dataset contains free-form text and is automatically not checked for errors). For each column to audit, an appropriate Cleanlab project is launched (classification project for categorical columns, regression project for numeric columns). Let’s launch these projects: project_name = "tutorial" # You can change this prefix used to name the per-column projectsmodel_type = "regular" # You can set this to "fast" to get quicker but less accurate results# All the columns (except identifier) can be predictive featuresinput_columns = data.columns.to_list() # You can reduce this to use less predictive featuresinput_columns.remove(identifier_col)project_ids = {} # will store IDs of all the projects for different columns # Run classification projects for categorical columnsfor audit_column in categorical_columns: project_ids[audit_column] = create_column_project(dataset_id, project_name, input_columns, audit_column, 'multi-class', model_type)# Run regression projects for numeric columnsfor audit_column in numeric_columns: project_ids[audit_column] = create_column_project(dataset_id, project_name, input_columns, audit_column, 'regression', model_type) Once all of the projects have been launched successfully and their `project_id`’s are visible, feel free to close this notebook. It will take time for Cleanlab’s AI to train and analyze your data. Come back after training is complete (you will receive emails) and continue with the notebook to review your results. Each project produces a _cleanset_ (cleaned dataset). For this tutorial, all projects launched here should complete within around 10 minutes. **You should only execute the above cells once!** Do not call `create_project` again. Before we proceed with the rest of the tutorial, we will wait for all the projects to complete. You can poll for project’s status to programmatically wait until the results are ready for review (this next code cell will take some time): cleanset_ids = {}for audit_column in project_ids: cleanset_ids[audit_column] = studio.get_latest_cleanset_id(project_ids[audit_column]) print(f"Project for auditing '{audit_column}' is running! cleanset_id: {cleanset_ids[audit_column]}") project_status = studio.wait_until_cleanset_ready(cleanset_ids[audit_column]) Get project results[​](#get-project-results "Direct link to Get project results") ---------------------------------------------------------------------------------- Each project generates smart metadata about each data point, which is stored as [Cleanlab columns](/studio/concepts/cleanlab_columns/) we can fetch. If at any point you want to re-run the remaining parts of this notebook (without creating another project), simply call `studio.download_cleanlab_columns(cleanset_id)` with the `cleanset_id` printed from the previous cells. We define a helper function that fetches Cleanlab generated metadata columns for each project and stores: which entries are estimated to be erroneous, confidence scores for these estimates, and AI model predictions in 3 CSV files (as well as returning corresponding DataFrames). Other helper functions are defined to help inspect/highlight Cleanlab results for each column using these 3 DataFrames/CSVs. Optional: Helper function to extract and re-arrange data entries detected as possibly erroneous def extract_and_write_cleanlab_results(data, cleanset_ids, identifier_col): """ Fetch Cleanlab columns to store erroneous entries, respective confidence scores, and AI model predictions in 3 different CSVs Parameters: data (pd.DataFrame): Original data's DataFrame cleanset_ids (dict): Dictionary with column name as key, and its respective cleanset_id as value identifier_col (str): Unique identifier column Returns: is_issue_df (pd.DataFrame): DataFrame of booleans, for all audited columns, denoting whether the value is erroneous or not issue_score_df (pd.DataFrame): DataFrame of confidence scores (0-1), for all audited columns, denoting probability of value being erroneous prediction_df (pd.DataFrame): DataFrame of AI predictions, for all audited columns, that would be used to impute missing values """ # Instantiate DataFrames with identifier column is_issue_df, issue_score_df, prediction_df = (pd.DataFrame(data[identifier_col]) for _ in range(3)) for audit_column in cleanset_ids: # Download Cleanlab columns from this column's project cleanlab_columns_df = studio.download_cleanlab_columns(cleanset_ids[audit_column]) data_cleanlab_df = data.merge(cleanlab_columns_df, left_index=True, right_index=True) # DataFrame to store True/False flag whether the entry seems erroneous is_issue_df[audit_column] = data_cleanlab_df['is_label_issue'] # DataFrame to store AI's confidence score on whether the entry is erroneous issue_score_df[audit_column] = data_cleanlab_df['label_issue_score'] # DataFrame to store predicted values prediction_df[audit_column] = np.where(data_cleanlab_df["is_label_issue"] | data_cleanlab_df[audit_column].isna(), data_cleanlab_df["suggested_label"], data_cleanlab_df[audit_column]) # Save DataFrames to CSV files (comment these lines if you prefer not to) is_issue_df.to_csv("is_issue.csv", index=False) issue_score_df.to_csv("issue_score.csv", index=False) prediction_df.to_csv("imputed_values.csv", index=False) return is_issue_df, issue_score_df, prediction_df# Helper function to view the Cleanlab analysis results for a particular columndef inspect_column(audit_column): """ Create a DataFrame with original data, column to inspect and its respective Cleanlab columns Parameters: audit_column (str): Name of the column to inspect Returns: merged_df (pd.DataFrame): DataFrame of original data, inspected column and its respective Cleanlab columns """ is_issue_col = is_issue_df[audit_column].rename(f"{audit_column}_is_issue") issue_score_col = issue_score_df[audit_column].rename(f"{audit_column}_issue_score") predicted_values_col = predicted_value_df[audit_column].rename(f"{audit_column}_predicted_value") # Moving the column for ease of comparison data_columns = data.columns.to_list() data_columns.remove(audit_column) data_columns.append(audit_column) merged_df = pd.concat([data[data_columns], is_issue_col, issue_score_col, predicted_values_col], axis=1) return merged_df# Helper function to highlight particular values for ease of visualizationdef apply_highlight(row, col, mask): ''' Highlight the (row,col) entry if mask[row,col] is True Parameters: mask (pd.DataFrame): Contains boolean indicating whether the entry is to be highlighted Returns: CSS-style (str): Style to apply to (row, col) entry ''' # Check if the mask is True for this particular entry if mask.at[row.name, col]: return 'background-color: red' else: return ''# Helper function to highlight entries in Excel basis a boolean tabledef highlight_errors_in_excel(excel_path, issue_csv_path): """ Highlights entries in an Excel file based on boolean values in a DataFrame. Parameters: excel_path (path in str): Path of Excel file to manipulate issue_csv_path (path in str): Path of `is_issue.csv` containing boolean table Returns: None: Save the modified Excel file """ # Export original data to Excel format data.to_excel(excel_path, index=False) # Read Excel data and is_issue.csv excel_workbook = load_workbook(excel_path) excel_worksheet = excel_workbook.active is_issue_df = pd.read_csv(issue_csv_path) # Columns to consider for highlighting # is_issue_df contains the columns we audited columns_to_highlight = is_issue_df.columns.to_list() # You can reduce this to a list of specific columns columns_to_highlight.remove(identifier_col) # Define pattern to apply to a cell yellow_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid') # Columns with their respective indice in Excel excel_column_with_indice = {cell.value:cell.column for cell in excel_worksheet[1]} # Iterate over columns_to_highlight for column in columns_to_highlight: excel_column_idx = excel_column_with_indice[column] # Apply highlight if the value in `is_issue_df` is True for row_idx, value in enumerate(is_issue_df[column]): excel_row_idx = row_idx + 2 # Excel rows indice starts from 1 and first row contains the column headers itself, hence add 2 if value == True: excel_worksheet.cell(row=excel_row_idx, column=excel_column_idx).fill = yellow_fill excel_workbook.save(excel_path) This helper function outputs 3 CSV files: * `is_issue.csv` contains True/False values specifying whether each entry value in the input dataset is estimated to be likely erroneous (True) or not (False). You can filter based on the True values to determine which subset of data appears suspicious/corrupted in your dataset (inferred based on the other available information in the dataset). * `issue_scores.csv` contains scores between 0 and 1 estimating the likelihood that each entry value is corrupted (higher scores indicate values that appear more suspicious/erroneous). You can sort a column’s values by these scores (in descending order) to prioritize which values to review (i.e. which entries are most suspicious). * `imputed_values.csv` contains a value for each entry predicted by Cleanlab’s AI model. The prediction represents the expected value of this entry based on all of the other information in dataset (in particular this row), and can be used as an imputed value if the original value were missing. All 3 CSV files returned contain the same number of rows as the original dataset, and the columns that we ran through Cleanlab projects. Each erroneous flag (boolean), suspicion score, and imputed value corresponds to the data entry at that same row/column in your original dataset. The entries flagged with the highest issue scores are those you should inspect first. After that, consider having your team review the entries that Cleanlab has flagged as seeming erronous (based on boolean `is_issue.csv`). # Create the above 3 DataFramesis_issue_df, issue_score_df, predicted_value_df = extract_and_write_cleanlab_results(data, cleanset_ids, identifier_col)# Display the 3 CSV files saved to the diskls -l i*.csv We can view the values in each of these DataFrames/CSVs. is_issue_df.head(3) | | patient\_id | medication | dosage | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | | 0 | 90235 | False | False | False | False | | 1 | 34227 | False | False | True | False | | 2 | 21253 | False | False | False | False | issue_score_df.head(3) | | patient\_id | medication | dosage | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | | 0 | 90235 | 0.106462 | 0.468849 | 0.288734 | 0.032805 | | 1 | 34227 | 0.495846 | 0.471051 | 1.000000 | 0.124499 | | 2 | 21253 | 0.105022 | 0.469134 | 0.406527 | 0.039586 | predicted_value_df.head(3) | | patient\_id | medication | dosage | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | | 0 | 90235 | Dextromethorphan | 10mg | 2.000000 | 40.0 | | 1 | 34227 | Amoxicillin | 500mg | 5.301408 | 300.0 | | 2 | 21253 | Hydrochlorothiazide | 25mg | 3.000000 | 300.0 | _**Optional**_: _Analyze erroneous entries in a spreadsheet_ Tabular data is frequently analyzed in Microsoft Excel for its ease of use. We can make use of the `is_issue.csv` and the original data to create a new Excel file (.xlsx) with erroneous cells highlighted in yellow. The file `highlighted_data_entry.xlsx` is saved to the current working directory and can be opened using a spreadsheet software. **Note:** You have the flexibility to flag additional or fewer entries in your Data Table by setting higher or lower thresholds on the entries in `issue_scores.csv`, allowing you to create your customized boolean table. # Library for manipulating Excel table%pip install openpyxl # Import necessary methodsfrom openpyxl import load_workbookfrom openpyxl.styles import PatternFill# Path of output Excel file and is_issue.csvexcel_path = 'highlighted_data_entry.xlsx'issue_csv_path = 'is_issue.csv' # Boolean table that we generated above# Save the highlighted Excel datahighlight_errors_in_excel(excel_path, issue_csv_path) Impute missing values[​](#impute-missing-values "Direct link to Impute missing values") ---------------------------------------------------------------------------------------- Before detecting data entry errors, let’s first see how to impute the missing entries in the original dataset using Cleanlab’s predicted value in `predicted_value_df`. These predictions come from state-of-the-art machine learning models trained (on your dataset) to predict this missing entry based on the other information available for this row. highlight_imputed_values = True # Change to False if you don't want to highlight imputed valuesmissing_data_imputed = missing_data.copy()impute_columns = categorical_columns + numeric_columns # You can reduce this to a list of specific columnsfor col in impute_columns: missing_data_imputed[col] = missing_data_imputed[col].fillna(predicted_value_df[col])if highlight_imputed_values: # Boolean mask indicating whether the entry is missing or not mask_impute = missing_data.isna() # Apply highlight style missing_data_imputed = missing_data_imputed.style.apply(lambda x: [apply_highlight(x, col, mask_impute) for col in x.index], axis=1, subset=impute_columns)missing_data_imputed | | patient\_id | diagnosis | medication | dosage | note | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | --- | --- | | 102 | 10322 | Hypertension | Losartan | 50mg | Patient presenting with Hypertension symptoms despite Losartan therapy. | 4.000000 | 400.000000 | | 129 | 53909 | Pneumonia | Azithromycin | 250mg | nan | 5.000000 | 300.000000 | | 256 | 68289 | Bronchitis | Guaifenesin | 200mg | Patient responding well to Guaifenesin for Bronchitis. | 5.000000 | 202.368744 | | 397 | 81520 | Diabetes mellitus | Insulin | 10 IU | Considering alternative treatments for Diabetes mellitus due to patient's intolerance to Insulin. | 2.000000 | 174.182175 | | 473 | 61117 | Diabetes mellitus | Insulin | 10 IU | Instructed patient on proper administration of Insulin for Diabetes mellitus. | 1.003176 | 80.000000 | | 655 | 64952 | Influenza | Rimantadine | 100mg | Patient presenting with Influenza symptoms despite Rimantadine therapy. | 2.114235 | 80.000000 | | 816 | 15877 | Bronchitis | Dextromethorphan | 10mg | Scheduled follow-up appointment to evaluate Bronchitis. | 1.000000 | 20.000000 | | 966 | 49846 | Bronchitis | Dextromethorphan | 10mg | nan | 1.000000 | 20.000000 | Review the data entry error audit for each column[​](#review-the-data-entry-error-audit-for-each-column "Direct link to Review the data entry error audit for each column") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Let’s take a closer look at the ‘medication’ column. Here we obtain a merged DataFrame using the `inspect_column` helper function defined above, then filter for the data points where `is_issue` is True and sort the values by `issue_score` to view the top most suspicious entries detected in this column. audit_column = 'medication'medication_df = inspect_column(audit_column)medication_issues = medication_df[medication_df[f"{audit_column}_is_issue"] == True].sort_values(f"{audit_column}_issue_score", ascending=False)medication_issues.head() | | patient\_id | diagnosis | dosage | note | visiting\_hours | invoice | medication | medication\_is\_issue | medication\_issue\_score | medication\_predicted\_value | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 484 | 73051 | Influenza | 10mg | Patient treated for Influenza using Rimantadine. | 1.0 | 40.0 | Rimantadine | True | 0.920749 | Zanamivir | | 771 | 11433 | Pneumonia | 500mg | Educated patient on potential side effects of Amoxicillin for Pneumonia. | 2.0 | 120.0 | Insulin | True | 0.709063 | Amoxicillin | Per [drugs.com](https://www.drugs.com/dosage/rimantadine.html) , Rimantadine is typically prescribed at a dosage of 100mg, not 10mg which is the dosage for Zanamavir (predicted value). Also, Insulin is the medication for Diabetes mellitus, not Pneumonia. Such entries can be referred to subject matter expert for review. Next let’s check the `visiting_hours` column and similarly view the top most suspicious values detected in this column. audit_column = 'visiting_hours'visiting_hours_df = inspect_column(audit_column)visiting_hours_issues = visiting_hours_df[visiting_hours_df[f"{audit_column}_is_issue"] == True].sort_values(f"{audit_column}_issue_score", ascending=False)visiting_hours_issues.head() | | patient\_id | diagnosis | medication | dosage | note | invoice | visiting\_hours | visiting\_hours\_is\_issue | visiting\_hours\_issue\_score | visiting\_hours\_predicted\_value | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 1 | 34227 | Pneumonia | Amoxicillin | 500mg | Reviewing patient's response to Amoxicillin therapy for Pneumonia. | 300.0 | 35.0 | True | 1.0 | 5.301408 | | 325 | 52005 | Pneumonia | Levofloxacin | 500mg | Patient exhibiting adverse reaction to Levofloxacin prescribed for Pneumonia. | 300.0 | 20.0 | True | 1.0 | 5.519128 | | 639 | 39637 | Hypertension | Hydrochlorothiazide | 10mg | Instructed patient on proper administration of Hydrochlorothiazide for Hypertension. | 500.0 | 65.0 | True | 1.0 | 7.023181 | | 710 | 19203 | Hypertension | Losartan | 50mg | Noted improvement in patient's condition after administering Losartan for Hypertension. | 200000.0 | 30.0 | True | 1.0 | 5.218635 | | 855 | 25119 | Influenza | Rimantadine | 100mg | Recommended lifestyle modifications in addition to Rimantadine therapy for Influenza. | 120.0 | 28.0 | True | 1.0 | 3.762323 | The visiting hours recorded in these entries appears off as patients don’t typically have these sorts of consultations for such long hours. Such entries can be double checked based on domain knowledge and their presence may indicate you should implement regularly scheduled data validation to ensure values fall within known ranges. We repeat the same steps as above, but this time for the `dosage` column to check for entries with suspicious values. audit_column = 'dosage'dosage_df = inspect_column(audit_column)dosage_issues = dosage_df[dosage_df[f"{audit_column}_is_issue"] == True].sort_values(f"{audit_column}_issue_score", ascending=False)dosage_issues.head() | | patient\_id | diagnosis | medication | note | visiting\_hours | invoice | dosage | dosage\_is\_issue | dosage\_issue\_score | dosage\_predicted\_value | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 3 | 44136 | Pneumonia | Levofloxacin | Advised patient on importance of adherence to Levofloxacin regimen for Pneumonia. | 5.0 | 300.0 | 10 IU | True | 0.532683 | 500mg | | 639 | 39637 | Hypertension | Hydrochlorothiazide | Instructed patient on proper administration of Hydrochlorothiazide for Hypertension. | 65.0 | 500.0 | 10mg | True | 0.531477 | 25mg | | 109 | 38965 | Bronchitis | Guaifenesin | Patient diagnosed with Bronchitis. Prescribed Guaifenesin for treatment. | 1.0 | 20.0 | 100mg | True | 0.531120 | 200mg | | 484 | 73051 | Influenza | Rimantadine | Patient treated for Influenza using Rimantadine. | 1.0 | 40.0 | 10mg | True | 0.530678 | 100mg | Levofloxacin is prescribed in milligrams (mg) not insulin units (IU), which signals that the dosage value is definitely wrong. Also, the recommended dosage for Rimantadine, as per [drugs.com](https://www.drugs.com/dosage/Rimantadine.html) , is 100mg. Zanamivir, another drug for Influenza, is prescribed with [5-10mg dose](https://www.drugs.com/dosage/Zanamivir.html) . So either the recorded dosage or medication seems off here. The same applies to [Hydrochlorothiazide](https://www.drugs.com/dosage/Hydrochlorothiazide.html) which is usually prescribed with 25-100mg dosage for Hypertension, and to Guaifenesin for treating Bronchitis. For all of these data entries, Cleanlab’s predicted value seems more appropriate. Finally, we look for data entry errors in the “invoice” column using the same steps. audit_column = 'invoice'invoice_df = inspect_column(audit_column)invoice_issues = invoice_df[invoice_df[f"{audit_column}_is_issue"] == True].sort_values(f"{audit_column}_issue_score", ascending=False)invoice_issues.head() | | patient\_id | diagnosis | medication | dosage | note | visiting\_hours | invoice | invoice\_is\_issue | invoice\_issue\_score | invoice\_predicted\_value | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 710 | 19203 | Hypertension | Losartan | 50mg | Noted improvement in patient's condition after administering Losartan for Hypertension. | 30.0 | 200000.0 | True | 1.0 | 606.011169 | The invoice value of $200k is too high. Such an entry should be verified from other records to avoid accounting issues later on. Improve your dataset by correcting erroneous entries[​](#improve-your-dataset-by-correcting-erroneous-entries "Direct link to Improve your dataset by correcting erroneous entries") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The best way to ensure that you have high quality data is to manually inspect the entries that Cleanlab identified to have issues (i.e. `is_issue` = True) and correct them. However, that could be time consuming and hence you can also auto-correct your data by replacing the entries that have been flagged as issues with Cleanlab’s predicted values. **We recommend reviewing various predicted values from diverse rows to ensure they are reasonable before doing this**. We demonstrate how to automatically obtain an improved dataset below, where `autocorrected_dataset` will have the exact same rows and columns as your original dataset, but with the entries estimated to be potentially erroneous replaced with values predicted by Cleanlab based on the other information in the dataset. autocorrected_dataset = data.copy()fix_columns = categorical_columns + numeric_columns # You can reduce this to a list of specific columnsimpute_missing = False # Change this to True if you want to impute the missing values alongside fixing the erroneous entriesmask_condition = {col: (is_issue_df[col] if not impute_missing else is_issue_df[col] | autocorrected_dataset[col].isna()) for col in fix_columns}for col in fix_columns: autocorrected_dataset[col] = autocorrected_dataset[col].mask(mask_condition[col], predicted_value_df[col])autocorrected_dataset.to_csv('autocorrected_dataset.csv', index=False) Lastly, we view the first 5 samples of the autocorrected dataset highlighting the corrected entries. samples = 5highlight_corrected_values = Trueautocorrected_dataset_copy = autocorrected_dataset.copy()if highlight_corrected_values: autocorrected_dataset_copy = autocorrected_dataset.head(samples).style.apply(lambda x: [apply_highlight(x, col, is_issue_df) for col in x.index], axis=1, subset=impute_columns)autocorrected_dataset_copy | | patient\_id | diagnosis | medication | dosage | note | visiting\_hours | invoice | | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 90235 | Bronchitis | Dextromethorphan | 10mg | Adjusting dosage of Dextromethorphan for Bronchitis. | 2.000000 | 40.000000 | | 1 | 34227 | Pneumonia | Amoxicillin | 500mg | Reviewing patient's response to Amoxicillin therapy for Pneumonia. | 5.301408 | 300.000000 | | 2 | 21253 | Hypertension | Hydrochlorothiazide | 25mg | Recommending additional tests to monitor efficacy of Hydrochlorothiazide for Hypertension. | 3.000000 | 300.000000 | | 3 | 44136 | Pneumonia | Levofloxacin | 500mg | Advised patient on importance of adherence to Levofloxacin regimen for Pneumonia. | 5.000000 | 300.000000 | | 4 | 76265 | Bronchitis | Guaifenesin | 200mg | Patient treated for Bronchitis using Guaifenesin. | 4.000000 | 80.000000 | * [Install and import dependencies](#install-and-import-dependencies) * [Fetch and view dataset](#fetch-and-view-dataset) * [Load data into Cleanlab Studio](#load-data-into-cleanlab-studio) * [Launch projects](#launch-projects) * [Get project results](#get-project-results) * [Impute missing values](#impute-missing-values) * [Review the data entry error audit for each column](#review-the-data-entry-error-audit-for-each-column) * [Improve your dataset by correcting erroneous entries](#improve-your-dataset-by-correcting-erroneous-entries) --- # Catching Issues in a Product Catalog (Multimodal Dataset) [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/multimodal_dataset.ipynb) This tutorial demonstrates how e-commerce businesses can use Cleanlab Studio to ensure high-quality product catalogs. Follow this tutorial to see how to programatically audit a multimodal dataset (with images, text, and structured/tabular numeric/categorical features) using the Cleanlab Studio [Python API](/studio/quickstart/api/) . Cleanlab Studio handles such multimodal data (eg. product images, titles/descriptions, and price, size, brand, …) to auto-detect many common issues in product catalogs, including: * Products (SKUs) that are miscategorized or have incorrect tags (tax-classifications, age-restrictions, …) * Near-duplicate products (SKUs) * Products with images that are low-quality (over/under-exposed, blurry, low information, …) or NSFW * Products with text titles/descriptions/reviews that are low-quality (non-English/unreadable) or unsafe (toxic language, PII) * Products whose image does not match description * Products whose price, size, or other numeric attribute seems off. ![Issues detected in a product catalog](/assets/images/multimodal-issues-feb59e3f055adaf85b79afaa26d86ac7.png) Install and import dependencies[​](#install-and-import-dependencies "Direct link to Install and import dependencies") ---------------------------------------------------------------------------------------------------------------------- Make sure you have `wget` and `zip` installed to run this tutorial. You can use `pip` to install all other packages required for this tutorial as follows: %pip install -U Pillow cleanlab-studio import numpy as npimport pandas as pdimport osimport randomfrom IPython.display import display, Markdownpd.set_option("display.max_colwidth", None) Get the dataset[​](#get-the-dataset "Direct link to Get the dataset") ---------------------------------------------------------------------- This tutorial uses a variant of this [retailer’s product catalog dataset](https://www.kaggle.com/datasets/PromptCloudHQ/all-jc-penny-products) with the following information about each product/SKU: * product category (11 unique classes) * sale price, average rating (numeric features in structured/tabular format) * brand (categorical feature in structured/tabular format) * title, description (text fields) * image of the product The data are in a CSV file, with images stored in a seperate directory (their filepaths are listed in a column of the CSV). Let’s download the dataset: wget -nc https://cleanlab-public.s3.amazonaws.com/Datasets/product_catalog.zip -O product_catalog.zipunzip -q product_catalog.zip The unzipped data directory `product_catalog/` has the following structure: product_catalog/ # Main directory after unzipping the archive.||-- metadata.csv # CSV of product information (tabular and text fields, filepaths to images)| |-- images/ # Directory containing product images| |-- .jpg # Example of an image file | |-- .jpg # Another image file| |-- ... Each row (data point) in the CSV file corresponds to a product within the catalog. Let’s load the data: BASE_PATH = os.getcwd()dataset_path = os.path.join(BASE_PATH, "product_catalog")data = pd.read_csv(os.path.join(dataset_path, "metadata.csv"))data.head(1) | | sku | title | description | brand | sale\_price | average\_product\_rating | image | category | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 53d474313dd0 | Park B. Smith® Chevron Foil-Printed Decorative Pillow | A chic foil-printed chevron pattern and luxurious comfort make this elegant decorative pillow a must-have accent piece for your formal living space.   foil-printed cover plush and soft cotton cover with feather fill spot clean 12x18" imported | Park B Smith | 43.5 | 3.0 | images/0.jpg | bed & bath | Optional: Initialize helper methods to view images in the DataFrame import pathlibfrom PIL import Imagefrom io import BytesIOfrom base64 import b64encodefrom IPython.display import HTMLBASE_PATH = os.getcwd()def path_to_img_html(path: str) -> str: buf = BytesIO() Image.open(path).convert("RGB").save(buf, format="JPEG") b64 = b64encode(buf.getvalue()).decode("utf8") return f''def display_image(df): image_column = "rendered_image" df_copy = df.copy() df_copy[image_column] = df_copy["image"].apply( lambda x: pathlib.Path(BASE_PATH).joinpath("product_catalog").joinpath(x) ) # Rearrange columns to move image_column after "image" columns = list(df_copy.columns) columns.remove(image_column) columns.insert(1, image_column) df_copy = df_copy[columns] return HTML( df_copy.to_html(escape=False, formatters={image_column: path_to_img_html}) ) display_image(data.head(3)) | | sku | rendered\_image | title | description | brand | sale\_price | average\_product\_rating | image | category | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 53d474313dd0 | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAF8AXwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiuJ+IHim88O6faR2ARbq9lMazOm4RqFLEgdC3QDPHU84xXn0Xi/xO8pdvEFwrLwQYosE/7u3FZuok7DSue7UV4zD8SvENkDvkttQA6q8OxvzUgD8jXRaP8AF7Q7xxBqMcumz5xlwZIj/wACUcfiAPetNUrtE3TPRaKp2epWWpRebYXlvcp/ehkDgfkauUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK5zUvGugaVMbeXUEmuxx9mtgZZM+hVc7fxxWTf+ObmFiI9NFtGRlZLt+T7bV/+KqXJLcDuKWvLL3xjr0lu1wLyG0hAxlbcKWPtuLfyrmr3xFIzAapfXkqnJ2uzMP++RwPyqefsh2PaptTsIJDHJeQCQdU3gt+Q5rEvPHmj2bFQt7OR18i1cj8yBXnunXllcRCSyeGVVOSY2wyn3HUVsHXiysLqBpC2APLwB+Oen4ZqVV11QOL6HZ6P4v0jW5RBbzPFcHOIbhDG5x6A9fwroK4fStOEulyyILGQKfNRlYu0ZAyMMMAEEfzzXbg5Ga1TuhHIfEPQJtd8MN9jQvfWbi5gVeshAIKD6qWA98V4LFfeeDMp3KQSDnBz/Q19VV4H8UPDtp4f8UQXlnmODVRJJJCB8qSqV3Mvpu3AkeuT3xWc468w76WOd0xi3DdFGWOf1qzO1g64WBriX/pmG49s1lQRvKwUAsWP3Qf510NpbGNVB7DBK/41vGuoRtIxlScnoYosLlboyRQXUWTkDncPYMDnv61pp4h13TAFg1fV1xnCtdbwp9MNuFaU8T/AGVhESBjk55xWJPJHEQse2WUr945IH4d6cVGouaKBtwdmbkHxP8AF0DANNFOo/5726gnjp8u2ugs/ivqoUC+sbDdjPyuyZ/9CxXn6rIAGYsS38R4wfQVKnmIvyBQc4JIBP60nSk9hqa6nrdv8SoiQLrSLhPeCVZB+u2tW28d6DcYElzLbMf4biFl/XBH614el7dW0gYuGU8E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h63H7vS4R7EsR+prfoo5V2C7MxPD+joONKs/xhU/zFSDRNJGMaZZDHT9wv8AhWhRTshEENtBAMRQRxj/AGEC/wAqdLDFMm2aJJF/uuoI/WpaKYGNceF9BuUIl0awbPcW6g/mBmsq4+G/he4Qr/ZzR57xXEi/puxXXUVLin0Hc4VvhXoJJMdxqUef7lx/iDVSb4R6S5yNQv8Af2dirMPx216LRRyoLnmU/wAGtPnXB1e7HuI0/wAKyZvgdIpLWniaXpws1qpB+pVh/KvY6KOVBc8F1L4b6nocAmnsJtUjHDNpw3MvuUbDH/gOazrC18P3G9IYgZVO147hCrKfQqeh+tfRdc/r3hHR/Eahr62xcKMJdQny5k+jDn8Dke1S4dgueNPpkEEn2ix3QTA8hGIVgPVehq7aXrMQr8kcOp6A1r6r4J13RtzRj+2tPBzvjUJdRD3UfK+PVcH/AGa5cypHcNJFMHQHawc7WUjswPOfbrWUo9yos9U8C6mGjm0pj/qR5sIPZCeR+BP6iu1xXivh3VRbeIdNmVhjz1hb3VztP6kH8K9qrSk9BSWpleINKXXfD+oaWz7PtUDRq391iOD+Bwa+cbnwj4yttSmW/wDDmoTySHl7RRLHgcAqwOAPY4NfUVLVuKeornhGkfD7xLdxqP7KjskPJkv5xkj/AHU3HPscV3ukfDiwtAr6lcSX0g/gUeVF/wB8gkn8Tg+ld1RSUEIr29tBawLDbQRwxL0SNQqj6AcVYooqwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArmvEPgjw/4oG7VNOje4AwtzETHKOOPmXBOPQ5HtXS0UAcLpfw10vSb+3uReX06W7rJHFM6kbl5BJCgnB5x7d67qkpaSilsNu4UUUUxBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Z) | Park B. Smith® Chevron Foil-Printed Decorative Pillow | A chic foil-printed chevron pattern and luxurious comfort make this elegant decorative pillow a must-have accent piece for your formal living space.   foil-printed cover plush and soft cotton cover with feather fill spot clean 12x18" imported | Park B Smith | 43.50 | 3.0 | images/0.jpg | bed & bath | | 1 | 4a1e2abd23c0 | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAF8AXwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKAEqC6kEVpNIeiIW/IZqes3XnMfh/UXBwRbS4PvtOKTdkNK7SPL9EGLaPJ5IDGtSTk5znd+tZWmZEMefStM8jJBHP5140We60TEKYck4wPzqfw0sQsLZA7SSqjKyIPu5lkYbj0HDD3qnNcJBauzkAbSWJPQVt+H0Mel20bqEdbeIsioVYMyhiGJPJG7HHp+FdVBe8cmIdo2NiIEAA7QB0Vf61bHQVVjBBwFAH1q0tdx57HilpBQcfjTAUUopoP50oJ+tIB1IaM+tKAW6An8KAG/XpSGszWvEeieG7fz9Z1S2skKllWR/ncDrtQZLdf4Qa8p8S/tAWkDNB4Y0w3TKSBd3uVjOD1WMEMwI7kqR6UxHsr+Z0hiEknbccKPcn+grgvG15bxaja2L6lFPqQRpWgAAcID1wOg5OMnOB3wa8F1v4h+LPErEahrdz5JyPs9sfJi2k5wVXG7HYtk+9Z2hXf9m6tb3SxM3lyqTsGXZScMBnrlSwx64rOpHmi0a0Zcs0z3CG9yFBKqDx9auhPOBJ/u96yrSEywJIvzQsoeJ0PEgIyCD6Ec1swQNxlxjbx3rzrHrNmj4BkMPiC+tc8NAHx/usB/wCzV6OO1eX+GJBb+OYUBP76CSPPrgBv/Za9QrtwrvTseXjFarfyHUUUV0nMFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIawvF8nleFr9s4ygX82A/rW7XK+P5PL8LuvZ5kX9c/0qKjtBs0oq9SK8zhtMOUwBk9q0z90ZHSsrTjtXjtxWsxwnHPFePE9uRka5vuLEWcZAkvJY7RSeMNIyoD/49SWfxa0Ox8Sa3pWvtPZy21/cQrcrEXhZEcqgIUFlYAAcAg4zkZxVDxTfvp2nHUYlVpbKRLqJXyVZ42DKGAIOMgZwRXhVxPcXlzNdXMzS3E7tLLI3LMzElmPuSTXoYVKzZ52LbukfWVj488IXybovFGlD0EtwIj+T4NdFb3lncKGt760lUjIaOYMD+Rr4kZQzZKjgAAenFM8tf7n611HJqfcbXFsg/eXVuvu0oH9apTa9o0AJk1rTVx13XaLj82r4qCJn/V/qaXAwNsQyMnnnPHSgR9iTeOfCVtGZJfFGikDqEvUdv++VJJrnNR+N/gewjDQXl3qDE/MlpasCPcmTaCPoa+ftd0qwsraCaxWbbJjbK7BhKCOoGAAe+B0HHPWsIo/ckDtkYoA9u1b9oe4YOmi+HoozuBWa+lLAjvmNcYP/AAI15/rPxS8Z64WW412e3gLMRFZAQAA9ty4Zh7MxrkCoHBbJPakDAEYAJ6daB2FeNdwYJuJAJJJOSaCAOrZ9sUm9iqgdgV44ph468ewNAEvmc4HH6mpo5JVJIEisOjA42nsc9Rg4P4VVDtjjge1Sx5yMsze2aQI9k8G6ul9B9nRgkM6NcwxgBRDMpH2iIDPCkusigAACRh1Bx2sTkIQOK8P8C3Edt4y06Z2KhpTbuMZBaRGVCfxIH5mvb4XLIck8cVwV48sj08PLmhqQWkptfFOmXGQNs6qT6BvlP6Ma9erxPVWZNjj7ysGH4GvZoJVmgjlX7rqGH0IzWmDlo0c+OWsWT0UUV2nCFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJ2rj/iMceHIz/wBPKfyauwrk/iHGX8LMwGdkyN/Mf1rOt8DNaD/ex9ThNOYcL1PXitdmG38KxdNXOD0rXmJEGSRnFeRE9trU4T4g3Qh8OXYHV1CDPuwH8s142VO0YBUnjmvSfiRLJLawxLkRCZQ7erYJAx34BP5eteb5ynJ6d69LDK0L9zzMW71LdhHJ8xiDgA4HNNLHJ9KDt/vbueuKQkdq6DlHbz70F+O+QcjmmZPvSgE8etAhwYhs5PHSkLtxyOe+MmkHrSn7o5oGIWJ4yTn1/wAKB7k49KSl55oAeDwQSoyRjJP6Ux1Cuc855BJ4oApTyCCMj3oAFwckMoxx6mpUdE6ZJ7k1AEA6EgU8Ko52lvrQCJ0cNLmNiJAu5WBwQw5FfRej3q6npdpfgjF1Akpx2Zl+Yfg2R+FfO0U21GQLGRIykkqCVweNp7defWvZ/hnd+f4PEDAA2dzLAP8AdJDj9XYfhXNiVeKZ14SXvNdzW1cnawP4Yr1jw7J53h3TXHe3QfkAP6V5Rqw4bPT1r0/we2/wrp5PZCPyJFY4R++zXHL3E/M3qKKK9A8wKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooADXPeMo/N8J34x0QN+RB/pXQ9qzddj83QdQQDJa2kA+u01M1eLRVN2mmeTaZztPYjvWtdnERyM+nNYukM7KPoK0NTfybWR2b7qkk46YFeMj3WeUeOoPl0/UZpd8d9JcLFDlsKImCFuCOS24dOi9a4OXaDhRhcnivQPiPGlpD4RswpEiaMt3MD/fmdnYfXcW/MVwEgJOK9eEeWKR49WXNJsiyPTNGfagjnijbVmQhekDHNLhQKTcOwoAUdKU9BSD7ppT900AAOKUn60zkUoHrQAooNGKMUDAU8e9Nx6Uo4oAkH3fpzXqHwquSj6xa84LxSKPThgf5CvLQdy4Jxniu7+G10IvFEkTMNtxanH+8GB/kWrGsr02b4Z2qo9N1MZhLdz616V4Mz/wAIlYZ4O1v/AEI153qKAwtjknOc16F4JOfCNhznhv8A0Nq5sJ8bOrG/w16nRUUUV6B5YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVXuk8y0mjPRkYfmDVimsMqR6ihgjxLSSFWP0x0qfxOXXQ7op1aFgMDuRVHSJsoq+2M/StLVWSWxhzzG0ke/PTbuXOfwzXip3dj6CWiuc5+0BYR2d34dnW0GwW0lt5y8EhSpVT9Mkgf7R9K8UkkJ6q233Fe+/tB6rHs0XRRLF5jGS7kUk7lAAVD9CTJ/3z9a8EfA6Mv4GvY6nhLYh3+gpDubnGKcSo5LD8BTS4PQE+9MQBfWlIAGKbl27UbSaAFwCelKPunkY4FKq8HOSeehphZQOozQA4Lxk9KQuueOab8z8k4Hp608AAYHT0oABnvSnijjOP5UUDEJpetJ3o70APUgHmuj8JXQs/FekzMcBphEx9mBX/2YVza8HNX7Ofybq0mXIKSRsOe4YGpmrxaLpu0kz6E1BQ1uWA7da7vwI4PhKzA7GQf+Psf61xIYT6cx77evauu+Hj7vDO3+5cSKPzB/rXDhv4nyO7GL918zrqKKK9E8sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASmSOFjZj0UE/lTzVHVpfs+jX0w6x28jD8FJpPYFq7HjGmbdqArtLAnitW5tlutPkt2O0FSoI6jI61k2/wAsyqSRtOMCugVRJEjA845zXi21sfQN6XPJvi7ePqXiy1uri2lhlOnRJK0gwjyAtuMeCfl5A5wc545589dUHIAH417f8QNJGr+Frhwg+02ANxE2OQo++v02849VFeH8MN3rXq0KntI67o8mvSVOVlsxhVf9n+dG5R/F+VBUYoKqe1amA0uo70hkHYGnbV7gCjKDuKBDNxNACqAScn0FBYdqBgEkKT70AOBPXGPrzTs/jTfqKdjHWgYtJ6c8UZ6UUALRSfhSjrmgBQM4qxEd3lDqdygfmKrjrVuxXzLyzQLuLTIuPX5hxSexUVqj6B0mRn0sZBAK4A9a7X4bkHw/c46C8kH6LXG2NubXSIo3zuWMAk8845rsPhqu3w9c+945/wDHVrgw6/efI9DF/wAL5na0UUV6J5QUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAlZ2uru0DUFHe2lH/jprRqnqkYm0m8iJxvgdc/VSKT2HF6o8TAKzLyQSoz+db9s4SFlzuKjr61ztvMZ0hcgqxw+1vvBWAP/jrbl/L1rU0l3e5mjkYblfa/1H/6xXkP4j3re7qLYs17JNvUNEl01u6sPvRsq5BHuGIr54uIHtbqe2YndDI0bZ65BIr3TwtqLT3nim0AdpbXUpADt6K2VQcdceW3J5xivJPGtv8AZfGmqx4xvm878XAY4/FjXXhlyycX/X9XOLF2lBSX9f1Y58j3OKQqO5P5040nauw4Bu1eflH40bR/dH5Uveg/WgQwqT/CBTQzZ2hiAKkPHODn1qMcMRQIcM/32pwNNFLQMdRRSUAKOtLSCigY5etbnhOD7R4p0uLkASbyfZQW/pWEOh69K7X4e6VcT6jNrCMot9OeCKVc8s0zFVx7ZBzUVPgZrR1qRXmj2G5DLEEyeBXUfDuQCwv7b+JLjzPwZQP/AGU1w9xeTPqC2yqzSSyHpk7EUZZj+g+pArq/Akhi1+9tuQHgDkHvtYAH/wAeNcNB/vEz0MXH90z0SiiivSPHCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmOqupVgCpGCD0Ip9FAHi93pjafdTWVzEI7iHJh54kjBOCD3ByPxUjtRc3MdtrkNyhAjvoI2GOhZcq36Kp/GvR/E/h+LXbJCuI723Je3l/unjIP+ycAH6A9q8wnsRa2pimilWTTZSzQNy0aN99R64G1lI+8FGOprzq1Lkemx6uHrKotdzidZ8STeC/izqN0IXksLtIvtEIbHmoY1yynpkNuwfqO5rG+JOveHfEmt2WoeH4pYs2qpco0AiXcCcYAJ+bBIPbgYJrc+K2nm90zTddt0DLDm0uGAIIB+ZDj0+9z7j1ry1eBXXSs4qRyV+ZTcXtv94Z7UGiitTAKOfakxkUhA7igQnfqT7UwD5z9KlHsKYRiQe4oAWgUfWigBwo/OkFGaAFoBJNGKBQMcBlfrxXp3w/jktvCF3cI4YajrEEDRjrtt42lJ+m54xXmaj7v516n4NuNE0XSdNGsajDeeak11BYWULTSxyOAp3bQAGKxqACcjJ6Dms6msWkbULc6k+mp1tk6T3N7chvLljeGNG3KCSSSy4I6c5P0Hoa63wdBNL4xvrhOLa2tBAxPVnZgwx9Apz/vCuE8MWpjuJ9Yv7Fobmd3CSTMCYrYYKjAOMkg5bGc8DAJz6t4Itmi0L7dIMNqEpugPRGACfmoU47FiK56UPeXkdeKnam/M6qiiiu08sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAErzP4z6zJ4e8LWV/BaWlxLJfLbstwrEFTHIeqsrDlQeDXpteNftEsf+ER0iP8AhbUQx+ojf/Gk0mrMcW07o8v8Q/ESDVPCH9hWeliH7Rt+0STNvMYVgypGwwSuVBG4EgErzgGuAI5pWX5jSGkkkrIuUnJ3YUhBzQaTrTEHTrSEj60uBnpzQc0AIelaWm6al/YazcGR1ksbNblFUAhszxREH0AEhP4Vmn6V6z8LvDiXnw28e6rNAJN9i9tbtnnckZlYfn5R/CgTPJR6jvRSLyoNLQAtAooz60AApR15pBT0GWFAyZVdgVQFnbCqAMkknoB+VfQ958M30x9Jso0m1OMQlJMRFVBQLjcd2MEnIBx93rxXkXw30v8Atf4i6BabgoF4LhiRkERAyFT9duPxr7DqJQU1qaU606TvE4LSPB808gk1iNVtQflshht/p5hHGB/dGR0yeorulVUUKoAUDAAGABT6WnCCgtCKlWVR3kFFFFWZhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQACvHP2iUz4R0h8cDUlX843/AMK9jFeQftEKP+EH0xu41WMfnFL/AIUDW583SY3VGeakk+8faojSKYUn0petB4oATPNA5I4pfpgfWk/X60AIeFJPQV9b/Cvw5Dpnwq06zkjj3ahA1zOVH3/NGRn3CFFP+7XzJ4R0GTxN4t0vRlJC3UwEjKwDLEAWcgnjIUMR7ivtWOJIo1jjVURQAFUYAA6ADsKCWfBqD5BS1e1mxOma7qVgwANrdywkDsVYr/SqIoKD6UUUUAHb2qSMcEmo6mQfLjueKAPXf2f9NefxteX7RborPTyu4/wySMu38SqvX0nXjP7POnJH4f1rUwTvub1bfHbbEgII/GVvyr2ahEvcWiiimIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAryT9oZC3w/sW7JqsTH6eXKP6163Xmfx3g874YXL8furqF+fdtv/ALNQCPlyTqaiP05qaTFQmkWwpvPbrS0hHrQAuOe7GlA9aQDIP8I/WlJCoT2FAHt/7PPhvz9R1LxLMuUgX7Hb5AILthnI7ghdoz3DmvoWuQ+HHh7/AIRjwDpWnSIUuTD59wrKFYSv8zA47rkLn0UV19Mhnxr8TNPOm/ErxFAWyWu2uM+0oEo/9Crkj7V6j8eNPW0+Jsk6n/j9sop2+ozH/KMV5f3pFCUYpeaCOmSBQMB+FTxD5l+ufy5qAY65qeI5bj0NJgj6x+DtkbL4WaKHUCSZZJ2I/i3SMVJ/4Dt/Ku+rnPAShfh54bA6f2XbH84lP9a6OqICiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuA+NXHwj1s+9v/6UR139cF8ZYXn+FGupGpZgkTkD0WZGJ/AAmgD5Nc8fhURNPY/KPpTD1PrSRYhoooGfpQAY5569hW94O0n+3fGuiaYbczxXF5H50Y7xAhpPwChj+FYQAAr1v9n7SBeeOLzU5Ig0enWhCMf4JZDtBH1USD8aAZ9M0UUUyDwP9ovTv9K0DUlRvmWa3kftxtZV/HL/AJV4Mw2kivqv436d9u+Gtxcgtv0+4iulC/xfN5Zz7bZGP4V8uXSAMcAgg5I9qRa2K2PyoxR1o98UALxngVNBy/6YqAYzU9uf3o/3gKBo+x/h1KJfhx4cbIONPhXj2UD+ldRXDfCCbz/hToLekTr/AN8yMP6V3NMzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsvxBph1rw5qel7gpvbSW3DEZ2l1Kg/hnNalFAHwWhJjU+2KQ/Suk8c6OdB8d65puxUSK7Z4lU5CxP8AOg/75ZfxrnD3pFjfwpaTFBoAcOtfSX7PWlLa+ENQ1Voysl9eFFfPDRxgBcD/AHmkr5tB6E9O9fXPwftja/CzQ42eNy0ckmY2DD5pXYDI7gHBHYgjtQKR3dFFFMkxvFOlvrfhXV9MjCmW7s5YY93QMykKfwODXxbK4ubJX/5bRKA2P4lPQ/UdPpivuuvibxRYLpXi/XLKJWjhtr+eONSOiBzj81xSZUTCzjrwaME9xQWU8EfSjjHAIoGAU8VLGdrAjsQai3cU9Oc5oBH1p8Fxt+E2ij0NwP8AyYkrv685+B8vm/CnS1zzHJOv0zKzf1r0amSwooooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfP37Qvh547zTPEcUZ8uRTZ3DDAAIJaMnuSQXGe20DuK8NYEE+lfbXijQ4PE3hnUdHuNuy6hKKzDIRuqt+DAH8K+KJY3jzHKrJIpKsrDBDA4II7GkykRUGkNKeaBgAGG0d+K9n+B/jw6bqC+GtSuD9lvJMWpY/6uY8bR/svx9Gxx8xNeLkVMryRsskTlHQhkZSQQRyCD2NAH3hRXP+DNd/4STwbpOrllaS5t1MxVdo80fLIAPQMGH4V0FMgO1fJ/xu02Ww+KN/MdoW9ghuIwOhXaIzkeu6NjX1h2r53/AGirBYdf0LUwRvubWW3ZTyMRsGH/AKNP5UDR4juVuCNp96Ycrxx+PFSOQeCvH500LgfKxx6dRSGKG7FSKevXHTNRjHQjbn8qkQFWA6qehoGj6Z/Z6laT4eXUbdIdTljX6bI2/mxr1mvD/wBnK9aTTvEVhk7IbiGcfWRWB/8ARYr3CmiHuLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAnavkb4q6I+h/EXWISreVeSfboSxHzCTLMRjoA4cfhX1z2rxX9obSVk0HSdaXPm210bd9o6pIpOSfYoAP940mNbnzs4waZ3qd19uaioKYmakiPJGaiPWnIdrUAfRf7PeufaPD+paHKxL2M4ni3MP8AVyA5CjrgMrEn/bFe018ofBfVDpfxQsE3KsV/FLayFh2I3KB7lkUfjX1fQiXuHavCf2kFHkeGmxnElwP0j/wr3btXhP7SLfuPDSestwfyEf8AjQwW54CeCabxxjg09vvcU3PSgoAQeDT0+UgdRmmCnKPmXjvQB71+zf8A63xT/wBun8pa96NeJ/s6WWzRNd1D/nveJBn/AK5pn/2pXthpol7hRRRQIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5b4h6G3iHwDrOmxK7zvbmSFUAJaRCHVRn1ZQPxrqaKAPg7dujB9RUbfWul8c6APDPjbV9JRQsMM5eBRnAicBkGT1wrAH3Brmj15pFjaM4/Cgn3pKANvw3ex6b4r0W/kJ8u1v4JnwcZVZAT+lfbtfBTEtbn2r71oRLE7V4T+0iP3Pho46SXHP4R17t2rxX9o22L+G9FuccR3rR5/wB5Cf8A2Whgtz51br0pvpTn+9xxTTQUKOtSJ94Z7c1GOtSA7Uc56LigD6j+A2n/AGT4Zw3Ocm/u5rg+2CI8f+Q69PrnvBOkHQvBGi6a8PkywWcYmT0lKgv/AOPFq6GmQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB89/tEaKY9U0bXI0ciaF7OVgPlUqdyZPqQz/9814gw5r6z+MujHWfhpqJSPfNYlb2LnGNh+Y/98F6+TXxnIOQaTKWxEeppKeetM7c0DJB/qXHJ4NfcPh++OqeHNL1Bj811aRTH6sgb+tfDqnCPxzg/wAq+1PAn/JPfDX/AGCrX/0UtCEzoTXkX7RCk+ALAjtqsRP/AH6lH9a9dNeZfHj7L/wrC4NywEouofs4P8T7uR/3xvP4UyVufK78mm0rcmgUiwAycVteGNMTWvFOkaXIrNFd30UUqr12FhuP4Lk1jL1FenfAjTRf/EuK4LFRYWktyABwxYCIA/hIT+FAM+p6KKKZAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFa6t4by2ltbiNZIJkaORGGQysMEH2IJFfEutaXJomt6hpMrF5LK5kt2faRuCsQGA9CBkexr7jr5e+POhtp3j8amqt5GqW4fc2NvmxgIwGPRQh57tSY0eVHk00n1p5Bz70xvQUFCjkFeeRX1r8GtbOt/DXT1di09gWsZcrtA2YKAev7tk59c18kqcZPtXtv7PmtG28R6pocrDbeW6XMWXwNyYBCr3JV8n2T2oE9j6LFeKftE3xj0fQ9PP3Z7mWUn3SPaP/AEaa9rFfP37SF0h1Hw1bqf3kSXErD/ZYxgf+gtTEtzwonmkpTnJFIOvFIoele/fs56W6Wuvas8a7ZZIraJu42qWYfQh0P4V4EoGOeK+tfg/ow0f4Z6XuiVJrwNeylTnd5hypPv5ewfhQJ7HfUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvJvj9oov/AkWpqqmTTbpZGY9RG/yMB/wIxn8K9ZrM1zS4tb0O/0qZisV5bvAzAAlQylcjPcZyPcUAfD8o2sRnNQmrE0MttLJb3CGOeJmjkRhgqQcEEeoIqDGTSLAD5fcnFdR4D1ZtI+JGg3wZVVLuOCRm6BH/dsf++WNcuTgjnpzSgsPmUkMPmBB5HpQI+9+1fNP7RCsPHOluc7G00KPqJJM/zFfQui6iusaHYaoilEvLaO4VT1UOobB+ma8P8A2kYIxd+Gp1GJHW5Rm9lMZA/NjTEjwrqeTQFPrQVPU8UoPQCkUSYbbsUEu3HHXnoPqa+49K0+PStIstOhOYrSBIEP+yqhR+gr5E+HOmNq3xD8P2ilfmvFnYMMgrF+8YfiFIr7JoQpBRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPkf4x6GNE+JOoBEVIL9VvogGJJL5Dk56EyK5x6YrgQMda+hP2jdKD6XoesDAaG4e1b5eWDruGT6Dy24/2jXz27HpsP50ikxg5bJ6Zp44zg5Jpm8r0U0gZsg4PFAXPrH4HamuofDCyhDMZLGaW2kLHPO4uAPYK6j8K4v9pUjHhcepuj/wCiq5/4FeML7SvEaeG2QS6dqLs46BoZQv389wQoUg+xHQg3P2i9SabxTo+lkDy7WzacEHnMjkEH8IlP40CPGT81OQfN7Dmm4qReVHFBR6/+z5pBvPGOo6q6o0en2gjUk8rJKeCP+ArID9a+lDXhn7Od7LJp+v2BjjEcM0M6uB8xMisCpOegEYwMcZPrXuZpol7hRRRQIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8n+Pmn3eoeA7UWltLOYdRjkkWNckKUkUEgc/eZR+NeAweCvEl2oaPRbpVPQyKI//QiK+mPildmPQ7ezU4a4nB+oXnH5kVxFsxjtgGc7guTz3rlqVnGfKjvoYaM6fPI8mX4eeJGdVktIYS3QPOh/kTWdrmgXPh2eK2u5rV55E8wxxMWZFPTdwME8kDrgZ6EZ9tE6WttJqNxtVFXKFmwv4nnC9yewBPNeEaxqL6jq1zeyymWSeQtvYYJHQHHOOO2Tjp2rSlOcnd7GdeFOmrR3JfDutS+H9ahv48soykqBsb0P3h/Ue4FWfFeuS+JPFupau8pk+0SnyiyhSIh8qDA4BChfx96zLCwmvtRtrcIwE8qx7tp4yQM/rmvX7zTtO1PUmS50m1mjZtqkIUYAcAZXB6Ad6KtZU2tNwoYd1Yt3tY8XwT0waeAR1wMV6ndeDPDLSNHHZ3EUucYiuTgf99A1DP4J0S2sLu6W0uZGXbDbrJIQjSyMETLDHAJ3H2GO4qViIydkmVLCTirtr8f8j0z4CaDJp/gy41WaIJLqk+9PUxINq54/vbyPYg969arM0MQpotrFbxrFbwqYoUXosakqoH0UCtOt1scT3FooopgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUxmCqWJAAGST2FAHlPxIvPtPiK3s1bKW0Y3D0ZuT+gWsREBUqOCQMZ5pl7c/2lr11eFCfNlLrn0J4H4DFV9Xv4dH0i71KXJSJMKucbnbgAfj+ma86/PNs9uMfZ00n0Rxnj7XmmZdDtHPyL+/YEbQM5IP5Dn0HHDGsXwV4K1Dxlra2GmxgRRYa5u5AfLhU5wT6k4ICjk4PIAJE3h3w5qfi/WorSBG8y5kPmzHoDgFif8AZRSCQPVVyCy5+qfDXhzTfCmiwaTpcOyGPl2PLyuRy7nuxwPoAAAAAB3RVlY8qpLmlc+c9S8CX3g74gaTZXk8d1ays00FyqFA5RSWDKScFTt6EjBHOcgdHbqy5mI+deRt4rtPizHC1/4elz/pEck+3/dKAN/6Ev5iuUgTZCSQckgH3FcOJfv2PRwd/ZX7shS3/elyd0h5LH1qPxHNLbeD4IYxvnuNXt1RR1ONz/zX9auwDdK38QwQD6Vct4I7vxX4OsZcAnUJbjBGc+VCzfzx+dKiryReIfuM9i0+1Njp1takhjFEqEjuQOT+Jq5SZpa9E8UKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRSAQUtZ2rR3s2k3kWnTJDfNA620rjIjlKkKxBByA2D0PToa+etT+D3xDX/Sbiax12YnLK1/KzN9TIUB/OgEfRkt7bQZ865hjx13uB/M1wfjr4i+G9L0yaz/t6NLmRSuy1j8+TBHTggLn1JrwLUYNe8HXflar4X060YrjFxYpMj4PVWYsCfoazNR8T3Oowm3C6bZW5IZorDT47fcQDgsyruPU8Eke1S1fRlrR3R3/hzXI9RaV7fStQEUe5nu55FSJFUZJZmOF4/h+Y+ma5rXvEMvjfVbXS9PiS1sIiz7pHyMgfNK5IAAVQSOmBknqa4lnVlKGd2UnO0scZ+leo/B/wTJ4jvpLqaPy9IiZftLkc3ODuEK5H3SQN57gYGMk1EaUYao3niJzVpM9h+Gvhi10fRY9TiiG+7iUWxZRuS2+8uT1y5JkbvllU52Cu9AJNM80E8g5riviZ4p/4Rrw/GytexNdSeW0tnsEsUY6sCwKrklV3EHG4dDgjQ53ds4nxZqZ1vxldzbWNnYp9lt2CttYjmRgen3jt46hQazxKjHBbCrj6mvMYrTUYrmWTSRdWtu0pMUxuo9+PeUFVb6jitnTpvFVy5D+KNGtY1Q4kvdStXLHGQuAWbJ9SMeprjnh5yk3dHpU8TCEFFo7+JXkeJYUZwW6KK3vA8S6r4/ubhGikttEszbZAzi4lYFtrDg7UjAPoWxXi83igakkVk19rFxPOnlsQ8drEjkjB2x53ge5HHNe4/BHQG0fwAs0qYlvrh5i3IJUYVeP+Akj65q6NFwd5MxxGIU42ij04UtN3UoNdJxDqKKBTEFFFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKSgUUgA0maKKQxCeDVC7JnUqAVU9x1rQqMxrk8d6TGjkLnwfoN5MZbvRbC5lP8U9sjt+ZBqL/hCfC6f8yzo5+tjEf/Za7ExrnpUbRqeopFXOXh8N6DaSB7bQNJgcdHjsYgR+IWr4D7w5diV4XngD0Aq3Ii7zxUTKM/hSA0oJVlQEkbuhrz74zaZYXvhBb65a+W6smY2gtMEs7DBDAg/Lgckcj9D2UTFTxU14Syw5J6n+VO4W1PjG20fVLshbXQ7y446JbuxP/fIrdsPhp4x1D5ofCdyo9bn/AEcf+RGWvqYr/tN0/vGk8sE8kn6mnzBY8J0L4M+IfMjlvrrS9KyDnYWuJkyOwB2H/vqvoPRLaKy0mCzgZ2jhUIjOfmYAAZOKpqi5HFX7BiFYDpmlfUHsX8UoPrSUCmQPFKKaKcKpCCiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Z) | a.n.a Jeggings - Plus size | Our a.n.a® jeggings gives you the look of super skinny jeans that you love to pair with your favorite tops. flat front back pockets 31" inseam cotton/Lyocell/polyester/spandex washable imported | A.N.A | 36.25 | 4.8 | images/1.jpg | pants | | 2 | debf3b021522 | ![](data:image/jpeg;base64,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) | Carter's® Bunny Slippers - Baby Girls | Little feet will look cuter than ever—and stay warm and cozy—in these precious bunny slippers from Carter's. 3D ears embroidered face 3D tail faux fur lining synthetic wipe clean with damp cloth imported | Carter's | 10.14 | 4.5 | images/2.jpg | shoes | Load data into Cleanlab Studio[​](#load-data-into-cleanlab-studio "Direct link to Load data into Cleanlab Studio") ------------------------------------------------------------------------------------------------------------------- The multimodal product catalog dataset is spread in 2 formats: tabular and image. We’ll load both into Cleanlab Studio. First use your API key to instantiate a `Studio` object. from cleanlab_studio import Studio# You can find your Cleanlab Studio API key by going to app.cleanlab.ai/upload,# clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# Initialize studio objectstudio = Studio(API_KEY) For loading the image data, we use the Metadata ZIP format and for loading the text/tabular data, we use the CSV format. Both formats are detailed in the [dataset guide](/studio/concepts/datasets/) . ### Load image data[​](#load-image-data "Direct link to Load image data") The Metadata ZIP format requires a CSV file named `metadata.csv` with at least these 2 columns: * image’s path - contains the relative file-path for each image. Filepaths should **not** include the parent folder (product\_catalog/ in this example) * label - contains the label for each image. The dataset used in this tutorial adheres to this format. Our “metadata.csv” file contains both “image” and “category” columns, with other columns being optional and not used for training AI models in the image modality The ZIP file we downloaded can be directly loaded into Cleanlab Studio. **Note**: To work with big image datasets, we recommend hosting them in cloud storage (rather than a local ZIP file), as demonstrated in this tutorial: [Finding Issues in Large-Scale Image Datasets](/studio/tutorials/cleanlab-studio-api/large_image_datasets/) . image_dataset_id = studio.upload_dataset( "product_catalog.zip", dataset_name="multimodal-image")print(f"Dataset ID: {image_dataset_id}") ### Load tabular data[​](#load-tabular-data "Direct link to Load tabular data") The tabular data contains categorical, numeric, and text features. Before loading the DataFrame, let’s remove the “image” column since its redundant for tabular and text modality. When loading the dataset into Cleanlab Studio, we explicitly set the type for the `sale_price` column to `float` since we’ll be running a [regression project](https://help.cleanlab.ai/studio/concepts/datasets/#regression) with `sale_price` as the label column later in this tutorial (the label column must have `float` type for a regression project, otherwise this step is optional). See [this guide](https://help.cleanlab.ai/studio/concepts/datasets/#schema-updates) for more information on schema overrides. # Remove "image" columndata_copy = data.copy()data_copy.drop(columns="image", inplace=True)tabular_dataset_id = studio.upload_dataset( data_copy, dataset_name="multimodal-tabular", schema_overrides=[{"name": "sale_price", "column_type": "float"}],)print(f"Dataset ID: {tabular_dataset_id}") Launch projects[​](#launch-projects "Direct link to Launch projects") ---------------------------------------------------------------------- A Cleanlab Studio project automatically trains ML models to provide AI-based analysis of your dataset. Here we launch multiple projects, each analyzing a particular aspect of the product information. In total, we run the following 3 projects: 1. Image project:        with the product images 2. Text project:           with the product descriptions 3. Tabular project:      with all the numeric/string product features In each project, we treat the product category as a label. Since each product belongs to exactly one category, this is a multi-class classifcation task. If you are instead analyzing product tags (where one or more tags can apply to the same product), specify that your task is multi-label classification instead. The image project is based on the previously uploaded image dataset (`image_dataset_id`). # Name of the column containing labelslabel_column = "category"image_project_id = studio.create_project( dataset_id=image_dataset_id, project_name="multimodal-image", modality="image", task_type="multi-class", model_type="regular", label_column=label_column,)print( f"Project successfully created and training has begun! project_id: {image_project_id}") For the rest of the projects, we use previously uploaded tabular dataset (`tabular_dataset_id`). For each project, we specify certain input text or tabular column(s) to use as predictive features. In each project, Cleanlab will train a separate AI model to predict the label based on these features. # Name of the column containing product descriptionproduct_description_column = "description"description_project_id = studio.create_project( dataset_id=tabular_dataset_id, project_name="multimodal-text-description", modality="text", task_type="multi-class", model_type="regular", label_column=label_column, text_column=product_description_column,)print( f"Project successfully created and training has begun! project_id: {description_project_id}") # Name of the columns for tabular data modellingtabular_columns = [ "title", "description", "sale_price", "average_product_rating", "brand",]tabular_project_id = studio.create_project( dataset_id=tabular_dataset_id, project_name="multimodal-tabular", modality="tabular", task_type="multi-class", model_type="regular", label_column=label_column, feature_columns=tabular_columns,)print( f"Project successfully created and training has begun! project_id: {tabular_project_id}") Once the projects have been launched successfully and the `project_id`’s are visible, feel free to close this notebook. It will take time for Cleanlab’s AI to train these models and analyze your data. Come back after training is complete (you will receive an email) and continue with the notebook to review your results. For this tutorial, every project will produce a _cleanset_ (cleaned dataset) within around 20 minutes. **You should only execute the above cells once!** Do not call `create_project` again. Before we proceed with the rest of the tutorial, we will wait for all the projects to complete. You can poll for project’s status to programmatically wait until the results (and _cleanset_) are ready for review: # Fetch cleanset_idimage_cleanset_id = studio.get_latest_cleanset_id(image_project_id)# Poll for project statusproject_status = studio.wait_until_cleanset_ready(image_cleanset_id)description_cleanset_id = studio.get_latest_cleanset_id(description_project_id)project_status = studio.wait_until_cleanset_ready(description_cleanset_id)tabular_cleanset_id = studio.get_latest_cleanset_id(tabular_project_id)project_status = studio.wait_until_cleanset_ready(tabular_cleanset_id) Get project results[​](#get-project-results "Direct link to Get project results") ---------------------------------------------------------------------------------- We can fetch the [Cleanlab columns](/studio/concepts/cleanlab_columns/) that contain the metadata for the [cleanset](/studio/concepts/cleanset/) using its `cleanset_id`. These columns have the same length as our original data and provide metadata about each individual data point, like what types of issues it exhibits and how severely. If at any point you want to re-run the remaining parts of this notebook (without creating another Project), simply call `studio.download_cleanlab_columns(cleanset_id)` with the `cleanset_id` printed from the previous cells. # Download cleanlab columns from image projectimage_cleanlab_columns = studio.download_cleanlab_columns(image_cleanset_id)# Download cleanlab columns from description text projectdescription_cleanlab_columns = studio.download_cleanlab_columns(description_cleanset_id)# Download cleanlab columns from tabular projecttabular_cleanlab_columns = studio.download_cleanlab_columns(tabular_cleanset_id) ### Label issues detected in tabular project[​](#label-issues-detected-in-tabular-project "Direct link to Label issues detected in tabular project") Each Cleanlab project auto-detects many different types of issues in the corresponding dataset. We demonstrate how to programmatically review these issues, and which data points exhibit them. Let’s start with _label issues_. First, we merge the Cleanlab columns with the original DataFrame to view them jointly. # Combine original DataFrame with Cleanlab columnstabular_cleanlab_df = data.merge( tabular_cleanlab_columns, left_index=True, right_index=True)# Set "given_label" column to the original labeltabular_cleanlab_df.rename(columns={"category": "given_label"}, inplace=True) Recall that we specified the product category as the _label_ in the project. To see which data points Cleanlab has estimated to be mislabeled, we filter by `is_label_issue`. For our tutorial dataset, these _label issues_ correspond to products that are likely miscategorized. We sort the label issues by `label_issue_score` to see which of these data points are _most likely_ mislabeled. tabular_label_issue = tabular_cleanlab_df.query( "is_label_issue", engine="python").sort_values("label_issue_score", ascending=False)# Select columns to display resultslabel_issue_columns = [ "given_label", "suggested_label", "label_issue_score", "is_label_issue",]columns_to_display = tabular_columns + label_issue_columnsdisplay(tabular_label_issue.head()[columns_to_display]) | | title | description | sale\_price | average\_product\_rating | brand | given\_label | suggested\_label | label\_issue\_score | is\_label\_issue | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 718 | Nike® 3-pk. Dri-FIT Low Cut Socks | The Nike Dri-FIT® low-cut socks give you the moisture-wicking performance and cushioned support you need.   dri-FIT® moisture technology wicking keeps feet cool and dry maximum breathability cushioned footbed for comfort arch compression for perfected fit polyester/nylon/cotton/spandex washable imported sock size 10-13 fits shoe sizes 8-12 | 21.14 | 3.1 | Nike | accessories | underwear & socks | 0.994825 | True | | 357 | Liz Claiborne® Emma Cropped Ankle Pants - Plus | Our cropped ankle pants have a straight leg and sleek look that you'll love wearing to work or on nights out. ●    hook-and-bar with zip closure●    straight leg●    back pockets●    23" inseam●    cotton/rayon/spandex●    washable●    imported | 31.42 | 4.9 | LIZ CLAIBORNE | shorts | pants | 0.985283 | True | | 736 | Speedo® Tropical Striped Swim Trunks | The VaporPLUS quick-drying fabric of our swim trunks will keep you comfortable no matter how many times you go in the water.  UPF 50+ protection relaxed fit mesh liner Veclro® fly with string closure inside key pocket side seam pockets 10" inseam polyester machine wash, hang dry imported | 39.87 | 5.0 | Speedo | shorts | swimwear | 0.977736 | True | | 509 | Speedo® Straight Away Swim Trunks | Featuring the latest quick-drying technology, our Speedo swim trunks will be your go-to for your days by the beach or pool. Block the Burn® UPF 50+ protection VaporPLUS™ quick-drying fabric relaxed fit Velcro® fly with drawstring side seam pockets interior key pocket mesh liner 10" inseam polyester machine wash, hang dry imported | 39.87 | 5.0 | Speedo | shorts | swimwear | 0.967584 | True | | 341 | Stylus™ Long-Sleeve Textured Cable Sweater | Our classic crewneck cable-knit sweater gets a casual update with a flatteringly comfortable fit. cotton/acrylic side slits high-low hem machine wash, dry flat imported misses: approx. 24½" - 29½" length petite: approx. 23" - 25" length | 15.70 | 4.4 | STYLUS | tops | coats & jackets | 0.956729 | True | The above analysis implies that the category assigned to these products is wrong. Such errors can hamper discoverability, worsen customer experience, and degrade ML/Analytics efforts. ### Label issues and outliers detected in “description” text project[​](#label-issues-and-outliers-detected-in-description-text-project "Direct link to Label issues and outliers detected in “description” text project") We’ll repeat the steps of merging Cleanlab columns with the original DataFrame and filter the merged DataFrame for data points flagged with label issues. # Combine description DataFrame with Cleanlab columnsdescription_cleanlab_df = data.merge( description_cleanlab_columns, left_index=True, right_index=True)description_cleanlab_df.rename(columns={"category": "given_label"}, inplace=True)# Filter label issuesdescription_label_issue = description_cleanlab_df.query( "is_label_issue", engine="python").sort_values("label_issue_score", ascending=False)columns_to_display = [product_description_column] + label_issue_columnsdisplay(description_label_issue.head()[columns_to_display]) | | description | given\_label | suggested\_label | label\_issue\_score | is\_label\_issue | | --- | --- | --- | --- | --- | --- | | 738 | Crochet edges give our sweater tank top a look of class that's also ready for the weekend. v-neck approx. 24" - 27½" length cotton/polyester/Lurex® metallic washable imported | coats & jackets | tops | 0.755175 | True | | 983 | Gotham City will be cleaned up in no time when you've got our Batman flip flops.  nubuck/synthetic/nylon upper spot clean synthetic sole | swimwear | shoes | 0.733110 | True | | 357 | Our cropped ankle pants have a straight leg and sleek look that you'll love wearing to work or on nights out. ●    hook-and-bar with zip closure●    straight leg●    back pockets●    23" inseam●    cotton/rayon/spandex●    washable●    imported | shorts | pants | 0.720278 | True | | 728 | With just the right touch of trendy ombre coloring, our Alfred Dunner layered sweater brings some modern excitement to your wardrobe and then it tops it off with a pretty necklace for a pulled together look.   crewneck with necklace 3/4 sleeves approx. 22-24" length polyester/acrylic cami: polyester hand wash, dry flat imported | coats & jackets | tops | 0.696369 | True | | 718 | The Nike Dri-FIT® low-cut socks give you the moisture-wicking performance and cushioned support you need.   dri-FIT® moisture technology wicking keeps feet cool and dry maximum breathability cushioned footbed for comfort arch compression for perfected fit polyester/nylon/cotton/spandex washable imported sock size 10-13 fits shoe sizes 8-12 | accessories | underwear & socks | 0.667388 | True | Our ‘description’ text projects suggests that for these flagged products: either the description is misleading or the category assigned is incorrect. Note that Cleanlab trains different ML models for tabular projects vs. text projects. Beyond identifying mismatched text descriptions, this text project may help you more accurately identify miscategorized products, depending on the relative accuracy of the tabular vs. text ML models for your dataset. If your dataset has multiple text fields per data point, you can either analyze each in a separate project, or concatenate them all together in a single text project. **Outliers:** Beyond mis-labeled (mis-categorized) data, Cleanlab Studio also auto-detects _outliers_ (anomalies) lurking in your dataset. These data points are very different from the rest of the data. Outliers in a product catalog may correspond to products which are strange, or whose information got corrupted. Let’s review the outliers detected in these product descriptions. Cleanlab Studio’s AI understands the semantics of text and can identify text which meaningfully stands out: description_outlier_issue = description_cleanlab_df.query( "is_outlier", engine="python").sort_values("outlier_score", ascending=False)outlier_columns = [ "given_label", "outlier_score", "is_empty_text", "text_num_characters", "is_outlier",]columns_to_display = [product_description_column] + outlier_columnsdisplay(description_outlier_issue.head(5)[columns_to_display]) | | description | given\_label | outlier\_score | is\_empty\_text | text\_num\_characters | is\_outlier | | --- | --- | --- | --- | --- | --- | --- | | 541 | m | accessories | 0.800763 | False | 1 | True | | 959 | | underwear & socks | 0.706694 | False | 30 | True | | 5 | 404Error

InvalidUsername

InvalidPIN

| shorts | 0.679714 | False | 60 | True | | 138 | /tmp/description/3116287515.txt: missing | kitchen & dining | 0.117357 | False | 40 | True | | 16 | useless garbage absolute worst pathetic brand | pajamas | 0.097774 | False | 45 | True | ### Other data issues detected in “description” text project[​](#other-data-issues-detected-in-description-text-project "Direct link to Other data issues detected in “description” text project") Cleanlab Studio can also detect other problems in text data, such as the occurrence of: toxic language, personally identifiable information (PII), or nonsensical language (e.g. HTML/XML tags and other random strings contaminating text descriptions), in the text columns of the dataset. The following Cleanlab columns are specific to the text fields in the dataset (see [here](/studio/concepts/cleanlab_columns/#columns-specific-to-text-data) for details), and are useful for detecting low-quality or unsafe text (content moderation). Similar to the above, the `is_` column contains boolean values indicating if a text field has been identified to exhibit a particular issue, and the `_score` column contains numeric scores between 0 and 1 indicating the severity of this particular issue (1 indicates the most severe instance of the issue). **Personally Identifiable Information (PII)** is information that could be used to identify an individual or is otherwise sensitive, which should not be present in product descriptions. Cleanlab’s PII issue check also returns two extra columns, `PII_items` and `PII_types`, which list the specific PII detected in the text and its type. Here’s the PII detected in these product descriptions: description_pii_issue = description_cleanlab_df.query( "is_PII", engine="python").sort_values("PII_score", ascending=False)pii_columns = ["PII_items", "PII_types", "PII_score", "is_PII"]columns_to_display = [product_description_column] + pii_columnsdisplay(description_pii_issue.head(5)[columns_to_display]) | | description | PII\_items | PII\_types | PII\_score | is\_PII | | --- | --- | --- | --- | --- | --- | | 142 | Pillow with hearts that can be placed anywhere. Call us on 202 856 1167 for free trial." spot clean imported | \["202 856 1167"\] | \["phone number"\] | 0.5 | True | | 366 | Pay directly for a 10% discount. Email for details at judmunz@yahoo.com. Work out in our shorts, featuring an elastic waist and Champion Vapor moisture-wicking fabric to keep you cool and dry.  elastic waist with drawstring 2 pockets flat front Champion Vapor moisture-wicking fabric 11" inseam polyester washable imported | \["judmunz@yahoo.com"\] | \["email"\] | 0.5 | True | | 600 | Black to brown with this useful reversible belt, perfect for formal and casual wear. Made with 100% leather materials. We can manufacture for your preferred colours on large orders. Call us on 212-978-1213 for details. | \["212-978-1213"\] | \["phone number"\] | 0.5 | True | | 920 | Star war fans, here we come with this new sketchers for your toddlers. They would be on sky nine. We accept Paypal on shoeseller@myshop.com | \["shoeseller@myshop.com"\] | \["email"\] | 0.5 | True | | 1070 | These shorts are very comfortable, lightweight and beach ready. Bulk orders accepted. Pay directly for a 10% discount. Contact @ hulphasi@yahoo.com. | \["hulphasi@yahoo.com"\] | \["email"\] | 0.5 | True | **Non-English** text includes text written in a foreign language or containing nonsensical characters (such as HTML/XML tags, identifiers, hashes, random characters). It is often more effective to provide language options for the ecommerce platform and allow users to select their preferred language instead of having multi-language product descriptions in the catalog, which negatively affects customer experience. Nonsensical product descriptions are particular damaging and should be remedied immediately. For text is detected to be non-English, Cleanlab Studio will predict its language in the `predicted_language` column. If an alternative langauge cannot be predicted (this could either represent that the text contains more than one langauge, or that it is just a nonsensical/unreadable string such as HTML/XML/malformatted), the `predicted_language` will contain a null value. Here’s the Non-English text detected in these product descriptions: description_non_en_issue = description_cleanlab_df.query( "is_non_english", engine="python").sort_values("non_english_score", ascending=False)non_en_columns = ["predicted_language", "non_english_score", "is_non_english"]columns_to_display = [product_description_column] + non_en_columnsdisplay(description_non_en_issue.head(5)[columns_to_display]) | | description | predicted\_language | non\_english\_score | is\_non\_english | | --- | --- | --- | --- | --- | | 959 | | | 0.999843 | True | | 541 | m | | 0.997578 | True | | 5 | 404Error

InvalidUsername

InvalidPIN

| | 0.987424 | True | | 924 | La teiera in ghisa si ispira alle antiche teiere cinesi in ghisa molto pregiate ancora in uso oggi. Cestino per la preparazione del tè in ottone con rivestimento in porcellana blu destinato alla preparazione e al servizio del tè, non per piano cottura | Italian | 0.849882 | True | | 1032 | "Calcetines de la tripulación. En el trabajo o en el juego estos calcetines ricos en algodón cuentan con un toque de elasticidad para brindar comodidad durante todo el día. Paquete de 3 pares de mezcla de algodón suave para mayor transpirabilidad mejor ajuste con puntera sin costuras de spandex." | Spanish | 0.841750 | True | **Informal** text contains casual language, slang, or poor writing such as improper grammar or spelling. Maintaining a professional tone in product descriptions is generally recommended for product catalog, and is important for customer trust. Here’s the informal text detected in these product descriptions: description_informal_issue = description_cleanlab_df.query( "is_informal", engine="python").sort_values("informal_score", ascending=False)informal_columns = [ "informal_score", "spelling_issue_score", "grammar_issue_score", "slang_issue_score", "is_informal",]columns_to_display = [product_description_column] + informal_columnsdisplay(description_informal_issue.head(5)[columns_to_display]) | | description | informal\_score | spelling\_issue\_score | grammar\_issue\_score | slang\_issue\_score | is\_informal | | --- | --- | --- | --- | --- | --- | --- | | 351 | You'll love the year-round cottony comfy (feels like its hugging you) of our short-sleeve crewneck tee. cotton washable imported | 0.667319 | 0.095238 | 0.891363 | 0.729315 | True | | 541 | m | 0.647167 | 1.000000 | 0.277822 | 0.840096 | True | | 365 | Go beyond the basics with our flattering ribbed tank top. For ya'll gals out there looking to spice ur wardrobe. roundneck approx. 27¾ - 29½" length fun coral: cotton/polyester/spandex washable imported | 0.638390 | 0.125000 | 0.707476 | 0.825999 | True | | 651 | Buy the shine dress 4 ur bedding. Colorful, kid friendly, wash nicely, proofing stains for food. Made in Africa, shipped from 128758 | 0.628461 | 0.000000 | 0.897662 | 0.673491 | True | | 1003 | this will make you feel buy more things to fill your pocket since it has loads of pockets. keep all your friends phone in your pocket hah. | 0.622662 | 0.000000 | 0.725848 | 0.830807 | True | ### Label issues, outliers, and ambiguous examples detected in image project[​](#label-issues-outliers-and-ambiguous-examples-detected-in-image-project "Direct link to Label issues, outliers, and ambiguous examples detected in image project") Cleanlab also trains different ML models for image projects. Depending on their accuracy, they could be more/less effective for detecting label issues than the text/tabular projects (or may simply detect a different subset of the label issues lurking in a dataset). The flagged label issues can also be used to identify a product whose image is misleading (does not reflect its category/description). # Column containing image's pathimage_path_column = ["image"]image_cleanlab_df = data.merge( image_cleanlab_columns, left_on="image", right_on="image")image_cleanlab_df.rename(columns={"category": "given_label"}, inplace=True)image_label_issue = image_cleanlab_df.query( "is_label_issue", engine="python").sort_values("label_issue_score", ascending=False)columns_to_display = image_path_column + label_issue_columnsdisplay_image(image_label_issue.head(5)[columns_to_display]) | | image | rendered\_image | given\_label | suggested\_label | label\_issue\_score | is\_label\_issue | | --- | --- | --- | --- | --- | --- | --- | | 718 | images/718.jpg | ![](data:image/jpeg;base64,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) | accessories | underwear & socks | 0.847718 | True | | 1162 | images/1162.jpg | ![](data:image/jpeg;base64,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) | pajamas | underwear & socks | 0.811411 | True | | 1103 | images/1103.jpg | ![](data:image/jpeg;base64,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) | kitchen & dining | bed & bath | 0.804226 | True | | 907 | images/907.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADhAOEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqtc3NtZwPPcTxW8KfekkYIq/UnigCzRXE6h8VfCFg7J/av2p/wC7bRtIP++gNv61zF78etHhH+iaRdyn/pvNHF/ItQB67RXg8/7Qdz/yy0S2T/fumf8Akgqgf2hNZ34XStP/APIh/wDZqAPoeivn2L9oXUP+Wuj2L/7sjp/jWrZ/tBQv/wAfWiKn+1FeA/oyD+dAHttFebaf8avC9z/x9JfWn+1LCHH/AI4Sf0rrdK8WaBrfyabq9tPJ/wA8xJiT/vhvm/SgDcooooAKKKKACiiigAooooAKKKKACis6+1nTdNXde38Fv/sySAH8B1NcjqvxY8L6bDK6TT3flLuby1AA5x1cjJ56DJ9utAHf0V4Fqn7Q1z/zCtEg2bv9ZPI78e4Cpj8zWbB8cvEt5O37m2ih/hZYeF9cgsSfTrQB9H0V4v4W+L2rX+qwWl7pUdxDK23zLZSjr74Jw304r2ZTu+agB1FFFABWfqOo2ek2Ml5f3KW8MS7mkk6D29z7Dk1oV85fFfxZc6jrtzao7fY7KYwxR9mkXKuxHc5DD6AepyAbnif4zzvJLFoarZW3K/a5498r+8cfQfVs/hXkus+J73Vbtri6uZ7h/wCGS7kMhX6L91R7AVhyyu8m933vULPQBK9zNN9+Zn/4Fx+VQ76jJpM0APL03fTCaWgB2aXfTKTNAE6yOn3HZP8Adq5Bqcyff2yp/wBNf8eorMBp4NAHqvhT4n6zprrFFqrOn/PtqTeZE3skp+ZD6A4Wva/Cnj7TPEcgsWjey1VPv2k7cnjJKN/EO/r3xjmvkRJK2tK1Wa2ngTzmTymHlSKxDxEHI2nqOfyoA+06K8/8OfEjTLzQ7R9XuYrfUuY5YeAXK/xqD1BBB46EkVjeP/iFe2em2zaMl5bo021p5bd49/ysdql0wemeCTxQB6zUMkqRJuldUT+8zAD9a+Wbzxx4mvN32jW7xE/2Zig/IHFYVxf3Nz+9uLme4/2mYn9TTsB9U3njPw1p4b7Rrdku37yrMHP5Lk1zGo/GXwvbbktzdXb9vKj2D82IP6V8+6fZ6trEm3StHub35tu6ONpAv1KAgfia6zT/AIU+Pr87ntLbT0/vXMyjj1wm9vzApAdbqXxw1CbculaPFF/tTsZD+mAP1rktS8e+L9V3faNSniT+7EwjH5LjP411mn/Aa9f59X8T/wC9HbW5P5M7Y/8AHa24PgN4fT/X6rq83/bSNB+kef1oA8UeSZ9zy3K/7Tbsmqkk8P8AHcs/+yqk19DQ/BPwSn+ts7y4/wCut9J/7KwrVtfhb4Hs/ueG7N/+u6mX/wBDJoA+XIr2Hz1it4P3rfKPugn6Ac112heA/EWvSK66PfeS3/LSdfIT67n5I/3VNfS1hpOm6VHs0+wtbRP7sEKxj/x0VoUAeY+E/hTDpU8V7q0yXE0XzR20efKU/wC0x5f8gPUGvTqKKACiiigBK+bPi34YudO1y7uIoWe2upjdRMq/eLcun+8CScehFfSdYniLT7bU9N+y3dstxC7DcrfQ8gjkH3FA0rnxWz0wmvZPFnwem8xrrRpvOT73lthX/EcBvqMH/ZNeVX+hanps7RXVnOjr975T+oxkfiKAcWjOJpaVU31Mtu70CIKKsm2phioAr06pxb0ptnoAr0gNSNE6UiRPNJsiRnf+6qkn9KAAGtjw/ZpeX0nmzeUkUYk+6TuO5Rt9sjd+VaGgfD/WdekXyrZoof4pGxj/AL66fzPtXrukeAbbw3prSqn2i/3Kse1eI3ZgoKZ5Z+eGOMcYAouWoNm/4O0fxXpOjolrDYxRXDfaHkuZG8xSwAChQhyNqr1I5JpvjTwL4p8Q2Kt/bdrdzIwX7M0JgixuyWB3Ph+2cdMjvXoenIYdNtkl3b0hVW3dcgDr71doIPFtK+B0zjfq+rx2+7G6Owj3P9PNkz+iCu40b4ZeE9E2tFpEVxMnSa7zO+fUbuF/4CBXY0UARJEkcaoqqqL0VeAKloooAKKKKACiiigAooooAKKKKACiiigBKo6r/wAen/AhV6qepDdZN/s4P6igcd0ZDD93WNqFhbXkflXEMUqf3ZVDj9elbJ+5VKUUjsOE1LwHod5IzvbNE/8Aeibn/wAfBrnbn4XWz/8AHreSp/syw5/UN/SvUHFRFKm4nTi+h5FN8LLn/llfwf8AAtw/klVz8MNQ/wCfy2/76b/4mvYGSoTHRcXsInlEfwy1D/n5s/8Avp//AIitGD4XO/8Ax8X8Sf8AXKMv/PZXpUaVOqUXH7GJwlr8LNGTa9xNPcf8BCD8jvrqNM8IaHYbfs+mwf70i+Z/6FwPwArZjFWEouNQiuhLHHsqa2jSa6hRk3J5it+KkMP1AqNKt6aN99H/ALOW/Q1Qp7M6OiiimcYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRyIJEZW+4y7fzqSigDmpQ8LtE330/8AHh2NVJa6HULBLyP+66/db+h9q5W6aa2n8q4TY/8AD6N7g96hnVTnciaozQ0iU3elI2EeoqeXqImgokjqZahQ1MHoAnSpkqqslONwiUEl4PsrW0aD921w38Xyp9PX8/5VR0/TJrnbJdI0UPaNuC/19B+tdIAEG2rSOWpPoh9FFFMxCiiigAooooAKKKKACiiigAoorEvfFWgWDMlzrVij/wDPPzlLf98g5oA26Kw9P8VaBqs629lrFtLM33YvMw7fQHk/hW5QAUUUUAFFFFABVe4tobmDyp4UlT+6y5//AFGrFFAHK3vhFH+azuWi/wCmcnzj8D1H61jz6DrMP/Lssqf3o2B/Q4P6V6DRSsaKrJHl72+oJ96wuU/7Zt/PFRF5k+/bS/8Afs/4V6pijbSsafWPI8uR7l/uW07/AO7Gf8Ktw2Wq3P8AqrCf/gUewfm2K9G4o5pWB4h9ji7Xwzqcx3XDxW6f3V+d/wDD9a37DQrOxdZVRnm/56SckfQdBWtRVWMXUbFooopkhRRRQAUUUUAFFFFABRWbqutaZosH2jUryG3T+HzG5P8Aujqfwry7xF8a4Y90Wh22/wD6bz/zVP8AE/hQB6ve31rptq11e3MdvCv3mkYAf/XNedeIfjDZWaSRaNC106/8t5Fwn/AUJBb6Er9a8Z1fxJqet3bXF7cyyv8A3pW+77AdAPpWaI5pvndPk/vStgfmeKANfWvGXizxVJLFdXnlWz5/dtMI41HpgEIf+BZPvWJHaXNnPEkWpfaH27W8hm2Yz90lgNw9cZHvWrpWiXOsT+VYW1zqD/dZbGEui/70jYVfrXo2g/B7Vrza+rzQaVbcbooGEtw3qC/3FPuN1AHF+ENC/tXXYLd0nuJn+ZYIGKbcfxM38Cg4yfyycCvp6CN4oIondpXRQrO3ViBgk/WsvQvDWk+G7T7Lpdr5KN9+Tq8h9WY8n+Q7YrcoAKKKKACiiigAoqleaja2Ee+6mVP7q92+g61iX/ij7Gm90gskb7sl9JsLfSMfMaAOopK8s1H4j2SbkS8vrt/7ttGIE/76OW/Ss6DxZNqUi+Vo8D7/AOK5mec/zAoA9bfULOH/AF15An+9IB/Wof7Z03/n9g/4DIDXG3UtzDo32iJLa3udv3YoVP8A6FmuH1LUNWuYGSW5l/7ZKI//AEECgD2r+2tP/wCflf8Avk/4Uv8AbGn/APP5En+8wH86+cEfUIZG/wBJudn/AF2f/GuosPE+uQ+XEl5L2X5lU/qRQB7bFeW03+quYpf92QH+VWa86ub3Vk0JbrfbXE392WEH9BiuYX4h3tnJsuNHgT+99mmeD9MkUAe2UV5np3xJsrnav2me3f8A553cIkT/AL7T5vzFdZaeI4bm38+WJXtv+e9tIJY/+BY5X6EUAdBRVeC5huY/NglV0/2W/n6Vj+K/EKeGPD8+pPbNcOmFSNWxuJPUnsB1JxQB0FQT3ENtA0txNHFEv3mkYAD6k14JrXxi8RXPyWqR2SN/zzjy+P8Aeb+YArgr7WNW1ifzbq8nuH/vSyF9v0z0oA+hNb+KvhfR9yRXLXs3922XI/Fjxj6ZrzjXvjNrN/ui0uGPT4f7y/vJP++iMD8APrXBafpFzqV8trawz3Fy/wDywgjMj49Tj7o9zgV6h4e+DmpzbZdVuY9NT/nnBiW4/Fz8iH6B/rQB5ldvqF/I17f3LfvfvT3M2N34ty34Zrb0j4fa5re17XSrl4X/AOW8/wDo0f1Bf52HuqV75o3gjQNBkWey09XvP+fu5Yyzf99tkj6DArpaAPF9J+B8/wAsur6vFF/ei0+HL/hNJz/46K7TTPhj4U01/N/spLub73m3zGY5HQ4b5R+AFdpRQBDHCkMapEioi/dVVAA+gFTUUUAFFFFABRRRQAVy/iDxH9gd7WB1V1XdLK3SIYyfxxz7V1FeMeLPOTz/ALRu+S6bf/tcttz7Z2n64oAyLrxhqE08ktkjRfMN1zIpMuD3GfuZ/wC+vcdKp2CXOveIIIpXZ5rhtzNKxPHqSaq2z/ab5bVH2Q3DRrL+BP8A9ergL2d9c3H+q+ZlX1UdhQBHc2VtDfSxSzLLskMa7f4iDXUaW8NtGvlItcXbyI8/m/7X3u7V0+my79qUAdDqV46WPyVxV9ezfN89dTrbvDpO9K89urt33fPQArXM3mffarcF3N5i1iGR6tW87+YtAHew3syWC/PVO5uba5jb7VCrp/F8tSrbTf2SsqJ/DWBNc/wP/wB9UAXtM0dLz7T9lmifyoWkVeMtiq2k6rc2e6WCaWKbbtVl4KmqljcfY75ZUdon5+jA9R9KvWsX7+V3/wCPZ423f7JAyD+YoA0NL8Z3v25Yr1Ps9y7eX58H7sMxxgMo4BOe3B9AeT2NrHpWq2skWpQz6hNLlXhkYeWwPTnqw9iWOR06Vxt3p9tquss1rbQeT9njuJ4Gb5GydjgZ/wBwnGfWu38DRXL3ayy7v3VrtkZuu5ivB9/lP5UAea+Kvh7qemx2lvpelXd3YSzFk8uEyNAScbOBkKRtyzADK54ya3fDXwdupttx4hm+zw/8+VswLt7PIOF+i5/3hXtdFAGZpOjaZotj9l0uygtIe6xLjJ9WPUn3PNadFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcr4r0+wktJbq7T5GxHIVXPB4BI79vf09+qrn/ABmu7w3MP+mif+hCgDya+8JXuiOuoWH+lQpN5i7W5wBwOffscH2rjb3Ubm5vm+1I0W9izRsuD+IPNfQGk7HsYv7+3b6H86zNX0ayvP8Aj6s4LjZ/ejAP4EcD8qAPFLGSaaf/AGP4a7fRIpvv7GrQ/wCEY0mGT/R0nt/93EifqQf0rQ0/S4YZ1d7zzU/u8x/+hAD9aAH63ZTTaFs2bP8AabivOrjSHTc/nLXt1xfaZc2P2WWH5Nu3b5iH+TGuJ8QaRZfZJUtU8p3X5GlkA5/E0AeafZkeTYky1ettOfzItj/xCp18P3KSf8fMH/f5P8a7+10/RvLj3ws7oo+633j+dAEmx4dGid7aWL5fvbSd1cNrMaeezxIyb/vfLivWJdQsptN+yxW2z5f+eyD+TZ/SuVk0ZHk+e5Z0/wCee0ufzYAfrQB5ZLO6SfZ5f+At/dNaOhXmrXMc9lb20txDcKY9yrwpP+10r0CPw5pPmb3s/tD/APTfp/3zz/OuitYEtoNiIsSbdu2JdnHpnqR7EmgDltL0T+ytst7NsuZY/L8heT8oJPb5e/XHXoa9U0yyhsLRYol+98zN/eJrze9+S+j/AOBf+gmvU4xtRV9FFAElFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWN4oTf4fuR/tR/+hrWzWdrMLXOjXaIm9/LLKv8AeK8gfmKAMHSTsgVKkvTVbS332iun3HWpLw0AZTipbeOomNWLcUAWGiR464D4j2yJoyyoio/mf3R3Br0BvuVwnxKP/FPr/wBdh/I0AeKabI/9pQfO3+sH8R9a+g9Egh+V0Rfuj+EV8+aVG76lB/10H86+idEH7uP/AK5j+VAG4Y08uq7JVhjVZjQA0Cp2f93UCmnyn93QBg3h36lAn+y3/oJr1uvJ44/tPie0t0++7foTgn8K9YoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDhLzfoWqtbyp/odwxkgbsvcp9R/LHoalmnSaPeldPqWm22q2LWt0m6FvwKkdGB7EV5xqtjrPhV2eVJLvTf+fmJclB/00Xt/vdPp0oAvt/rKsQGsCDWba8j3xTRP/utVyHUE/ywoA3m+5XA/Ec/8SaNP+mn9DXTnVUSP/7KuH8dX/2yx2Jt+Rt38x/WgDzTR4/9Og/66CvoDRv9XH/uj+VeCaNBNDfRO+37wr3DTL1PIXY60AdC9V3qs2oP/s1FJf0AXk/1lRX17DbQN93f/nrWFd+IESRbdHaW5dtscECl5GPoFXmt3RvB9zqrrda9D9ntvvCy3AtL6eYR0X/ZHXv3BALHgTS3uJ5NfuPuSrttd38Snq/49B7V3tRJGkcaqi7VXoq1LQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQByeseANA1iRpzataXLf8trRvLOfUj7pPuRmuWuvhjrMP8AyDdbilTstzGUP/fQ35/IV6rRQB4hdeDfGUP/AC7faE/vQXCY/Ug/pWNc+E/EzyN5uiXjv/u7/wBRX0RRQB8zr4W19Lv5fDep/wC99nOK3rXwr4sfa9vok6f70iRn/wAeYYr3qigDyG38C+L7j/WzQW6f9NbgufyUH+dbNp8L0fa+q6xc3H/TOBfLH0JJJP4Yr0WigDI0nw9pOhR7NNs4oeNrSdXb6seT+da9FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==) | tops | kitchen & dining | 0.802845 | True | | 359 | images/359.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAF8AXwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAqle6hZ6ZAZ768gtYhn555Ai8DJ5JA6AmqmtazHo9t5hhlurmQkQWkIy8zDnA7ADqWOAB1Nee6rZ3Pj/QIr3xxDJ4Y0S1Il+ziZfMmkycFmK5VQvAUAFmbP8K5V0B6bcXqQqMMCTyMc5Htiqy3l2sbM1u5ycrkZbHH8Kjj8SK8m1P4kNBpC2vhDRhHpNmq26ahfBioVflUIjHcwGAMsfqBXG6nc+IdXeN9X1W+uDPyIjM0aqDkjKLhVyASFPJHOOmU5opRZ9Fve3MILSW0pVSASsYI+uAxOB61ZtbxbtAw43LlT0yPoa+YIjN4ff7Zo97PbXsWHSaKZtrEZJDKSQynAHI5ya+hdLvYbjQrTW7jbbJc2kd5cu74WMbQzHJPyqBn2xTjK4mrHSM4U46mkLseinH0rz8+OodYmEGj3EzecA0MdjAJZ2VgSruzAxwgjDbWDNtIJCnKjm49D+L0cVzeyeJykscZeGAW0Mglb+6QB8uR3CnnsOtCkm7BY9iLuOqZ/CkFwM4ZSPcVwnw1+ILeM9FuHvbdYdUsmVbhI1IWRWyFdc9ASrAjJwVPqK6i8vI4raW6u54re1hXdJJKwVEX1ZjTuI0Hu4l+6Wc/7Iz+vSs+bXbeOTyw4aQP5ZWNGkIbIGCFHHUfnXmU3xLe+1S9XwnatfBF3SajqbtFZ2qEnkKOWBOcZwxxgA4NYq65rGumeGDxBq18LZVdotI2WEKAsFVV2hpHBYgA/ngVLkgem57KuqzvIyC0vMqrMT9mIU7QDgEnknOB60h1wRbvOjmiCjLNLbOqjjP3un/1zivFDYavM6l9B1ZyxXa8viCUscxmQchsfdBb26deKb/bN9o8sBfWfEWjSTwiWDdqC38IUkgExvnuCMZByCDjFHOhcyPdn1QtYNc2ttJeEruiSCRP3vsrMyr+ZFc6fH729wseoeEvE1rGc7pxYieNAOpYxMxA/A1583xE1DSLyxh8VWqahYOrPZ6tpTNEXUEAkxZCkjhWXggHjIIJ9MSTSvFWix3FndtPYz/NFcWc7xOreoZSGVh3B57EU73Kt1NPRPEWkeJLM3ej6jBeRDG7y2+ZCegZTgqeOjAGtivDvFfhjW7PxDZX9r4i+zaiilLLVJYlQzjjEVwyrhiAoGWBBGSR1rdt/ifqdrosq65op0/VrW5FndNKT5BlZQV8sLuaRiCCEXPy/MWAKkiYj1SivOr3xNrdrGJo01C+YoW2WOl7YgR2LSMCPqR+FSeHviL/asd013pN7b/ZMfai0BBgBzhmGTuXAJ3D8sZISkmOx6DTHdI13OwUepNV1uomtRPG6yRuoZGRgyuCMggjqD61kavqFvYaVd6hf34soIELPcsMiPsAB3JJAAHJPA5qhGwbyED7x+uMfzpy3tuxwJBXktn4t1/xiz3mhaPp9jpSsIxqGtBpGm2tjMcanAIY89QD3zwEjv9ZttUNnP4r0yO43NmK70ERRttHLAhwSuTgMOvPpUOpFOxapyPYFZXHDA/Q0+vK7PxHr9n+8n0uw1m3Qh5JPD97udEOcZglJJ59GFdN4d8Xaf4haaPT7qN54WIks5QY7iLBwQ0bAFcZAyMjOapST2JcWtzrqKghnSXhcqwGSp7VxEHxGjv8AxZquj6dZ25tdJ+W91C9vRbxrJkrsUbWLHIIycD5T7ZYjtluI2kMeSGBxyMZPtU9efeI9dtb3R9W1HR/st1rOkRN5lo0wfymBBJYI3zYUEjB6jBwcgReBPifZeKpE0+9jWx1RhmOItlJ1xkmNj1PcqecdM4OFcpQk4uSWiPR6KKKZIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAAqhf38GnWzXE7kICFVVXczsTgKoHJYngAUanqlno+nzX17MsNvChZ3Y4AAriNS1Sa3Meu6rC/25sppemMSvkhlO53P8LbTlmP3VO0fMaT2BE2s+IofDNtPqOsFv7Wu12W1pCVLKvURqTkYBwXcjaScDOAK8qvb3VPF+pw3esC4urS2kRWtrX7sSsSSI1Y5ZyqsdxJYgEnAHGg+ha34huH1hnW5Ny/lJNIQhZQcKETqseSdo44GTyamt9D1wTSWVpfgRQmYQtHFlZmUhZVBx3ZdnJO4qVHyk5xbb22NUkitCbV0S7vdK1C6cSErbiLasaqpZfKRWO1FUhvmOWPJJ5zXT+z4rO7n1Twzqk9y0wFvvnaCCJSq/MxB3NIWO47g2cqMjmtSDSPGExSDeYlV97SB0Yj5hJnhfmXcwY46kjPAxWXqWm6vHeWsGqTxtPJEXQyXKsIkzuZmx90ZYkk9eTzS1GZMWn3Gs38OnWqAXF9L5SqpJCBj8xycnCrnk+leseL7W21DTIfDFoWkgdbdWVyQu0f6tGxg7QqPKwGD8qj+IVQ8KaHaeGdOvfE2ss6RGAtG0y7Gjg69OoZ8cjqBgdWxVzw7FqN3rl3rerRLEqwb0tCpDxyzYP73PRxEsahf4V2g8k1pFESZ2ug2drbWrzw+W8sxw7LGEChflWNQPuqoAUD2zySSdK6aSO1meEKZlQlA5wC2OAT6ZxXHWOqDSNRCyuwsrhgrMeiHoG+n8J9sHtXUXtykQYOVCxL5jkngf3R+daWsRc5iwsk8D+ErGzWZDYWEe6/vJQAQNxeQ7c55ZmIAJI6YYkZ8V8ZeMr7xrqGZA9vpELH7LYnj2EkgHVyO3IXOBzknsPHl0b6bRfC4mis21ZzqGpTkgDylyIsnOGBILYPdV7V5hKsS3MyQSNLCkjIjsApYA43EDpnB/DFZzdtDanHqze0NV1Pw3d6DbyKmoNe/a0hZgv2tDGqhVP8AEylWwvUhyVzhq1dQuLa/W2fUhp2jXJmnM8aWbKEz5SgsNw3FgpIIwoywJG7jmNM8Par4k+1JpWnfbVtgpnHmKu3cGK8MRknax9sdRkVPBq3iu1td8cutC2VYzme1aVVV/uHMitgN/Dzg9qi11qTOleV0zoI77QRPGRqWjANPFKSukMwTdvVlGWyVVQrFSOSVA75fbiU20A0fT9Mn3QsLmV9OMaQ42qGZ3bG4qituGAGZieSc07dfiHeTWscNvcRvc3D2ybrKGJlkVdzByU+UbckE9cHGcVi3Nn4m1YRC8tNWvUcK8TTAmEhmCqy5ITBJABAzyPWmQqHdk2t31p/ZumaHYTi6gsHkmmu1B2yTOAu1M9VVR97oxPHAyZvBvi648F6wZ1c/2ZckLew43AA8CVV/vL1x/EAR6EYk8E1rdz2lxH5dxbStDMhYNtdThhkEg4I6g1c0jS4dXa+hmeRfJtHlQqwCkgHhs+pxgd+lJPU6FGKjbofRdxpi6rpdzpV1fx3JdwyTIoJjydyHbnHTjjAxXl8B1LTtEk1a1lEeraXZNdtGUVi4+2TC8I3ZCkrHEN3JAUKODx1fw+vJr7wt4RvJCpd7J7Y/IdxWJii/N0HAGc9aTXYbOw8Y6XJcJugmW+SWNhlXiaRN4P4zsfzrVvVHP5HoljdC7tfNDDOcNjpkdx7EYI9QQe9VdQ097iQXdjKtvfx8LIVysi/3HHdT69R1HuzRIltLCKy27Wt4kibnOWVVXJPfjbz7VphsMM+tNaoRw/gW/S80WQQqI7KXyr60hUgiCOVCWjHHRZlmAHYYA4Arz3446rMdK0PTI7l5oZBNeSMVK7yCFTI/2dzfkK77wUkVjNqdgkQhWz1C6scZ/hMpuIuP92ZgPpXMfE7R7WSXw3d6hE1zY297LYXkcbEttmw0ZyMYwR+ZAzSfwlw0kdLHbW+m2FjYR+XHbwQRwRJuChjsG5V9Sy/N6kg1m6nZanDI2oab5tzHOwa6hh2GRmVQFkidlYY2gEr06kEHINHw8n/CT+G4dPvPtKaxoswt5/JfZPDNFlYpB1OGQlSTkHnuAafL4LewsVTT7zxG8ce0JZJMkayKzFgDkAAbmk3AYzuxwABXLszo0GaDbW8epz31vDf28jxLHLbTM0n2lmJaSUswU7goBO0BRgY64rR1rQrDX9sl8JYtQhIMGpWrbLmFlGcqw5IKncAeM5xg81j7LeBpLafxXqdusM0f2Zb6xZGtWhkXaysBtZdr+Wc8EOCelEMurXNzHY2Pjn7S7IAWk0k4XDvgs4ACnhoz6FexwCJNa3CTT2Vi7pfjy+8MaxDoHjlkKO3+g67Eu2K4Xt5g6K3IBPbI3DHzHVg0Oz8Ia6+uosjWuq3ssWorKgHkLOQyliOGVZQyg9lnOSQuaz7nQ5dd8PS6H4huLO5hkX91dQxsrwv0Rip4yrblJB+ZSM1ifDzxJq2in/hEvETJLAtw1jbu7FvJmGQLeTcMFZFB2HJx05BAXeE+bRmM4W1R1OseDbbQPEv/AAk+k6b58sqCJraNhGfM/hwxwMN9wqeCCB1xjy6XwgL3VUn0idYdNnH2y1jkZo7mEBiHiUYPzxuCp54+U9xX0CzfbrLyTEzxuhV0fhsYwVPoR+fQ15f4g05INbRRIlr9vuQi3JXAt9R24ilIB+5cRgo42kblyeRmqaHSquD9TrfCfiuQXcGhazeJcXEkQayvtgjN0APmR1yQsq9xnkcjvXfCvl+6W7vZ2sLuK/bVrdgXihAjFtMvAYbeSAejE49K9g+HHjlfEVo2l6lLGuuWY2TqGH74DjeuOD7gdCaIy6MutQ5VzI9BoooqzmCiiigAooooAKKKKACiiigAooooAKz9Q1C30uzae4d8bgiIi5eRzwFUdyT0H9KtSSJDG0kjBUUFmYnAAHJJryzxR4hbVbi8tNPtpLjUFtVdHLAR21vKSm4c58xsc+isADy1JuwF21lm8Xa4+q3bFdC0tv3a8CGa5Uklgx+/HFjJbgM4JGQgrjvEWqSaxcC7lBJul3QrImGhtg3yD2aQgu2P9kdAK7vxZbto3w7ubS3mkVYraK0YLhRh2UOxx3IyO2M+9edeIPI0qb7TIjR2sqR/Z/MUJuBUccDgDkk9hyaym3ojSCW5BbadYz28k1zqLW8ytlYlgZ9ygeoIGT0AyByMkUn9g6U3lo3iVomVmLKyTMuc8EbVGAcnjk9++BzUn2zWRNbQzWOo3l0witYYPNIhXOGdVA2tx1Zs4HIwa7zTPD8P7qygaTV72FVj8mIHYCuBl2z931JK88DNS4cpSlcxINMee2luUzFaQqxE8u5VwCB0GT0xnGcd+1d14Z8GQwRpfanAVhVlkhWWM+ZM38JZWzgD+GP1+ZucKNWy8O22my+fqDpc30f71bSFttvZqOd2TgKeM7m6fwqCSTQn1fVPF0rweG5vKtFJiudeYERxDoyWgPLMehkPHUjqMVGKWrJlK+xNdtJ4m17a00L2elzcWccmQ10vzAzkfwx5B28FnxnhcC9cTJaRC2iLOhYu7H70rscsze5P9BUmnaVY+H9Fh0jSYzHbRA7nb78rE5LMe5J/p6Cq8lsXbJ5rVK25k2EEEdxDsuI/NjbojHHHQjPbNXbGWYaDqqG4czWxWJZRuDKqqCudvJIB5x1qGFSmFPbpUto4g8Ry2koxDq1qChH/AD2h4ZR7lCGH+6fSqYI4HXpAPi1ZvczALL4cQxSuFI6t13+pDA9DzXlVurLbojDDKu1h6EcEfnXsHxK0tY49O1/TZDc33h+RvtUQQeabYkNuGQchM/eA4DFuMV5rrFpbow1TTWuJdJujlZZY2UpIeGDZJyGIJDZwSSM8VjM6Kb0I9O8QapoFveDTJYIvPIkZngWRlZUKgqW6EKzD8TXpitdLoVvKfGS2d1fQrdTJePaiETC2VlKgx5WJXEaFRuGAehOT5L2qNbWN5VjitleWRgqoqjczHoPrSi3sVJLdnqWrf21JeXNvefE/Si6yZjMljCijKrGzE5yjbZyFIzuAJyMZGB4g8S+INLu9Ps7TxO11jTgksggtt0RMrZjHlFgpxHHkBmJwCTyAOVv9Im0a9+xX1pHb3ARZGjUq20MMgErkZqFFRFwqqo9AMU5NoUUnsyWeeW6u57q4fzJ7iVppX2hdzsxZmwOBkknA4q/ZRR2vhvWNbubUSxov2S3dwu1ZmGd3PJIyMADPBPGKq6fYTatcmC3eONVUtJPKSEiUdSx/zjOa7fwhoMGv31lrU2krF4e0aRYrYJGhl1CfeACWH31VjkksQSMDqwCirscmkj0XwZo7aRpeh6RLCFlsLBXmLxqWSWQlmUHORhj+lYPiecXmuX8pdjHYW0dtGNvSWeVZnH/AY1hB/wB6uo13WIPDOnGaGKa61XVJttjYOw3zzN/DjgKi5yzHgDvnbXIX0MVp4PiWOY3Fw2oyteXZGPtNwXTzHA7Luyq/7KrVy0Odbno+lSM00jMcmSKNyT6mNc/+gir7yHkg4FZ1iPLuSndYkH5Rin3k2GjgB+aU5b2UdfzPFVHYTM86XHHrd/NGBG+rRxyo+MHzol2/+ghT7jdUWv6XbeItDube6XZbXsJguj3iIOVYcgZR8Hnt0zXQTWiX1p5RYo6kPHIvWNh0I/z04rFbVDZ3s/noY5o1D3kS/wBzoJ4/Vezdx0PTNJuzGtT568S2N1BdyS3KNa6zpipa6k8TiNZgTiKdDu3NuULnCgDg8c1n6bqOqm/tYI9a1tI5JFVxa3Ls4UnJKqD8xHXHfFe/eLfCg8R/Yr7SxBFqluhNpfDmJ0OSYpQOTE2SBjJUk44Jz4bf6FfLf3f2Wxawv7RyZ9JWYmWAcYkiPBdDyRtJwMckEVnOLvdHVTqJqzN7+0dUtlQxfEPWsEThluLaVWUqCY87/lO8jBG7KllPIziyfEWuqZ0g+J1hJCu4xtcWqDzVKknIIYqTtHB4y4wc5A4CK/u0O+K+uVKnPErEg/j0P61p2Ka3qjztbXrSSW8LTOruoZlyCQAfvMSqnHPSpXvbIJJR3Z0Gp+O/FOkzwxjxDo2qeahMjRWsLKj4G5CVGD1ByDg4PpWGmqXXibxLN/bN2Il1bZDO1vGFUMq4iOME5BC9OTnrVT+3dVx+8ullVssQ8KsGyMdgOx6e9U7JHfUbGOEMZWuIwgVsNncOh7GlezNFFWPof4f6/J4g8MwT3kjfbi7WF70A+0Rj7/POWXaSAMZzxUPiPSE1fS7rTLqNWZl8sqxI8xQwYLxzkMAw+nvXP/DidZtc8aqjyRRLd2syNdnJR23BtxUDk9M/TNeh6vZmeRpY+HIByOoPqK6N0cU1aR55quhweJNNg1ZLSS8vbJTb3MUkreZcooBKOVI3SoMMNw+dSrc8heYh1CeeODUfDllBbyWDsbIyMEl3A/OixqDnK8EMwyDnHeuzvBc6Vqj6tYLIZ22i9tUZVFyi9HXIwsqnlSeDyp4NYGv2KzxXnibwffoJGj8zULSKNdxG7mZUYEowOQwxuU5xwQTnZnTRqJ+5L5Hrng/xTaeLdBh1C3KrL9y4hDZMUg6qe/uPaujzXzF4G8XT+FfEUd5JI0lheuYrtSxZi2Qd3ruGQeeuSPUj6YikjmiWWNgyOAysDkEHkGtE7mNenyS02JqKKKZkFFFFABRRRQAUUUUAFFFFAGXrmmnV9HuLBbl7fzlCmRFDEDIJGD1yBj8a878S+DNb0S3s9X8NzyalLaQJDf2cwUNeQxuXULtA+ZcsAOpGByRg+sUUmrgcm9xY+J9BW8twb3Sb+HBjQDcc5zk9VZSMYHIYdsVxd/8ADcX7WrReI9Si+zBjAGs90iKQVKk7gpyMjpXVa94Z1K0upda8J3P2a+djJdWL4+z3vTJIIISTgYcDPGDkdOai8dak3n3MzStZW7LHqdosIjvdNb+9tH34z1yB7gnkCXa92NN7Iv6X8P8ARvD8Dz3N7ebnQqxmlEQkB6qQvzFenyg/hWhc6pFpmjTQaNbC3gt4HlZ0iCsyqCzFE7tgcE1LHp8Mqx38N0LyC4UPFcqQxZT0+Y5P61fs4UtJvMRcE/ePc/U9aLBzHF6L5HjvTP7YuxKNCa6kS004vhZVUgebPjl3ZgTgkhcDGTkntkgCQpHGipGi7URBhVHoBXDSW83w81C4dIDL4VvJDK6wqSbNjjMiqP4Rj5lHYBl6MK7i0uEkjjZJEljkQPHIjBldSMhlI4II70Q5bu24Sv1GvFgdKhMQJ6Cr7rUIXB9q0IKphBqK5tDe24jVvLnRhJBKBkxyj7rD8eo7gkd60SgxTChVgw4IOQadgJrO8hulJVrZrkwxtdRoAcblDYIPO054+tec638O9S0e6mvPCSLd6TM2670GVwq89TEW4x3wcYxxnO0a1holn4a8a6jrMEbQxX53SqrEoMtl2AI+UjcCRkggHHt1U8Ud4JbLUIQ5ifIZDtOOzDuDjjIrKMlK67F3tsfOc1npREiteyaLqUW9ptM1CBlCgKWUITzyBtAOSSR2PFay+zS2ro1pp73CksPtE7RtKrY+633QVxwMgncfSvpDUtOttWWKGdNOuLaFMJaXtqsiBgDg5YEj+Ecdh6njnJ/hd4cuXkebw5pjEq5X7PdTRDdztBVWAAPGSPemlZ6FOSktTxW7a2htSjWOlxXBVY1W3naVlULjczBio9doJ59BUlnp9jfR28VlcXWs6jMqObDTrdsxKSNwdyMAj5hkfKCVPIzXs1t8NNAsPnj0HQ43yObppLlQOc8OxGenbFdLYGy0yFre3ni8skhLezhVI0U44CqAM9eT2oavuCly7HB6P8O7rWI4B4ia2s9JtjtTRdOYZZh18+RT1znKqT14IAxXojXtnpsf2eKMKlrCdtpbIBtRQNqgDCqTlVVSRnIxxWRquoHR9JddMt4rV2AVCAGYdgfTIHrmuXOm2x+JWj3EmoXzrEVaS0bLRTSlAFlJyPmBCEkg/cXpgAK6WhN7nTaL4Z+zazc+JtcnN3r8sbBCTmOxiwcRRcAcAkFsAsSTgZOeMuzjwDpLZP7zULhv/Ih/wr0nU22afcNkjaMjBx3rzS+P/Fu/D7Dkvd3J6/8ATRv8KU9xxPUkwupXRJACOAx9MRKf5Vlx3JudQknPAYgKPRR0/wAagjuC82toHOW1Jw2eoURovH4jFLacz7u1XDYmR1Vs2UFVtW0mLV4EEjyQXERLwXMLbZYW9VPoehB4I4INSWzfKKtBsim9RHmLah4i8AamsWo6emo+HLhtoubEBGt5Dk7hGTgBscqDjP3ccK3Sa54e0Lxjaqt0C8tuR5N7bHy7i1YgEYPUZDBsEYIIODxVjxwIZvB+p2Mzxqb63e2iMqlgHZSAxA54ODnsQK43wjbXmi2Gk3c1+b65lt/JlmT5VeJTtiUZA3BVA5PJJPNRdLQpvqcl4j8A6jZ3dzJqFq+tLsG2+0YKLlNoAXzbfowbJLMNx6HI6HiYbnT1u5LBZbC4WF2FveXNu0TOcqRuAOUxg9QccjnOR9OjUYFlSSRCrqDtYLyoPXj8O2az9S8PaT4hV2ubfTNTdsgNdwK0iAknarLhh1A68AU0le6Kc+ZWkfOuqJF9g842um2spfKxWc/mEr1JIBIUdgCc1Zsjpuh3VtOskGu395bFbe0tAxMUrYCqRjduwcdM5yAOcj2V/hL4TVQB4VjZix3bdSuFGOxA3fp7VteHvCOn+HbhW0vRdOssMw8xFMkzKR90yMS3XGRnH9Rwu7lRqcsbGV8PPCNz4c8PXDazsl1TVJftN4DyEA+7HxwSvJOOATgZAzXWynLAegxXNa54mt9DhOm6KV1PWp2KwwGTdHCzH70rDoBnO1fmbGAOSRvoskcMSTTedOqKssuwLvbHzNtHAyc8dqpW2Rk23qyhqOmJdIWjG2Qc5HrXnOp6HJp+sLq+nSrputQkslyEJjmXHKyKM5Ujg8ZHUZxivV+uckACuN8Y6xp1nbb7iSNUUgbmzlm7BQOSfoCfrSYI4LUPD3/CSQalqukaaLbVrZANT0pVEgUsNyywEH5kYAkAHI5xkYB9B+D/AIoXV9DuNMllaSXTZFjVmByUYZAOeRggjn2HasDw5A9nd6r4i1aKbSW1UwRWQwF8nygApkx912wPlOcfMpPNdhoNxc6pJc6jJamzeCVWnuIYVEd7tBAOcBiQODnIHbHSkjSVXmVmd9RUEEqzQpMoYK6hhuBBAIzyD0qeqMwooooAKKKKACiiigAooooAKKKKACuS8UeDk1q5j1XTLj+ztftlKwXirlZF7xSr/Gh9D06juD1tFAHimi6ze+GtUurRtOkgWMmXU9BB3bFJ5urIn78Z5LIORz35PolndW1/YwX1jcJcWlwu6OWM5BH9COhB5B4qfxJ4XsfElokdwXguoG32t5Ads1u/95W/mOh715nY3mteCfEUlte2yM90xaa2hG231If89rcHiO4wPmi4DY47bZ2HuelyRRzQvBMgkhcYZT/MehHY1xElpP4DkZozJP4XkcuwVSzacxOS6qOTETyyj7v3l4yK7KwvbTVNPi1CwmE9pL91xwVPQqQeVIPBB5BFWGRWVkkXdG3BH+ehqZRbd47gn0Kdnex3UQIdWyoZWVgyspGQykcFSCCCOCKsFea42Syl8HXDeVltDdy6EDJsySSzKo/5ZZOWUfdyWUYLLXW2l0txGOV3AAnBBBBGQQR1BHII60QmprzW4miYDsaXZmlCdKeTgdK1EZGtwSNaJNEAzROCyHoyng5/Mg+zGktZm8qBn4kgb7LNk5JGMoT6/Lxn1BpmsXrMjWsDDceHb0H90e9Z0V27XwjkOFuYFhY4+66n5ST35xz71hKPLU5l13/Qa1R0ksaSLyoYe4qhLZQn+BR9OKvWshntEcj5iPmHoe4qOUc1oIz1soFYExKSO7DP86uRqEUAAAeg4pp608HikxGP4gXdZn2Gf1rGncjxbpZGM+dC3HXBC5/lW/q6b7Nxj+E1zEhZ/E2ktkhmkhXPtlaze/3FQO81kgaTcnGcgivNLp/+LfeFEJ+9PdHr1+dz/SvStfBGnyoOrNgfrXl9wc+CvBIA+/cXI+vMpxVyHE77ADXRTrJeTs318xl/kBVu0jxzWdpjmR9RJcEDUrlUGecBlJ/DLfrWxbpirjsTLc04Gwoq15gAJLAAAszHoAOpqnFwKw/FmrtZ2o06EMZplzKVGSq9APqaTlyq40c/qGoN4y8QpbQl49MtwzTODgmMHH4Fj8o78k9q2ViE8wfaqxqAEVRgKoGAB7AYAqlplh9gsltFIaVzvuGA79lHso4H4nvWuqiNQAOlZwV9WKTFc4jwcEY6Gsue2R33bcN/eB5FXZJMmoCHkdY4xudueTgAdyT2A9a1EQwR30sy21rd3IZuwlOFHcn0ArK13XpJLYaRpFxcTxyt5Ul2rbpbtz1ji/2fVumPYZMWp6q1yINL0sNMt6xVCh2yahj723usC92/i+mTXSeHPDi6JEtxdyR3OqumwyoMRwJ/zziHYep6t9MAZtub5Y/f/kUlYi8M+GE0GCO4uhE+plSAIx8lsG6hfVj/ABN3xgYFbjuiIXkYKo7mmXd1DZQmad1VQCcE449T6CvPLnXdT8ZXDwaJJ9n09GIk1Fl+TaDgiIHhueN5+UYOAxxi1aKsgNLxD4xZLoaTpULXWoOBtgjOAgPRpW6Kv6njAOai0Dwk6akl/qZ/tXXtpKgDbFag9gP4R/tH5j+lbnhjwhDYWwjsUaCKQl5buTJmnZuWYE85P95ufQY4HbWlnBYxCGCIIvU45LH1J6k+5p27gZ+naGkMi3V6wuLtfuHbhIvZR/U8/StuiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZWuaJp3iLTJdO1O2We2kHQ8FT2ZT1DDqCK1aKAPH47fWPAGs7LmcT2lywWO7lIWK8HRY7g9I5wMBZej4Abnmu9tbuC+t/Pt9+0Ha8bjDxMOqsOxFbF7Y2upWUtnewR3FtMpWSKRcqwPYiuE/sjUPB94ZLZ5rvR1XCOTvltlA4jkyRvjH8L53IODkYIxknDXp+RXxep00sKTxNDIu6NvzB7EehrkbwS+EbqMQxSS6YxLBVUloASS2wDqg6leq5JXjit6DxLok0Dyy6na2m1Q8iXUwiaMHud2Mrz1HFVdR8TeHZYXs/t0Wou6FhBaOGbj+INnAx65puKfvLcW2jNmzuYr23WaB1kVlDBlYEFSMgg+mO9Zuqam8I8qJJUDAETlDtIP91uh+tctbIkFvtlhnTTLwss9uoK+WzA7ipX1BLFVxyNy87lKaX4n1LwZv0hpdP1iwjINsWvltbiNCAQCsoCsOeCrY9OMAVGd0DVi750ZIVZASegGST+VOu7O7XS55/s8ypHiTe6bRwegzzz64qynxg8PxyBL+11Cybu7RpKv5xM3FaUfxD8E61DJaDxBYr5qlSs7GLOR/theaJJSVhLR3GeH71bxZ4yRvXbJj1DDqPbNaUqHJrgtJ1K30XUVunu4WsrXdFPPG+9GgY/LICuQQrDk9gx9K9BEkVxbpcW00U8EihkmiYMrKehVhwR9KI6oGUWUjtShSamfimhhQySrew77ZgfQ1xdxlPEWlY+UrJEwP0Za7q6P+iuxwFA6ngfnXJXY+z+IdHS58ry3dXcM6kKqsv3mBwOGz/Ooa1KidZrTvcShI13Ro5MjKQQG54/CvMtpl8I/DnuXv5U/MyivV9UudB8mWVrjThcj5lYSIG3fnknrXlVgZE8O/C2NwPm1Vm9cr5jj+TD86qQ4nXaDi4mYhZnklvdRZEjXkkSxryegA9TW/pt3b3tuJreVZE3MpKnOGU4IP4j8a4G88Yx+DtJt3ltrmW4uZtWhVYFBKsLpAWOcYwoOPUjHvXbeEI7dPC9ub0i0muWNzsmZY5RuwQWUMQpIx8uTgYB5zVRuKRrXF5Fp9jLez8pEMhe7N2UfU1xOkLcXtzNrF4yvNMzbP8Aezgkf7Kj5R9Cafr16+t6qmlQyiO1t2+aQsF8w5wWA/8AHVH1NbFrCoChYwkcahUUdFUdBWcvefoGyJILfYu49Tyc06XIWps0gQOSzlVReWZjgAeprRIkpFAkTzyuqRoCzOxwqgdyewrmrvVf7ScWNrCZzc8W1gFIe+YfxSnpHbqeSCcsB9AZtTu7rXZJBa20kllbn91AMAzP2Zs8e4XoB8x6irmnaP8AY0ZNsR1FlE19dSvuhtBtyCzcA7QcqgI7McA7jMnfRFpW3NrQtBGiiS4nlW81i6ULd3mzGQOkUY/hjXoFHpk1F4h8T6Z4asjc3twobO1VA3Mzf3VUcs3sOB3Irl9X+Iq/aP7G8PJJqF24VI7mb5Q2RyzbQPl7jABOeAB81WvDPgSe5vV1fW5Re6kw4kkAaKEf3UXocHsPlB6ljzT8kHqZcGlat43nhutdjmtdNZt9vpStmW5A6NKem3vjhRxnPSvS9M8PQWkUfnxR7UA2W6D92hHAJ/vHHc8DsBWnZ2MVoCUQ725eRmyzH3P9Og7VdqkrCCiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU0gMCCAQeoNOooA4Txr4Sa70lJtC0jT5r6CUN5EpMQkjwdyIykBGORgnjjnrXK3Xg3UNUto5rGS6t4PPZJrDXocsgUYYK67lZTyRyAf73p7LRUuKY07HjUfgp9JuRPpEGhS3DL5bJCfszMpwcEbiDyAQRyCARU95NrGm/ZodU05obJpPmunO5rfg7iCobgnrwQeuFOa9XmtoLhcTQRyj0dA386qNommNkGxhAPJCrgH8BScAueS6N4jt5k2W+rXV0yHDNBfRtySSAFYA8e9b/ANq1p4GlkXXkiViBH/Z1vcEjGdwKsSQemME57V1lz4J8LXPmNN4e01mf7zfZlBP4gZrLl+FXg+RGWPS2twwwfs9xJH/JqXKx3OIuby4sbiCW6bUZrgkrtk01rdjEw+ZR8u0sv3h34NQw+KLGyV3fxX4lSSIsJLa2tIDs5yRtZDj1zjnOa9Fi8GSWh/0XxR4hjXgBHullUD0G9GP61keKG1bwlpUmqxa3LdSSXEETRzW0I3F2WPJZVHIH8qXK1sF0crffE1ho89/o/wBon8lQy/2rYqizDIBwyMMEZz93mtm11LxdqcYm06+8KyRksqhS247SVzgscdMj2rI1PxhqijxOspt5v7Fvbe0/eW0bGfzXK7j8uFxjOOc9Mirj/DvVfEsY1CDxJHppLSQ+Va6cioQjlMnDDk7c9O+O1PUNB8+h+OLp28+9s5w3DIbkbMZ7LwPzFZclrfJq9no93HCmpSrewKkLKFVmiVoySOFyRnnvV6L4N6yJCZPGMxXHG22UHPqSc/lU6/CbWYvmi8VyCTyni3fZkB2v97JA5bphuowMdKVguZh8HeNhKJJmkhVQxaZb2MlRgknATJ/+vWNpeoa5Na6LJba7fKuqxGRIXuiRF8+wjb5eD82eg9666P4beKrAeb/wmj3EUQJ8m6gEiEAdwe/HWsDS/EFxfr4Tmex0hv8AhIJpY7cvp8ZNuYn2szYxnJ5AGPrRyjuaMdpZ29us0/jbQFmbqrQQMpyTjDFQzZxnOOuaqyx6HaXBuLrU/Dt6ETzRb21hBvdiwVeTHkDcRyCOlXNAt9Q8T2llNZWXhi3juIpnVJtJDOqxTGIjIIAyckccdPeugk8Ga+4kWOTwwgYghv7JBKgDG0AkjHFHK+gXONu7hPsRuIdU0a7kaVWmtWiW4aVskDaWVgu0HaOn8R7gU/SPE3ia8Vvss9syRLgI1rsUqM4UALjIx6iumf4W6hd3BluPEdzagjAi01Vt0H4KoqzD8KIUUCTxT4ifrnF+65z64NPlYro5+XxtrdnKkd3pNisr7Qgk8yPLE4Gc8YJI5HSkh8QXuuafJLdQ38NswB2Mg+c4ztQKq8dMbiT3Y9BXaWXgKx01W8m7uZZmXaJrzFyyD/ZMmQvP51ujSbkqBJrF4wAxhFjT+S0+WT0bFoeSXN7NHcwi5k1LTLVmKoksKLGhI4XcwG4se55yfQVY8PaSfFjTz2GpS3cdvKqTNezebFG+ASsaqoRmAwSxLYyOhwR6DdeA/D+pPv1Szl1F8YBvbiSUD3CltoPuADWxp2mWWlWiWun2sFrbpnbFBGEUZ5PA4yTyT3oUO47mN4c8E6X4dZriBWnvWGGuZjufnrgnJGe5ySfWupooqkrEhRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASkoJAGTXP6p4ihs428t3IT/WSpEZBGPUgYH6/hWc6kIK83ZFRhKTtFXZ0ORnGeaWsK1eWFPOuX8yUSmNSq4Mp54APt/KrMkep3QOZEtY/RfmbH16VoSaDSInDOq/UgUqsrAFSCD3BzXMXelRqSWv5Hb3Gf0qvp4u7W/RrZJHiLASYGFZc8nnjI68U7CudlRWZcaxZW0gjlnjVy20KzBSW44A655H51VXxFZOrOkqMilQzYYAFunOPY/SkM3aKyrfWrS6VfIljlBGRsfJP0BwTU8lxLMSluNvqzDkfQUAWZJY4V3SOqL6sQBXnfxRvIrrwhcCMGRYbqydyVIVgZ8cEjBHHUV2htYw3mSEyyD+Jucfif6VzHjOJZ7CaAopEv2XhgTnbIzD60m9Bo871W0nnHj5wNznxBZgnPVVYEAd8gEV6v4d1OK20VEmjnjxLMdxiZlP71skFc8fXFcM8CeT4/ZgCzaqsoGM/dCj8P/r12unuq6VaMGXDR7vQ/MxP9alO7B7HSW17a3il7a4ilUddjg4+vpVmuWkgimkWYrsnX7syHa4/4EOo9jkVrWF+J8wzMomUZ3DgMPX2PqKsRY1BxHYzEjIK7T+PH9a8A8N27iy+DyHgpeajn8Js/0r3jUitxZSQxSxrI2MMx+UYIJyfoK4jTvBsOnHwskurWxl0aWdtsa8zGZywVcnj096l3GUvhLuWy0iJxho7C93D0JvnH/spr1auG8I6JF4ccs+qQ3QMLRoEXaQWuJZWPJ/6bKP8AgPvXU3V66xD7MnmMw+8eg/xqkI0KKwtrzKGuJHJPVc8A/wAqcttCfUfSgDborKWFl/1dw6n0JNSLdXEA/fIJE/vL1oA0aKhhuI5xmNgfbuKie8jV9igs2cccDNAFuissazZuxj89Fbpyeh6D9azrO51Ozy1yWuIyfmbcGU/7pHT6UAdLRUFtcx3Ue+M/UHqKnoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBKY7pEhd2CqOpNRzzx20RkkYKorifF0niDU9FeHRPKhvJX2RvI2BAhB3OTz82OBjpurixOLp0LKbV3tf+tkXCDlsYXjr4iaily+meF4Y5JVJSa7kIwpwchASAWHqT14APNZ3w3XxBqsUmseItSYaLboTDE6KolOcs+AOVzwOueQODzX0H4f6rLcxnXpIUjOY0062bImX1kbqFGTwOSDgnnB37/Uhfa1HZ6Xg6bo9wsYWLCpe36jKRnHSKEYduwIAAyoznFwxD920kt30v2Rq3yKyJrrWPFGs+N103T4bW30qyjEs+7czu5JwkjjAUggEhS2OhLElRO8mrp4ptI7IxmVXhl1IW8TCI7y4cEEnaPLVW68sFP8Rz0Gh2dtpmmLbQENtG6WYgLvb+Jj6DrgdhWXr/iGw8GxXGoXAh8i6JmVY33y3kxVQv0AC4GMjAHTFdrdldsxim3ZI6W5niihknmeOC2TJaRyAoHuTXn9/wDEmzhluLnTZDeWu4xx3Nw3k2q46hcAtMw55UHAIzjqfJfFfivWPF8jyajKyWoOYrGFsKozz/vNjue9dbKVi1r+1bW2tLzQGtVSykNu1xDFGgDLFtH3GLLhi2MYbIO6o5pS30X9blTSgr7v8DU/4SbxJParcWFrcCCWMzqbOKKHKdN2X3MQcDkkE8HHIqvL4k8T2UMtxdnWIIYVBkc3sBCjcVyQVOfmBHA7Vg21zpMCp/ppuZQ4k2HSWc52sSuCwGNxAwMfMc9BVuVBbW8Vxbw2X7qQf6TqmnLAioFXJO5vm3MCMBSe+eanlUtWv1M/az2T+5L8rHQ2/wAQntYItQ1JoLqylf7M2oRQrFc2rMCQrr8w2sFbDDIJUhgpFej6ZLby6dBNZ3Mk8RXKyucsfYkdT0+vXnOa+cdV1O3nshptkTJbtcfarm5aPZ9olAZVCr/DGoZsA8ktnoBXf/CXVbiXRdW0n7YbdbUCSOYqG8tOvT8x+XpRdwkrPR6G/LzU7yVpf10PYC5eMszhVAJJY4AA6knsK8y8aeN/Dv2z+xzqJE8qLiVYWlVT83O1QWP3gegyBxmui8Wy3ot9FtLSEX0N5dLFLF5m0S9DlmHO0KHY47hRVHxnaCw0DVM+Us8tn+9kjQKAAsmFHcKuBhc9cnqSTvJ9DFFBItPv9L1xNO12zkm1jLBLxWtTuYjAAcAnp0x3rp9PUf2XDbsdtxaxrFPGeqNj9QezDg4Poa4mWUwaL4jlTCuqTMmVBAIZR0IxjHGDwQcYrovCWkrBe3Ai2xwKkE0UaZ2rHNEGeLBPA81WdR0XcQMA4qY7jZ0NtbO6qzOyxc5XHLf4fWq+va1YeGrSG71C8trO0ZsFXUtLIR2RRyxPA4BxnPTNVvEviyDwvod5qdxbSGSJxDawN8v2mVh8oHoo5JPoCfQV4Hqd/JrqnXtW1JbnWnujBJalsBYCm5GiXsgbcpHrgnkk1bdhwhc9Buvibca3dyxeHtGsi42iMazerEZlP8KRblDc84LE89K5eb4geNGlLR3ljaMh5jt7CI7MH/aDHgj1rDsrVLuK1ubpVt9LnnNrLqTRiWKFscBlB+UZYctgYJIziuj07wzp1rfWdtqllc3JF5FpmowLdGJtPuGbCSgBctDIpUqTgDB5JNFmzV+yhu7/ANeZXX4j+MbeXz5ruyuyuTtuLCP6nlQp7evautHxQudFZYNT0u1mtb1Bcw6lokxw6nglYpDkMCCpBYEHsa86nUnWprUldLjS9aCaMb7gWiqdrOzEZZVKk5OOtWda0m20/Vo9O0u4uL++mZo1ha0CyscfLIpUlZEdfmVgeB1xS1KlCk7K9vl/l1Pe/DniTSPE9l5ml6nHdzRjMsRXy5Y8/wB6M8gc4z0OOCa2VPzBdvJ4r5iJjgR7zStM1PT9Q0qRBc3y6gHMDElcFQoK7m46kdjnNeteBfiJc+Jgmk332eLXYhuRyuEvUX7xXsrgcsv4jjIDTMJQtqjZ1XxZqMurnSPDFpY3VwqO0tzeSMsEJVivzBRuOWBVQMlmDYACk1jaf8RPEljePB4s0Ow0rgGN3mdEbOcjzAropHA+dlBJ6iuut9JjsfEE2q2nlxw3VqIJYoxhd6yM4cY453uG98HuauXLpPA0NyizwsMMko3KfzosydChDqtrqitNYs8U8TJ58JIEkQblSwUkFWGSrKSrdias6vcRWum3MpEDyQtGI1lfaqSMwVCW6qu48n2NclB4KsdL1iXUvD0Qs9U5a0dJGEUuBua1lTO3awBIIAI+91UZ1ddis/GHgyYKhS31O0K8rtljkU7hG3bIYEEHowNCegaXL2rQto3hi81KWS81O6ghMrBbl4Uc98KhCqo5PTOByScmuXsPGUqyq1/p11Zq52fa7ctcIG3KCGDAMfvHkFvutkcVh/8ACnLqBpH0HxEUVlGQmUypGQGCsM5BBwRzmrCWeqeGLyL/AISa2imsHXyluIEIRQwIZS38JzhlJxkkispSktkaqMH1Ov1S0/4SWwgNnqkmnQyoXgu7SbMU7MpAO5drBlOCp45zw1aPhPU7lLa30HXtRWfxJb2yzXMZi8sshYgMuPlcAjBZfbIUnFeeyatqPheaV9AW3vdPumYPa3I2qeC24KvRjkqzcg/LkZ6LB8TIGvLaLxF4Zu9JSIN5V+m6VrNiBkqSoKqcYIGRjg5BwKjUTJlTa2PbKKoafeC7tklEkcgdQyvGQVdT0K4J4/E1frQzCiiigAooooAKKKKACiiigAooooAKKKKAExUUsyQRPLKwREBLMegA71LXFeJNbsEglub+7SHSLQ/v2bnz5B0QDGSB6DqePWubE140Icz1fRdW+xUI8zK/iLW74rbXUMlpaWTuFga5ZiZiemVUE4x830HOKgjn8RSar5bwWsaeWI0iIOZmyNzquflUZAJIOB6k4qxKIptZtZrMXtxfyhS0LXDJFbrtzmVM4XAI+UjJNF5rNh4dtJ7q8u/MnbCTXEa5kmftDAnVmPYDgcse5Pz9LDzx1TnqrTq7fgjoclBWRNqczaXpc265aS4k/dSzx/KzMekUePu+5HIAz1xWFp0AimhtLS2jiYL5UMEQwsKk5b6sx+Zm78DoKqQ3Go6jerc3aILp1221lGdy2MZ52k4+aU8Fm9eBwK7DSNNTS4XupBukVGYk9en+R+NfR0qcYRUYqyWxzybe5Fq9zb6Tpsv2nI0+0jMl47oQZTjhFJGDk46dq8J8XaidZ1WG8uZ2kvGTcYUI8mzQ/diAGctjBY8dQMcV6V4su40/sHTroyGG6lk1K6V2IZgoLBe+On4V43LdT39zNe3LmSe5kaV2Y5LEn1qW+aTfbRfqzeEeWK8/6SNrwr4Xn8U3t3GLlrSzs4lea5EPmYZjhVAyAM4JJJAAHJFaen/D7xCs4l0jXdNVpbk26vbXboxYH59ygY3IOWGW9icVzWkaYur+ILCzNhcXqeaJZ7e22mR4lO5gNxC+g5I616VqOjx6oZ2m+GEpQr+4CNbW/wAygjBVGDY2ksBuY54+YAYa5eopNp6Gd/wj+vDyIbzx47ySwyIot7tSpm34jG4kYUoVkbOW2hgBnGee1vwj/ZWnXOpX/iWyv5kbFvDETJJKTJtUncxKqQGbIBGAME5rZ1G3tvDOmPqZ+H1tply4NrZXJu4rlFdlZkbaWY7lBU7sNu2/wg4rz+K3hhUBI1GABkAZNNtW0CKY+RtqHBAY8Ak4GfrXrPgLT7Sxtdcu7GQeTOIrKKZH3ebKwG4qWJBwSR3HBrgfDVhcXOowXFvGsl2zgWEEittmfJDScdVTHPP3sCvcNIgTw/pEUcMpngtRsRllIN7du2DnsRuP8zjFQldpdtX+g5u0X56f5l2Z4h4z0TTi4/dWU8yBf7ysikn0+9j659KzfiJxoupknAWwyTjOPllp3hmN5tdv/Et0WMbY0y1LJtLRIxLy47b5Szf7u2j4ihv7F1ZVxk2QAz06SVu9jnOOu2xoWrLvOZftilQODtkj5z+Ndp4auVey8QSx7i9rdJaAhu0VtF09PmZvxrhb0AadqG3ORJfDB/66RV2nhsMmo+JdLaNFa6+z6rBvw3mLLCsZ+Xvh4WB+o9amO4PY4r4jw3mu+L9C8PQ3AAg01r3fcyEAMxIJY9yFXA+vSuJ8OSm/1KDRWfSVt72Rw0t/apLsbacFSxVlY7QFG5QWIr0DxjHHF8QPC+rXSoba/s20yVgW2rKrEjIUg87uB7e1cFbT2lnqlj4f8RxpHomnXc5njhjYmaVgdssm07m/gGFx8owO9U9zWPwncW19qml6FeG9ga7jtrP9/JfaIbe48lcKElVsxTp0HyyK2MkFuRWLoOkeIfHlsIXv/wCzdFMqx29pbruJ8rkKrN83loc43EhScKOlZ2pah4XfQLrTodhmZA1qthp9xbRpOCCGYyzMGXGQQVzzkYIrW8B+O4/C0MFtqNnM1orSeVNAu4hWIZlZRzwwyGGeOD61Un0JpwbTaWvoa9/8JPFGjznV/D2ui7vxud0nAWSUt94bj8rbu4YAHua57w14j1G710WF5amTULgSWcyJEsU9wQrKLUuSBbRrgkmMZ+XgE9fU5Pi94NFt50N/NPLtytvDbSNISegxtwCfUkD3rwfWLyfVNXvdZkTyGurprgCM8wkEYBYY+YBRkjHOSKV7bFxpykndHQXGm3dxpWp6ppV9plvbWVhJbS2lhYzx25tgw3J9olVRJKTg85ZiCQazk0C+sruUR3gg1zT7WLUYYoiMxkjcFYtg7wuCVUHhuvUVrWeuWep6sLPxXoMsl4kqNCkiXVyXiwdybZZ/kY8FX5Uc5FZ+gaPuv7fUHsgdOvor2aC1E/ziOJ9o3cgELkDkkHaeKGTG6ume3eG9Zi1rTtP1WBUSDVbYS+WpyVlHEij1AII/pVu5JV2TP3e9cf8AC1n/AOFfaLvQbTfXAhJUkKnmNnGCMc7h3rtp1UXrSkqyIoBXP3n7KfYDB/KmZvcctgZtPa3VvLnZQ8bH+BhyrH8evscVjadOkGsPayK0NprLNPCmcG3vU/10We27G8epEh7iteC8/fkFssTljWd4n0iO7spp1eaGKR1lllhGXtZkxsuFHfbgBgOq/Q5l6aguwxpV0TVW1NrfYhUQXxD/ACrEpLLJjGW2FjzxhGJ/hrXn1zS3nuNM1MRRhsBFuMNHcxspYMpPBHysCDjBX0Kk42gax/wk9k8VyIYtdsf3d1DFJmOT0ljOCGRgdwOD1KnvlypY6aIoNWtY/scKhbedgWNsGbLHf/DHuWIAAkqyjJwFYMFYzYvAfhrXbbztOvNSs7SY4e1jfC8HJADqSvIP3Tj07V2sR0vUGmto2tp3tz5cicM0ZHQMOo6d+tY0ngDwxcQhV08LGQCpjnfGO2BuxjpxjFSN4Mslkjkt77UbeaOBbfzopgGaNW3KpOMnGAM9SAASalJ9im0+ot5EPDzwvZxeTZu2GVWJRXJ4G0jCg9MggZwMDOa6C1uY7uESIfqM9DXO2PhvUrHUI5m8Q3d5bqNrW12odXBxnnI5BBIOOM46UzT3uLC6ntpmZpI5MNMykB1blW64ORwxHcH0qkSzraKghnWePcvBBIYZ5BHUGp6YgooooAKKKKACiiigAooooAKKKKAOe8Ta1Do+lzztIqMqEktngYJ7A5OFbA6kgAda830nw7qniS/g17WIxplnY7W06F3J8kE53sp4MpODz3Iz0Ar0+4tJcSXEivNjaTCmDu2njGRx68c+lc6zTajqzxXlwxuEBVILZT5dqWBAkYnA3DOck59B2rlqYf2k+Zvpb/P0uaRmkrWOQ1PxXczT3Gj+EIRDbrIVutVuRlXkz8xz1lYc8dB3OOAmgeHZDtKvNeXXIfULv5mAJ5VAeFHc46nqTgVn+D7FbDT4fD1/E66vp00hu4HcnzFZyyyID95CCOR3zkevrtlBCtujQhdhHGK1hBRVlshSlcqaRokGnxjC7nPVjySav3wiW1kEyFovKO9V6sPQVaUYqtqN5bWFqt1dTLBCHWMyv91SzBV3HsNxAyeBmtSDzPx2qJqnh6/ayuJLSWE2TRyyeU6hgQCxOQeSOD1NeR3VnPpl7PYXK7Z4HKkdmX+Fh6gjvX0r4j0yw1XRriz1ZkWB/l8yU4Ck8D8/r7jmvK9U8G38MIGo2FxqtiiKLS8sWCzRIM5BBwrbvU856rjpyv3G1LRbp9Nd0zqg+ZK2+1uvlY4PT9d1LQJp7jS742c80XlO6orMVBDYUsOOQOlbF14y8Ux2lu48ZNcTXAYvBaxKPJUY+8xQAMWz93I96oafDqlolxFJaataSOVZHjsRMuVyCG+Xd0JwVIHqPTQTRvFusQpaWWn6rPDwryXEKQKVzwFXGVAyeSSeegrROla7aM5RqOVkmvkYmo6pf6rcrdarqFxeTKu1Wmb7o9FUAAfgM1p6X4YvtQvFtZbW5W4kUNFaIo8xieQZAeEQcEhuWU8Yru7D4btaXFrdThrABiYoLRvtN1JzncZSAF2jaRtAwV45bFd9GmjeEY/sNhaySXkiNJ9ntwZbmYDALux5A6fMxAyQBkkAyk3t+P8AkW5xj/X6mboPh9/CsUd/f3FszRwEXVxJxHbxgjEUK9gMnnkngHJqSxuP7d1CCdIhb20UZbTbQrtKo2VNzIv8KnkID15xxk1yGn6nrvxG1Ce4/s5rfTbeXbbtejFtCwxljF96aTqADhRyTwSlek6dYwaXA6QvJNLM3mXF1K26W4fGNzH6AAKMBQAAAABWsY9EYSm27skuY0S0+zJkxqu0Z6n1J9zXL+MroXPha8aUlmFsIpc85IDc/iCD+NdNctla5PxSjN4ZvmDhY1X5wcdCcZ59M1cloStzmdTO2y1DLN9++O3scyRda7TX/M0XT/D3iuAMyabAkN+q8lrOQKJDgDJ2kK//AAH3Nee6rcsbS7OBhhdE/Uyx16dapF/Z9o7Bm3Wse9WdsMCoyMZ6e1ZxepTI/FXhm08SeG7jT/tkUUdw63FjcDpFP1R1ZexBIJ9G4rx+EmPU2jv7SP8Aty1hazvNHljKpd2+zGYnUEKQoDq5I6Z3EV65FZv4SUWpje78LzN8oK7n07cc4I/ihz0PVfdelvxT4O03xPDG10JLTULUYtdQtcLLCeoHoy5/hPqcYPNXuClY+eba9li099Mg06ze5nfypJ2gL3TFiAI1LfdOfQA80+9gutI1O5sZ5IvPtHMLmNt6qwwSAcDoePYiuu8S+FfEOmqZdb0ufVUSQMut6SMzKgOTvi4O4AdTlQcc8HPHXsGmQx+fZ63aahGZ1UwOGimb+JtynnHVS2Qcnj1pWN41GtYsdFb6ld6beX0NtPJY2qqJ5wMKoUgAD1IyD9M1FB5F1dAXt5JbwNkyTRw+awwOAEyuSemc1YjW2k2yW1hpjrIjK8MmpNGULE8MGKk4BUBhkHb1PNVZ3sTfwRpPZWsJCpLPEXeJSepwfmYL1JGc5OOlNohVZydm7mpC0mu6va6OmtXw05Wka2l1NgzxbYyx6EY3bcBQ3cd6LSC6t9Ggs4bOO61fXFWGzhLktbqTk7Rxs55Y5x1yBirug6bPdan5nhfTH1nyozjUb6HyrWF+7/MMHA7cng/eDYX1rwd4ItfDrtq15drqeu3KYe9xhIlPVIh2Xtu6n2zilYJSsavhvRLbRdPsNFgE3/EsiERfO1JXb5mbHqWJb8frWfFqHnWkt2nP224lniPYxE7Y2+jIisPZhV/X7tmQaRC0iS3UbmeWNsNBCNobB7O25VXpjczchcHGmwvyxqqDAVVQYVFAwFUdgAAAPQCm2Yk1tORLktnnk11FjckKCDXGodrDFbun3GUAzk0Act4p8FXWkeI18Z+F4GuZoUIudLRypdCcsYSPut324IJ7HOD0uh63pvjGyFxaXLM0RUTLgRyxkg/JLGc7W6jIyrYODg4rdilPGGwfWub1vwTaajqg1rS5n0rXVPF5bnb5ntIvRhx3BB7hqVrbDuXzLqWjXBaNo7jT+AYNoTZgAYQ9E4H3W4JPDL0rm/idqmr3XhWC+8M6hdW5tLiKXUYYHEU8cLrkFt3KAZBORjBJPCmo9K+Ik1vqkvh/xBYynWLEt9rmtk+VoQAVmC5P94BlBPXI4+UdOdNtNSntr2yNrLAiko65OzJBI4IZVbGGUHB/iU800wOK8H/EzUYtRXT/ABFHI+nzyiO11NyhaNmI2xz7Pl7hRIABnGRySOy8QzW9t4jt8gedLYTM+SfuxFWGR0IwXHr81eda/wDCmyvriaTRUs7J5lZfslypZIyc5MZDKwxnIVkYAnggAAdpDp8izJBJLOZZoore7uruRSZAoVWEUaszL5hUbiSAByMk0MEjZYXGlao2pjK2UwEd7DuyIyvCzqT224DD0APY56iuF8ZaXqeveHY/7Nts39tP9oFszqA+Y5IypYkD+PPJ7VueFP7UXwtpya1CYdQjhCTKWDEbSQCSCRkgAnnvTJN6iiigYUUUUAFFFFABRRRQAUUUUAFUbuyS6UEExyKPlde3sR3Ht/Kr1FAHn/ijwpb+IXg85m0/W7bLWd9ExByPRu49QefUEc1j+HvF1/perDQPFUSWepk4hnHEN6OxU9Fb26HtXp9zbRXURjlQOOuOhB9QRyD7iuT8S+HLLVtLbTtei+02DH91djh4W7FiOn1HB74PJTXVDv3OiikWVd6HPqPSm3NtBfWc9ndIJLe4Ro5EIBBUjB615vbatqnw+uIbTXp2vNFdhHb6pyzQ5OFWb27Bvz9a9HtbqG8hEkTqwYbhg5BHqPUUJ30CxxP9q3Pg54dH1uN9R05l2292SC4GeFYH7wxjAJznjniuinFnPtvU1OeEXMYMcschKsoH8I6AjIyPb61e1bSbXXNLl0+8QGORSAcZKH1H+Fef2N1d+E706NrI3WcpyJEy2D2kTjqB95cfMORzuBnZ26DequdXNqVrHGFbxOUActuCKWK4AC/d7cnPUmqc+uaIXbNzqWps2PlG4R5BB6HAHKj9aWS2RZMERsGUMrrgq6noynuDVcwqDkDjvVqKJbHXfiXUWt2FnaLZxAYUAjd7fT8BXC+KbPVj4YlvbG/aO6vJ1ivEUYaeIEMArcspBBPB5Gfoe3eIMpBGQap+TG0ctlOcQy9GxnYw+6w+h/TIoa00EnqdUzw7Y/syqtrtHlqowAMenrTg/GK5TwxfywNPot87Ga3YqrOSSV6qSx4PpnuMMcZArod5BIPBHFEXdA1Zkkj7lI9eKqmON1aGZQ0UqlHB7qeDU2cnNRuOaoR5BrUMtgt9YzZ8y3e4j5/iXzItre4INeqwtt0+0XJJFvEMY/2RXn/xEIPiGKMLlpNPXe3uZo1H5iu1hkc2tqDg/uYxjGAPlFYbNmh3eAwVWAZSAGBGQQeMGvJdKvdetNa1n7Jra3VnZq01nbyqWYw7lzHISOQq7QpyT8xIOMivWofmdM/5xXluiSI02tSIzsn2GNcsMAsVi3Ee27dVyewkdpBqFrfQWuoS28sR2qytGxYL3wcc4zUF9o+jeIZpJLiDSNRLgALcW6My9OjcN2P4mqmiOYtPRM4G3pTb61tp/wDWQozeu3n86roK9is/wr8MkMX8Lac0uzKlJJVUtkcYzwMZq5Y+ANG09gbXQNGhYHO9rUysB2wzk4PTn61lNYxqT5bzIvoszAfzpqWiMw8x5XH+3IzfzNA7s7CWe0ggMF5exyhjgoxB4HQBV4GBj09aqnXIUWZ7eHy7a3BZ5pQB7kKo6fU9zWE4S0hLoqqx6YHftWV4n1COxtbfSTIV3bXuCoyxY8qo9STjj6VLYlqReE5NVOoa3Jd6gs9jORPbQKpyC7cyOxGS2EC9SOGwAK3nTOSetR6VYPpumRW0xzcEbpueFYjhR7KMKPpVkrSGyi5289+1XrCUjA/iNVpI8knHPpSwPsJwee9UI6aCUbRzWb4i8VWfhy2iaRo3vJyVtrdnC7mHVmP8Kr1Zu31IFYuseJo9GtFcASTy5WCHdt3EdST2Ud2/AZJArJ0zQS98da1pzeajLgosi4VAM7cKc7VGeF/E5NJu+iH6jND0l0TUda1VS+r6sx8ybLKzQ5BUKv8AAvyjAPJAGfStGEXlo6G3mZZ+iyKdjY9G/hYfUVdcsXLOxZyeSa5/W/ESWM6afZwvealMdsNrEMsSehYgHaP1OOAadkkLc3Lvx3/ZFoZNajinVTt3BVBY+g65Y9gBzXQeHLubXbRb46C+lRSHchudpkcHodq9MjB5rD8I/DqSG8TXPFbQ3mqDmC3UZitQfQdC3bPP1PGPSqFcCKKJYU2r9ST1JqWiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUwqGUqwBBGCD0NPooA5jU9HEVrLCloLzTJBiWyIBaMeseeo/2fy9K4ER6n4IuBfaQ41HwtKSfJRsPbHuEz0/3DxngY+7XstYV9o7NI93YeWlxKMXEEozDcj0cdj/tAZ9QRxSauNMi0PXrDX7CO7srhJY26Mp7jqCOxHcGjxBocPiDSns5TslHzQzFc7G7H6ev+Nef6n4d1LQr6fXPCCSCSJR9t0GTAJA7of4uM4IzwMDPQdT4f8dWuu2xit4gNSEe4Wlw/lMzYBChuRkg5A9OenNK/Rh6HK6Lq1xpU91oOsRSRPau21SNxjJ5DL/ejYcnHcEgAggdKCJFWRSGVhkEHIIrG1e0TWbv7VqV5Fbzq5jt7uWAoFOc/Z5cH92QcEE5/vAnPMOkajcaXeNperw+QY2IkUnPl56SKRwVORkds56ZpRlbQGupukbTUE8O9eOvY1oTW5Ryp/A+tRiLtWhJzOsrcm1ivLYL59pKskoI+Z4wCDg+wPPXIA/uiuh0bVoda09bmI4lRV81T1ww+VvocMPqpFNmtyjCRQCR1GOCPSuTe6tvBOrRXMvnizuJxHEFQGMRufmjbHIIbDKxyMgDjJNQ9Hco74dqXaGcAkKvVmPRV7k/QUoCttaNxJGyhkZejKeQRXI+PLu6k0hNLtGaM3k8sFxuRlfbHF5pVSQOG+UEjgjIFW3YlK5wfiPVTrXiS3vgoWKaQQQkdoluE25+oUmvULTe1nZMIjloIm5PbaO3U15Te26po9rdgYaKe1UHGCMqXIH44r6L0S1W30awXylR0to1OBgjCgYrKOpb0HxtgKwxkKTz9DXkmiT79F1GTGD5cUH3s5w2M5+iivVNT3W1leSj7qwSuDnphTXkfh9W/wCEdKYO6WeP8QNxpz3QI7SxGy1RenyillfOafEu2JR7VDLVEld2ycUqJkjFAXJqZV2qWPYUAUrm4jS4aWbmG1TzXH94jhV+pYgVz+gW8mr69Pqd580dswcHqGmPKgeyjn8qbqFxNqU0Wn2nzSXM4ZjuAHXaoyegGT+Lf7NdnDaeDtDsIrWfWbWJo8l0W9ALyMcsQoOSSewGelRe7GMWQOxUuC3U89fenkcVSaW41rV4bLwzpUtvYxOrXGpXds8avzyF3gM/GcAcbsEkAc6d/bzafMUuVGxmxHKB8reg9m9j+GaYFOTCKSetc/reuW2kW4lkVpZZDtgtouXnb0A/u+rdBU2r6v5LfZ4QJLhgCF6hFP8AE2PXso5Y+1TaN4dW0vZNWvgZtTlUKplwfJTsoHQeuBwPc0r3dkMz9E8P3QuP7a19Vl1SXDJAOUt1H3RjpwOg/HrW+m7LOTknPX9TU93IkELSSuqr1Z2PArJ06x1Hx1IVt2m0/wANpw14vyy3x7iL+6nq/foueWFrQncqtc6h4i1J9G8Ohcx/8fd+wykAPbPQsew59cV2/hnwTpfhdZJbZXmv5/8AXXk3zSP64JzgHHTvxnOBjY0vR7DR9PisNNs0trWMYWNB+pJ5JPcnJPetOi3VgFFFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiqd9qNnpts1xe3UVvCgLM8rhQAOvWvB/F3xP1bxTeXen6BJLaaCq7JJooz59yDgHBP3FJ4GMEjJJGcAA7bxj8T9O0uSSLR7GLVL23fynun4t7dj1G4As7A4yqA98kEYryLVJLi/utW1eDWrOC6tUWWWGGzNp8rNwIw43NtOMFueeKitIryy0+SUaNdh0Xy7NzMVW3w2CxA/wBZnJGOBuPrWTrDNcw2lpcXAZraBbaS4lYvt3OzNluSQgYr9F4osB6lp3iHVtTsNMea826pLZqzpNAqSXMbDg/MNsykHIGCRnOB94snt7xpGeWxu4SrZRo9PZFVvYKuMdiP/r59S1nwtpPiPwvHpQYx2qxp9kuLZhuhAA2sjc8YA9iK5i+8CiO2SC2tby2j8xZZH0q4ASVwu0F4nIwMc/Kx555rJxZSaIPDeuEq+lamTFcQn90HUqQuAQvPJA6j2OO1dDt54ww9VORXKXPg2K0VXbXr+BlO9Hu9Plcqw7lwcfhmucv9d1TS7gMdS0iaJOFFmjGR92QzMp2nK8EcN+OKak46MLJ7HqIjLrjaa5rxK+mJYvbXOoQxTbhJAVO9kkB4JVcnHY1z/wBuuJYw58SRXMWwkMlwyrkeu5FNcve+JdQ0y2CW9xbRXsx3K1o6SLGCCGZjt5JHAB5zz2p8zeiQrW1NafxTqxtJvDuhRyz3G4ySNGwSO03Z8yNnPVM5YYK7dxBPFc+mo6jcs0GpeNb2OSyc+WLWGS7X51AbEq5OApKkEnGCB3rFsoEt7GS6kjlnjLmGG1Vm2zOArM0gXkooZcj+JmAyADWxouqrbu7apFrUk6o7QRWp8qCJQvy/ulUBlJYDqMfLzzVKKQXGWsOuXukP/Zl/DrFvDI0stgV23EKodquykbgCoyACcDqK62y8VW2saejvrEloTgOrSLFIhH8IYMAR6eoNcLavd6hbm21A3BuxbSPaXjhklBRCzRM3BdGQOMHOCBzgkVe8B6xpmj+KYG1m1tptJvV8icXEKyLC3VJACDjDfKfZiewpSgnsCdjt5Jlcpex6zNLJHDJDGwliberjDKQGJYHrjHUZFJoeoafbw2Nvd39patJIWRJpFTcqkqOvXJBrstRj8HvZ3qaXpOnx6msEhiZdLKsrBCchtgwcZwcisXwG/he48GWv/CQWljJdF3wl5aiR1QsSB8yng9eOOazSs9yuh1JRdg2ujDGQVYMD+Iqo6fMaq+I9Q0lPC9zZeFZ7W11NihtvIjEQX513YYqFA27utZEGsz/Y7o32qTRXcW4JDFZm4E3zHaVZRxkAAg5xnOfS3NE2N9EG4DgE9Mmqms3CwabcRW08P2goQSHDCIfxM2DxgZOO5wKqjxJeQCQLoGoyW55aa40ssrAgcDoSOcVjXsVzq3lx2fhKTS9Pcn7XqCWa2uUBywCk7myR1PB69KHLTQaRX0qMwW4vTHbOrjYq3PluFGPlyjMMnknODyfaqfiHxlrmn2sdrputOlxdP5UcMUEMUUKjq4ZTkH65Fa13qOnrqLNav4at9PBCETupmO1QBuYMRuyOoPfvXAeMNROpanaRNPptwlrb7WfT9xhLM24gFidxGBzUxV2N7HSx+NPGMdzcWU/iy8nnt0QM2l6RBcxKSOQzsBhh365zxRZ+OvFq20ralqMeqRLbF57doEt57b+8zRFQJlXr8p5z14IrkIbK6v7LSIra3t7i0t40Z7WaTbG8zSlXLAfeO4qCeqqV6Crt/barqd0b9NKsoreU7ZrPzv3O9RksqtymVC8r3HrxWrVyDvPD+o6dEwv7dW1FJCWFyqszq5+8zDbjdzjBI29BW+PE2lO7JC1zJKG2hVt2+Zv7qnoT9K8Qee+0KUtZPIscy+akNwCRuGQVZem5SSCcc8Gvf/h0PD15odtc6bqVvqeoRx7Z7kxiORWJOQYv+WfXGABkDqetQoteg9CSy8JyaxLHeeI1BtwQ0OmEAovoZT/Efbp2OelcnrHj3xV4U8cahY3otb2w84SW1qIDEwtShIZZB6EFTuBBKtyoxXstfOXxksL618epqU03n2t0iwpGzZWFdgwuOwZllOO/JqkhHt/h3xTpPimze50u4MjRMFnhbiSFv7rL2PB5GQcHBNb1fKGn6nc2GoDW9P1O8h1NQqNItuGU8gbZQuAynC9R1+bg817J4W+LulapNHp2uRnSdUJ2/vW/0eZv9iQ9M9g2OoGSaYHpdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVee4htoXnuJUihjBZ3dgFUDuSelAFivMPGnxbsNDkk0/SMX2oA7WKnKRn69D/nrXGePvipda+8+leHJXg0sHy574AgzZ4wvcKeR6n6VwMFukDZjLKQc7z95jzk+2c/XjqKmU1H1N6GGqV3aBZ1XVdV8S3n2jWr9nBYjyly23Homcn6nAqWC3A0uNo7m6tgY1PnwMpTcdxlSQbl2sGCqNx+6qkAg5NYAIu1VCj0Hf/GmkxCQE+WJDwCcZP9az9o76npf2XHlS5tfQe0sEMifPdFdrK108hbaSfvY/h474wOcZzmqdzaG1k8pvmjYZRsD5l9x2Pt71dUBmCkAhvlIPcHrVZy39k2CswYq0ir8wyFBxjH4de/4UlOXOtdHp+pjjMHCjBOP9bHtnwN1qW88K3mkzOW/su42Q5OSInG5Rnvht4Htgdq9Wrxr4EQJb6Jr2qSSKqT3yxAE84jQc/iXI/A16u0s9yP3S+VGf4n4J+grc8wsPPFGcPIqn0J5rnvFHiTw3oemLda7LC0T5WKJovMeY+iLgk/XoM8kViePPGGneCbFF2C91i4BNtaM2FA6GSQD7qA/ix4HcjwW6m1XxLrEt/eSveXsikvK/CRKMnA7Ko5wB19+TSbSV3sNJt2Ru+I/HQ1aSSPRtB0zRbRj8s6W6fa2GTzvUYTPHC5I/vVzcdpc3AFwRtjldibmd9qsw+8Sx6n1rqfDng/UNQ/0y2MFvYjcp1a9XEbYPDW6MQWOMjLcehqa7k8PaJerZaJH9oZGJudYuY1umVjyfJib5Ac9WC+wzjNc866V1FG0KLkY9mk6ackdvdXAgglniuJrODzRc2soVnMattEm1l2sOylTyM0w3mqpNNLH4n0vY+5HuVnVS6uzKRtK7ipKkkY44JwCDVi51Cc3bPd3K6zIrAwT3MkrKpGSGRdy7T+WMVFBqdxDdRTteXDMG3NuIYkd8nhj7ZbtRDE3WqZrLCT3jsLNLMsZnnubh45EW2gmubUR+TuTa0km0fIoXKKrNkhi3AwTkSadcJZC5VFmtCQomibcpyQBkdRnI7d8da6u31u+uNTtoLTxHqVraOxViAkCRMQSPkX5SCcZJz1Oc1c8N2lv4rmuI50FhrduguYdQsIVXzAG2kyxDCMVLDkBTg9QRzH1p3utCXhuVanF6TqMen3ayzWwu7diRKFKiXaRg7WYEZx2YEHpx1r0nTvAvgvxfpS3+k+e0a/IySBVkt267XjjC46n+Ig9Qa4/XdBuLPUlsbu2S21Eo0qXKt/o98q45X+63qDyO/rWZoHiC/wDC+rpqmn8sPkuLZmwtxHn5kb364PY8+ueiEozV1uYSi4not/4Js/CWky3+m3N/FKrpjZcPGpJYDJAc54J60o13xDHpt9ONavVaGeOKMbhjDTMhzkE52qPxrb8TanZar4Gh1Kwcy2d3LCY3PUZkAKsOzKeCPUVzFq6P4dnOR815CfqDcS/1FTLcFsdhp1vaX1kk2rza1ezMkMhKXTYw8KMcKrKcbmPABPSt+08I+Er9POhszcY4bzLiUsp9CrNlT7ECsvw9j+xokdQ2EhXJGR/qIj/Wpda1EeHdC1LXEYq1nas6DOQzEYRT7biODWiSJuzzX4leItPg1Ofwx4bsrK2gtztv7yONTI794lbqAP4jnJPy8YO7gobZ3hkkRNsEJUSOBwoPfHfHXAqK3imnKJl5bmd8sfvMzMcsT6nJJqzdtFNObeFWW0tyE2sMF3HUkeg9PWonLlajH+kXCHNqxTLZrCtukMt3Azb5Hdtq7hgBowQCDgYOeGHB6BhZNtodzP520R5yxgW8S3UnLHGJuVXlRhWfABwxqgzBRk55IAAGST0AA7/StpfCmsJEsl61jpKtgquoXIjk/GNQWU+zYPtSjJpdy5wju9CjeTWjLHDFEsqI8srG2crGjuRhYyw+YKFGScAknGRg1WjtlF5FcabfSW98oZlbcbeVCB/C4IDE9sGtc+GZf+WevaHI391p2jz+JXFU7/Q9UsLdprux32g5aeBlmiA9SV+6PcgCk5Sbugiqb0vc9B8K/GXUtMkTT/FtvJdQghRfQx7ZkGeroOHHI5XBwOjE1ra9oml+KrjVtVtteS+s9ZhgWAQxBltGiX5WLbuu4sSuAcFgcV48k5ZI0l3XNsqlURmyyKe6N2+hyKsabqN94dulvtKukKuAZEIJjcZ27ZV7Nk4DdeeDzVxnfR7kTptaoj8u70+ee0lLQ3Vnc4mCtgdMA+6nII7EEUTMbgnzdhBUKy7cggd2Bzk55yfwxXR61NZeLrFvEGnWxj1awixqmnZ3M8A481D/ABBSevUDr0rD0y1tdSuxZtqsFrM5UQySqWifPUEjlWIxjPB5HFTNNP1OvDOEo2ktV+R0vg34i6r4RMdpOJdR0YbV+zM+6WEdP3RJ5GMfIxxxwRmvfdE1vTvEGmx6hpd0txbvxkcFWHVWB5VhnkHmvAl8EW9s4XUdUkeNsAvaRjMeTwSrdejDHHr2xUFrd3/w+8Sedpl4kls4GZjny7pQMhJVHQjJw4GVz3GRVRk+pFWhF60/u/yPpqiub8KeKrDxZp32i1YxXEJCXVq7AvA5HQ44IPVWHBHTuB0laHGFFFFABRRRQAUUUUAFFFFABRRRQBXlmjt4nlkdUjRSzMxwFAGSSewAr598e+LtV8dzSW2j21yfDkBOZUXAuSvU8kblHoM/zrsfH/iCPWrubw3aOWsbZ1GourYEr8EQZHYcFsey+uON1W/XTrAqpCzSIY4I1GAq4xuwOigVnKdtEQpSlNU4K7ZyNpbvPNbWtnEXlmdYoIVbqzEAc+p7k/oBWyvhmZoJZ/7StngjkETyQRyNlgwVgocJkhmiUdATKoyAGKu8NH+yXXWHuYLdcvaQSSRiRkdtoYkb1K/KxG4E4G444qcaha2sqbfEF6kqLNCz2szMHVSzru8tV+V5HJOGYjafm+bIyPppc0PcpaJE7+HdJs1nm1K4a0SM+d9luLpJJ3gibbJt8pQhZ3KxqCeMMw3Y4ztT1NYrCLS7CCxgSSIveyW0KHzGdt4iWTBLLGu1c7uTu5IAqSLXNKs7u3ubLQY9oAaa2nRDEZACu5SdzhcEkKCAGPO7HOG8k0zF55pJZT1d2LE/nTHSpybvPoMkcxxs6qWYD5VAyWJ4A/EkCpfEMYsZrPRra2i86xgWOXyG3ma5cgtk4GW+6uBkAjjNWtPdbESa3PG7Q2LBbdRjEt0R8o+YEEL95hj0FbXw20ZrnVW8T6nukhtZGMDOM+fdHq/uEyef7xH92tKasrnm5jWU6igvs/m/8j0jwxpy+E7LSdLkKE28W2ZjypnY7nb3+YlQfQCum8T+J7bwr4cutZvfmSIARwBgHmkPCoD2JPoDgAnsa5q4lScMDhg3UVwHjifUvFOt2mgJOq2Oixh7idskGVxwCv8AEyr8oHuxJGapS7nmyaSuziZZtR8Ra7JdXb+bqV8+ZHwcIOwA7Kq8AegrXttNVzZJb2UTRypI8bTN8tysZO6aXsYlIO0Hgn1GAb6eFdMjiZPO1BmZdrOJwm4dcbQuMce9WPE0tzcrp0iwIkFvbGyYWoZf3QYMqsBkBQF69MjJFc9aUnrH+vMrDVqcpqL6/wBWMW+uG1S2guLu7mur1pJA4mdiqxgJsCr91RnfwB2HtUNjbNe6ja6fbvEs1zMsKF22pubgZIBOM46D+dXobWe/kS50/wANXd3Y2rgTx2hkcyLkFlaUD7xH91RgHp3rsL2LwbceE7Xbf6lbaekrNY30sIkbSrgHcYH2/OBnB2sCDwQ3QjOlTbV3p6noyr+z0SOSbSILKwt9Q1OW9kt11KfTLyGzVVlhmUZRVL5DA9egwOOtHiOy03R9ZvLHS21B49Pd0uJbuRGDEYwVVVXABJHfPHAxXTLba14niludL0GOzbU7uC/uDeTlo5Xi6NFEFDKrHlmPJBxWJrGmX+j+JTqHi/QmmtL64keUQSERs0meEfPysvUKxGcYqm47RFTqz5uaT76JlW88MalZ6dNdzvZM1tHFJc2kcwNzbpJ9xnXaFwcjIBJGR+FGyaGKUzSXOoW8qjCSWZUMBznJJHt0rqrTT9B8Vano6yyX00NrbC1SDAe5Malj5t3Ig2wxg4UY3MQc59Oe1abTF1OIR3Wm3c4wLm00tTHaRqoAVI5TlnYgEs+CMnvipqw9262HCvKfuy39C7De6hqENlpmuX0k1lqD4tJpyGmtZc7Y51P3gu7CkE4ZS2OlY2vWbLaw6nPcw/2hJcS2+oWiKqm3dDtU7QSSCVZd3fC9M4rT0fTl1bxVp8EIuvsrOtxvuiCwhi5PzDggMAoIx9B0roPGUDvB4viVdsM0VpqoUFVHmYKNnPzE5iYgL13HNGGkuaz3t+pz4lW2OR8NavJb2l7oLlntb6eGeBQeI5ldSxHsyjB9wDW/bMw0LyyVJ8+zPynK83cvQj2NcRYSmDVbGYHBS5jOfqwB/nXZ2ZVLFUUhgJ7VcKM/duHP8jXVNanMtj1HQlxpZHXDxj/yXirA+KjGL4bahjIElzbI+O6784PtkCuj0Zdti/oJEAI6f6iKqnjnT5NX+HWu2NuAZ/s4nUY5JiYPge5CkVa2JPBNMdF1SIlZWC7iRCjMwyCAcKCR164qrCzIgSYMkxLMyyKQ2SxOSDg13vh3y4fDenm3IUTwrLIynlnP3iT3wcj2AxVy7gg1CHyb6JZ4+277yn1Vuqn6frWErOTf9aGccXyvla0OX8JYXWbydQhurfT5ZbQk4KSB4wzrz95YmkYdcYJ7Vt6Do897ZyanN/Zt1BdosMizzmKWBhKN+GZW2hV5ZsHKkgENweWu7a78Pa1Gba5dJois9pdLgHGSAfTIOVI6HnqDWraatotxqVvqVxBbaZqUMgkIlgMtlMehyoy0ec9DkA8huAA0bVI89px1Ruz6dp9ncyW82h+H4pIdwkH28kMyoVZQSmAx3IwUkfMAR94g1FtSl8l1pmqaLpARVjLwXTBZidrCQpgEbg+eBjCtwCpBmgtr1rRo9L0rw/eRsjxrcRTxyyAMGyxbC5bLKQ2ONijH3ibDLr8bSS3tjodjE/mh3uJUiVVkVQwBDDGGXcp6qzHHHFMwt5HNaxYwXmm3OsW0UMNxaXAg1CG3IMMgYkJPGBwoYjDAcchhjJrKsdRuNMnklgSKaOWMxXFrMu6K4Qgjaw9RkkMOQa1NS1DT7TRJtF0qf7a13IjXt6FKxbYySsceQC2WJLNgLgADPWsOlezudtNNwtMv3du2hXunazol5KbaQ79PvXUK6uqjzIpF6EgkqwPDKe9dDp/9kavpEiR2cK2xmJltAPmtJmyxVT12Nhih9MqeV557RpYGmm0i8kWKx1VljaYoGa3nB/dyqeo5+VsEZB9hVa2vLrwzrEstxbb3tnNtqNoxIEsQb5l7YIIDKeoIBHStdJo56kNbX9DevzLpIK3895eQOwEE3mYAAHCMBg5GOucEZxjmqAuBqAdLTRXuGbPzKrSFfcHnafoRXQ6xPDp9ky3rS3mkXaBrPUrddxyRuQSDs44wRw3oDkVg2H9q+JZ/s0mtqj7A22eVlVsnnaqjnHUj8ays1ud+ErSnB8+6/Hz0F0+71nwtqNlqMDmznUFYmkYMhTOWjlVSSYyTnHVT8y4Ir6G8IeL7LxhpZubYeTdwkR3do7hmgf6jhlPVWHDD0IIHgS+HtJs5jDdanJcXTBWWOzQNuycE8BmIH4VHpGr3XhfxCs+nzSPPasY4vMiMZmQkEwSqeQD2PO1sEcGrjK2jDEUlP34b9T6norE8O+ILHxTo0Op2DExPlZInG14JF4aNx2YH+hGQQa260OAKKKKACiiigAooooAK4r4keMB4N8JzXURX+0Lj9zZowz85HLEeijJPbgDvXa184/EDWF8UfFN7dgJdO0RXTYWIDMi75ScAkZYKmR2WgDntN1LU9Gs5LGWGJpS/nGWcEybnAZiwzgnkHnkZwa1rTwzcatYtqtxq8UcqoZrwTRljFDjKsNp54x8uBjcvvjnjK87NPMzNJMxkdmYklmOTyeT1phhQkkoMkYJHeudu7ufQ0MFGjH3NJdXu/P8ApHRjwNqzW/2tWtYuuY7lWhlXngMCDtyuW5O0YIySKhm8I67EiOtrFMjyLErRzbSWYE7SrBWGMEHIGCPTmsuG+vrebzrfUL2KXu6XDK3Qjrn0JH4mrcHiPXbZ0aLWb1Srh/mcOCQpXkMDuGCRg5HJpaGzVbo0Urm2ns7g29zH5UqgFl3K2AehyCevX6YPcUW9pLd+csREaQxmWedvuwxg4LMfXso6s2AKfsudRmvLrap2nzruZY1WOIEgFsDAz3CjlsHAp0cNx4ln/sXw/bypZRAS3E0x5cj/AJazEccchE5xnAySauEL6vY5sXjPZLkj8X5EsVo3jHXI7DTIZbLRLBPvNy0ERPzSuehlkP8ATsK9YZbWLSYLDT4lhs7WMRwRrztUd89yTyT3JJqnosGl6RoMen6UpWLcTM8gHmTS4+Zn9/QdAOB71ZHlgVkiO2BmyWGdyew9s1Tdzw7dyW1uvss6i4J2KQ3P8QBzt/wrk9Bulv8ATbu8D7pZ7+eSYk5JZm4z/wABxj2rU1m7SSa2sCh864DRkrztUr8zA9DxgD3YV5vp1/daWzTWcvlNyrqVDKwBPDKeuPXgj1FJLmRnWg5Rsj0WszX7xbbTxCJCksrBjtbBVFzuJ9jnHvzWh4ftdX1+w1NJzFpmp25haBWgJR45A21myWIyVYZAOPQ1zs1pe3mox6bdRxx3tqzRXEsjZGFbczSN0KqvcdQQByQK56k1G8fvKwmFk5qctl+J0enWutQaVY6fqWjy28cLvJZXMGtx2F3F5rbm+QthiTjAYAgcVHGyeI/iNaWt/bXCLYQtDMl5IrT3UkILKZSoCs2TgYzwOpzWfe+LbvUbyS+l0fwybiRtzXB0kM7kcBtzsxzgCsqW5u59Tkv3uSNRknM7SxnYyOedwxgL2/MA9aKkrx5YM9CFKcm5W18j6U0W3WHTop+HluEWSSTuSRnH0HQCqfjQ6cvgzVzqqo1p9lfcH7nHygf7W7G3vnGOa8j034o+JdPt1hNrY3YLEK0ishLc54XjPBzjA68Vh+IfFeteK2gbVrmJLWOX93bWylYlYYyxBJZiAepOBk4A5q4TSp2sZrCVXO72HeDcyX0tjcxXVwk9nuaCK2e4iaZSu1pokILopY8dMkZFbeuSamnhTUtPm0zVLm3O1knl0WKwtrNVIJdFXLk4GOSOD+FcXIrIzRszI3KgqxUlT6EdRWze6vc3HhyGIyacs81vFYzvErm4eCLlVbLFVGQN2AC3HaohO0XFmlSk1UuSaXrdzo2rxa3dPbT2k0a2twkUqhoYugAj4K7cZ4BB55ya2fGJhY+LJC0Di00qztFVj8zNIzspUZ7eah/KuQe3tL6e2gjD28csSrdlvmEYXJkdSeSu0Fsdjx3FXPGdy4tbW3uLaOLUNQnbU58k+ZFEw2wxMMDGFC9z90dKWFj73NbYzxT2OZsoDcanY2y8mW5iVQDjPzA/yBr1C98QXuqPcW9ldyaTZSvHGiafBHE43OVBLkFs/Lk4I61wXhm3kfU5dUCFoNMEYLZ486ZgkY/AFm/Cun06PbLsB4Wa3A/7+Ma65vU5VsdPokHifR9Ve3u9djvLW4bFq11CAJpWVWWNpF/iIYD5hz/CRXUR6mXiikSMxyyuY3hfkxspxIG9ccr75ppto77TL2xmG6OfavPZhDHtYehBAINYvhyaW6sre7uWL3M0Q81m+8ZFYqxPucAmhaC3PPrzPgbxHd6Ddxu2kSsbqwmT5mjicnAx3AIKsOoKkjg1rwT211H5ltd20sf95ZV4+oJyPxArq/GnhYeKdCihhZY9TtmMlpIzYVt2N0THsrAA57MAfWvC4Y7N7tE1KGVIFk2XKqAskYBw3VWwR9D04puCephOipO+xv8Aie+try+tYraRZRbIweRDuXcxHyg9DjHJHGTVLRtPXV9esNLkvEslu5REtw8RkCsQdo2gjJZsKORyRUWoWf8AZepSWRuYrmIHdBdQHMc6dmU9Nwzhl7EGqx7FSysrBlZTgqwOQQexBANY2s9TupwUYKMTpJPhrq82rG0t0026QziBLl5Am5tjOw2ruJZRG6sFLYKkDODizpXwp1XUbJpsWUF1I/l26IQ6hlcrIHYLx8qsyspZSVKk5IFZ8Pim+u9d0+48R6nfXempPF9oRZjDhVJIkHlAEMpbfuHzHBGea7nVvDVlJcm2v/GOoaYkrtM4k1Vi1wSBErbXdtqK6oVY5LJKASNpItWZLcloYk3wwuri5uJNN1MjTlePY11ZytOI5EBUlVUEnflSAo24yehA5vxJoM3hzWfsbNLJbyxLLDLKFDHqrI21mXcjAq2D1HoRXTW2h+BbPVomvvEkl86xJBNb6hfxiKRmyrEsgbaIxllUnrt+b14I2kNlc3Nvb3Ed1FFMyJcx9JlDHa4+owaUloVFu4ksYmiaMnAYYz6eh/A81ra/M2oJpOuySSSyalabLlpACfOhPltkjrkBTkjPPesutW4jc+ArCUzStGmr3MaRbV2KSMlsj5snA65HBxinT3JqrRG14FuluvDl7ot0qXEdlIYzFJyHgkyyg/Rtxz23DHSs/W9C/spYmZy2mBtsN+ykvbk8LFNt529cOBnnHtTPAkzp4wu7UDKXWnMzH0ZGyD+hH413hG0MpVWRlKujKGVlPVWB4IPpWj8zKMnB80dzgNM1ebR4Ws57V3i+WeFY5PKeNmGdyuoyUZScjkHgjpVbVNRl1edZbi3t4yqlB5SnLKezMeWx2Pua3NT8MtZwtJpds95p4LO+n7iJrYnq8Dcll9VOenIPBHOwW73kUk9gr3UUeS6qo82NQcZZASR9Rke9Zyg0elRxEJPXRnT+CvF0/hbWG1KaTdpkhji1VMEkKTtjuQBySpwrYznI4JYEfR8UiTRK8bB0YBlZTkEHkEHuK+UdGtxdXkT3EUi6ZLK1ld3GQFjVwVJbrtwSrZI/hFetfBDxPNf6HceG7+XfeaSQsLFs77ckhceoUgr7AqK0je2pxYiMY1HynrVFFFMxCiiigAooooAac4OBk18ieG3u9SfUmjVJru9sLmRwx+ZiW3sV/wBrjvX152r5OvNPvvCPju5sLVDFcWF20ltuB2tCzEqT6qVIBA78daaTbshxTb0KsREsSOg3KyggjnjFOIIOCOfeug/4RkWmnJquqWNvdW9xckMPtBRgXG4BYgAoBALDaeV5zjmsK3bSYlnW8u9QCxzlYYLWJWYx98yvwMHIHHQfSs5YeUVe57qzGC1nG33PXsRO6RrukdVX1Y45/rVu5sZLCyFxqLG0MqZt7YkC4mBHDbT9xec7mwSBwKji1Ka7u1g8N6S0E6qytIjG4ncEdWdhtTH+yFAzXT6L8O0kJvtduxc3EvzC3jcspb0lk6sfYce5FJU0tzkrZjOatTVvPr/wDn7TT9S8VxRpBDHZaLacAopMasfvMM8yyE9WPTgcYxXoWlfZNE0ZbOxhMens2ZWPzSCXGCzt/Fn8gOlTCMq6W8iiIINqKq7VUemBwKlFkkAYKjFXG11Ucn0I7ZFU9TztzPuEe3naSEAlsb0z8si+ufX0NaFs0ctuBlXklBCF/lAwMtvP8O0ZJbpgE1Fa2Nx9tTTBbvcPL80Hlj7q+rH+Ffr0NY+oatEVlt9O23GnHK3WoISBeyKeIYP+mKtyz/xkYHA5hjK222t9aW9ik83y3BjmZcBVHTg9iSzHuMqDyprhtZsvsesahZuu0eYzJ7o/zAj25rubd1mADqoRjiNyMY9Vbtn3ql4s0SS50+PULdC1xZqVkQDJaHrx6lTk/wC6T6VUNBM0fC2vIt5o+sXM8zwtAul6m7RhYrY78wksMDO8ZPX5ZCTjBrl76GW31nUIb1GeeO8lEylypb5ycZ9wRz9KoaJq66VdSPNCLnT7qMxXUOFYsh6suQRuxke4JGR1HTXQ0XVNqya0F8sCCHVyhdCgGEjuxgYZQQolXgjhhkAnGvSu+ZfM2oVVF2Zlpafb7uCPT7eaOK43BDdOpXK5LbWwAyrj65461du/D99aBGRjcyEhWQx7SBuIDAlsEZU9+eCM5q/e+GPFFjdQanLbW+qpAFZGtZd67FHy7UG1goHI2jjrVOx8UvBNazR2NuqI+5midgy5XbhBkbRjBwSfmGQVJrnpuNtXqejCUVfXUox6TqrRwzR2Mh2qwUnaGTaNzbgxG04y2D25xViTw/fxW6JGjSzEsZrfaF8tl4IBJ+ZsllIHdW9ObM/ie4SYmxg2Qqdym4kkLDlT0D4xlF6ljgck1VTxbqCsHh8jKEDcFkkAHzDadzEHIZsk8/MTnPNVeHdlOUUtGyqVk06S7tLiCJjNAo+VgwXJVlkVh16EcdckdqlsNPfWLyw0rTLcNfTFmmnlOFGO3HRFUZz1LMfanSale3pFzcW1tKiKsMD3ERMUC9lUMdpJJz8wZielXLOS10G2uG1OW4t1nRkkSEhbm7VWwYFGd0KFh87MAxG3hR1iNJzk+U56tWMFoPks9G0aG+aa7i1GK1ULctkot5IThbeIA52BhuZ/4ioUEYNcY32rU9SPkW7TX17MFigVixZm4VQzHJA45J6DJqa9up9d1pDBYj7TNths7G1XJRF+6igYyAO+B6mvXPCPguLwhYT6pqBiudeeIqpQ7ktFYYKIf4mPRm/AcZz3xiqcbI86UnN3Zz9xpUXh7w3a6RBMs+biOW8mTkS3HmLkj2UDavsM/wAVGmKTcydOLmH/ANCY1c14JHZ+QCGK3lugYdipy3P+8wH1U1HYRmO9kU9ftMJPH+yxrNvXUo76FtiHnrKq/wDkOPNYmiJLbpdQyJhYNQmVGHQqxBx7YOPzrSRnAlUggeaWXPcFEGf/AB2mQGOLVTDLkQaltQNnAW4UYAPpvXp/tKtW+hKNDeyhcE4HI9q4bx54KfW2bWtGhX+00TFzaqMfaVHIZf8ApoPT+Ie9dtFvQtbzf61O/Zh2IoIKEEEgj9KtMR4Jp+rxGyj0nVzcPpCzGQ+TGDcWrAEER7vujONy98EdzTNQ0u60tIXuHiuLSZVMV9bEtA5IBwWx8rDOCpxz09K9R8WeBrPxIz39m8dlrJHMpGIrnHaQDo3+0OfXPbzNLnWvCN9Ppt3AbfzR+/0+7QSQTg8Bgv3WHoyn/Ck4qQ4ycTPIzwR+BqJba3XOIIlz6IBWpa2em6h5aR6nBpV22d8d4rLa5xn5XGSgJIABz0JwOlS3nhvXrFPMl0m4kgy2J7TFxE20kEhlycDB6gVm4NGynFmUqqgAVQoHYDGKXvUtjaXmqM40+381Ywu+VmKou7oM45P/ANerF/o2qaZG0lxapJGpVS9tMsgDFd2CODnAOeuMc0KnJrYrmRQeRYoy7AlV5wOpPYD3J4rY16zj0rS/D2neYxvBaNc3qAkKJHclcqf4gCRn0xVzSl0bw9Da67qNza6tevH5tjptq5ZEY5GZTwQw9xgYOMnBrmZ7h3kluruRpJXbc7MzMxPZQSST2AySa0hGxhUnzbHR+AIGl8WX1yB8lrpxRsdAzsAP0zXoJTIrlNH8H6lpelpeQ6k9jrkzGWaKQGS3KkfLFIqjIZQPvDJBYjHeug0fU5Lu8Om6laC11RY/OVFcPHcRZI3xsvDDIOe4OQelVfUgspBI8oER2spyXH8P/wBesjxH4X07UJVvY5m0/V1OUvIcruYd3C45/wBpcH611U7x2luAF2g5wueSa5m9ui7Mc5J70LURyDyanoWsxz+I7N7+0dwzybi0U2F27iy4ycHB3YPAzXSaPFaeCfFFl4xsWkm8NXKNbXUsWWNsrkYDgcnawUnuRyB0zCk7pviKCeCYbZrd+UkU9QR6+/UVmX2jvoEyXVpatfaHK+/7BJIweBiuMHruUc4Y544PrW0ZK3LLY1hUTjyy2PpeGaOeFJYmWSORQyupBDAjIIPcEd6sV5B8EPEsmoaXqGhSMWj09lltDv3EQuWxGT/slTjJ6MB0Fev1izMKKKKACiiigBO9eB+I9XfWviJfXU0dre2mkXS2cVhNOId4AyxJIPBfkkjGFAr3wV5b4k+DOmeIfEF1q0Op3VmbpvMniWJJFL4AJUsMjOMkc856dKqEuV3KjLldzzLXvEFz4n1m3tNMt3a6kJVELB281seZK7LwWIAAx8qqqgYAxXUWHw58OWUEC3q3Op3ioPOaWYpBu7hVXBKjpktz1r0HQfhtonhywmh08T/apcb7yZg0hx0GAAAvJ+UAf1rPvLGa1n8qdQrjkEdGHqD3pym5adEE5uVvIzDZQwWq21tBFbQKcrHAgRQfXA6n3OaII2hLOoyD99fX3q52w1MKMhDx/eHr0I9KholMr3KPdOGO0BR8gUfeH9TQb2CztDLeyGG2DeUhWNpJZpNu7ZEi8scdc8DqT1q4I0niOzIXPzKPvIfUVxWsQXGkeObrVZnluLC7swpAYhbZm2K3XhVYp97oCVVsZBMMtF7XNUknsGsVQ2lhMSr2MM2+W49ftMqnCgj/AJZIe53NjisSSF3YTSbvKVQuxFCiFRwoVRxsHTA6VpW1nCrM8O0xOCrLjbz7/wB1hVyOMRsV5+XGDnmlYRUigWNthRWVgN6jlSOxHvV63laB1QvuQYMUo52n0J9Pft3piQCKQBcC0Y5IP/LJuxH+yfTtVkwJIrRyLuQn5lBwc+o/zzTA5DxL4MYCXVNFiBG/Nzp6jlST9+L/AGc9V7duOBy2mazeadIstjOjKGDNBMu+JvZlPv16ZIGc4FetwI8LKgkLAD5HHdf7pqlf6F4UvGitLyENqNzePOIYX8uSGF1GSpHO0uC3ORuZh7U+awrHM6R4vsLWXdBJf+HZC7MUtMXFmSSSP3Lfd9ypXPpVEXr+I50uLyxh0+4l3SzT6bCzNPxwWjJKpuPVh3OcVV8X6BF4Z14WENzLcWk0C3ETzKA4UsysrEYBIKnkAcEVv+Gbqxi1p7XU7uC00+5aCSSSb7rCGUShc/7WAPTH4VpChTmnNq7X9fM6cPFuMpdig+j2lvAs09t4isyrBvtNzGGiOM4Xa3Dbjgc8evGcacHxE1e3kjs7+YWNisOVfR7RRLKwI4wxKpnoSFOODV/xLq9peeGtUtv7at726utfa9t4luDMy24AVRnGFGBkDoAcdeK881W4RZFBPEKndjk7iR8o9+B+dVKjTlDmcVcucf3Lk9HfQ2rrxxdxObjT0e3uVDKdU1Cf7TdFS2RtLfLGccfKAMdqqaF4S1rxNK91bwmC1lctNqV2pVWYnJKjALseTxxXb+HvCFpo+lWF1qmmQza25Ms3njeIA3KxhT8oZVxnjOTjtXbz3DyRYboMY54A9B6Csr20Rx2K3hTwtpHhe2f+z42kuJFxNez4MsvqMjhV/wBlfxJp1/dTSefLCAtvbjO9ujOThQB/Ec8Ad246AkRW98st1cW88xjtra3NxOy9SAQAo5HJyPc5AFTR28lxNBdXtuIBFlrWy3bhASMbnI4aUjv0UfKvQkw7t2HscfrVq1naWNqxJkSZS7E8sxYMSffJOafGjvqV0kedzTWyrn1KNVjxGQ11Hxys0RJ9csBUXhxxd6/fOVDRx2lrMSf77KwXH4bqhq8hrY6xjtIXJIUBcnvjioZo47mJ4Jl3RONpGcfiD2IPIPtSu2FOOtJFjkkfKvatBEj6pwsGpnyrxOI7hRlbhcZ3Adm7tH3+8uTlTbWTeiklSGUMjKwZWU9GVhwR7/14rOnhhuoWiuoEngf78bjI9iPQ1y15Z6p4HL3thfPd+HGmV7u0uQ0klluYBpIz1wM5I6Edc9QLQNzuCAKiu9Ms9ctRp2o2cN5bschJh9w92Vhyp9wR+NOUqW+SSOVcZWSJgysOzKRwQRzUqkq2QSD61QjzjWvhKyO8nh3VVkiJIFpqR2k+u2UDBHpuArjp9K8S+E5Geew1PTFHLyw5aFh6llypH1GK97OXO5jnA61LFLJCDhjtb7yHlWHoR0Ip3EeD6C1u8CxzvthZ5EkbcVUMwyjPtwTHu2lgP4QcdK7a98N2NxptvHpWlw2OoXNit/ZeVMzNdPEMXNuVYn5l3KVwDn1wGrB8Y+EbjwtfS6zpEBl0OU7pYlBJtCTkqw/uZ+63bODUOmeKtulJbDxNqNgkDlraBIQwUEYyrgZHVhweh966VO8VZ2aOlTvFWdmjnb2BFkiuIVCpcH5gFxhsZzj3H613fgjwzYJpmneIWZry+uYzJCGA8u2OSpCjuwwfmPTsO9cRq19bXFyiWRupoQ4cGUBpZJGAyowBuJYtg4GcjivUdGiHhDwVpenX2ReRq3mRxr5jmV2L+Uij7zDOMA4GCSQATWVWUeZtGdblc24mqyRwK8krICimR3dgqxqOrMx4VR6n8M1i6XmfxHceJHXFklmbSyWSPa8zMQzTbSMqvGFDfMQc4GasG0lvBHeayojgUiWHTw+5Qw6PK3/LRx2P3V/hH8RrX989w3HC9hWSTepk3YZf3zTOeck9/aswo0r7VBZiasxW8lwwVFzzgkDvXe+HfBG0LcagpReoiPDH6+g/X6VpoiNzC8NeEp9RkEjLsiB+aUjgew9T/k16Omg6cummwNurwNyQ3Un+9nqD7jGO2K0ookhjWONQqKMKoGABT6lu5SRgaL4W0jw3NeTaXZLBLespnZT98rnbkdONx6DJyScmugoopDCiiigAooooAKKKKACqt3ZwXsBhuEDKeQehB9Qexq1RQBwuqaPPpzFyDJAekoH3fZvT69KzMlTg8ivSioZSrAEEYIPQ1zep+Gw2ZbAAHqYGOAf909voePpTuI5jDowkiba36H2NOmiivoecrIgPoWXIwevBUjgg8EcGkZHhkaN1ZXHDKwwV/CgH5g4+Vl6EdqTQzkrrTbnSJi1rEzR4Ja3UFvlHeLuygdU+8v8ADuXgT2d3DdwrIjK6sAQAf1BrqZES7jMcifN97aDjBHRlPY1zGqaNNbXDXlmV81my4yFWYn+92ST/AGvut/Fg/NWbVtiix94sUXPIBVhn65qUxlVUM27aMRyKTlR/db1FUbK885SCpG1irqy7XRh1Ug8gjup9cjIINaCZIGDuHWmncBscThijcHqcHge4qDU7G3uLuyvp0Ie1Roo7hWKtGzfdLdmXP8J71pRxEjJ4qYxo6NHIu6NhtZfUGjcDD8S6AnjHRrWeN47bVLVmjVpD8gfjdGx7K2Ayt2yD0Jrz5f8AhJvCs7w3GjzRlo/LPn2hnQrnOFcZBU/54r0a0uPsN1cxzufl2pcA9Nv8Eo+mRn/ZZv7tdXZXlxEm1ZZEIOHVWIGe9OM2tBptbdTxSFfFviNBbWGjTLbmYy5S1EEaMwAJMjAbVwOnQdq7zwl8PLXQZotT1OWO/wBUjO6NVGYLZuxXP3mH948A9B3ruJXluFAkkeQr03MTxTEX5apybJbb3MWdiUJmYs28liepPrTJZi9qqgnI+Uk+1T38e2ZsfUfjVSINvKn7rDGD2NQwRmCwRvG2nX02olLS0YD7C+dk0zKVRhjgkZ79MDHU11k7nerE89/rXHa+rounXUaAvDfxbuOysGOfwzXVXbYmkAPG8kY9DzSTG0YHiaya20SDW5JkMVzdwxIm0goVkI5PfO2qfgUKdEnlIxP+4imH90rEMD9SfxpPHuv2TeDtN0KJybuHUoXlTjAUMWPQ/wC0OuKqeGbhdP8AG3inQsEI7rcQHsGQKGUe+1l/I0tL6D6HWO2WHtTz8oCDGep+tQxnq57c/U1JGC7hcgFj1PQe9UImiICmQj7pwue5/wA81k69eQtGdLlQypcITdLnpGeNv1OePfFaF1cpb27SbSwX5UX+83Yfiay9Asnnnk1S7+dzJuHcNJ2/4Co4/wB4+1D7B5mvpGmW+i6NaabaRtFFApwjnLDcSxye5yee2avoCzY7d6jGWbPc9zVgfIoA6npTEOwC20dB1p5HGT0pEXAx+dOClzwOBVCEi3+b+76nI9iO+fauIv8AwR4Z16/NzaWBsLVSTLd2UpjW4boQkZBUKD1YAZ7A9a628KTRGJ2K2h4dRkNN/s+u32/i+lc1Pqt94gn+xaCVitkysl8ACiAcFYh91mGMbvur23HgS5dEOxkw6P4f8NaqkeiWFxqOtgAxvdz7zADwHYqoWMeh2lj0Ud62obJNKla/1CX7Zq0i7SzKAsS5zsVeQq552jOTyxY4w6JbDw9atbaeu+dmLSTsSzOx6sWPLMe7HntwOKhtdL1HV5isETtk/MccD6k8D8aaj1ZLfRFO7u5LqVndizMfrV/R/DN7rEgKRlYgfmkbhR+Pf6Cuy0nwPbWe2W/YTyf881ztH1PU/oK62ONI0CRqFUDAAGAPwq79hJdzH0bw5Y6QgdV82cf8tGHT6Dt/OtyiipKCiiigAooooAKKKKACiiigAooooAKKKKACiiigChe6ZbX8e2eLLD7rg4Zfof6dK5q+8NXdsS9sftEQ5wOHH4dD+H5V2lFAHmwyGKSKysp5BGGB9xUhUSKQ4BJGMno3sa6rxDe6Fp9j9p125tLaAcCSdgpJ9F7k+w5ryPUfir4bt71Y9K0zUtQs+d9wWWIH02Bhlh1+8B2pNAa2p6GzMbi0JSdVwGwW+UchWA5ZR2x8y/wkjKlbJsKnnIiyMucqwZW+hH88D6A8VLofivRvEsph0u4mN0qbzaSxkShR1IAzux7Vm6pe+Fra7a8m137GyqwmitMyAyHG1ymCAwIIK8BgSDyMVm9C0boAxVfUb630tAszxfanXMcDuFPszDOdue3U1jR63eT6aZtMWG4ukDNttPn85R/FCG6n1VvmX3HNc9Nr0CXc6zaTdzXGxj5zWTFi2MgZb34P40nLsFu5be68V3FwuoX1tpUkVsjZW2ZfNaLglWIJLADOAeeSB1NdR4c1G3vINtvKssQH7tw27KdACe5X7p+gNcvpura7dRbl8JCNlAwrIxZz7AGrX2q50d7TUNQ0OTSLqadlkAA8q4ixgNgHCuvAPquCckUk2tx6HosLdCeQOD9KkZNrFex5FUradJYUljOVbv8A571opiaH5f8AWINwHqvf8q0TJaMfUEy4f1GKoH5X464P8q17tQ2O4NZzIFOScYpMEYPiPLWiooyzSeao9MRPuP4Bf1rcubmKK1N3NIkUKwrIzuwVVG0ckngfjXO+NU26ZbTK8qBHeJmiIBBeNlUHP8JJwfrWRrGtXurWNlZWE5s4YYI1nZ4Fk86RVGflbICqRx69alPUbMjxdcxanpcN9baPY6cv2xBd3lrqSXZmkYblUlfuthWOOlbOtEW3xF1lbGeIyRwrLFIp3LuKoV578nB9s1z90NbtLV5/7ZiMcUkbFRp8AGSwVSRjBILflmtPVU1jS9f1aHUtQsb+6somlu3+yqjMoUNwAoySCv4HNTJMpNHbadqVvrGm295bFVDrmSIMGMbZIIPtkHBrQQEKFX77jH0WvP08Sy6c+2ztNPYDYHlslBjbdGsm0sDzjdtP+0rVpah4jfV7M2VtbNZzzMEvZmbdHDFgFtrDluCM45AyByau9lqTbsaL3bavdx2lm4AmDGNxz5cKnDTH/eJ2qPT/AHuOljjSKKOCFNsUahUUc4A/me5PrmqGlaHb6DDKsSXBmuSrSzXAw7AZ2rgcKoycKvAzjnGa1UXauT1P6U0Jj0UIuT26mnrkncep7egojR5m+RSVXueB9Sayb/xXpemzJDGJNQm4Z1tvuqvXG7+8R2p3S3C1zbO1IvMkIWMHGT3PoPU+wqhq2sWuk2Mt1qEyW1ugyVY8n0zjqT/dGfxNcjqus2cWvA6vrsNu20XMLyNvitlbO1EjUfMwXgg565PWsJ/HXgm31uxLaTqerWti/mrfmUhy+CoAiYgbQDkcgggHPWkpuWwONjpR9t8TszX6y2emt8v2XB86ZT2cLyqkfwD5mH3iq/Kejg0XVrqBbWxsf7PsVAUNKAjEAYHyjnGOAAMAcACtnwb418KeIrVbTQLpEkiXJspF8uVfU7T973YEjJ5OTXY1aViXqcjpngiztcSXjNcSdwOF/wAT+n0rqIYIreIRQxrHGOiqAAKmopgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZeuava6Dol5q16xW3tImlfBGTgcAZ7k4AHqRWpXHfEMWFzodnpmqRmSz1LUbe2kjVipYbt2Mjn+DPHYGgD5r1vXrzxRrEusavIXnkJ8uNmylunZEHQAevUnJOSTUMUU94+22glbcSV+U7QPUt6Ad69x074MeDotL+z3KXV/K5Zlu2uGjYKT8oVVO3gY5I5OT3wOgvPB5ubkywXH70Rokdw6ozLtGMspG1j935sHpgihvsB8+Xem3ljbafqOkzStKjs/260fLRkYyFVTvVRzliuD+ldHa/Fe6vTENZ0Ky1hIxtWRsQzAHr868HPX7o5ro9a0XVfDlzJqV4jXzTTIm4wtbnduyp3Q7VTnowI596ztY061ur4NfQTW0v8a39ssqn6TxbX/Flas2ykiGPX/AWoyxhItZ8O3bONuxBPDu/Alic9+D6Vc1bxU2naa9iuvX+pXiTkw3kRVmWEjhZI5NrKRwQ3IPOWrD/wCEauGZ3sbawkwcxvZTrM2M91YqwIHtTV+02Ba0vtQgZM4WC7VYmQ/xBTkMM+mako6Gyu9KuoobiXxTLFexRqVF9dt9mdupLq0O0g5wQGIFMudO0m/ST7X4r0fz5S5Cx6tE1vGTnG1TKpxzjBBxxjpWRcyW8EKNaXup28zEpBh0lVmbHAYbWXnHIJ7Zqqg8QSxtHfJp+oMrsrifyZnXb/eDqT175zxSVg1Oigh8Q+GJJb6bTdR2CANcsjK1tcAAbJS43Kp2jDHg8ZyM11dn4huItJi1PUbGKxLYZY4rxZZCpGQ3llVYA+g3HnPTmuYsvE/jTT4l0+K3j+yIPLSL7LB5IX0UrgbcV2mia942uoYp59JQ2LRMUkghiZcgHbgCfcRkAY2ihdkBBqPiCxtxvkc7WAb9wyyjn02scVzF94yl3FNN0Vpm7SXlwsSA/wC6uWP5itvW9a1r7KVk8LRXDvCPMxo9xuBYYYBlzgj1Bry69LrI8V5cahpjYBRZXkhOP9kSAE/XmnqwNiTUdXvdB1467cRt/oy3EEMbBERllXaq++D3yfemT6Vqi6tLFbGBo5HVoQ0yqxVlBAwTnIJxisKK3Q5A8U3EiMMlXvFYcH3B/lWhK17PM803ifVXeTg41XaGAxxhV+nai+txdDYfw3r6upuILaAocgTjcRz1ChW6de31q1dS3ieKtS1O3uLeVb1FEjSfuWmUIFbcFIC7sYABOcAmo9C1u60OW0t4Uhn+0zLE13e3k0oTcQNzErhR9MCt5PHPiK/fWI459MgSxYrEhjmZrnDbflIcBvX5c/lUsaRy2oxadPMwktNTsn8xWf7Oy3ERUL8z/uxzgKOCoIAOTxUy6TLqMM7yafqlnpL48opGikpnIDNKygE5yTzycdqs3PjnU7CZmm1W3tJmZl3LZSqzAMe53ZHA/SuT1fXBrc6Pdol+ysSpNmq/+yqT/wACzT3DY63SrvRtBa4Q+JpLSBkyqSanFNKrcZwqlkXgH+Ek54xjm43iS7vIlbQ9W1a5LAsrS6XAIdp6bppViCj3569DXFafp5mV3UaZZxBsHzF28HoNqjLGrUmm2s9rMs2qCQhCEVbZYo1bsCzbmI+mKa8gOs1abRXSOTVPiFeXSRqFmtNOAkDv1IDr8oPtwPrWTe+KNGt7CW08L6PHbTspC32rzFmyQQWCZZd390kgD0rC07w9acpHBLqUrbSs0aEMpxyqgDaq5J5HXAq7e+GNWjtDKdGZJTkxwzzxrI3p8pIx69KQHErpt5eauljLIj3bxl4izlg2BuK7j3IycmqDhlkZJFKurbWVhggjrXo3hLQbrSdRN5qF5Kb2eIhLWN2QMncMRhnXkfKCFzgnOMVb8Z6Tpd5ardNo88F2fliXTY3cyEckkHIHGOp9K1UiGjyxJJYLiO6tppILmJg0U0TFWQjoQw5BFfVnwz8XN4y8H295cEHULdjBeADAMigHcBxwwKtwMAkgdK+VyEyQI3G0lSrDDKfcete0fs8K6XHiYsrKki2kiBu4/fDPt0/SqEe7UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFYXiTQ01y3syWIlsbpbuEA8M6qy4P4OfxxW7RQBhrC6ptCtlAA3HTjvUa3DrjgE5rJ8ceFNY1+SyvdA8QTaRqVkH8srny5w207Xx2yoPIYdeD24g+NviB4Ocx+M/DH9q2S5J1GxUDj+8So2j2BCGpaGen6haafrmlT6bqkHn2c42yRFiuR9VII+oNeK+J9dtfB9zNp2k6tqV/HBwun6rYLdQ8kEBZ9yuqgZAA3Hiu90f4reCdcRUTV/sEzDHlXqbCCe277v61zXirT7iS++2xaVc6naF1YPaQGQbQBhlPAI69CaBXOWtfiB4K1FlOteHtR0yYEfPZuJo89yQ2GA9hmrcOo/DxmmjuvGc11bSglfP0yRpFBOSrsVIYcDGFzx1rzvW0sNP1F1WC4t8x8Q3MDRuuRwcGsgXEbOFXBHTk9aOVDue32GmeCdXfy9Cu7bVJo1DeVBojblHA3EgDb25OOlWZ/Da20bn+w9VjAJy8NnIx574BbNeVeGfGE3hLUxqWnARTAMHjJJWVDztOR0yB/PivbNC+OuharHi7srm0lCgsQ8bLk9cZYH8xSdO7HzGFZP5mpWmnWngq4nzBua7mW4tWyM5ynAJPXKn8BW1LoHm2wWXwTeEI4kHkanKpJxjkMeR7evatxvjD4RSAzSXN0ihtuPs7Mc/wDAc8f4VI3xg8EKVEmqTIWXcubKY5HqMIaTphzHL6tFcvb4Fj40gYIsQH2oKhOeCcAkntnvXBy6dqDTsJ5IZ3UlQl/byysvPTO4Yr0nX/jL4dk08poHiK2ivCwG660+5dVU5yQAo5HHXI9q8v1f4i69dZdPFsFxIiA/JpSx9QMglkzkZOO3yn2yKFth81yWXSNRl8sRaLYu4kEYGn6dNIztjO0gttAIBOcjGK0m8PazZNmXQNLWRcMM20rSE+pVW4NcXL498Vugx4nv4SMjbA7Ip4HZe9VI/F/iqM5j8S6uFJyw+3zAEnvw3WjlfUVz2XSNe1mzaM6na6vbxMpV7WK1hW2mGMEkyHcDz0AOcVFPogurMw20ni8qp+WVnhi2qRggbUwF/wA5rgdA+IUtlaSQa/FrOuMz5Eh8Q3MQVfTYpwfqTXZ6d8W/AtkVJ8N6kkp4Ys/nkdj8zvk1LgNSHzWU+n6fFIulapqDNKsGfNhkdmOegEWcADliQB3PQVWu9A1a4uM2dxcaegJ3KYfN3fiwGPwrf/4Xt4HERT+yNVAI+6LSMZ/8fpr/AB98Kx25+yaJqzOB8qtDEin6necfkaaTC5yr+D7e3XfrWvz2+4ZDTXUVmrc9gTkmm3r+DfDTRrLqV3cXCqrJDZym43ccfNnb+dVfEfxetdcE+3wjpYLRBY5LqCKeRH7kllIIHYbefUdK82vJmvLx7ko6mQkkswJJ9tqqAB0wAAKahfcXMetaX4+trt54bzUNQKyMPJguLyKyihUcfM/LMT7LgAcDvXS2UvhiWNJJ9c8LROTlkbWTKOvcnYWP1r5/jcz4jubligPHmHdj8zXTR6d4WsxCUuHuZpAdxZgxzgfdVR/jT5UhOR9L2PhrRoD9sENvNNIo/eIONvUBeTx9DzWutxHDGFjUIg6KoAArGgutO0bRLSW/vrawh8ldrXkojI+Uf3iDn2rmL34seGzdiw0OHUPEOoNnbBp8Lbcj+8xx8vuoYCn6Acp8aoNMTVrLVXTF68IiAGFDAEnc3rjOM9hWt8DNK1K1TXtSuYpPsd99nW1uGGBMEEm4qDztG5QDjB7Zwa6ey8Ky+KLyPVvGui2MbQjFjpquZlgB+8ZWztlYk8DbtUAYyScd2FCqFUAADAA6CqQuo+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOZ1rwD4V8Qlm1LQrKWRuWlWPy5Cfdlwx/OuLuPgTpls7S+Htf1jR5ScjZLvQfgNrH8Wr1qigDxafwD8TrAsll4p07VrYDhNRg5P4MrD/wAernrzw941gzJq3wy0PUQp/wBdZhUc+4Eb5/8AHa+iqKAPnCz8V6l4bVN3gzxPo8CKyKsY3RopxkATQtxx60g+J3he5l3XcLswOSt9oVrMN3uUZT/WvpCq9zbwXEW24gimX+7IgYfrQO5813fifwdOqv8A2b4Sm3bsKNKntWGD32MwGe1U4tS8Blt0vhnRnbOB9n1W8ixnrwVx0r6Jm8FeFJ5MzeGdGkY9WawiJ/PbWbdfC3wNdZ8zwzYL/wBclMf/AKCRSsFz551CDwrdo39nafZaeTgLt1t5cEZzkMo68flWI+gW7D93qNmORgi6Ru2McsO9fSZ+Cnw9Y/8AIvj/AMC5/wD4uoX+B/gCQkLo8sf+7eTf1Y0xHzefD8yblW9sc5xlriMEf+PUDRblOTdWJUY5+0x5/wDQq+iJPgV4EPSwul+l2/8AU0D4DeBs82t6frdtQB4Fa2VhGx+3otwNxIEWqRxcfXBrXS48GQIqv4c84hdvz+IWG7/aIVOD2wOK9rX4F+AhydNuG+t3J/jUyfBP4fFPm0EsfU3k+f8A0OgDxf8AtnwRsAXwtocaj/ntqt5MR78JTDrPgRBvbSdFVsYAit7uQD/vp1Br3C2+D3gGH508OxE+kk8rj/x5zWnb/D/wdC5iTwto5Hq9mjn82BpWA+cbzXPB7Isa2ylWGf8ARdKijIOehZ5GIPFVLOLSNSz/AGV4P13VmLHAM7MB64ESfpX1laaHpOlr/oGmWdpjp9ngWP8A9BArRpgfL2neEvFl1Gv9mfDPT7dBj59RU7se4mcfjha7Cz+GnxE1ABL7xFp2j2pHyxafCC0Y9BtVfz3GvcaKAPKdM+A3hqCYXWtXeoa1dHmRriYojH1wvzfmxr0PSdE0zRLb7Npen21lDkEpBGE3H1OOp9zzWnRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==) | accessories | kitchen & dining | 0.785909 | True | **Outlier** images are auto-detected as those that look atypical from the rest of the dataset. Cleanlab Studio’s AI understands the visual semantics of images and flags those that meaningfully stand out in this product catalog: image_outlier_issue = image_cleanlab_df.query( "is_outlier", engine="python").sort_values("outlier_score", ascending=False)outlier_columns = ["given_label", "outlier_score", "is_outlier"]columns_to_display = image_path_column + outlier_columnsdisplay_image(image_outlier_issue.head(5)[columns_to_display]) | | image | rendered\_image | given\_label | outlier\_score | is\_outlier | | --- | --- | --- | --- | --- | --- | | 844 | images/844.jpg | ![](data:image/jpeg;base64,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) | pants | 0.382356 | True | | 777 | images/777.jpg | ![](data:image/jpeg;base64,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) | kitchen & dining | 0.349961 | True | | 304 | images/304.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAIAAXcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDb35xnrT0mYdO1QkYxxScqOv8A9esjQuCbPVjUgYdc5+veqIbnnn0qRZSRyePWgCyZ8KSOOarTTk8etRvIff3NV3JJz60xD9w3AZ4xUikjPbHTHWoAP/r1MvAwDzQAbSOvWnDgZ/pTRg7ck57ik6n37+9AFhWB61KCcYyP8Krjn+Hnjn2pwbkjIB70gJWJTJHHtUbykHDDBpjMMjgYx1NM80Y6/T3oAk8wn+H6elN5ADEcCohJxkHqf1p+c4JP1xTAeSMjpj3FPVSeSO9RDt835mneZnA3YPpQBYUrHjHOR3H+ferKSoVI4OM9Kobs844xgn1p8TEYGRyKANAMCoAA/KmsEA7HNRLMTgDg0rHHpkUAOUrjgH0J9aQk54A6daiyWHbFSKODzj60AORznJU5z608OSCp6+/c1EOvX8+eKbhs9T+HpQBZLLk5BOKdu+XJJyfWoMjqSelODHGB3oAnBPan+adozyagXaTwSeOtSMMKAf0/pQAySQn0yep6VWcgNgL7Zp8gy2B+PtURBPoAKABVB5x+tN2gNheTmjOAQD1HGDzScAcdR2oANo3cA5zjilx83pjjApQQRwP/AK9MyQoJ4X0zQA8YUnjj60qMSQPT16VGX568A1E8mMgHA9KBl3z8Z5z9ahaYtgZyT+lVjOSGUEcdzwajMzHPOSfXrQIsySADBIJ7VWdgx65pjlmPvjvUZJ3euKAJd+MccdcGmmbqMc1GxyRj6CmDnqcE9aoBsuCT7d6qGUjg9KuOBjkZ7VTkixu7YNSBFN84B2g47Yop2CB1470UAdHJEFUZ6Cq0px0BFXZsjC9BiqkwO085HoeaQEKk4zk0oYAnJ4PrULtjOOp/SmgbupOKYEzSZwuM1EWB+9jNOMZC5JpvHccEUAOjLHJH481OVOT0yR0qJMckfhT1YcgetAEoGcE80jY9uD2pwHyjp+dNLAr8vbpQA6Mn26c04kMcHqeKjzhSeM9KeCDg5/XrQAMCwAHPPfpTRCM/MPwq0mMYzj0pzDPIXB60AUvK5x0/GpAnJIUAnip/L44705VwcnjPrQBWKk8hQPXHrQU5x3qyoyTwcc+1KQMDGcgdaAKrKRjnmmqcHj16VM4J6ChYjjuCKAGxsfMz1qUMd3UEdelAh6n+lSeVyTjtwPSgBvGSfWpiwAwTUfllVz3xkDFNMRzyMetADmbd0POOKD0xSIpJ9B0qVYSSDjFADCuACQMdKlAP609YsEcd/wAqlCcE45oAYI+MEGpZFGcAGpBCMg5/DNSgDO7gkj0oAqmDvgYHtULW4H3jgAd6vHG4jK8jOKY4BAwBlhxQBnuuTlQRULLhvTv9KtN8o5+nSqzjBxu4FAAB8o+bPXvTDnoBn1JpGYZG7BqKSTcc7ulAA8oC+w7gVA7EscnrTm5XqefQ9agLAHkHPegBZCSwGee+KYpGfT29aiZj2G00JjIP6ZqgJ+p/TrSE4OFzmgdAOApPBp38Xrg8CpAYBwOvA4pp6AYxzTnKhvfr+NQsW4HbrVAOY5Gcd+oqMg/hSqcAdfQ0bsgY/E1IDWT5Tj+VFWQAw6nNFAGzMB6Y47etZ0r5GByR+tXp2ABII9aznABOe1ICs5Utg8d6kjXJx29aFALnp6/Wn5XaCOvvTASQYG08Y9+1Qk84zgE1KzA5wMGomBB4HagBqtlsZ61NBkliCPXGaiRRjpiplIXgngnrQBNgg84zTzHj5gRx70kcgMnTpzipCcEgenXNAEeOtOyAAe3oKMGPNJxkHPFAEwB3dKlyNo4FQxnaeuaU5OOccYoAlLYyOx4pwySMY4qPIB4wSPelBw2B+VAE3BzwDQ3UdabgntwOKkAIwTQA1Y+f8akEWB1+lPCjjjgdx2p5wo4Ax7fyoAgEQ9c9+akwpJB69+1JkAgcn196FyWGOtADwoIPPvmozGcjggVN6jt6UrIBjjnPNAFcJuk/lipgQoximsMZxSZBOOenFAFgbQpP5GhpePlJHY4qtkHpnA4zSBySM5Ck9qALokIxnoefqaUTfj2qmXJIGcDPGKUSHOT6/T8qAJwdw9eOtISBHn+HoDTDxk/lzSO3mH5cEdeaAI5c7h0x+lVHYkYPGO3rVmXIbGTVV2IyO+ecUAQvwSTwajJA6c8fnTpGCjIHfkVXkbA2jIA680ADtnB6nH5VXJyAO31qXnGcDA/zmmFc5J4PbPagCI8Aj+lKGIz0z60pBwSfXnIpmCOOnfBFAEoPPcDPpTt3B496iyFyTk+mad5mB1wMUAIxGWJOW60zrxn60m44BIwOtAwCeeTQA7sM9+QaMZJP45FKDuUj+VBA4HFAEqEOD6HniiiEbTkYUYx7migDVmHXiqMg65NXpyNoOO3YVUlBIPt+lICBeCQOCe3pQctxtOPXNCjnnvU2CfxpgQ7e+MU3BJHH41MFK5GOTSY+XgZHpQBGy4xzxQwJ6H2okJOMfpSxgdfXigCaEE7RU3bnr60kXyqMdR2o7YIOKAB8NIOc4ppGD7U4ZPQ81Iq7lIwQOmaACNRxwD2pSfmI5HHelAxweo796kSLdyM/lQBHj1GKlWLAGe/Jp+wAZHYVKgPTpzQA1I896kVct06cdamWPavOc4pQoABx3oAbjaT6imE5HNS4BXpTRwBxmgCAqNwHUd6kjI3ZJIpVUnj1qxHEAAT6elADFUluMYHTHapGhyBj0qxFG3YZFPaI5HU0AZjLjGe1M2nHrx0/rV6VNvGKjKgYOP60AVtvQ9O1IB2Azg8VYKg7ueB60gXjGOh70AVwoH07cU49SSuTVkwnoeDTHiJHU5NAFYrtB5GT3pH46AEVOy7gOq+ntTMZ7H/69AFeQ4bKjmqsh6EcZ9qtSc5OMHHSs+Qkk/MfwoAhm59MioW7ccd+aGzyN2R3OKjGTg5ycdccCgCVhkjAPPv0pwx83B/KmBjnd0yOp9KcCcD370AMOCM5OMYqB/lOD2HWpHbjtj1NV3bPUHjI560AGSecYx+dCnOPQZ4xSLnyvm474pRxgHnHYUAPJOB/jTP4uwGKQZYHJ+nNIT+7AGM9D71QEqORjgYxSHnvgnioN2O1Kz5A5GKkC7C3y/X8KKqxTB+cjB7iigDoJTlRt5J9sZNU+Tnn8KuMMqOcY9BVXy8jceKQEe055xzUqgbevf8AKkXAYnHB5p/3iT+PNMBu3cMDqaBwvI6807lSCOg6fSlcZUYyc+1AFd/ocdqWMNxjofyqQjJOe2B6mnqOfT0PWgBFjOBg8HufWneX8p7fWpMKMkHOBxSjjOT+FIBEiweaecZI6elHOcjuKl2jBy2SO/qKAGKqk4HAqyhwR0NV4yMnGelSDkD+dMB5I3Y7YqeNemADUC5J7VajHyhmODQBMwUNwecZ69KaqndzT8A4J796OvzdPwoAApz8x5x600xZZiQfXrUqKD2PXmpxESOf59qAKyQkH8O1TIoAyRjJ6d6o3mr2lidjOPMOMKByRVKfXpDARFYzb+uGGMe570AJrniu00bZEU3zt/q484//AFUthrryxB55Yxu6Kp4rxXxDqt3c+KmM7ZZW2rkYwPpXp2nWq2VlHlEmuHjBzndjI6D3/wAadwOou9csra3Esxdm6BYULkn6CsOfXtRmyLLTlt16iS7k5x67Vz+pqG5vLfT7fD3JaYAkmQ8HGM/gOelcfrvix1uHghYIqjDEdc96QHaWd5ercb73UEYEfdjhCjPH49/0rVGqQn7xc9s7SK8ZPi24hyUuXye+TxViDxxfnA+1MPY0XA9oiu4ZwdkueOnrUplyTnnjmvIIfF9w8isbkB+oauhs/G85IW4iS47ZicfyoA7ctmTAI96RuCQD07Vi2HiGy1CTbCzLMPvRScOPw61qKwYZGDnpigBsm7BBPPXJrPmG49eetX5OAQRx2qhMMqOcCgCi4xz+v/1qT3DDp1zUjhhgHmohhsDGM0AOJO4qAOaYzYHOCTz15prMM/j0qJ2zwCD2FACvIcAAc5zUbcDgZJOBQAdpyRzQOvTvnJoAQnggZ68gUgyWOWGSMYHalAz3PPcig8k5zjr9aoBD93HPPNN54BA+npUrL8gzxnAz71C/UAdD0oARmJHQexqCRjnBHOOlSHGSD26VA3UkfSpAnjO0YHTt70UyMqiklsCigDrJAQMdvpULAjp09cVemALDioNpbAJ4FIZX2gDOKd8pHzEDHv1qR8D1xnoKjbpjkH69qBCE5x0BA7UrnA24IpTnJGOnFMbngAn0z3oAXpnHOKFBzjBz14owDtwO2KcoPHHTigBwB7f5FOHJ+bHp9KULwPUGpFHbr60AGwA45P8ASkbpgHmpccY7/wA6AuMdeuKAGIuMf1qbb6duadtJHQ49evNSouduecUwGqoGBnPpzU3t1wO9AXgAcHtUgbMfXBFADkOe/Pen9DjPvUYycenek3DkZH1oAtpgAA49zUGq3y2FjJOw+UKfx46UI2emcCqXiC2e60Z4lOCVIz6Ejg/nQB5naa3E17NLKWmnkbLKDw3sT/Suztdat54Nk8MYTsq8H/P1rxeG5uNJup4J1ZJgSDGRzn1p9trV1Fcu8J3Mw79AaLgbHilYZ/ESy2+N0R3NICMAA9+1aOo65Pbz3F99qaR55Q9vbiLaxQk/M2OFPsM965mBXub5FJ38+dMZOjMFLBfoOPzq7azy69pstsWk/tO3LTwsOfNHV0I7Y6j8aAGS+ILucXjzwHrCxUsfuh8kD9PWqutXKLrF265MMkpdTjkg8ilhvLewaePUZFlWSNomitPnDZHc5wDnB69hVSa4t7jywI2VVQR/MRkAdDwME46/1oAge4nMOYJQ4XqjRjIqot7lv3sKnPpWjDbeRcKxwM8gZ4Ye1T3mkwXO57Y7WPJB6UAZ8Zh5YMRn16VailRGwfunr/smqbWU9sQGU4PccirUEDsw3IcEdRSA1zNcGJcSltnMZzhl+hrtPCPiR7s/Zb2XM3aQ8bvT8fWuCjgvrMbrZhNCOsJ5/Kk+05AubJyksfzFT1Q9/wAKAPcpCVjz2PX1qoygYJJBJrJ8Ka8mtaOHc/voTtdc8itmUEknHFMCrIME54NV+SAe3tVqTHzZ7/pVVh97gc8D2oArkZ+vU0xtoHB5xk1JISAO3brURYEnI5FAAVyeDxiggZIzx6UEjPTgH1pScckc9s96AI8HAyowecmnEcc9CaVj6klj0ApjEA+vue1ADHb2zxULHPQfhnmh2/ecnnoO9MLYHTGePegBC56jio8nock/rSNkDpx1wKRCpTocg/jQAtyHWNNmck8fSip4sSKAcmigDtnBB6dPWoDxkA7f1qzIuDjpUIAJGO/rSAhI4A7nrUJBBHGCeOKtEZPHI5phGXxzknigCJVOMkf4U3aSSeOnripiBwTx796PL9Mhc0ANAYgcDp6UoGADwMnrTsYj5B5qRRkccDoKABVwA2Pxp+SMd89T6UdFAByT2pFPzcE4PWgBw+mGP6U5R1PamRZB+bOT/OrKpjJA7ZoAFUjOAQB7dKlUfePBwKRBkZ5608DOeaYCswAGDz6CkwSM+o5xUVxcQ2cXmXEuATgDqWPoB1NUpdZYACG1YcdZmAA/AZJoA1QpIxjFNdVU7uMdz2rEe71Cdf3U7k+sahR+tU30Sa/k33808+OkbSHaPwFFwOlS5tUHzXMA+soGP1qGbWNKVv3+pWoQdvNB/lXJaj4TVYS9rCIyP4cVxN1FPDK8TKQBwaLgbfivU/Cl+TK1u8k4Pyy242n8Se1cKQJlea0iSNQSQpAY7QfU03UbaUK7oDtz0qG1vFsbUTD5piGSOI9Mn+I+woAvz6v9im3+cfnQfuY41JIK4Ocj5etZd7qVxe/Myx29ux5it12KSO5x1P1qg+Vd9zEljyfU+tTxN50bRBckfMAO4709iS01mfLSWE53DhR0I7iqrQuOYsg9fLP9K1dLIVjazf7yE8flV+ezG7OMHPp1+lIow4tQKqEmQPD0KsOn0qeCdS37id1HaMnIH51DqFkPMMsOAe4qlGQJB5ysvp2oA7WwiM+PNA6cnt+NX5tDNuDcWSAoBloM8H1x6VT8PKJ0UrN83QH/AOuP61tXNy1tFt43jkg8fgaAMQPazAtA5jcHlW7H0I/rWRqMQMjOkXl3MfJXtKvf8a1dQs4pmN7ECA3DFeoPfIrI814SsV8cx/8ALKdT09j6UgLvg3VP7O8TIhbFvefKwz37V69IWYA9fXHSvC7eEmCO5T70U2Mr7HtXt1jcC40+CcZw0YP04pgD8r0yT69KrScjkHHSrD5zgA4P6etV5RgYXvyM0AU5GJk9fY1XL/MSBx0qd13E4zz1qFhmRueh4oAcC2AMHnH1pwk/ix/Wo8gAjqaazZ6daAJBIoHAJPQYqJzjkjvSZPC5A6daiJJ6nIXsKABiNwyBk+1G3vtHPao1zkZ4PX3p+TtPBBNAEbkjdhcdqZ94fKBxx1qSTGOuD6etRBiGOOc9KALVuFDbj93p+NFJbktJxk4FFAHeSjPABqsSQfTGauTD+HvVZ+ckUgIwpwME8nOfamtxyMjPQ09jgEA4H1qPILA9BjgUAIoJOTjjkZpWAUZB6/zp6qGx60qKAeB+FAxFQ7eRwaXBU+n0NTKuT83Qen+NNIHQduaBEfU5wenApApzwf8AAU89sdKlRQpwTnv0NADIwfU4FWYl6e4xTEA3d2we1Ouri30+3M9zMscQ5JPf2FMCYREj5jwPXoBWVca1FnydPiNzJnG7og/x/CsO41e58RT/AGe3V4bEHtw0o9/b2rptNsoLOEZAzQBnQaLdXt19qv5maToAOAo9AOwrYTTreED5R9TUk1+kPCiqzTzT/dU4NAFwQqeBgVdt4FA6fjWQFmI++RUiy30f3X3D3FAG4tvEw5ANcJ4u8PQWx+1RKArkk100N5c87lz+hrN8RXa3Nj5RydvUdxTYHkdxbiZZF24Ug9q497MlnDcMnAH869KlhXeduOv5Vzmu6S6D7VbKT/eA/nSA4xocDBJogJWUc7HU5Bq8+2XnhX/iB6H/AD6VPbQWl1iJhsn7E/55FO4rCx3MDAJKAvPU9B9D/StLzJljHzFkI4IOf/11Wk0x4JNsvKnoQOn/ANaqSNPZTfunKjPTt+VSMss/nEqQNw4PvVu0tIbhhFNEGHTPpUAMNwN8q7GHO6PkfiPStrTLNg2SgeH1ByD7g0ASJocujMt/pspIx+9hJ6j0pL+/WZVmi3Zx8y+3pW1cMI7E5lyoHy7hgj2P+NcbcOyyHcCD3B6UwLMOoHzD/HF+n4/40l5DEcy204UEfNFIP85/DNZdzI6/PDMVI7H/ABrHmvbkMeCg9jxRYDe8xLDTEGApds/zGK9Y0uRl0i1Tv5QNeI6vcFltMOTtiH+Ne46SudKtic8wr/KhAWxgKeRn1PQ1Xl5J5PFTzZ3fL1HSqzEBj3BHFAFaQEPntVZiwI9evvU8p98YFU23MeuAOeaAEZjyQQfb0qSMcMGHJHIqMALglvrxUgJHIPU0AKBg4U44x7VC7bemTU5AXJ9OKrSHP096AGlsDr170ZBYBgx57UqgADDHOPSk2/L94krQBHLkEg81GhIYsBjAPNLLjzOM8cVGmfUHGcjuaALtu42g5yaKbafu3LY49KKAPRZ8jtjNVX4HHXtVqWTJx7dKrOQcDqT2ApAViT8xIPoKQDrg45pwPGB604ZX2+tAAvYnp06VKnBAPTqeKYoIHPWnjOSD+dAEx6Dg4zTSv5injggcj0p/lnBx1HPNAEQAQcilU88AipPK3dQcdeawfEniSLQ4Ps8AEl+wyq9Qvu3+FAE+ueIbfQ4tqgTXbjMcQ7e59BXIx/btduxPez+ZzgD+EewHasICe4ma4mdpJnOWYnqa6jRlMK5ftQB0mn2sNhCOnFJcaqm7CHpWJqOtMR5MJ6dxUNnlupyetMDbild5NxGRWzbzA8CsKIkLjn0q9bziPkmgDdRQcHFWkhz2rPtbxCcZ6etaqyqFyKaJEMCqO1ZmqaXFqEWMlJh92UD9D6itEmWbocClFkzfekNMDyi/sp9OvjBeoI26hh91vcGmysn2QnjNeo6l4et9UtDb3ALL1B7g+o96808QeDdY0mJmtQbq3HOV+8PqP8Kloo5y20mx1W7mNxD8ibRiIYZ2JPGe3Sqaab4R1HMLPd6TIf8AVTli4B/2lPUe6nPtWv4eM66fdhVxeIXZA3GW24H9azYfDstjO82o3FlIvlYFur78k9QfSgAWG7tp20PVTGblV32tzGcpOh6FW7g1myWatIVIAYdCf61X1bUkhsre0huHf7HKWtxJ96IN1XPcVopIdU0/+0bcbnT/AI+Ix95T/fHqD3FDAqppMySBk5x1HpWhDJLp0e4DCHrGemfb0qfTtRiAAYqXz9PyP9K0bq1gvo8wlUf0PGfr2oAwLq+844gnMb+jcZ/pWfJchvluE2H26H8Kfd2TwzsroUcf8sz0/CqUu04RyUPbPSkBFPHsDPExwPaso7r27SENjc20cVZvllgOOeR1HQ/Sr+iaRN5DarKv7mMHaPU09hMzLmBrvVksrcbmLCFQB1PSvoCzU29nAgzlYwufwxXhnhlt3i6xdwcmcdPU17242xlecgc0AivJsIz+fNVpsbuMfQCpGyD3OPfiomIOSMZoGV2BOTgn2qtJH6cZ6/SrjEYOfrUTKN/IHJweOlAFUDaOQCO5xTfNxx1xU0wypA9T9Kg2sWxwB1HvQBICfL4xxTCo4O7p+VSADyyDnAOc+tI5wpxigCE7R6+p75qN2AAAznv70/cFXBAqJiByeeMmgCGXG3qSewoVR344wBQRuYcAZ5py43DPINAFmJflHHHrjpRT4/mYDGD64ooA9Dm4BHQD1qjIc5Oent0q5cEsW7Dp0qmw5JPPrSGRDB9sdzTlB9ec/lTEGTj39KkT/PNAh2M8FSD0qROO3WmoCfX256VMi5xjtwBQBKg4x1/Wp1jJ47io0UsQfwqh4k1tfD+jPOoH2mT5IVPr6/hQBm+K/FEOiRm0tiJNQcdOoiHqf6CvPFSW5kaeZmeZzl5GPJ+tJbRNd3Tz3DF5ZGyzMeSa6S203dahiPp70AV7SCARDOBiob7U/KBhtz8x64qvfXYim8iE/N3x0FMWAeTk8nuaBkllE7gM3Jaup022AAyOelc/pzDdgH5Qa7DT9hUZNAh8tthQVFZd5K0POenp3rpvLzGOa5jXhtVjj8aYENtqb7x8xrobHV2cbSc15nb6htujGSetdFZ3qoQQcj+dAHpNjPujzV+OX1rl9N1ENGvNbKXAJyDnNUmSbcbAipDEjqQRWVDOe9XopuBTAx9U8KabfZL2yhv7y/KfzFcPrfgAorPaTMfRZP8AGvWAQy1BPAJVOKTQXPknxNpN3p18RPA8ZPr0P0qHRdWl02dZYpWVweQO4+lfSut+HLPVbWW2vbdXVh1PUV8/+L/BN74ZujKqtLYE/JMB932PpUgdJE2j67Bk7bW4PIlX/Vk+4/h/CqF1b6npEjNC3nQqOY5DnI9Qe9cZZ388M4aJyjZ6jjNdlZa208IifG/qMcZ+noaChr38GrQBcHevVTwyn2Nc/qTPCCqgNGD+X4VLqeI7g3EA8snn93xVE6hDOP8ASAVb1HQ0AUJbtyCu75fSuiR3svBCESENO5bb7ZrMgs4Ly4VYl3AntVjxHfBzFZQf6iEAAe9BJB4VSSfxTYBeomDH8K96mOT6juTxXlHw00k3GrPesh2RjAJXjNerTKVGOMntigaKkrE8dc+vHFRM33s9PWlZSef0oALLkHnt60DK7Fug4J/Kgjg54wO/NOaNj8x7Ug4YZFAED8HjORwKiwehGfarUuVyT0HrVVjg+uKAHnGAMHJHNRNIMADOfamqx3AZAx1NIQOSVJ7nNAEeSOKaxGMsc8ZIp5+XlvyzUTHg8AA/pQAdMZ6d/SlChSoU9SaYGwOO1CAMSD97NAF2J8Hcc5opsamRCp65yKKAPQJxtGOeB0qq+B2PPvVqYAKzdCBnrVNiD+WcipQxpwSOpzz1xR0BwTj+lI2BnrnuKF28/wBe9MRKgIY4yBjkelWY8eX7+oNVU+U4xzntVyNeBjnNAy5EvTrx2ry/xjftqmvMitm3t/kX0J7n8/5V6NqVybHR7ideGVcKfUngV5S64uEXkjP5mgDU02yTavyik1/V1sbUWsB+cjBI7VKJzHB8vXHQGuU1EtNOzNySaBDrENM2481tPHtiHFZ+lJzzWjckRW5x971oAbZsA23oc1uWN55bDOcVg2CmVhzj2rX8gryKYHTw367cMwrC16dXgbB5PHNVgxUcnHesnV70rAR69KAOZllWO4Y5q3bXxAAJ9/pWQ5yS3Y09CFPGeaQHdaZqxwDu+ua67TtT4XLda8jt7wxNkN17V0umax93LdOop3A9WinRgCCKuxTZ71w9jquRw1bUOodMHtTuB1ccoGAanVgRWDbX2cZNacMwYVRJYliWVTWFf6XDPDJDPEskLjDKwyCK3VOajlUMCCKAPBvFXwoMczXWgOuwnJt5Tjb/ALprm9N0e9e4+xXOIG5JYruxj0xX0VcWuQcVw+seCjJejUNMdYbgNukiY/I/+FSyjgde0WWzAhuUEm4ZW4h5Rx6/7J9jXH3eiuCWidCD/eOD/hXt9nqM+nMIrmAK2f8AVTDn8D0NaM/9g6wpiurSBd3UbQOfY0gPE/DVnNDK08qrsi5OTxmsXVXWfUndEVQxztXoK9m1rwTYi3VNNupIEcYOMPWdB8I0tpkuZtS84j5hEYSoz9c0AdD8OdGW08MxwOu15/nPHIz0rTvbZopGBBznFLpEU+mKFZgcdMGtqVUvQjMMHufWgDl/s3y/XtQ1rLGBlCoPQkYrrorZYR+6UD371I1v58RWXBB9eadiThXh568n3qIpht2eRWvqFl9kkKZOOoOOtZzY579+OgpFFGbcTjOcdfeqTgZyQR9DV2UDcR2PJOKqTZ2njPfpQBBgg53cHnHSlwx4zyOaQDjls1A7OSe3P1oAkdsMTjrjGKibPUEMTzTWmJB5JyM47mmA9cHGRwc80ASnLd+T1zxQvyso4APTmmA/L1YnvSI3Ix+OBQBpIDsCrweoJNFOhztyME0UAdzMcqy7jyv51VYHbkAdOfcVckHTk8+tV3jGcAfX2qRkI+ZcYyMfpTgAFIzQRnp24605ccdfTmmIIwff+laMKjjG09qqxqB3PvVqIc9cf56UAY3iucx6XDADzJJn8BXAyYjmU574rrPFlxm9CZBEYC/5/OuXu4uQ4GB6UDL3liWNeeoqhd6Wx+aPnA7CtGzlzGAD05q5DKuSGH6UCOZtybeVgQcCknneZlVTwK6ptMt7nLqOaqXXh0suVBHNAw0a1EihuD3Jree2Tb0FY9nZXFpgDO2tVvO8scflTERG2Rs8Vx/iaDaQqnjNdU5fGRmua1wkyYPWgDk/KOOAcZ6VZi0+WWMdfpirlvAGYscgDtTrvX7DT1MKZmm7iPoPxpAU5dKmQbsZOKgilmt/4SMU5vEl9NzFaRKv/TQkk1GPEcJJW9tAoPVojn9KVgNzTtaIIBOD3rp7LVVbB3DB964m2WxvubScM393oR+FTLLNbSdeKoD1C1vlYDBrbs77oM5NeY6bq46Mea6mzv8AIBU8HmmgO9iuc4OasCUNXLW99kZzWnDeZxTuSabqGFUZ4SM4FTJc5HWnFlbrTAxbiASjbKiuh7EZrnNX8OS+U0umTtC4GREeVPsM9K7aSEHpVWZUijaWUhFQElj0AqbFHnGk60/mQiZwwY4GRg5HUH3Fegp+/gDsTzXl1iV1TWJ7i2Q/YzcvNApHJBwP1IzXoVif4AS5T7zE8A+gpATG23TqM8HmtKOLPToOlV7dfNlZ+wGBWiqAR1SJEEmOBUckzJwDyaRyIupxmqk86/fY/wC6KAK2rKZrcOQTtPJ9v/11zUrfL1yfetm71ESCZOrbduB0GawJmIbnucY9qkoryk7t2M/SqkhOT6mp5Sckg8HjHaqrHcdp7UANJ564B71XfLKTgdcDirDKD/hTHiAUHjg8e4oApMSMjAp28ZGOOOo4pJAFxk457VGwOSB/D6mgCwD8uMnIH0pitjGwZ9B6UJLwQe3SkSRS2Tk4656igDYtkUxZyMjsD1oqGHbt5Y49qKAPRpFPX0quyjHA5+tXJlwwHAquwbnPJPv3qRlbHcDGDQFwTyam8o55PUUCPaRnPpTAcg+XJ7VajxFGzMcBckkmqg7DvS6jJ5Oi3RzglMfnQI4LVLj7TK07AlmYtVV282LJ646VYki8y2PUYFUoifMI6g9BQBJAxU7Op71ooOAeee4rPMf70E8AjHtWjasJAFLew96ANbTxgA5rpYIVmjBwK5y2iJOR/wDqrptOBUDvTAkOnp2SoJtPyOhrcRQwHFOMIIp2JucZPppXJArz/WGDag64ORxXs17CqwO3oDXhmtXBju52z82T1pMox9X1FowbWA44+cj+VZdtAmdz9fekdt0xLdTyc05yojJApAWZbhIoSf0rBlLTyMw+6DzT7mZiME1YukjttPgVSN7DcfxpkleEtHIpUsrDkFTzXfaDpmoajpZu5SrDJCA8M49a4a0i+0SRRZwXYLn6mvadsGn6csKYSKCLGT0AAoGjkJbTywSnDDtjkVNaatPbSAODj0rB1jxNNJqJe2UGMH+IcuKvWWoWOsRbUby5wOYj1FAztdN1uGbjdg10tteqwGDXkM1vPaMGRyMdBV618T3VsdrqWA9OtFwPWhe4wc1OuoADrzXnEXjBCQXGMirMfiyCUnLbQO57U7geix34bvXC/EDxA93NH4es2OJAGvWXqEJ4Qe5qjceM4vJb7K6hQP8AXsMj6KO5/SqPhafT7vXPOcySM7GWSSY/Mzep+npRcDrdJ0yLTLISuAsrDhR0X2HsKIbxn1QWIBKdTj19KLq9lnvDa22DO3Ax0Rf7x/p61r22kxWEG4f609CepPrSAsm4WAxxIQWPYVpRMduW5rnbUIb0jeHlzyB2+tacxM8wiibJ9jVEluSS3djuIJHOAc1yXiPU3sNHuL8ECVmEUAPqf8BW5NJFCDbhsseGYdFrz/x3efaoobdDthgBkX/aOcZ/pSYGzpsSroNtNy008u+VpOpOP/r1TupWEhPTsO1XrRtvh2zPPI5/Ksu6kw3175pFEMsgUZBwO2RVaRjn/HuKlyWX7p+h5qGQsGA9OcAUALGxJ5Hvz2ocsQTkcelMAUD6DP8A9apdvILH69KAKrHA5AyKjGMgcHHNSSEbhwfeoVbOSWyOh96AFMfBzyR60seAcZBGPSgHA+Y//Xpccgg/lQBaBLKu38cUVAjDA4NFArHrzgknPSoWX5iBzxVh8gfjTBgseeeppDK2CajIOeuKnbIAB78gCoyDj60AMbG4YPWmaqv/ABKXXccnGTUqj94MZAqLWG/4l2ACNxwB6UAcYse6J1I7YqgqbZV55zV5HKzGMngn0qt5eJzjnmgCzNb+ZGpHUVHCGSRe+K2IbbzYBge1V5LQqxHagDR04hj83UV09oAADjiuVsEIK88V0UUjJGMGmBtLOsa0n2wHgVlLKZCBV2KDjJFO5IXuZrST1KmvDPENt/pj9sEnFe6sMAg968w8XaQ0Gos5HyNyDQwR5VcAhiBURbK7a0L+ExTtkcVQK96RRQuuGP5Us7Gdl57Ypbr0xx1qJDwrd6CS3aSGC6hf+5Ip/I12XivxH9qYWds/7hQNx/vGuVgh8uMTOOScqv8AU0Ou457k0DQxvmzn1qF7R8q8TYYc8dRVtYZS2QhNWQHQEGI/lQMSz8T39sQl8n2mIcbujCty21DSNRX5LgJN/wA8pPlb/Cublj3A/L19qzZoNvVcUAdvczW+mROTZeY5+7uPA96zrNZtRMk0sQcA4WNSAq+5B61g2+p3tuAnm+ZH/wA8puR/9atnTb3QrmQJdwyWkx4/1nyN+P8AjRYDTuIoEhU3s6Dj5V6k+2BWcuoTCXzdNhMMSnb583TPsK2LrSIDHL5I2QqoJ8sZZ+emaiXTUECvLLD5A+6dwwooA9E8D/Z4dD+1iU3U8h+eZjyW9/StKS5udWvDaWzng4mlH8A9B7/yryKy1y40SSaPSZpHik4bj5fw969D8MeKdP8A7HELMLW7UfvFY8n39zTTA6qW3tdJsWWErGQMtKTgL75qro8qyl1h84ofvSkYB/rXI/aJvFevJBPK1vpVuwbys8zkdGY+noK6S71BU22tpiOBerL1NMDaaxhuZ1t4WOwfPMwPb0/GuN+JNtEkVo6KFBDRYHpwa6+yvoFhWK3+83X/AOvXOePrIz6XbSgsT5+MexFJ7EmZDe+ToNnFxuwSB+lUwzSsSTuOarocKiEZ2rtHtTkYfKc4AP50iix5fy/OcH1qKQYA4/PtVkurKTzjrmq7sOMjjPOB2oAh2nPP3getPILAZ+YHmkIUjLDOeeaaSSOcg5zg9qAK0zAso7HjAqBRnHQDv61LLz82c84zSRjOfUn0oAOh6n8KTzNqkZPJzinsWDHPA61G2QSOQO1AEok9cj9RRTLcFy3t0HpRQB7JJxTCODjr9ae4BHHIx0qJsjjgikAxgRkn8qb26D8KcRyeo4/KmkEsAMkGgAUc88iqmvnbp6nj7w5rQiXk59OKoeIIybEH/a4oA4x8AlzwM8VXkfE+R1J45q/5fm2p+vFYd7KYZ196AOz0WbzIsYH+NastiJQMAZrktFvNhCnOPSuzsrkSDrnNAEdvZbZBx3rTEAwBipo4164qTGBVWAqiIRKzelQ2OrxXZKqRwatuVkjZa85hvn0/X7uAE/u5uR6g0gPUY1DiqGuaNFqdkVKjcBxTtNvBLEp7Vpk5FUSfP3iTQ3tJmBQgZrkZUMeQR0r6I8UaEmoWrEJ8+M14ZrtgbOV1YEMOoqSjlrlvmxVzTLJp/wB86/IDwPU/4VHYWL393jkRryzY6Cu80XRRKFbZhcYUUEoh0jw19tO+cZz1xXX2nhGwiH/Huh464zWxp1gIVXA6DFa0cJwOM0FmLFoNsP8Aliv4CrMfhe0lxmBfyroIbcVdt4QD0p2EcvL4C0mdcvAPqOK8J8RJD/wkF5DbKVt45SkYx2HGa+rAgK4x2rzDxj4b0jRLW51eVF3Kcqv95j0FNok8Pnt/Iby2PzdSPSqLAyTbBzWhcStPLLM5+ZiSfrUWmQebP5rcgc0kNk0Wo3Wnx+QWMluf+WbHp9D2rSsL2DyZTbwxzM3JjlGGX6VjahnzcVTG5GDKSCOhHGKQjeudVv43K28EVsAOeNxPvz/Sm6Trd3ZamlxNKzP/AM9CN2B9KpQavOoxMiTgf3hg/nUzarb5OLAD/gVBR2kVxqGrXkNz9rEESkEnG0N+FdrEYpIVjWXe5HzEHOa8T/tUkgpbqp/66Eiu30yyu1t7a4S9aMToHjwvY/jQB6BZTtbzgkHApvifVbeWxS3Vsy+YHIHbGa5JZLgg+bfTMB24FQSSKOMEn39aLgTyTLgjI9fenRMgPoM/Kazwx8zk4yMfQVYilYkFQcngZNAFnzfMOST1zknoKe7YxjIz+dQLJlgR17c1IzYHAJoAcAFAOMY6Y6mmyEMuVY4+lIHIHGSAeMdqUn5dueBwKAKzdccD8c0oIAwuTnp2qR+COh9+MVEVKjJGewNAC53c4yDx1pkmfMPQE8fQ05GCjHQA4oO5mIJ59D1oAjiyFJ6EnoKKcm1Tyo9s5ooA9ocfKAe9VnJzx+Wauuvy9eneq7LxkD9KQEWRnJJ/KmD1xintnsc984pDx0JGBnigCRcHGOB9Kra3EDo05HVcEe1TLu4zkAc/Wn3w83Tpl7bTx3oA4S1bcpUjBPNYuq2+SWx0ORWxECt03TOfWqWqrlTzn6UAUbK4MRRf1J7V1+mXJ4rh05lHTFdPpMv7oZ4x6UDO6tLjcMHrV9cMOtYFpL8o61ox3GBTTESzLtJwK8t12QReNZk/57R4H1xkfyr1My+YpryPx9us/Ey3AHICSj8DzQwO18O34aFVLfMK7KCXcoxXk2nXn2e+VlOEk5B7V31lqQMCknpTTA27yaKK0lllOFRSTXzp4gvjq2sTCBcmaTCCvR/iD4oWDTfsML/PJ/rMdh6VwGmWD20QuZV/fzjgY+6tDYrE2k6QtuqQRjP98+pru9KsljjUY4FZOmWfloC2cn2rpbEZYDsKRRqQQ4QVdhi55FFvFkCrapjqOlOwh8cXerMa0yM08t6daoklZgoryD4vvdXbWNvEG+zrl2x/e7V6tIxxWHqFnFdt++RXx6ikwR81XtrNZQqJoihdSwz6VZ0+zJkihxj1rv8A4k6VB5dpMqAP5ixDHpnNcz5QS+TPrUsotzeDf7QhR7dsHv3zXR+GPhzYxNu1BftGRjay8VpaHgQjJ6V2mm7cDFNAec6v8HYJpXm0q4NuD0ikXI/OuYuPhVrkcmEML+/Ir6FdflGDVYgE8inYk8Q034P6lcSg3N7BCo64Uk12useHU0rRba3hJYWseAx6kf8A667+FQCBjj3qDV7JLi1ZSOoINDQHihZhg9QD8xpjHJB4GScc1oajatZ3U0XGVOPrVFTwA3ftjmoKGnJJJYbjwBTg22ThuM4GDSFiN3HNM5BI3dsH1pgTh8gY5APT/PvUgkCpz+HNQIT5fB4Xp/jmkMxwVyPqOmaALRJxx1HY5oaQAnpkfz/wqsrY6HnGTUpl4PB6ZORk0AWMcnGcD5uB3qN8kE8Y6nJoWRic5PrzQI8heRzk5AoAiJADenWnBT1BIxyRTyFABPB6/Whc4G7B3d6AEhjzJk88dKKs2iFcnHA70UAexH5o81DIM9+evWp/+WeelV3IJOaQEWMknuaZkY9CPWpHxzjkGoGDYzjjp9KAHR4ODnPtnpUz/NZuvQkEdPaq6kg8HA71OvMQX254oA4GYFZ3OO/WqF/ITGOnSta/Ty7qZT1BIrFveOR0A9f0oAowxhiP8iug0tGUD0rFtAGGeAK6vT4flzgYoGbtoMqParewkDFVbUlR0rTjIIFMQxchenNec/E2zfNrdgZBUxGvUlCN6Vh+MdFGp+HbiJRmVRvj+ooA8k0u7a60tAp/fWx2n6dq2h4s+yWZUAmfHA7Vw0NzPpV00wzg/LIKfdTb4g0R3NIcADqaALtj52uao89wS8MJ3MSep7CuttIGlkDsBntVTS9OWxsYLQDMpw0x9zXS2Npx93npQA+C3JI4xiteyjKt0xTYbfGMir0EOJM4oGasCjaKtqox1qGFcAVZ7YqiBi8ZppOTnNK+ec1DupgOkPHWsydhkmrUk2R+FZ0rDnGMk96QHA/EhgI9OyeDcZP5Vyl4As6mtv4oS4FgB2Zj/Ks2ZVurKC4GMPGGzUso3tCuxgY5BNd1pk2JAM15dpE5hmwT09a77S7sMVJNCA7lDujz1qu67SaW0k8yPrzT5x7ZqyRiHnIzVhlEsTDPWqiHFWoWzQB5z4ssfLnMy9+DXHvEBwG5r1TxPZebaOQORyK8yul2lgcgZ698GoZRUxxg5x19M+1QEcDIOPWpiRuyeTg4xTJSPvtgZ9KAGA7WCluFHOKeCFxgnbn+I5qEg4IXseQaUMMnknvQBMZccByajG7Cgvyf5U/iMMNoycEY4pZWXaxyMnj60AOR2Cgrk5PU81Os3mRhQMAHnNVUbr2B7iplK4Kj26UAWAo5c4PQ1Iu3BUEBc8n2qNZOflGdvqcn/wDVTGzliSMnpgUAXoWwSmB+PNFQ22SSAcUUAexMfk6VBnJJP6dqex+X0qIkkc5z047UgE5KnnoahckA7ecetPLE5FRs2706UAMPysAT/wDXqaJju5yR0yaqlsc9cetTRN3JwelAHOa4oXUJfQmuR1Btua7jxCgF0H7Fc1w+qKdp4yPSgCLTDmbb2JrutLQNCMdOlcDpr5lUjpmu50p9sajk+1AzooEBHTFXY4gQKqWzjAHStGPBFNCBYD2NY/iTU30jSppsMx2nFdAlcv8AEGZYfC82fvOQooJPCNQvftEzOV+8cmrfhSyE2oNdOpMNsMgHoWPT/Gs24UuyooySeAK77TdMFlp9vZ4+fG+X/eNBRf02Eyy7iPvHNddaWwEYFZ2kWG1RkfSukhgK4oAjWHAxVqFMHIpViqxFHTAniHbNWCoPXOaZGABUnfFUSQycVTlkHPFWJwSeOfaqZAOaAIZG4IqjIcZq3N0JqhOxAwOtQUeafFDO2zI/2qyPDV19p0mW1P34jkD2Na3xOIEFoSM8tXC6Dqg03U0mOfKb5XHsf85oA6pt0FxnGPbNdZot6GI5rB1KDMfnJyrcgjvUGkXpgnxnGT1oA9i0u73Ac1sP865FcRpN990g9RXYW04lhHvVIkTbz/hUsRAqNs56Uq0wDUIRJbnPpXlGrW3k3ToeADj29q9gGJYipHavOvF1htug4GA3BpMEcTjBLBe+OPSo5QGJBJJ69OtWJlKlgvT69fpVaUZIz16n3qSiurDDZOCehPWn7vl46fdHHNJt27Tjp+dQZIjzz8pwR70AWCccjgngcU4qeACScVEpBGSe+acJQRkD7vXHFAD8sp+UDPQegqWImNwc89M1AzYkAzwDn6VJGB0HI70AXUJ2/LyV46daa2fMz1FSIoXewIHHQj+VNk2qeD8wxQBatFG8sO3FFOtANxHQY7migD1lgfKHHSqznB4Oe3XFW3/1fAOPeqkgyemPrSAjJBximkDJ6fKe/elxknPPTj1pSM4xnigCBgR681Ig24I70hBOT/Ok6DHegCjr0Ra3V+m07TXE3wzkYGK9DvU87T3GMkrkAe1eeXh2tjvzQBhwylZ9oGTntxXZaTcnAya4i4JS53A9+MV0mjSl1DUAd3aXG4cGte3bIFc/ZRnGefbNa8cm1Rk00BprJjHvXnvxS1NFht7HPzEb2HoK6+a9EETSscBRk14nr97ceJNflYE7pH2qOwH/AOqgBvhqy+0Xr6jKv7m24jB/ift+XWu80y2aSQu/QnpWHbQxQxwWNuP3MP6nuTXX6cm0LQBrWMIGB6DNbCR5AqpaRYIOK0VHTiqRIzb/APrqRVP/AOql205eOpoAASKcWNKADQRTAhkyeTVWTqatyDPWqUv1pAUp296zp2y2A2Rn86t3B5z6VQflgT79R1qSjz34mqDb2q45w39K8tTP5V6h8SJA1xaxZ5CE/rXm8ce2ZgaBM67w3q4ns/7NuG+ZB+6J7j0q1OjW84YDArj1RopVliJDA5BHaus07U4tXgMU+FuU7ev0oGdLol+cLk8n3r0DSbzcAM8V40k0tnOPmIANd74c1PftJPPfnpTQHobnjNRFiD04ptvKJogc5FOOc56CqJLcBzgVieJrLzbR2A5AyCK1ImwQRT71RPb4I7UAeM3a8EAdPWqEikdjj61v6zZ+Rdup9ev8qxJBnIb6ioKIGGVPbaeM1UkP7sDI49e9XGxjr15ziqjhtuT3oAiUleTzg5xjrUq5yCR15qEqdwOOD6U5TkL36jg0ATqSQfbmnxbtwYnI9T/hUaS7Ys988etPSQjb0GD0x0FAF5D8o5GTwcfyoeQAhsA54qFJHbABwQSOnWpHGFxgZzjHWgC1bsc/7XuaKagCBdo7du9FAHsEjDH1FV2OcEnqKmOCMGmMRtJ9KQEPJ44z0zihs7Sex4NL/ETigdMD8AKAIiMgHJz6VGM5JFPPJIGfUe1MGcf4d6AJx0weh4rz7Wrfybqdf7pOPpXfqW5GPbrXKeJIR9qY44YUAef3mWwQe9dLoO0xgk81z97DtPPY1saG4jKjP0zQB6FZ8xKSe1StcY5BwKzbSXdHyegqVclgF6euaYyl4pu2h0C5Ib5iMV5/pMJgha7biWY7V9l7/nXYeMw402K3TmWeUACuXuWUTrDF9yEBRj2oEb2lQbiGI5PeutsoCIx0/Cuf0WPMWe9dZbKAoGBQBqWkeAPXpWkkQIyaoWpAYVpoapEjTEKZ5dWccU0rTArYwaTPP9KmdeKgIbvQA2TBFUJ2689auyHAxWdcMAaQGdcknOOlUeoyRnmrlwcg9RjiqU80UNu8z8KgLH0qSjyvxvefaNflUc+SBGPy5rmbm0e2a3nYELOu4fTOKlurh9Q1SSXOWll4/E12Pi/SBH4dtmQfNZgD8D/9egDjvJ3KfUdKrOrRss8TFJVOeOoNXrQmQKcjnvTrm3IO4dD1oA0NO1OHVYvJl2rdqOR/e9xWnpl3NYXAUn5feuDlVopCyEq6nIIPIrodL1ZdVAgnYLdAYB6b/wD69AHs2i6p5ka/MOa6NXEi5HevHdF1SW0u1ifIUnv2r07TL1biIc800wNheOvFWFPmLjFUdxJqaBzuxVEnH+K7H5hLjg8H+lcTNGWJB4+bv6V6zrlkLm0ZcdRXmF7AY5WDA7l4OallGZjt09xUEijaSASAeCD2q3IvUAnHQVCADGwduaQFMxr5ZzgAcf8A6hTOFBG7PPpmrEyhdy5PHGRVcqFYlRyBjOeaAHPkjAH1JNSqSpOCQ2AT7VWIHHX2x0qwpA7ngY9qAJhIeATyeDg1KAeowQRjiqauBtOScfrU0crBsnLYPYUAX4yOCxxgY+lFRq6rnIJA469aKAPYs8VGR1I6GpMArzUfPYUgDbgn+QpMk8CkySMnPFICduc98mgBp7gDmoznA+UdKlOSfQ+tJjPfnvQBHu+Y/rk8Vi6/ATGj49q2wv8AERx/Oqerw7rPp0NAHnWpW4YE8ZqlaSm3lXLcitfUmC7uMgVhFgZdxIwD3oA7vTLnzYlxx+Nb9quSv9K4TSbsRsOcLXcafMHUFTmgZX1mxzCbo8v1Uf3R2xXnptZfPb/ezXql5iaB1xziuTksQs2cd+RTEXNETbECcV00BHQelYNhHtGB1Fa8cuMUAbMJ6VpQtWLDN0q/FPj6VSJNQc0uKrxze9T7gRwaYhGFV5P1qR5MVVmmGOOtAyOXoe9ZVywwenpV2aXj/Gsm4k3Z9BSGinMcNkY/GuV8cah9h8NSqpw9wREOfXr+ldLI3OSeRxXlPj3Vv7Q1lbeJswW3H1J61Iyl4Q0/7ZrMUrDKQfvDn9K9Ev4UubaW2YZV1Kk/WsbwjppsdHE7KRNN8x9h2rZk5bOMn2NAHmUVs1nO0LcckA1rxWJnXuR7VL4nsjDqG/bgSDcPT3p/h+6LNsPXuDQBialocqgsqnj1Fc7cQPDIHUkNnII45r3GG2SUAMgOetRan8P7TVoFaE+S7dwO/wBKAPN9J1Y6jEInH+kxj/voV33hnWmBETkkiuK1XwdqfhXV4JbhCYS3Eq9CP6Vq3CPYXiyoTg859RQB67FP5sQI9KtIwBznFchouqCe3DBhgj1rpoJAygjnFUBqACaLGBiuC8R6eYbsyhflbrXbW0uDg8Co9XsEvIGyM8cUEnkEkRAOcccVVcbD15zzz0rZ1a1a0uPKYYBJwfUVmyhdvTPv6mpKKJZTjA/Emq7kFscf8B71PIp4+UfX1qpIW6Y9zQA9RnknGPX0qVQWUgtkdetVldt2OCxHWrCDaMA8HqaAFChQcjDDPWp4lKjOTnpzUIJcc9O+KniyxxgHI7dBQBYhX59rDBxzRQNwRWyAemaKAPZQDgjPbNIQMnBqRiRULcDjikAw4xn1po6Z/Q0rA+vt0pD04PP86AFLdMD6U5QMZI57E1G2R6jvxS+ZnHr6YoAUr+846/SoNSizp7evtU3mKvzE4/Gq91dwSRmETIW7gGgDz7WLdjuPTvXNshWTPXPP0rtNV4ZgScf41zNzCoYng9itAFaK5a3flenauy0XVD5a5bt+VcXJEOe/uKs207W7AnI28H3oGempP5wHNQXFsCc1m6TeiWIcn8a24x5owDTEQQRkcYNXEPB56U1INp6cmn+V83PfrQBMrY7+9XY5uKzkBOOcmpAxHXNAGvHMPX2qwsvPBrGWUj0B6ZqzHMeKq5Ni+0m7mq8klMM2RVa4nAHH4mi5Qy4lIB5/GsudxuPJqWebAOcc+tZ8xyDuPHfipAzNd1RdM0uW4JG/G1R6seleY6Pp761rKhiW+be7H681peMNZOoaj9njOYYeBju1dP4W0ZdN0xZZV/0iflvYdhQBplQi7FyFAwBThHkcDLU6QH7vJxREg79qAMTxJZmbS/OVeYDnj0PBrjLaZrO9WUD5Sa9Omt1nhlhfnzFKkfUV5s8OVZCPmQ4/EUMD1HRyt5ZRSoecc10NrJsXbXA+Br4sXt3bG0569a7+QiBSfWmgL99Zw6npZSaIOvQgiuA1jQj9le2ycxn903qO1d/pV4s2UPAPHNV9Z08nEyjdt4bHpT3JPJfD1+beYwEkYJBU9iOor0DRr8MxiZhn61594nszpGvRXsQ2wXP3vZx/j/jWvbXjKILlCeMbh7UkUejSRMMFcnPpViCX+CTvUGlXSXEIDEHipnQRyZHIJqiTF8QaKt1ExAw3VSO1eeXMEsDPE68jgj1969ilUTQkHBGK5TW9DNypeILvHHI60mijzl0JUDHBHAz0+tVJocnIB5Fat5aTW1yUmhx6cYzVKSMEkhyvbFSBR8tlJYjC1KpPykjrwKcYyJME8DvipVjypwTj6dqAGNxGMHPPbtTo3IOO56GlYAElRz1p6kNnnBx68CgB8ILAcEiirFuFPHX2ooA9HufE9tCDgFsdKoyeL7YE5BH1NcJfXzySFTkAe/as9pGbOHPHT2pDO/l8XpkYA9R2qrL4ym3YVV6+tcKyy5OJc44xUDtcRjIDc+hoEdtc+LboL8rAGsq58U37AbrjHsDj+VcvJePkK5OB68VVlmznBzmgDopPEFw2R9pkYf7x5p+j3txPrluOT82f0rl1Zm6kgAYzXX+DLb/iZQ3Up4KsFyPbFAHSamrEg9/XHFc/IpI3d8kV0+pjIOBwOlc7Ou3t+dAFF4zjGeR1wKpysVkznA9a0WUnGDxVK6iIIOMYoA2NBuzwM8/zrtbSfOMEZzzXnWkS+W2TlQa7OyuC4ABGKYHVRYkHOOtPMYrPtbjjGetXlmBoAcIsjjApfLxxQHApDMAOe1AAwxz1pvm7aY8w9TVSa4xkj8aALMtzhcg1UlnJOSefSqck5cnHSoXmxgZxQBPJLjknvXNeK9b+wWLRRN+/m4A9PetK/vEs7dp5mAUc815LrOqS6hqL3L5C5+VfQUATabpuo383nW0DT7DnAIyT64NdOmva/akRXEL4P/PSCuEGrXCsNmwBeB8uKvW3irU7b7rI3IOGBPSgDv7fxHbsWS9BglHUMpAratbu3uMGC4jcexzXmv8AwsLU5dv2yKC5C9PNjDD+VKfGFg8m+bQrdfXyCU/lQB6qkII55I7/AMq841ECLV7qJcY8xv51JZ+NLFZB5T3tuP7sjCQD+tRSzRahqzXC5ZZG4I70MC5pizWNxFOhKg16PbaoLq1QNgkVhR2UUunpEy4cDj1qxZWsseFBoA3ILwxE7MjHet3T7+KVsO49CDWAiBY8Ec9TzTIS8eTyeeoFNAWfGnhKLW9JmW0YCTO5V/2hXnWkCWEy2F0rLJGSrKeoNei22sGGXa+StWb3TtN1wCbasdyBhZQMEfX1pAc3omp+RIIZTgr0z3Fdb9vhbH7xST0Ga4e9057afyZxtfs3Zqu6dBLkZYkjtTuB2kMwYYqSSHzAcVnW04iwrdccmtVGBUEY5qiTnNT0xZgQyBh6GuYvvDcDKdmYz1HcZr0Z41lHB5rJubPJIIpNFHld1pNzbEsYt6eqgkflWcZMSZJK8dK9ZexGf9WD61Qn0O1mBIhjLf7SilYDzX7WnAdskcYJqeJVkGVYAn2rtptP0q2UjULJYM8CVYwVqheeGreKP7TYzKQegB4P+FIDBjHkthj8pHaim3IkhkQMqkHPKsGx9cdKKQzGu70NOcetQreYyM/WqrRPJMfm2gHkntTTKsQITDEHrjrQIv8A2sBScHAp8VyG9ePyrLLFsd6kEpWMYPNArmm+JANyg5qM2Kzkbe3aqaXWMDdz71qWUolYKOmeSD0FAxlnoxnnVWXZbqTukYY3Y7Cte3uxBeoyjEMJAAHpSSTuw3FcLjAUdh6VSIMUxyMmgDunH2iHIbIPcd6xruHDEfiT3zVLStc+w/urkN9nzwcfd/8ArV0E8MV6omt3VlPIYHOaAMAjAxgmqtwNy5C/41uPZdcD9KoTw+WpG0knigDC3NE3GAM+latnqhVc59vSqctruJPPpzVKW3mi+63Q0Ad7Y6sGABY+mc1qx6guMhwffNeVLPeoQN7demeKtrf3kY2jdjtimB6W2qovO8D8aibWoFzumUe2a81lv7+XqWUdvepNO029v7yMTs8UbHPzZBYe1AHoya1DJna+73FQz6lCRzLTf7MsLaBUEPzY4YZBqi+kWksnMMjccbpMigCX7fEcMDkHv60kl5Cg3u4Ue5qwbnyLdbZIodowBuHSs6+vLvA4hPP93NAHF+Itan1SUhFYWycAdMn1rkpAWPTivUJtRuJTtMFthQAf3Q5rMvLe1vAPM06AN13RjbQB54yjI7fQ1HnkfzFd2vh6wl6wSAegPWpl8H2TgkoRx/e6UEnnxx64NBUjOe1dfeeDWVcwSk56Aiuau9MurGQ74WAHfFAFMZ3ccV6X4ZsP9SxXO1R+FefWEYnvreI9WlAPvXr+gW5FvIVUg9BjtTY0SRXDJfHacqPlHrXR2Ui+UxxjtissaI/2czkEODnA4q0t5Hb2rKxUY5ApDKWp619lOc5boBVS08RMw+bn61zd/qEM+pMzMAuT1PStC0jtpVDIQc8UAdRHqEM8WVwGPU1Y0K6LasVeX5cfSuWkia3+dWOAeh70631FSwmVgGX9aAPTL+ztdQUoQrAj15rItrRrC48mXnH+rb1FYGma4wLOz5HfB5rs7aS21GzDiYZxkHOTVAQXCfuS44YDoKp/2tcRrsZegxmnrewW919lmfa5Hyhj8rfQ9RXNav4vsrCeSC5sbqCVezKMN7jmgDpYNcMbBTk1twTpdx8968VuPG1w0m62toQvYMSSav6d8SBbgGe2kB7iMg0riseutYls1RurIrngnPtXP6d8V9GlAE7vCe+6InH5Vs/8Jz4evFxFqFs5PYnB/WnoIhKymIwth1YYwwBB9q4/XLK/02LdbK4iJw0TdB9D2Hsa7y3vdO1BS1rPHIQMmNWHNZup3AmsbiKGcTkDm3m/1ifT1osUebMrl/OnxvIxhTnH40U2XJyo55yufSioGYN6xaQqDgDrVAjn3q/d5WTGOtVFXcSSaCAUcHjn0pSCvUEGnRH99wBgdKW4wML+dAFRjg1uaRFiDzSDukbYv4DJ/pWF2Xn7xrptJB8qFc527sD8f/rUDRfaCWTvgCiO2Z5PmIwetbNrarKvHP0HJqb7EoPAzk4FAzBvrZTFuwAO1c8l7qOlzFrGdo1J5jPKn8K7S8ti0e3HSsptKNw4VFLu3PA4oAgtvH10BtvtPRx0MkRxVmTxlpMq/PDcJ7YrL1WztdM/dK4luyOg6L7msdLIytlvmJ70wOik8SaOegmJ/wB2qMviK1OdkEhPboKpw6ZJczxWlvGDM5xgCvTtF+G9pbRxS3sRmc8sO1AHntve3t9Ji3sVGT95j0roLPR7iQZurhmzz5cK7R+dehjQ9Ot48LblMdxTzaWSdIGPoc0WA46HToYQNsCqfU8n86rvE0er2xGck7efSuykgsskhHzjvXN63FBDdwvEWHI+9060AbjRQmILKWGay59MVy3lXAGOxk6V0aRQ3NpGZHGCOuOtY15oljuyLvAP8OKAMptLZP4gx9c96pyQOo/1wx1NaostPQfPdMcdljzUkZ0bcNplJ6c8UAc0bSZyTk/lzVmLTyeW7nOM5NdGJdKJOYAfcsc5oaKwbmLIAPTdQBjx26gjjr7US7FHTv0xyK1Ht7Yk7ZgD7momsuMhePagDO8livy8g4z7VXuIIJhtliDgcZI61qraggANnjkYoksxyPxIoA5X/hG9PF4txCvlujZyDgD8K6CxumslAWUAe4zTZLfHAwRVcwgKcZwOOe1AG4/iK4aJVYwkdgBism9db2PbkgE8hRUDRkt8uO3J609IB5p5wD3HegDI/s+3ilLCEZz1YZxUiGWMfN0HIrYNupAI79Md6VrIMcAYzxk0AZofz1KsSpbtWPfQTw5MEhI7AjFdE1iQeg3ZqvJYTNyV4oA4v+3r/TJyZYd0TcMDwD/9euq0bxU1osdzbS+ZbH7y9SvsRUdxp6S/JcRBgeMMOPzrnbnwpdWkv2jSbhlf/nkeD+fQigD1ttd0XWrMRXEMK4+ZWBIdT6gioNbt7bWNCJlKzNAfllyA2Pb615nYLrksohuba3QA4Moi+b+eM1uw2mo2+YotQna3zykiAse5G6gCrP4TM0ZlsJTuU4KSDH4Z6VWttMtbuF4ZbWVL2MciNsMwHXAPBPtXXQK72crkkNuH44qC60t9QjW9tmMd9Fz/AL2P607AcTcaDLDELq3nhurYjmSI8r7MvUGpZNGeCOG4BJhm455w3cVvXW+Ff7at4l3E4vbcD5WHc49D39617O3t7nT/ALLHj7POvm28h5wfQ+46UrAcrbw3elSJNExjB+ZWXuK3V199QVUvGVZ1+5L0/Wo7uMLYrBn54ScqMisG4USLx0o2AlvNTWWchYWDHl1I7+tFVGt5FjEz/PEeN/cH0NFIBL+P5yT61lgEnB71s33MpyP1rLwV5Iyc0AOUBbjBJHGeKjuCMEdalkH70HsRzVd+ZkWmSKEBukUdABXQaPISAOn7vP4ZNYH/AC+fj1rodNKCVVUkfIAB68mkNHS6dKIwQemeD2FaryDo2AcZzisiBDGFBXtk/WrTv8uSevUn1oGJM26QY5HYU3UZoNG0t5pTmZlyxz+QFQxSt54fqFP51zHjDUJLi4W2yTt+dvr2oAz7CO41O6muWUuc5J7Cujg0ZooBNOu0k4VSMs34VjeGJnt9+0ZPUg9q7LS2e9vmmml3eWuV9AT6UAaWiWdloKid4la8f7x/uD0H9a6K38UDOeMelcTfTH5mOep696xpNQlXIVjg9MUwPY7XUbW+LZ4PqOlWJrBOChByOMV5f4c1VoZyGJI/nWzc+LjBcAIxPoB3p3FY6s2yiTb3rB8W6UhsRKiAMDmqsHiuUnLOD7ZrRm8QQXtoYnAPBFIZJoUJvPDaeUd00fDZHWqN1ZMcnaM9+M8Vp+DZ1WK5iDAMTkA10EtrbzFhLCpOeCKAPOGtmGflxnge1RizDE84I9B/Ou4udGtXJw7fRhVCXQ4V+67gfTNAHMfYxkjfgnpgULbddv6Vvvo8vWKZGA9aYdLuyvMQf6DBoAwFhwSOh9u9AZ4c43Ag44OK2jbfNgoVx2JxQ2mNLlQmceg7UAYjXjrySQCeasx3Cyf60Z9yKtNpZ4YoQD6imf2Y0eT5TD6LQA0Qwt8wIz3pj24IGCvTjIpfs9xklYWA6dKSKK63bRE34igCr9jyc5Xk+uKPsmD2GO4PU1aeIrkYAI9Dk037O5BZcce9ACR2/fuMYGakC4IABLAY60ihhuxnNSxyHkkZHoTQAzbiQcDjvT0EJZkbCjrntUyzQPhWUofUVIbEOu+A+YnfjkfWgCOXSIZ4iYJY5M9V6HP0rEu7FovvAg/TpWkBLE3APNaUTpqESxXGxLlR8sjdG9j70AYFuqgorAE57itFtNDAyBecUktqtvKTsKkHmrtpLywGCvoRQBlWcI8wwseG6HPemqr297tQ4yOdvb3q3NEvnEIvzdRzUZKTyB1PzbSCPSqAp2gt5tQlQhQJwQ0eODnuK5zT5j4f1+fRbt2FrMwMTH+Bj90/Q9DVxGlt9XUZO0n/ADipPiBphvbO21FBlgmJD3I7ZqQM7XGmt9QZskMTllI71myKgwVbKMMrx0q5o94uu6ebG7P+n264SQnllHY/Ss477SWS3mzx0yOlAG5oduCXdhmIfeyeD6UVlXF21tosUS9Lhtx55wOlFAFe+H71+wHbFZcuCSB/+uti+Ci4bt/SszYDIAPrikBG4EcYbA4plmpmusgcAc0XB3EgHIq1YQjyixHLEmgkqOB9qb61swR+XeW2Oev86xnwbhsnHNb9r800GAAQoJPueaCjqRkR7uvGRUQO7GcEHk+tTwqHtFA4B6/SmxRBZMnoegoAiZlt4zK3IQEt6cV59IXvb2WVuTIxJNd94nKWmgRbcB7jIA9Vri7BAZenC0Aamk2xSUqR94Y610Ohsf3mDwDgVjoxXaR16Vo6QdsrDoM888D2oGWdVbnGPz7Vzzrhi3HHpWxqM6mXkg49KpbVlYgAAUCFtGaIM2cetUrmd2mL5OQeB71fnBgtyQRj19Ky1JLE9MnOB39qAFWabzcbiMnPFXY7+aIkZ4P6VVSPMoweSO1WPs/zAKO/SmBsaR4gmspi6tye3bFdTaeMg2AXxnsT0rz7yeTt+lWFjlQA8HB4oQHq1n4ntbobJdrZ79xWmr2NwcwygD0PWvGxO0GDuPHvxVm21yWHB3uFHI5NO4Hqc+nOVJiIPpzWXIl3AflJJX15xXOWPjC4ixmX8Ca6O08V2k+ROASeDSAaNUlXidAw9GGatW8ljct8kpgY/wAJOKkX+zb2P5XAB5pn9kREZicNz2qgJ5be5ijBRt64+uKhkvGMRDIPTIFSwJPaxbix2jqKqXV5Fz8mT39qCTMuhLjcvAPB71jyibJ3MwGeP/1VtSXcODnP0NZk7KxJ5IPcVJRnmaUHG85HPXgUCVgDgsecgZ4pZo26jg96rbiCTn/69AGrb3OMDHyng56VcWITLmIgnuM8iudjnVfvZx09vpWrZ3bKRjbnNAEsieXj0/lRb372zAqSpz9K03VLyHIwJh19DWTcWxSRhtKkdu9UBtRzRXwG5AzNzxwarXNntUvC+5c9RwR9RWNHLNbS7lYjmt+1mW9QHJFwBkH+8MUASWjRX1uLe6ADj7sneqt3ZzWcp6hR0OacjBWCOp4Pati5CzWnAyVUnPU0AcpdTPEysgHykVO6qxF1EoyB+8X+tSy24a1+Tgk9BVe33QS5Ix+goA5zUGMd4JcYGeldTZRpqmjG2nxyCOtYmtxAtu+VfUCrGj3m4KjEgg8EGpA5DW/C2p6DeC/09vPVTnMY6fWrLmDxNYm4gTydQjH76E8bvpXodw7qudqMB3PX8fWsS4sbKOX7X9mEEpP3o+BTsB5rfSs8yxSZHlDaB6UVd1aEPqszq2ST16ZoqQItSYi6k/3qqwsW3fpVm+GZmx61TTjPtQAqQeYzZPU5Aq/Eu2ELzjFVoSJZB/CcVoSYijA9jkUAYKRedeCFT9+THNdZb2ZN1xkgnH0/yKwNBgN3rw44Xc1egwW62gzgE0AS7fIhGTwABiqkZeeY7e3AGaLmXdx0BJyat6SA1x5rkYTLn6CgDnfG1yH1RbJfu2sYTA9cc1ladCApdhkk80y/mN1qE9znJdyefSprPJAUDC9T9KALcaebMB0Ccnjr/nNXYWKTNgcgZ9KjsF828O0e+auyr5UO4KcsMn3FAGTcPumPOePwzViBsEkctt71nNIWlwD1OTz0q7AwbanU9PwoAkvyVs+nU8Gs6Ac4J/D2rT1TEduiHnPpWXbndIc4BFAGhDEuOmB0xTwD2AALYHrRGNwI7DGM1MsQYg8HnI3fpTAqkEEsM8kdOKvrtIOVHPYc81Vf5dvzY/iIxVq35jDMQc9R3H+c0ARy2wlj29+/FZ08LqQVPI7VsyqxkAz7CqdwQVPHIzkigDI86XG7Pf1qdL+VMhs5HQ4qVIECsTjjoB1qrMBlwBgkdfQUAadtrUqY+c5A9a27HxZPCwLNuUds9a4hRuBx+HYU47osYbdxnA9KLgeo2HjRJWHmjAPUZzitiY2mqZNvMA5GSuea8W891YcjJ65NW7XXZ7aXcjkMO4NO4Hod5p1zbgnB29OelZoVw37zOAecnFP0Lxv5qi2v1WRScsSc10GoWFpNYm/tCShIJUjNIDHEAl2liCD0x1xVS4tjEWyvHrVmC5WFiBjp3FaCeRO2xx979KAOaKJ1A+ardvE2fkxn3qzf2JtJiCoII65piADBJIPrigC/ZGdZcBcMDgjtVq6h84kkgPjt3qvZXadHJ6YGPWrU/CqUwR6iqAyJ7XIyFHvxTLWcwyL3x7YrQ3bnKls5PU1nXCmK4JGce9AHQyRRXlotwgIkX73uKW1nSVQFYggd/SqmiTgSGBjweBTJAYNQI7FvpxQBJ5ht5TEccHHJqpc4EmOOT2q9PCZCHGenUVmXLOWAwdqnuaAM7WovKPJBPHSsuwn8uYY7GtbWRkRAHqM1hkeVIOOv61IHYt5s9uGAB2+lVPMJV4mOQe5pui3u+N4j+GabcjZMCOh7+gqiThb2PbeuCP4j0orQ1q1aC94AAbkE9KKkoyL5Qsh44rP4Vj6VduiTJgdulVJTgccEUgH2gBmJzir15gRnr3JNUbIjz8D0zVq/4jAHGRQBP4OjAv7iXuq11skoGTkE5rkPCTbbi8z/AHR/Otd7pjLgnntQBbMgdjnnHGQKs3U5stDmIHzzjb+FU7IGWQe+cZ/nVfxBc5ZYFJAjHfue5oAwJ8YUL1B5Pp2rRs4TtyewA5qrBEJJAD68k1qJFthLdmxigDQ0WHc0p25PQfrRq8igMFOOw+lT6MfLglfkelZusTFpwenB6/jQBjBsE8nPYYq7pilmzu+XPpWeZMkZBwOOK1tLBIJIAA54oAfq7gsCD0GMVn2w+fcOvb3qTU23TFckD+VR2zENuIAA70wNWNVVVOO/YdamUg4G3nJqrCzLJgc4GeRUzELJ1wB0/wAaAEOGBAXPJOc05GZZCgGTwx+tKwULhA2CMCkRvKKYX7w/LFAFpozt2lgS3UjtWdOpMgG3BXgn/D+dXjKBGuBgY5zzzUaj94SR14A/rQBUKtGMqoHHes+6Pynbz71sSqDGCU5z1rPuY8EBcZJ6igCiIl2qQpxjHPeoSHXqOAO9WmjI4ySfrUcmW5UcjoaAKsgPO4ksPTg1XRuckmrk24HGOG96pShgwGOh5waQGhZS/vRk/KRxXovhK/8AtNrNYSnIZfl5ryywmdrxVBHUV12j3h0zWIZc/KWwaaA3LsGOZlCgEHkGpoJiCMckCn+JIzBMLuLO1sHj3qjkBUlUEqTn2B9DQB0EsYvrIggZAyDWXazfvTBMOM8ZqXTrkK2xj8p96raigScFRgHn6UASXMJgben3CeCK1dPlF7GVJy3TIqrbSfbLRoiV3LVW2leyvSWyAOCM0AWbjMMrqOxx0pssQmjyN24elX9SjWaFLhAM4wSB1NZqv8oU9SOSaoCG2lKT7sHII6Hoa3vLhuRuY7WAx9TWBLHuO5ep7CtywUz2mMEMO4PFAEsUDLkEqVOOvFUr22AJIA2j0q2ZyjbZW+hPIpzqJIPlIbHIyeKAOa1JM2qDg4OM1jOpZeBgiuhvI2aIoePQViNCVc5Xjt71ID7K48mYNkAjiujmgju7TzhywHIFcucq3b6g4rotIvB91+VIwR1zVAZGrWRuYgsrDjG1qK2dUtmt/mUb1zuA+tFFgPNrnYs23H1zVa4jxFu4z3A9Ks6hEyyg8epH8qoXDtHHhsHPpUAFqSLhf88Va1EhlBycVUtyPPU8cVavTuC+4oAd4dHlT3DHoY60U+chiMcfpms/SQVgmJH8W361sWybpAq8kngCgSL9goRTM3GBn3/z/hWNfHz53Y4y36ela164tofIDZ45GOTWI2GY9yB0oKG26kS9OK2Y4laHHrVK2XCJweevFXY8qpXcDz0xQBoaYCkbAgY7n2rn9WkBum9MYratpCinkn69zj/61Yepj95uOe4ye9AjLziXGTgcECt/TVAhBwevNYEa5lXHQc5rZtHK2444A5IPU0AU9SIa7Y9R3otyvmAnBxUd19/GQSW71LbLkAZyM8UwNBQ2M555P1NTRsfLJc8Hk47elMiwFU9SDjp/WpgoIUYzhsCgAjztzgE8gsTSMdpI4AA4qyiY6A54zz0qvIVAJBOW5X0PagBAQpyCcjoPX3qXG0RkYJGc+1Q2+1plBwflwM9vrV2RQ205ABHI+lAFZ/mJx25zjvzVGUbpDwCR0Oa0XYFduGO4fjVJlPmqC3HfHegCswB3kAbiOT6e1VyByeuatGNljCrxzk+1UZ5MH6H/ACaAJREvl7dpyBjpmsW6IE20jIDVs27+buBPH86yNVUwzggcfSgCvaSETlh94N+VdTOM2sLqcng5rjYnwM9OckmuuhJl06IdCV70IDv4yuq+HFxy6qOfasWw+czWjg5Ayuan8E3Xm2725HK+vapby3NrqXmrxk9qAK0DNbysj43jj8av3w+0Wm5MHbhsdx6iq+qwk/6VH07mpLOYPHsZs9vTHrVARaXceXcKcfUVo3MaTAuuNwz+IrGdDDMV5GD6+lbEIElrnByRyTQBLp115kLW7YxjAqrPG0M55AA7io0BhugVJ59D1raeAXNm3PzgZoAwyeQBz69sVoaPdlJSuAVPXntWfLH5cpUniliJWUN93PP6UAb2qwZBdAuD6c5rMtb4wyFJSCh4IPStOJ472zKlvmA6jr+NYN5GYmyByeOlAGleQBgHUBlboc1h3MJQ5xx3GKu2eoPCSrkNGeoq1c2azwb4TuBHbtQBzUgABB79qktbkQyLn16UXMJhBJ+mSKyp5doJB5qQOoudUM0CoDkD8aK5mC9yArGincDH1LPnMTyBWfc5kHPAGK09TxFMVb7p/Ws+dcR7vxqQI4Vxg8c1buR8qt2xio7dcFc+lS3QPlqq+meaALOmRt/Z6gfxynGPpW5bRrBuJHzAYArK00lbe1Q8YUsfxNaZYkmQ923UAUdRlPmlBxnAqtEBuLe35f5zUtyC0+CCRjmnQx7sMflB6j0oAmizhSuPTntVnaAwxkDHT+tNjAZB09welSzEfxcKeD3oAdEciXHPFZeoDdIxxgqK1VyFxjGf8iqFzHnOSc45z1pgYfAkBPryR2rSgbEXbIzkdqoIBn1P0q1IQIm5JJH5mkBXbiTPoc/XNT2uQMHoOMU0rtxnBxU9mCCoPGKYGkuVh5JHpg1KCoX5j1PTtniosHAYYx04NSd1UDCqc0AWj/qlDA7n6+1Z8zEfxbecZ9P85q2WZYzKWbdyeOM1UYZl+YFfcHgHFABauPOwQc9Ac1osCcZ4Ocn2rKt2KzgNkZYkZ9f/ANX9K0t2cnPT3yBQAyXIYkgAnjg1Uzy2AvI9anuX+YkBsHgjHWoFkQSlsc4/WgB0qDHQ4b8+lYt5tBwAcEda35RmJSDnrmsG62mTaeOPw9aAKthJi4AJJzxUWtL8qv0z+tVJbkwXCcn7w59q1NV/ewjqRj8RSA52PhRzyD6V1ukHdpqDI4HOa5XGFPfngd66LQJd0TLyccYFNAdB4VuDba46YwGOcZ4rttatUlUSL0YZrzyCYWetQSj7uduTXpe5byxBHJAoAxIh9osWhdgSBjmsyH9zcMg4xV6PMN7s5wT+tQX6+VOWAGCenaqAfdYYLNwMjB+taFiCbRxk46emayUmEkRVjuU/p71paZn54mIyeKAKbybbgY4ycE1s2lwTKATjcKzLvaJyGxj+H2NTwsHhyp5Xp60AT6nAColQY9fb61nRfN1+laXnr5cqTcZU8kd6yJ42hnKsSm7oqjLH/CgDVtZxbyqMj5j2xzT9QhEw3g8dxWP9ojt4y7hY1/vM2WJrSguFlhwWDDuQcj6UAYt2xhVmzzj5RjqauWVzLFtJYE9DgcH8Kp3h3yqesJOIz6jrmmicRxbzuDMcAHHJ7UAaGpxmeLfEuPauO1HMQYjt2rtbKYCJYpW3cYJPPNZmsabDPG2wru9fWhgcObwIQyNg9DRVPUUNrctE+Qc5FFQBtapEXn4yQDVKWM+XsHIHT3rcubYi+ZCOpqBLTdJgjpwaAM+2jyME4xSz/eGBng1pJZFcgLg9cYpgs908KnHzyAfT1oAdbIFkYHnYoU/lV8tujB3cEY59ahjgLvJKvCu/6VaaFgBx349jQBmyD5hkZzx9KIfm2jsT+FWLqJgcrxheuP1qO3iLDoORkD60ATQyjnjnO3FSt8zDJ+UnnJpLeE9B7jmr625ADdP/AK1AEUMS+pGBgDmqlxFw2RjHrzWrFDuBGcY4pstuskbAY9x70wOQaL94eOB+lSBW47gdvwrSkscSYBOTzTVtz5rA5IHJzSAz3BDbOScgc1ZhHlSBj2HpThbt9o2/NwPyFWEgwfvEkjvQBajYFAckY9efxpw+bOC2Tz9DTUG2Qccd+atQx55PGe+e1MCJ9vlDqSeOPSq8ihmyM/Nwa0JkI5DADgenNVTEWkQDGMdAelAFEDEgJByGAx61fgIDHcD04FV2iYqQMgZyMGtC0TzYwWGGx1oApXK+YwI3Ad6gKnco24Hp149K15IFztIznkEU37OqnDYHpQBnXDCOI44PBA7ZrCuJDhieT1re1KAHOGwegPvWHcwMYh1GeKAOeuhmfBGDuxW0xM2nAjsQKy54G83PP3h0+tbtrb7rN4sdOeD/AJ9alAc+8QHJXnJB9qveHiRdOhGQaZcQPCQGwKTT98OoKRgf4UwOhv4WXDjqrA5ruPDd39p08bW5HXNc5JAJ7XPc/e561Z8Ly/Z5ZYmP4GmBp6rE0U24Z7VHcYuLIv0YACtLVIkng35z2qnax5tyM89vegDJj+9tPQ1r6aT520sSMZHrj0rMMLRT8r1P5VpWcTLKpI5HWgCHUAQ3TmkspSrLjPtVy8haTGfxHpVa3i2NgZ65+lAE95HgQzrnapG7HODjg0hlW8UqqZLDAmZSB/if5VoW8ecIw4HP6VXEONwJYnPBNUBnGxCyYmUO3TLevt6U3YyExKpjiBy/GMn/AD1NbQiDtsfP1qGezwGUnkZPWgDJuYfNUBTtZTlSBwD9PSqHkNDLGx/eEHGTgYHsP8mtmNSwZHPJFQPb/Un60AR2zYJ3Crhi80AEcMKqpEV5zgmtK2KkAMR16Z6UAeZ+NLDyLpJkP3uDmiuo8bWCy2kflFXYPwM9aKmwH//Z) | kitchen & dining | 0.331406 | True | | 328 | images/328.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEDAMIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCuQ/mf7FTI1MWmNH+8+/tryT3ifO+OlgiX7lQjZ9+rKrv2UAS2qO8/3/8AgNbUUSeZWTajZP8AcrXeXyY9/lM3+7UstFldnmbKURJTY0/eI+zb/eWl2uk/ybdlZllX7Bsnd/lbdWbqMdvDA8rusW38K0dY1aLRrTe/zO33V9TXmN/qlxqE7vK7fe+72H0raEWw5bnT2t3bzT/JKrf7NaChPkrgA/8AGj7Xrag8RukD/aE3Ov3ff61bh2KcLHYOsXl7PlVF/Dms29KPH8jr/OuEvtUuL2fe7t/hSW97LDJ8j7f5H60uRlqhzI6+3RPMpZVrK03VEvZ/K+VXb+H1x6Vsv8mypZjZrRlWT7lZjw1tun7us+XYlTcqxmTxbPnqEGnzTo86I/3KjkCVSM2Yeu3rpJ5SPWZbjfIn9z+Kor2b7TfO6f3vlq9CieZs/gX73+fzrs+GJwL353LtzdbINiffb71WdOkdI0d/8iseP/Tbv/Y/i/w/z6VsIP3iIn32/SsJaKx1Qd25Gp/adx/lqKj+zJ/nFFRoa2kdZsfy6a1OJqMlHqSBYx+7qzCZf92qcR/eff8An/hqwGdPkpgaNo7zT7Pup/erT3PDJv3/ACN/DWNanZ86ffatEDfIn9zjdUNFo1IXd/vpSTzRW0b3Dv8AIq7m9sVCG/d/JtV64fxtryeX/Z9vL/102+vpUqN3YtHP69rsup6k8u/5F+6vYCsh7j+5VYy1PDaSzfwV2pJITZKt3QbjfTW0y4/uUxrO4TZvib5v4uKhs2pzjbVjvNSl3UR2Fw/8FSS2ktt9/wCamhuur2IFlZJN6P8APu+Wu30+9/tC03/xr8rf41wTit3w/ceTP/sbfzqZrQyk7nUuzp/H/wDqrF1Bv3nyfcq5dXLvJ8n9373pVGZd8Cf3/wCKsA6FDD+ZVbU5vJsZX3/O3y1fUVz3iKf94lun+81bUo3kc1aXLFmNCf3m/wD2auh38jyv45fvfSqUQ31p2MH7zzX+4v3a6Zuxx0U3oi3bRfZo/wD0KtfR7KW5nRP+Ws7bV/2F7ms+CHzpPn+5/d9a7Xwna/v5bh/4cL+fP8q5d2dz92N+x0EemWscSJsY7VAzt64oq3RWtjk5n3Oek+5VaEP8+96nEm+oWj++iPWB1jkV0qzD/flqBP8Ax+nbt+xKALTS7Nmz+981aSSv/wCO1kY/uVcSbyY970mNMqeJNTeysd6Ssr/wr/U15hcTvNJ/erofFt6892+9/wB0v+TXGtcu/wAlujf9dO/4VvShoVOapx1L0d3bwybJdzbfvbev0Fadr4gsv7Sf5PItfLCqrc8jqTj1yfyFc/b6dK9TPpUv9xq35Y7HC5zk72O3TWtFfYn26Jf9rd/hUd/rGjTSJDb3cW3d95m44GOT2rgp7R4fvpTVgd/4HpeziL2kux6NDdaUkHz3cHzf3ZBx+tZV9r2mpO6P80TL8vl4OCDXMRaTK8n3FWpJdIdI/wC9SUIrqVzz6I05RFNAksXzK1WNOX9+n41n6QjpHLFK+1F+b5vf0rbsoU89P4v7u2olHodcakXG7NGOH93Unlb/AJKt/Yk8v57iKD/rpIBVcwbPuXETf7sgP6Vj7KRKrx7lDyfJ3v8A3fmauDvJftt87/3m/Su61r9zpvybt8rbf6muUt7H+N0+81b0/dVzmrfvGkhtpa/x1oqqfc/u/eqRAiUxtn+qT/gVZybbN4RUUamnxr5af32b5vZRXXaY3k2mz7ryyFvoOn9MVy+mj95boibnb7q+p7fhXVbU0/8AdJ8z/wATepqL2NLc25obIv78v/fw0VT82X/Zoqbsvlj2KUbI8e9KUh/v76xdCvPOklt3++vzL7itw7KpqxkndXGlnpRv8xKQGlYv8if3qQycSU5jvqvC399NtOaTf9z7lIDitege91Z0f7ittVfX3q9pXhyLy/NlT/drbl09PtaS/wB75fpxW3Z29ukezZ93+9W3NpoOELu7MVNMt0+4lK2jI/8Ay7t+tdOsaJ9xKdilc35EcJqHhO4uoH2ItLpvgx0tIvNdd9dpcTxWsDyyyrEiruZm7fjXneu+L7rUJHt9M3wWv8UnQv8A4CqjzPQxqOnDVrUu6mdI0n5Hm824X/lnHz+fYVz8l/Leyf6PEsSf571VttPd5PuNK/8AerftdM2R77h/KRf4V61d0jllKU/JFbT9KeadE/1r/wB2u3svDUSRp9r+/wD3V4//AF1X8LB9Qu3isYYoreJd0k0nXHb612jXWkWX+uu4mf8A3s/otGvUzutkcnP4P0p/n+zy7/8AZkP+NZFz4T0r+B51/wB6TNdzJ4w0iH5Ikll/65x4H64rN1zxYkNiktvp6sjf89MdfwHP5002ZteRw1xodvDG/wBkvpZX/hj++M1kSQ3UM7pcW7Rf8B4PuK7q3vorryr5EVYp/vL2DDhh/I/jWulta6hA9pKnySrt+me4p76CT5XdHk7y/vPv/JRCu/5/738qn1TT5bK+lt5U+eJiv196msbZ32Vk9DqTubekxf6cj/3Y9355P9BV6Sb/AEv56j05fJn+f7jL+mcCpL1f3iOlZPc6Yr3TQ7UVCkybF+lFRY1uefw3T2t8l2j/AHW3bfb/APVXcrsm2So+5Gwy/jXn+394/wDu7v8AP4Yrp/DWoedaPaO/72L7v07/AJf1raSOKD6HRKakqvEHT79Sh0/jrI2Hj5/kowiU37/3KeV3/foAbPv8j5P4cN+VXLL/AFafPVJ32fJsotZP+WX937v0qka03rY3qr3dx9lgebYzbVLbV6nFUV1NIfvv92sjxZrD22jb7dFbzW2t6Yq4xuxV6ns43OfvLq/8TT77j9xZRfMq7sIPdj3NRxy6HayJEl2s8rNt+WMn/wCtVK6vrXWYEihu1gRV/wBTNxz3Oehp9hpdlC8TvqGnb1bc0n2jnHpjpWvL3POdZ3uhl1qSPO6RXF4qf3VjVB+ec1eii36Sl39on+abayyMD6+1Ubiyi89/+JhYMm7/AJ+F5H55rS1C803+zX+z3FqrtIGW3hYkJgY6/rVKKWxm6jb1N/Stn9m3v9zan86Xz7JIE8rzd7Lu2tz1OOv4Vm6Tr2kJY3EVxdsvmqu3bGX6HmrK6tpVzH5Vu88su07WaNUHHP1qbMfMTvcbPkiSJf8AgOaz9RvHeD7Ps3Jxt9v85pGnpY/Edhp8flS6P9sl+9uaQgEfQA00iOYm0Vv+Jbd2j/fiYSr9D8rf0q7azvDJv81lSL5vl9fSsqPxvZPP8nhmzg3fu28mRt5Bx3PH6VZ1CdLaDfsbZy364HNEro1p2b1LGsO+oX1vst0b7T8vmSZwG6DpVuPwnr6f6lLBf+Auf6VQ0/Wri20b7WmxpWk2qrLkRjPv9P1qMeJb3y/+W6/7Ks2Pw9qFFPcJyafu7F+88OeLE2OkVrOm3b+54I/BsVSOleJ0+/pkv/fI/wAaqtr2qv8A6p5V/wCBMf61HJqGvvH88s//AHy3+NPliSp1e5d+y+JP+gS//fs/40Vj+fq//QQv/wDv43+NFHLEr2lXuYtv/q0f/aK0xLh9Pu0uIvvrJ/n8xUtt8kH/AAI1FLEjyf73y/iOhrO/vGzWh6Hp17FqdolxF/uyL6H0q55f8Fed6Pq0uk3f96JsLIvqPX6ivQIrmKaDzYnWVG/u1lONjSEr+pIion3KVj/BSIPv76UNUGgxRs+/TZAn30fbKv3W/wDrdxVa5lqtHeJ/y2f56qwXEkuEm81HTyrhfvL2ceq/4Vhtf/Yrt4ruJp7KX/WR9x/tLnvW3f2SahHvif8Aeqvy+/8AhXMXMd0kmx3l3r/CzHitYtDkvaKxqz+DNP1CBLvSrvajfMu5d4HrxwQfauX1Pwvq9hule3SeL/npC27H1GM/pWnDf3trJviuJV/vfNXT6Nr32391d7d/8MnT/vof1FP2ko+ZnLCQe6t6bHk4ld6cJK9Z1jwhYat+92eRcN/y2j7/AFHQ1wF74bv9Ju0+12/m2+7asi9H9Oex+tbQqxkcFXDTp+a7mWk2yug8Oeb5/wBodG8pVPzbTjPTr+da3h/wzYahdyzXabbS2XdJt4Lnsufzya6i5u/Og+yRJFBZKu1YY1AGPrjJ+tTUmrBRptyMCC03/wCtl+991V6/jTLq1dILjyk/esvl7upHrVmyS4mu3t4vl+b739wV19nFa2VoiS6fFPF/FJtzJnuTnr+FZxk+pvUhGOxzfh/wrZQ2iXF8izyt83zdBW3KllDH8luuz+Hbg4x0q1f2cUMCPaPut5fur6H0FZUEHnSf7H8VZyvfU6qXJyJpFi1tbK9j+yIkUCN95W4Hr1q6dKuE+SK4sPl/h84fhxXH+K9STzItMt/l8r5pGX9B/OtTwZpafZH1CVP4j5e7sB1P+fSr2jqY6ynZWNRbK6+f7RceUn8Kr1NX4rPyY97yt/wKpIfnneZ/uL932phZ5pP9j/PNYtnYo2Jt3+5/3zRT/LT/AGqKRZ4ofkj+T+FjTHP7upE/1eyovk8t0f8A3foen+Fbnnsp3ckvn7/4G+b/ABrpfDl1LDYpKn8LFWX26/1rnnO+PY/+T/8AXrX8NH9xKn+1u/T/AOtWkvhMYfGd7bXMV7H5sX/fPcGnpEnmb6wLeZ7WTen/AOv2rbin+07Hif8A3vauZqx2piXcW+PfWDeWkv30rpsUnyf6qhSsDVzk4Z5Yfn+7UlzqVvNH+9i+f+9W5PpdvN/s1hXeiypv2JVXTBNx2Mu5RJv9S8X8qotBdJJ9xf8AgNXJrCVJPuVSkt5U/gqkinWkdLo3iPUrLZFdostv/wBNGGR/jXWW+q6RqHyRSrvb/lnJ3+meteRnfT0lenyGbqM9iNrb/wDPvF/3yP8ACoJtMt5o/k/dP/s9PyrjNM8SXVtHs3+b02+Zzj8etbtv4xsv+XiKWL/dUEVHKyuZdSGXwzYXuxL551eLO5Vk2B+f/wBXNdFaWyWsCRJ9xV2r8xOB9TVaLVtDupEl+1xb1+75nBH50t14j0W1+/qCM/8AdXB/riru9jD2cLttmhJKiWNxFs3Jt3Kqqc7u1c7qurRaTY7Itv2pv7v8GfX3rO1TxvFN+60/7n+6ST/wI4A/DNcnPcy3Pzu/+6vpTs+ok0tIjZp3d3d/vt95vWvUtLKQ6FZRf9MV3fUjJryqYfvK9ItLpJrG0eJ93yj/APVSnsa4fSTNuRv3aRJ/wKpIRs/4FVOE75KuKU8ysDsLWXopNzf36KCTxNF/d7/9mmlU+/8A3lNaN3A8M8qbPk3bl+lVUXZJ/sN92tFLU43HQxvMfzHT/a+X2ra8PN+/l/2vmpo0yKaR9nyv/X0pdDV0vv8Ax3+ddDaaOeMWpI6Vk/d76dC7w/OlX7CDzo5Yv9mqMi7HdP7rViddi6l47/c+/wDxLVqGdHfe/wB+sYj+59+rVtcfwS/f/nUNDTNdS/mf7FDH+/VRpn/gqB5n/uVNih995Tx/c3baw57N3/gq/I8v+7RGf/2qtaCOTubF0k+5UEVo80/lJ9+uov7d5v3UX+tb5tvoPU+grNMSWu+KJ9396T19hVKTJcUU3VIY/KT5v7zep/wqE1ZlWoGpkkZNZ9wd87v9KvmqJH7x6qJnUJ4B/wCg7v0qTfs2UhXZ/v7fl967/wAHeDon2ahqabt3zRxt0HuR3+lJyS1Y1FvRGBo3hTVdd/0hIvIt/wDnpIvX6DuK7rT/AAbLZWKReb+9XLbucHPtXVqFSPZ/B/dqeKX+CsXNs6I01HU4ySK6spP9IiZdv/LReh/GrcE6PXUzQI+9HT5KxrvQk+/afun/ALvb/wCtSNkyrteiovs97/caikBg6jp8WoQSu/yuqr5be/f+dcdf2UunzvE6f59RXoSxfu0i+XZwzNWDr/lTX2xPm8pdu7371UUYyObg+5K/+zWhYD92n+6P5VH5CfP8nz1bsYtkcX+6P5Vr0Mep0GgL+/f/AHf60muWWyTzYk+RvvelWNEg++//AAGtO5g+1QPE/wAu7/INZX1N0rxOKFNZd8dT3EL2s7xSp861DmtDIqrfvD9z7n91v88VbTU7d/v+bF+v69azruHZJv8A4GquBTsmK9jf+0WT/wDL2n/AlYf0qFry3T/l4Zv+uMfX/gTY/lWRSijlC5ZnuXePyok8qL+6vf8A3j1P41WK06g0xlW4FVGq9L/cqmVpCIcfvEpq2zp5TunySq36H/8AVWxpWky3s+//AJZKpZm+gzS3NtvtNn8cUjfgDj/Ci5LQvhXS01PXYklTdFEu7b9Oma9giVEj2J/DXnXgMJDq1x/1xG3869CD1nPc3prQtZpUP7yo6mQfx1BsWBN/fp5P7uqj73+5Ui/JQAbf9iijdRQB5xevLDB8j1k43yV2LJE/yOi1inTP9L2J9z+VWmYOJnQw/vNlXbTTJfLR/wCDn+dasGmxJJ/sVZjDeZ5Se3y/X/8AUaLgoli0h8mBE/76+tTbf3m/f/wHtUksMqR/cqJPkqDUz9R037b/ALLr91q5aWF4ZHR/lda7Zm/eVnarpqXUG9E/er9339qqLsZyjfU5O4XfBWc1awWq8tnv+dK1TMbFGnCkZaKYxwozTaWgCKQVYsbPzpETZ87NtqPFdL4Wtv8AW3Gzc6/LHu9f8aljRr2dhFbeVbp/D/rG9SR3/H+QrmpY/J1K4if7kq//AFj/AF/Ku1lg2Qf7f3mZe54Of0rmNfgdLu3uNn3sq31/yTUItoz/AA432LWXif5d3y/4f59675JP468vvWdJ0uE++2N31HH9K77Sr1L2xilT+Jf170MqD6HSQyp5dTM1Y9vP/BWlFJv+/UGqJxTgahy/mVMDQAtFNooA5srRiirVtbb/AJ3+VP50zMrKu/7nzVbgg8mRJX++37v6en+ferkcaQx/c+f/AGabeLvg++y/N+VFwsSbPub3+7+RqrPZvNJ5yf8AfPrVtG3x/wCe1NZv3f50ijIZU/jT/wCtQx2R1fa0SaRP9373+frVea22Sf3tv8XpQBz2o6Zvje4t/v8A8S+vvWQ8LQybJUZa7JBsqK5t7e6+SWL/AOtVKRDh2OLkhR6qy2zpXQXeiyw/PF+9T+73/wDr1mNvSTY6Nv8A9qrTMmrGWVoxWn5SPJTDaRU7gUAK6/wsEe03/wACsdvuSTk/lgfn61hJZxfOn/AV+p/w5P4Veto/sUaIn3FpS2GtzsVO+OszV7P7TabNnzrhlb0x/kiqtrqcsMmzfuT+7/h6VtKyXUaOn3Pu/T2NZ7Gm55vqsH7t/wC+sjf0/wDr1P4T1f7LP9nlf91K3y+zf/XrU1Sy/wBLlR/+Wqll/PB/ka4a43212/8AvVpHXQzfuu569VqG62ffrj/DevfadlpcP86r8rN/Hj+tdKRUNWNk7m5Fcp5lWc1zsU1aMF5+7pWLNKiqvn0UgM1LR/P2O9aJCJHSeWiSb/46caBAwd4/k+/Sn/V/P81NZnTZ/FSt/sffoEQNKkM7732o2Pz6f0FOeZIZKc6JdJ8/3P61HGHeB0f/AFq/L7H0oAmWX93vprSIjoj/AMXy/h701lTy/wB9/F8v0p3lI/yJ/D92gCtLbffdP++aoTS7P4P/AB2tZy6bPk3fNUjR74383a39KAMkCo3t4n++it/vVoGwT+CX/wCtVWVXTZ8lAGU+h2vmfJ5q/wC63+NH9h2/+1/31Wg77KWRbhIEmi2/6z+L25OB+Q/GmmyGkZ6afZPGjojbIt3zevPP4cD9aRrBH+4+3/erQRnf53T71Jii4cphyRPDJ86U+2vJbaTen3P7vY1sPFE/yOm6s+aw2f6p/wDgLf407iaC8livfsj/AMe4qy+mSD/jXnesRol26J7/AKGutuC8P+y6sPw7f1rlL5XeR3/2jVR3JnsUYZXTY6ffVq73w/4kiuY/s99KsUv8LN0P4+tcEB+8f/a+ahT/AOg1o1czjJo9fZadFI6SVxnhjxHs/wBBvn/0fb+7k6lPb3FdpGUmjR0+ZG+63Y1i1Y6Iu6LOf9iimeZL/wA9XopFl+GJ0373/iqR22Uxm2SJTsf7dIQgZ6ciulRqzvO6fwf3qcJk8zZ92gCQt9z/AMeoWR4ZPkdfm/h65+o71Eobe6fwVKA/9+gTVxsKvNI/mptdf7vceopyL+7/APZqgcypv2f+O0074YHRE3bv9rBT6Hv9DT3FsOeXZJ/47VlR/t1FFshtIvvNu/E59/SnMX8z/YpDWoo2fwf5zTT88n3/AJP7rULDTJItkjvv/h+70HA5JPYUA3YgmtvOj/0RPnX8vSqkguE2JL8235f8/jmr9quyP+L97hm+b/OKlmVPL+dGamxLXVmOlFXGsnpiae80fzvt+b+KkUVR8nyUjLvkq79hf/nqv/fJqNrV/M++rbqLkmLqsf7j7i/73tntXCTrs3/7v9a9E1S3l+yO/wDtbfyBP9K87uS9XEmRnMv9ymrH/wCg1Kf9ZT0H/j1bXMrE+mW0ryPs+XavzNXR2Wr3VlGkUUqtEv8ACyjBzT9M0zybT7/71m3f4D9KqSW7+Y6fdrJu5olY2f8AhIv+nRf+/lFY/kUUrIq7PTqjYfvN/wA3y/kaSIS/8tfmqU1BYitTm/j31CZESOlil86NH+7QBLtTy/8AbpyfJH/eqNGSlB/8eoAaG3/7Kf7tKg37PnoMv7xE/gqVVoAiliR/v/K6/wB3g/mKSZ5fLT5Fbb97sT+HTNNPm/Oj/cqQMn30+bbTJsUtVv5bKOy8ryl+0zeXukUkJnucfWrEJ3/JLLFPtYr5kanY/AP5VBq+n/2npsTvcQW22YNG0zY344IH+e1Fnp8UMH9nxanE11FulZYY2dDxn72QKvl00Meb3tXoaOFqOVX/AIHaorW5e6tIpdm3zVDfmKWNn8x0d/8AdrM6CbFMUOkn3PvZ3fNTl/ub/wCVLn+/QBFL8kdOCp5aU4iojH/HvZqAM/XD/oOxE9W/Q/1ry/U43Sd0/wBrdXqmsqj6TK/91d1efXsaPP8Ac9aqJEjnwtTQhHnRP9qp57byarodkiP/ALVamdrHa2p/eJUl3bo/z1U06dH2PWqRvrI1Rk/Z2orS20UXCx1ZNBNFJHBvSd9z7449y/8AfQH8iakbdiL/AJZ//FUjJ9/733t1OUP5fzvRJOkMfz/c/nQMLdneP7m3/ZqVTUUNxv2fJ96rAoAhEqeWnyfearGP9uoCjvJv/u1PQA2aX+BPmdqZDBs+epYxsjokbZHv2bqAC433Npb7EZntGP7tcZeNvvEZ6kcHAokiWysX+zp5V1crsjXbgoCPmdu4wD+Zpqvv2bP95adqE0Sa67u6r5trE33h6t0/StL3V+xg42fL0YwHyYERPuLhfy4oC/v/ALnyfe3U8/P99KUVmbiNtShhv+SlOx6T5E+SgBAuyP7m6mtJs+/9ypTTaAKt3C82myxJ/FGfr0rzy4h/f7H+WvRp7q3tv9a+2uG1wxPqzvE+5Gbd+J6/rmmiWU4Ikmjff/ur/n8Kyb2z8n50+5/d9K2bcbPn/wCBf5/WmSr50Do/32/qSf6VaZDRX0Wb93s/jVv8/wBK6SKZHrk7EPDf7P4Gx+vFbe7ZJQ0OLNiiqf2v/YoqS7nXNW1pun/u/wDSE2vNGyrD0aQZUg89BnufasaOZoX3p99fu/KD+h4qzJNcQ/8AL1FI0+7dJuJ2g7Dk9weD2z+lOFlqzGsm9EOv4E+WX92qN8qxxqQAAARknknkZPP9KoyRI+z+5Wle30TyXSRKuyRl2tt7DqTnnOQPzPrWfmlK19C6V+XUFP7vf92pU/1f96mA/wAFPNSaCCL95v8Ampc/fqLzP3+z+7UxVE+fZ96gCJZd8af3/wDPWpQf79Cr+830SSIn36AARbPuJSanPdJd6elvtiSWHbJIqqX+XtuI4HPSpEbfUbw7J/NTd/d29h0yfrwKpOxEo3aCJfk2P/ur9KkVdkdO+5TN2+P5KksZEP499LIX8z/Y/WnqE/3f71NMu/7nzUAK1QSyokDzfd2r/Kpiapaq2yxf/axQBzlxePNI71nXsW+OpwKWQI8bpVmZWVP3f/oVQsPv1pFf3f3Kr+VsoAzJrZ/taP8AwcL+ua0JP79SyRb4HSmRf6j5/wDe/ChgiPdRT8UUrjOvVj60+Nj60UVIyag0UUFCt/rE/wB6pWoooARf9XTx/BRRQBDH/rHqZ6KKAESpTRRQANTV/wBXRRQAU1qKKAIU/jqrqf8Ax4S0UUAcU0j+Z941dX+CiirM0a8dtE3JTPyjua1nsrYwRfuV70UVLKMS7hjiuHVECjd0FZMyhb91AwNp4/GiimSLtHpRRRSGf//Z) | bed & bath | 0.316104 | True | | 596 | images/596.jpg | ![](data:image/jpeg;base64,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) | accessories | 0.308186 | True | **Ambiguous** data points are not well-described by any class label in the dataset, or may be borderline cases between multiple class labels. Many ambiguous data points may indicate the class definitions were not very clear in the original category taxonomy defined for the product catalog (or data annotation/categorization instructions more generally). Consider closely reviewing the class labels for such ambiguous data. Unlike outliers which are very different from other data, ambiguous data may occur in clusters. image_ambiguous_issue = image_cleanlab_df.query( "is_ambiguous", engine="python").sort_values("ambiguous_score", ascending=False)ambiguous_columns = ["given_label", "ambiguous_score", "is_ambiguous"]columns_to_display = image_path_column + ambiguous_columnsdisplay_image(image_ambiguous_issue.head(5)[columns_to_display]) | | image | rendered\_image | given\_label | ambiguous\_score | is\_ambiguous | | --- | --- | --- | --- | --- | --- | | 414 | images/414.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC2ARQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKSloAKKKKACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKSlpKAFpKDS0AFJS0UAFFFFABRRSUAFLRRQAlLSGloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBKWkooAKKWkoAWkopaACiiigBKWkpaACiiigApBRS0AFFFFABRRRQAUUUlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFJRRQAUUtFACGilooAQUtFFABSUtJQAUtFJQAtJRRQAUtJS0AJS0lLQAUUUlABS0UUAFJRRQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACGiiigAooFFABS0gooABRRQKAFpKKKACilpKACiiloASiiigAFFLSUALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRSUtABRRRQAUlFFABS0UUAFFFFACUtFFABSUtFABRRRQAlLRRQAUUUUAJRS0UAJS0lLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJRS0UAJS0UUAFFFFABRRRQAUlLRQAUlLRQAUUUUAJS0UUAFFFFABSUtFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/2Q==) | kitchen & dining | 0.960864 | True | | 861 | images/861.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABBAEEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iis+TVIoyfkdlHG4d6ANCiqEWp28jBTujY8DcOPzq8DkZHNAC0UUUAFFFFABRRRQBSvZvJQIhw7557gdzWeEIXHDAfnU18SL3J6bQFqEOO1Q9ykiB1xk4B9RTob2SJwscn/AAFuRVghXHPBqndWHnJmNtkg5Vl7fh3pX7AbNvqEczBH+SQ9Aeh+hq7XLeVcJhJGDAj733Tn6VM+qaikYSMRsR/Gw5P64qkxWOjorJ0/UxIpjupkEwPQKQMfXpWqCCMg5BqhC0UUUAV7m1S6QKxIYchh1FZE9rcW2SV8yMfxL2+orfopNXA5yO4VujCrCtkdauXOmW9wSwXy5P7ycfmO9Zk1td2bZKGSMfxLz+napsVcnKh8ZJBHQ1TuPtELnyh8hGckcZqSK8RuoKn3q2sgI4IIpAU4b+R4lE3bg46ZrasrhJ4TsOdpwRjGKy5Y0YE7VGeuKZYsIdRjCE/vMqwHcYzmmnqKx0NFJmirELRRRQAUUUUAVJrGCc5ZAG/vDiqx0og/u3GPfIrUzRmlZBcyjpkrYDyqB6gEmrdtZRWoymS56s3JNWqKLIAooopgFFFFABRRRQAUUUUAFFFFABRRRQB//9k=) | underwear & socks | 0.960580 | True | | 47 | images/47.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABTAH0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDNJpuabmkJrQQ7dRuqPNJupMCXdU0ZzVTdVmI1MtjSG4S8VULfNVqYjFUHb5qiJUzRgbIqG7PFNgkxTLp80mtRp6GbMeagqSU81HWiM5BRRRTJCiiigDa3UbqaTTN1UIcWpN1MLU3dQwJd1TxNVLfU0T8VEti4bk8z8Vnu/wA1WJ5PlrPZ/mqIouZeifFMnfIqKN6bM/FDEtiBzk02o2k5oD1aIZJRSBqXNMQUUUUAaZamFqaWphaqEPLVGWprNUbNSAkL09JcDrVRnxULXG2kyky7POMdapmTLVWkudx61H5wqUrDbuasUnHWmzyDHWqC3O0dajkui3ek0NOxMX+anK1UhJk1OrVaIZaVqeDUKGpVoESUUUUDLTGo2antUTUxDS1MZqGqJiRQA2R8CqMstTytVKbpSAieXnrTfOPrUR60oGaQx5lJpvmGm0UCLMJJ5q4hqnD0q5GKaAspUy1ClTLQBJRRRQM02g9qiaD2rZMANMNsKdhGK1ufSoWtie1bxtfam/ZR6U7Ac1NaEA8VmXETLniu0ltARjFZdzp+7OBSsByOxi2MVOkBx0rc/sznpUyafgdKVhnMvCV5qMAk4rop7D2qothhulFhFe1hJxWhHB7VPb2m3tV1Lf2p2AqLB7VIIcdquCLAo8v2osBU8ujy6tGP2pPL9qYHQ4owKKKAENMIoooAY1V5AM9KKKAISoz0pcDHSiigCvMB6VV2jPSiigCeMCpl60UUAOxxSEUUUAIRRgUUUAf/2Q==) | shoes | 0.959784 | True | | 304 | images/304.jpg | ![](data:image/jpeg;base64,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) | kitchen & dining | 0.958595 | True | | 407 | images/407.jpg | ![](data:image/jpeg;base64,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E1nJlpaHtXgDRE0Pwta2o5ZUCs394jO4/ixY/QiusqGCFYLeKFPuxqFH0AxUxq4qysQ9wooopgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAlUtTv4dM0y6v7gkQ20LSvjrtUEnHvxV415x8YNYFh4Vj09HVZL6TnJwNiYY89stsX6MaTdkC3PHk1S4Wz1zWZj/AKbO7W6yKckySNucj0AyRXonwW0Dy7STVJFOZ38xcj+BQVT8zvb8q8z1O1m8rQfDsMZW82b5iDy00zdx2Kqa+kfCmmw6XoUEMQwgUKn+6o2r+YGfxrNatGkjfooorUzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKADtXg3j2+XxD8SP7ODA2tig3tk4Ai+d/zJ2n/dr2nWtRj0nRrzUJSNtvC0mG6EgcD8TgfjXzXqzyWOkXWuG5WU6v8Au43VwzI+cyox6hgTn3Ug1EuxUTT8B2kniXx1das4ZlhOY2I6O/yr/wB8ruP4V9GRRLDEkaDCooVR6ADArzf4VeHxpmkwPImJnT7VLnqGcYQfgoP/AH1XpvalDuEgooorQkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8++K2qw2nh+OxleRVuSzsI8ZYJghTnoCxXn2ryqWC5lvtF8HSKskMTxyyxMAA7Md+5mHcKWGR/CxFdf44uP7Y8a+QYy8NuyxA87WVPmlHpnJx/wGsLwFbPrfiTVNYYEsWEEBYk7Wc7R+S5rKTLR7ZoEW3TVmxg3DGUjGMA8KB7AAVr9qiiiWGJI0GERQqj0AGBU1aRVlYhhRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqte3MdlZT3Uv+rhjaRvoBn+lWa474jaklh4VljJw1ywjx3wPmP8gPxpN2QHkd3qQh0zVr6cCW4ux9nQnOFZm3Ow7HPQ+mK9C+GWiCx0203IVIQ3cgI/icbVB+ig15jNZSandeH9C8xi8jieb5SNoc5bP4DNfQOgwLFYmYDHntuXI6IBhR/3yAfxrNLVIt6I2KKKK1ICiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvJviVfx3fiTTtJdm2RKZGwcfN97H0IVR+NerMwUFiQABkk9q+ffE+o/adW1nWtu5IkMUTsOVZh936jPH0BqZDRe8D2v9t+J9S1OMN5cbfYbctztDHqPTau6vc0jWKNUQAKoAAHYCvPvhZoZ03w/aGTmQobiRumXk6fko/wDHq9FpQ7jkFFFFWSFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAY/iS9Wx8P3twWA2xMAT7j/AAzXglrDN4hutO0t0Ci9na9uXXrt3bhkdsKBj64r1X4p3pg8Ow2fB+1yiMgnHGMn9A1cn8OdJ+16jf6iy4E0i20IC4CxqcsQPf8Aoayk9SlsesaRAIbBCF2eZ8+PQEYA/AAVpUgAAwBgClrRKysSFFFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopCcDNAC0VG8iJGZGYBAMlieMVjzajcSy/uG8uPoo2gk+5z0oA3KKz45p0UB3Dt3JUD+VOW+JYr5YYDqVbvQB5b8Vp5LnxHo9gIJ/LWMyCVYyQWZsYz0OAPXvXV+A9KNlpUBK4QKSv48D/wAd/n71neNI4ZNZsrvU3uLDTRttxeRysASzZZW2n5VOAMtxxXeWrWv2dEtWiMSqAoQgjGOKhL3h30sWqKKKsQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVNQYLaPk4yQP1FW6zL2fzLgW68hMM59+w/rQBXuUknZEjJMXVhjjcOlPS3jhALK27+9iplYrjinS/OnHDZFICLyhMu1FZQf4mNTxRRQqEAYY7kZqg+sW8GqR2GwmRn8s8EEHbuBGRgqRkZz14qjN4w0uOznuZPOAtnEc6oocwtkg7ipI4xnjsRRcdmb8ixMjRyKGRwQVIyCDwQR3FZtnaW2mwixhWNUjyI1DDcseflXGc4UHA9gKzrzxFaWwSbbLNbkKzTBSEgXG4mQ9VAGc5GR6VzmqeLFs3ha6+0wX0u1oJ7SFpYli8zkLlclWCqSSCGGduCBieZBys78SMpUIWy3o3FSCeUZG45HUFc/rWBa6tdPoEmphLaSQlzuBYRooPy7goJJC9cD8qrS63PEY726s9RWaBmVre2VSjpnaDhuQrkAjOPu9uTRzK1wsdYty5Gdqkexp4ul7qw+nNVLiSK3jE07C3UjlnYKFOOhbOKFnHmNCzL5gAYj+LB6HHpVCLwuIz/Fj6inh1bowP0NUC6qu4kY9aaJYm6k/ippgadFZ6SMeIzJgfgP1qRZ5MZ3AgjuKALlFVhdHun5Gni4RsZJX/e4oAmopAQRkUtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVby5FrbGTgseFHqx6VkQAnLM+SSSxxySepp9xI1/dllIEMfCknAPqf89qmjjRVwJFH05oAeNvv+NOCqe340oQN0cflUgiI6OpPpQBn3Vg9xKzpdtGGwQpXcAR0P6CuMudMi0nUJNQOnJFMFeKW7bKRFXYlmYD5SxLZ3NnsK9CMcgHTmqd/Zm8spbWbJjkXDAVMopjTscFO9ra3epo0PlyLOJZ3sEaMSqSCTIclWIGMqOCOmcUaxp16kt+LeRHvLF4biJ3Z5FtSy7gsa9V+7tGQeGHB6DV1KxczWrDTHisElzdRRQlRcgLtU7hyuDg46NjmsxdAhsJr+7NvM0N4rSzrPK29Ig64KtyxYY4UfmMis2mlZFXTZCvi6DTbSbVry8msrtVLNak+VE0TAhTGrDDtuA+bGM5AwKit9Vg1az01bCe5liuRGVWecsbWeXPzBjjzGzkhQdow3AxV6S7t7jU9MnhSeKdo2tJ9QubdVaNYm3J88mQWI5wp7kk5wKqS6jZ28WqC50Z4LExGCyucGS2SV8BsbsbWLFSDjJ6ZzxS8ivQR7bV5J9YuWubi1k1W3jhunS0aWGBhIFDRqT867SVLDp1FdP4fgj0/Up9O82eacARrPdSFpQq5ZY+eWG3LBuOuO1ZSwXzSQ2d7LcTWstsZLefzmYSgptZXChW2N8pCjBDYJ3dBXsLDXZC9jqEsyQzMZLVYLpoGhKleTty5DfMCWOFAPGTQnqhNKx6KlqwOWXI7AUHYrbSGU+hFcvpmtax5E81xp9yvlXIVojjDQgbSELEMWBwSSAGxx1rc0a4ub2Kd7y28iVJ2RSN2HXqrYYAg4OCORkHBIrVO5DVi3LIFUJHyzcAYp4VlUAjgDGRyKnKKRgjj1qNiUyD8w/vD+tMRHkEgA8+hpDwcelOba3YVHu2nB6djQA5SynKMQf0/Kp7e4WcOBwyHDD+tVmO1ST2pNMGZZpP72P0z/iaANOiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVRvnkaIW8QO+Tgkfwr3/wq9WLdzTrI85tRNAvAMbEOoHegCWKJYlC+SpwOp5NTAIxxtCn24qtbahDcAbHYlv4JV2v+GetWtoddyHI/lSAUcEADmmTwRSEPcL5jD7qnoKlVlYAFgrD1700oQxIVWP+03JoAYkaJGFCAL6CoEyvmNIXEcbHGWJ3Z6D/AOtUrzBB8ySKf9kZFIw3+XvQgIwcDPVh3NAELO9sRNczCLf/AMs1JZm9gKrSfa5o98kSrNgoTA3JQ9eT0PuORWinlLIZAi+Yx5dySce3FSlVdSAysfSkBi29uv2uOO6NzcSP+8YMDIitjGcEkLx2HfnrU89gst4J4ZlxG4fyZB8odVwCvvg+46HqBjQIaNSqjBNQARsxUy/vOpDKaYEVtpxaySFt0KoCFEWFOD1Jx600aJbLMZdrM+xVByMgAAZzjknAzVyNWQ5WSMj6kU6R7ksphZdo+8D8xP0osh3IksoFTbtfOMFt3JqxbxLBEUBJydxJFILjtIigk44OKcksLnAYqe24YoEPPPc/nSNkKSo3Ht704qy9uKYTxQBAAMAMMN3I4okQqpzyPWnsAfSgyIkJdj8o4P8AhQBRnkKQtnkL09/QVd02Ix22T94nBP06/rmsu7IdgmzBJDKhPUqdwHvzit2CIwQRx53FVAJ9T3NAE1FFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCrfTeRbEr99vlX6ms8gCNTM5CDhV9fwpL28RrpkjBZovlHHAY9fqeg/OlgtSWWSYlm64NICw0CSIFaNWX0Y9KY8NyrrJDMqlRt2NyHHufWpwoHTNLj3pgRC6jbCXEbQuf7w+U/Q9DUwiVhlSD6Yo5xg4IPY0wRRg5VSh/2TigBGXy2UMQAehbpn3px83+6lKA4GN6up7MKRUI+QAqnXGc49QKQGTcXl/Feq4Qm2iyHXb8rZ9D7etaYcNEk0I3K4yoPv61MwBXaB8uMbT0xUECiNXtwMBTuQf7OaACITJEI5H3yKco5GNw9DSlDNKcAqoHI759KmLkkgLu9ar71OUlLxHPB/hP40ANcIjhSQCxwB70M+R5IQs7dOwUepNDWyJNHjcSWBBJzmrEYBaQjGSeKAIjCu5QWZhEoBPctTSHXYNqh2ydueAPU1ZLENyoVTk5POT71GojVi5ZpJG74wKQDQHVRhvLUd84H5U03CI6obgu7chdtS5DNuIyfftUc0UdwV3KuVO5W6bTQApcEHjHOCPQ1WcgsMj7pyKnA3zTDodqsfriq5+8Prg0xjbWA3GrwzkgpDG2B3LMRz+QFbtZmkAm3edgQZHO0H+6DgVp0IQUUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKr3MvkQO4GWAwo9Seg/OrFZOoXRW/tLZOpJkbI7Dgf1oAZa2fkoGflycknqSepq3THkwQSMg0CVTx0NAEg60Um5c9RSg5oAWlpM+tLmgAooooAD2NIyBiCQQV6MDyKO3NLQADI/jYfgKMsRgup+q0Cj60AV5Y5E2yRgMEbcUUYLeuKUXNvjiRlPoykH9anx9aUknqc/WgCubm3zyzN9KY94oH7u3dz78Vbye1IWPqc0AVLe5W4cxsjQyjkKx+8PapCxjYHYWPI2+pp1zEZ1G1tsqco3oahM4ng3kbZY2Adc8qf8KQEiZWN3cgyMOSKqXrrHbvOOmzdx61clPmQsw5IXcG9R6Gqscf2jyIsAru3Nn+6Of54oA1LaPyreNMYKqAfr3qeiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAViXbb9TORkRKuOxBOT/WtuqcthHLI0u5lYgA46ce1AFNWHAL8ehFOcBsbSpP1qR7CUfcdWHuMGoWt50+9ESPVeaQC7WI6GnB2VsZ/Cq+4K2CSp9DxUgd8DDGgCUTEdRmniZcZPFV957hT9OKUOvfcP1oAtCRD3xTgfQ1T69GBPoeKMuvZhTAu0e4qqJjn7wJ96eJjnkUAT0VGJR34pwYEdaAHUv6Ume9FAC0Z496T8frQDzmgBjfK3Xg8io2iR3ZgoDOu0t346Cp5V3ocdRyKqPMUj3g80gIopxHJsc8dD/Krmm23kW4diS8nJz2HYCs9LdrrVtrZEce124+8euPp0/P2rfoAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAMZVcYZQR6EZqu9jAzEhCh9VYj9OlW6KAM2TT5hnypwR2Ei5/UYqs0V7GcNabh/ehkDfo20/zrboosBiMxC5eOVP95CBSBh1V8j2NblQvBFIcvGpPqRz+dAGV5jdDhvqKcGH9zH0NXG06Bh8pdD7Nn+eajOnyL9yUH2ZcfqKQyEMvckfUU4c9x+dKbadc5jBHs2ajZWT7yMv1WgRJuK9SRThI3sar5B/iBweOafubHOD9RQBYEnqPypQ6kcHmqobHqPpzQWbHyuv/AgRQBZEvO0HjuazNSkeOGRYU3SZCoOxYnAJ9qtAsuPlHvhs1AUklnRSpQFsAg5J9T9AM0AaNhCyQeY7BpHAywGMgd/x5P41epoAVQAMADAFOpgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBG0Mb/eRT9RUZs4T0Uj6GrFFAFI2A/hlYfUA1RmdLWQJcOkRY4UuwUN9CeM+3WtuopkSSJkkRXRhyrDINAGcEZQCVIB5BxwasWkWZDKRwo2r/U1Hb6Pp9vMzW9qsP8Asxkqv/fIOP0rRAAAAGBSAWiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//2Q==) | kitchen & dining | 0.953552 | True | ### Other data issues detected in image project[​](#other-data-issues-detected-in-image-project "Direct link to Other data issues detected in image project") As with the text fields, Cleanlab can auto-detect various types of problem in image data. The following Cleanlab columns are specific to images (see [here](/studio/concepts/cleanlab_columns/#columns-specific-to-image-data) for details), and are useful for detecting low-quality or unsafe images (content moderation). **Low-information** images lack content and exhibit low entropy in the values of their pixels. They do not help your customers reach a purchase decision and negatively affect the browsing experience. Here are the low-information images Cleanlab detected in this product catalog: image_low_quality_issue = image_cleanlab_df.query( "is_low_information", engine="python").sort_values("low_information_score", ascending=False)low_quality_columns = ["given_label", "low_information_score", "is_low_information"]columns_to_display = image_path_column + low_quality_columnsdisplay_image(image_low_quality_issue.head(5)[columns_to_display]) | | image | rendered\_image | given\_label | low\_information\_score | is\_low\_information | | --- | --- | --- | --- | --- | --- | | 414 | images/414.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC2ARQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKSloAKKKKACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKSlpKAFpKDS0AFJS0UAFFFFABRRSUAFLRRQAlLSGloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBKWkooAKKWkoAWkopaACiiigBKWkpaACiiigApBRS0AFFFFABRRRQAUUUlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFJRRQAUUtFACGilooAQUtFFABSUtJQAUtFJQAtJRRQAUtJS0AJS0lLQAUUUlABS0UUAFJRRQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACGiiigAooFFABS0gooABRRQKAFpKKKACilpKACiiloASiiigAFFLSUALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRSUtABRRRQAUlFFABS0UUAFFFFACUtFFABSUtFABRRRQAlLRRQAUUUUAJRS0UAJS0lLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJRS0UAJS0UUAFFFFABRRRQAUlLRQAUlLRQAUUUUAJS0UUAFFFFABSUtFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/2Q==) | kitchen & dining | 0.785571 | True | | 323 | images/323.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAF8AXwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqhe6rY2DKl1crG7glV5LEfQc1SfxNahNyW17IO22HGfzIoA3KK5O48ax27YOiauw6krb5AHrwaox/E7SDJsmtL2HnBLoBj3wTQB3VFZOkeIdM1yMtYXSykDLJ0ZR9K1qACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKgnnitreSeZwkUSl3ZuigDJJ/CvIvFHjaC4UPeSyXK3ChrTSLWYoiRnpLdSKcsx6iJTgdCGPzAA9kor5607xX4m0u2jtrTW5Whi4RZ40lIHplhuIHQZY4HFbEXxJ8WRgEz6dMP8AppaMCf8AvlxSuOx7bRXjY+KniVD81lpMoH90SJ/7M1W4vi1qq483QbST18u9Zf5oaLises0V5cnxgkH+u8Nyj/rndq381FW4vi/pjLmbRtUT/c8pv/ZxTuFj0aiuK0z4kaPqspgt4L5bosBHbyQhXl9dpyVOByeRx0zXUWd9b31sJbaYSR5KkjggjqCDyCO4PNAF2iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5nxMm25s5RjJDKTj6GscRkyBjtZCOldB4nTNtauMZWbbz7g/4VgggZwMe3pQAKoVtyu6np8rEU2bMi4mhgu07rPGGP0DdRTHkRVZnbaqjLN0xVW21qwuJjCLkK/ZX+XNADtI0vSdM8RJqdtJLp5I2yW7cxH1Ibqv0PHvXoD3lvBEsk1zDHG33WZwAfoSea808Saxb6XprIWWS6mUrFGvLAkcE46VLZ2Zs9OitQQEaJTLEyh43OMncjAqfrjPvQB1tx428PWsmx9Uhf1MWXA/Fc1SHxG8PtIUElwcHGfJOPrXKz6TYzKwS2W0ccB7U/K31Rsgfg1UItHIk4uQCAc+baZH/AI6TQB6hpXiXStbUixuldxnKHhuOvBrYrxay0aLTdahmS9ke6ZgyNEhiRTkcEE5Y+3Ar2mgAooooAKKKKACiiigAooooAKKKKACiiigDmfHWuS6B4Uubu2ijlupCsECSjKFmOMsO4Aycd8Y71892+mywQrHHbkquASuABivZvi5MBommW/eS+DfUKjf1IrzS2YhmXGMjIz7UmNEEsSuxZcKexFRK0iZDDKg8kGui0TQ/7fvZ4jctbRwxiRnWMMTk4AAyB6810KeBdGjYGe4vbk45UuqD/wAdGf1pDPPDcJjg5qIs7jIjK8/e3Yr1E+EvDKQGMaUuWx8/nPuPvu3cVnz+AdGndlt7q/tD1ADiVRz6MM/rQBwO1sYd2YdcZpFkjXIXaFzkk9vc11d98PL2BJ5bbVYbkQxtJteNo3YKMkDqM4HqK85lvGvFVwAsTAMq+vufemI0jq0aSRtCbiOeKQPFPERuVgeGFeo/D7xte6r4ibSdSNt50kDTfaIoQjXLAgYYDgMq8+4+leQ2cJYmZhwp2r9fWuq8Ar5nxG0MHGd8zDHtExp2EfRVFFFABRRRQAUUUUAZurataaPZm4u3YKWCIiKWeRj0VVHLE+grgfEnxSt9D0qS7vA8M7y+XbWkLI0rEddxOQAP4jjjIUZOTWr4+1lbMW1paHbqxBlhnIJECnKFiAQTnJAAI7nPHPl9joUNruvL2b+0tSuU2STTIuxVzkKiYwo6f/WoA9a8IePtI8WaSl3bzFZUUedCykPG3TkDqPRhkH2PFdCurWcgPlyPIQOiRsxP0wK8VRBG0ckLtbyxjajQnaVHtjp9KfdXGpXTpu1K63DJJjlMbMfViDyaAPS9X8ZJp4A8kWuekl+GiU/QYyaxF+I0ayDdqumMrNt3GGZUB/3sf0NeYraau2tCa+u5bu0GSiySsxU47qx9vetbwNon2izutRvoGlkldkVJ03BAD2U9DQB6zY+Lbe5O11jkA6y2conX64GGA/4DW5a3tvfReZbTJKvcq2cex9DXjeo6TZQDzLeM20qjKtASpBzyf/1etUrTxRc2d8Eu5DO2dqSiTyph9Jeh+jZz60Ae90V55p/jW8iSJ5YmvLduhdQkqjpzj5T/AF9a7PTdVtNUt/OtpCdpw6MMMh9CO1AFTxMP+JdF7Trz6cGufYMcZHJ9K1/EOoWz2rWsTGadXVmRTkLg/wAR6L9OvtXF63q99ZxGOytWlP3XnKlIlP8AdDN1P+6D+FAC63Oi6fPbtJ+8Y8IvzMQCOCO2awfs3h6xsvt2s6ioI+YW1up3n0BZh/Liqlvpl/fTSNNKZg3LLbRnavuzmuv0/wCHhS3h1DzLMyowk+zujGNgOQHYEE4IBxjHHcUAYWkW0XiDWn1OWJlKKFIbgbdqlePU5FdVO4Q9cZ7DtTLGwTTYJVDs8szmSVyMbmPYDsAOAKR0O4889zQBFncSwOAD+tCpgkjvTHk8pMnJC4J2rmqVzq6Q3QRYZ5TgbVUYB/GgC3M4ivLZ8KSd3zEdCOa9OR1dFZTlWAIPqDXlN01xNbRPJHHEFcMTklivceg/KvTNJZn0m0ZxhjEvB9McfpQBeooooAKKKKACiiigAooooAKKKKACiiigDyv4vSf6VoEWe87kfQIAf1Nefo+yRWI4zz9O9dt8WpN3iTSYuyWsjY/3mA/9lriim2LOfrUsaO88D2xi07Ubnk+dOsSsR1VVyf1NdEV+XrgnvWb4Uj8rwjpx6NKrSt9WY/0ArRfLHjigENC/Mcc4o2HIJJz04p4XAyevrSDLEkcY6fWgZPZBTdKkg+VyUPuGG3+tfOj2ptrqeyxh4biSLHptYj+VfQqOUZccMrAg+vpXjfii2W08b698oGbtmUA/d3KGP86EJmaFUKEj4VRgHvXU/DWON/iLpxctujhmdMDjO0qc/g1cupwwPGfTFdt8JYll8d3EhAPk6czKfQtIoz+WaoR7pRRRQAUUUUAFFFFAHi/xDvHj8R6lcJhzbLAgU8/Ljcw/8eNV3jRgHQ/u2UMp6cEcUzxoxk1jX2PP+kKv4KqioNGnE+mxRllMkOYyCRkgdDj6EUAOZMYKg4POfWkY5Y+vTp0FW2iZWwB8pOMY6VVnaG3XfLOkSk7VLsFyfT3oApzuUbg47HvxTI764t5RJFNLFt5JViM/h0NNlu7dlOJ4W/4GOaqyzBwMzw7cdNwoA1k1y51ErbtGbi5dgqLGuHYk8YHQ81Nq3w9vGdE1G7iSKZfnhtxvYHuu44G7HX9M1B4N1fT4tT10xlDf2UEQhlLYCBn2yEH+8AV5Hc16NYRrqFhLpc2FkP7yBs878ZB/oaAOWs4IQgjiR8xDylXaV2hRgCrwaW1cymVkkC4aNCVDpnlWweRinILmKOT7RGkUiSsh3uFUkHrz3/rTZ7KRkee5cmRgW4+6OPbrQBtW32u82roenmCIHi9uwMqPVVxgfUA1SvtOe0ux/agknkPCzTsWVh/sk9P90Y+ld1pa7dJs19IEH/joqaWGOeIxTIsiHgqwBB/CgDzsxzpdM1sFjt/LP7tDtUMFOPl6c8c0sGualbW6xXaKrMwQx7ihOe5zxt6jPqPeui1HwlDPbzR2Vw1uJEK7HG9Rn0zyP1HtXKy+G/EemTKqO93ZK8e5BtkLKAobg884J4AxxQBoRXCXkPmRq4XdtBddufp61C5w+AcUMot2ceTNEGIJVkZQDjsD096YH3sCqOzEcBUJJ/IUARvzkZ5+7iodqhkwvzZCgKMsxPYD1rUg0TUr+QbIDbR/xSTArj6L1P6D3rqNL0G10zLoTLcEYaZ+T9FHRR7D8c0AYuk+FnmxNqi4jzuS2B/Lcf6D8fSuxAAGAMAUtFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHjfxQJk8a2yjnZpy59iZG/wAK5KKCS4nigB+8eeOg7/pXT/ESTd48nAOdlrCv0yWP9aydMjZRJcFAS3yISeg7mpYzvPDz7vDsCAcQu8QHoAcj+dXwCWyetZHhSRXhu7IuizNIssaMwBZSMHaCeeR2reeCWIjzEZSeOVIoBER4GT0pmPfnvTzkk8H5adHBK4BSN2J44UmgYttH5l1EjY2swyfavBLzUDqfiXWLpjkXV5LKn0DbR+gFe4axqMWgaPqF3cXEUU0VrI0UTSKrsxUhQBnJJPtXzxaM0Cxk/M6gMx9fX+tNITNoLkDAGfWvRvg3Ap1vWLkcEQpEB7Z3f1rzoMGK45z0YdxXqfwdT5dWk/vOo6egx/SmxHqlFFFABRRRQAUUUUAeE+Ij52oa4wIIa8lx+D4/pXMhMKNyhj61vX0nmJePnPnXEp/N2OaxhyOv4UAPhubm3x5FzKgHRd24fkeKS9kn1CONbiRWMO4qQmBk4yTj6UbRjIP4U5RjOeBQBmNCysQ4VABks3Ax9aybrWoomKWarLIOPNYfKv0Hf+VaniVQ/h52yTsnQ4z2Jx/WuQ6cAlR3oAuaVf32nat/aFhcCO7G7ezxq6urH5gynggnHHt7V6JpnjXWdUWaKSOzt5IVVlnt0ZWLeuCcCvPIIwkQU/eb5j7D0rp/CSM810AMhmjU/rQAzU7e51MltSuJLwjLbZmJAJ5JC9Bn2rb8B+ZaXTWCvKYTbzEqzkqoGGXC9qtT2ZRiNmcHA47Uvha1ZvHTwruUJZhXXHDFmUAfhmgD3q3Ty4Il9EVfyFTUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRSyJFE8jnCopZjjOAOTUtFAHgHibUJNX8VSX5srqzh1COL7EbpQvnKABuBBI6nOM5AIyBVi/ubTQLDzLt1aOLCpGjBmkb0AB7+vatTx34cuILK60yDz3tpJRd6XEsJkQOTiW3G0EqSTuXsQzD+HNeWxaY1408O37NLbsRMHTDIwO0qQeQ2cgg+lIZR1K8m1i+a8u9rSNwqr92NeyrWlpmoeJrNQbDWNSs4h0/wBJbb+CsSD+VTRWUVuhCpuf++3JFOO8YB3ZxRYdzUk8XeMGhH/FTzg45It4lJ/4EFzWHf6v4ivMjUNZ1OePHObptv4qpA/Spz0xk496MHJ45x+lAIxEhQOXCBn6ljyfzqYqfvKMEcH3q/LaROQ4Gxycbl7/AFFQCJIZVNxN5UBbDzKm4r77aWqHoyfT5N8ZUnJTjA9O1ewfBpXez1ybA8n7WsSfVUBb9WrkNN8J22t2Nvqul3dtp+nrCzT3d2+TMwbLEL6KTtJOMZAGa774Opbj4ewPC2+SS6neeXGFkk8wgsvquAAD7VRB6DRRRQAUUUUAFNLBVJPQDJp1ZutXLWWh391HEZXht5JFjDAFyFJC5PTJ4oA8ILF4IATn5d5/4FWeuBz1qezvLe9sYLu2ffDIigHupAGVPoQahdWViSOCcg+tAEgcAcDilJZVZ0G5V5b27VFkr1J5pCxA/lg0AVNXzN4dvxjJCBx+DA1yUMXmShSPlHzN7iuzuVE1hcxElRLGUzjpmubNobL92X3FgG3KMZ/CgBrc84Irp/BjpbyyXEzbYVuFLsRnACmuYZSehOK6rwo7R2Mkg4PnsR8u7+H070Adwt9plyQ0dzE6sf4SCfyFL4BsLh/Et9qFyoSW5uFVY/7iIC2Prwo+uapaVpst9u1SOys7YxSqq3yDa6MSdzqp4JUDj3I9K9B8KaaIy135ZWILsh3dXz1c/X1780AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcrrXgLw7rl695eWTC6lI8yWCZ4mfaMAttYBiBxkgnHFdVRQBwEnwg8Ntny59Ui/3bsn/ANCBqufg7o4HyaxrIOMAmSE/zjr0eigDy2T4NQc+T4gvAOwlgjbH5BaryfBi5JJTxMoz/e0/P8pBXrVFAXPGZvg1rKnMOvWMhHTfZMn8naks/g9q4uWN7qWmGIqQCtu7kN2O0soP517PRQFzzGw+H1zqVvp2n6/Db22kabEFNlaSE/bpsnMkjYBEY6qnUknOMYPosEEVtAkFvEkUMahEjRQFQDgAAcAAdqs0UAFFFFABRRRQAVBc28d1bS28ozHKpVh7EYqeigDwNvhfrPhe+1Q2im80mVhLCYQC8bZOQU64APbNZyRF1bY8cg+uCPbBr6NrB1jwjo2uEyXVqFuD/wAvEJ2SD8R1/HNAHhUtvJGu8oQv5gVEEZh8qhuCeOeK9C1P4e6xYkvptxHfxD/lm+I5QPr91v0rjLyxaCfyZoZbK67wzoV3fTP8xkUAZNyxWNQBgE1magm6FHH3kbDfQ1tyxFSY5UZdw/D8DWdPAXjeM8qw+U4oAxC2eufpiu++HUch8tokViyzM7Mu4IpwpbHr2Fca2nOIwTPGp/hBOM/nXcfCvV7L/hK7bRrd2lmjt5GmkGAgIYEjPfqPagD1rTPDsaxRteZkVcGOFwAFHbcB1Pt0rowAAABgDpTqKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKp3un2mo2xt722huIT1SVAw/Xv71cooA4DVfhlZzqzaXcvak/8ALGYebF+GTuX8z9K8/wBZ8E6/pG4tpU11EDkNaAzZx6BRu/NR+Ne/0UAeA23gTT0mM+rxG5ujhmiugVWNSMqoj4PHcnr6DpXpHhnwzBaqk0GkafpcTMpY2tuI5ZwvIDHsuefU47d+vktoJZUlkhjeRPusyAkfQ9qnoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==) | accessories | 0.707833 | True | | 705 | images/705.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAF8AXwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEqGWaKBA0sixqSACxAGT0HNTV5v8TLqGKGD7XNNFDCCy7Pul2GFJ47EcfjSfkrkzlZXO8a/gDFd3I9SBn86bHfI0whlDRSMMpuwQ49iOD9OteEaTq2o61dWWjlBdMrbhOW2mNR/EW6EV6RCjab4duIJLtpvs0waJ2BDKGP3efQgn/wDVVOLjJxkRCo5dDvqKq2MrXOn207feliVz9SAatUjUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASuX8TeErfxDJDdGWWG5gG35CMSJnO1geOvftk9a6mkoauJpPc8hfwbNZalJcaZctDI7FZC0mGiI/ugZGM/410GjabHBawabfXE95NNMWeVlypY5OMnsBwM5NaV4Cs7lDjdK5z/wKi2G27sm7+eOfqCKOVIhRSdzqI40iiWNFCogCqB2A4AqWiig0CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDl5035Yd5H/APQjTVUiS19rmP8AnVkrmIEjq7f+hGopMKYW/u3EZ/8AHqsk6aiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDBQZgQn1Y/qar3fywFuPlkU/rVmL/j1j79f51Wv/APjymI6gqf1q2SdNRRRUFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSHofpS0x+I2PsaAMWEf6LF9Kgvhmxn/wB0GrEH/HpF/uj+VRXY3Wk4/wBirJN2I7okb1AP6VJUFo26zhb1jU/pU9QUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFQ3J220p9EJ/Spqhuc/ZZsddjfyoAyIp4fs0f7m5C7RjgZ6VHPcWxhkHlXW3ad3yinxyXH2aI+Vb5IHy/MMcfWmSyT+VLm3t+F9W5/WqJNbT2V7C3Zc7TGu3d1xjjPvVuqWmMW0y2YqFJjHyr0HsKu1JQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVDcf8e8v+438qmqOTb5bb/u4OfpQBlIj/ZovkboO3tUcyP5MmEb7vpWBD4W1yOMKniy68sE7A6EkL2BIbk4qO58L+IGicHxdPhhggIwOPb5utTzy/l/IzcpdjtNK/5BVt/uCrlVLJY0soEiZmRY1VS5ySAMc+/rVuqNAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqnfP+6EY6yMF/Dqf0H61crOum33qr2RM/iT/gP1poA6Y+lMk6fhTyfmqNuSRVASaY/7uWE/8s2yP908j+taNY1q/lamo7SqVP1HI/rWzUsAooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVlA77uZvVyo/Dj+laTMEUsxwAMk+1ZFoSYlY9WG4/U800BO7fMfWoycD8ac3DE1G5zVAQXLeS6TD/lm6t+Gef0zXQVgXimSFkHJZSP0rXs5POs4JM53ID+lSwLFFFFIAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAK165jsZ3GCQhxn6VUijUruiPy/3e6+1TamcafL77R+ZAqvEOM8cZJJOMCqQD2ikLnCN9cUwwMBl2WMf7R5/Kqy6pYyuUj1CJiTgfMQpPoG6VI6lWIIII65oQrp7BOyqm2POO7Hqf8ACrejNu0uIf3Sy/kxFUpuVqxoZzZyr/dmYfng/wBaGBq0UUVIwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOqf8g98f3l/9CFc34ouGg0Dy0YqbmZYjjuvLMPxC4rpdU/5B0n1X/wBCFcd4xlCWenKzAKZ2Y59Qh/8AiqG7RZFR2izlXDBdpbKsMFc8Y+ldt4aunutCh81y7xFoix5J2kYyfXawH4VwxlQkkOtdX4OlBs72IdFuA4+jIf6rWcH7xzUdJHRzfc5qfQTmG5HYTn/0FarXL7IHfrtUmpfDe1tLLZy5lYuf9o4P+FbM6zaoooqRhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUtT/5B0v/AAH+YrkfE8lgos476znuCS7IYZtm0AKDn1zkV12p/wDIOl/4D/6EK4jxa7LeaeASP3Mp4/3kpS+EzqaRZkt/YRQZ0/Usf3VuFNbfhdtPEl7HZWt3Af3Tv9olDbhkqMAdOtczvdcEOyn14wfpWz4Tdn1S93EljboxJ9pBURfvHPTfvo6u85tJR/sGpfDH/IOl/wCu7fyWo7sf6NKP9k/yqTwx/wAg2X/ruf5LWzOs3KKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFHU/wDkHSfVf5iuR8VWMs9tbXcKM7W+4OijLMjYyQO5UqDj0J9K6/VP+QbL9V/9CFUkVXjKMuVyD1wQfUHsadrqxMo8yseXGaHG8SJg9w2a6nwtp80BnuZ4mjknChUYYKRKcgsOxZsYHXAJreOnWyXBlCkSHncFUN/31jNWAqIu1FCjOT3JPqT3PvUxhZ3MoUeV3bGXIzBJ/uH+VSeF/wDkGy/9dj/6CtMn/wBSw/2T/KneF/8AkHzf9dz/AOgrVs2NyiiipGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBS1T/kGy/wDAf5iqcXSreqf8g2b/AID/ADFVIvun6VUQB/vfhTD0p79fwphHHWn0EJP/AKtv90/yp3hj/kHTf9dj/wCgrTZfun6Uvhj/AI8Jx/03P/oK0mBuUUUVIwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOqf8g2b/gP8xVSLpVvVP+QbN/wH+YqnF93seKpAOJQuybl3hQxXPIHriozUQtGXVpbsyN5bIQEyNpz39cj8sVMaE273QhJBxS+Gf+PK4Hfzz/6CtI/QfWjw1/qLoek//sooYG5RRRUjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo6p/yDZv+A/zFVIun4Vc1X/kGzfQfzFUoug+lUgHnv9KiP9alPQ1Eeg+tMAl4FHhv/VXg9Jv6CklOFpfDf+rvRnpcH+QpMRuUUUVIwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKWqf8g2f6D+YqlF90fSruqf8AINm+g/mKpRcgfSqQD26H6VCx6VFNqVvBefZZkmRnZURyo2ux6BTnP6VK4wQPemAyc8EU/wANn/j/AB6XH/soqKY8t9ak8N/e1H/ruP8A0EUmI3qKKKkYUUUUAFFFFABRRRmgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKWqf8g2f6D+YqjF0H0q9qv/INn/3f6iqUA3EA+lUhGbdO8eqvOjSyPG0abDJG6xqxAJCEhkJB5PJ/CtCQYbA7GsEzx398XhihO6bO1l/eB9y5YAkMq4XOWX1HQgnflOXPpmhAVp+Gb68VN4b/ANZqP/Xcf+gio7npUnhz/W6j/wBdl/8AQRQwN6iiipGFFFFABRSVQ1f7Z/ZN1/Z7Rrd+WfKaT7obHU0CbsrlLWtdj0mPcUeQ7sERruK8dT6CqGm6pPqa+dd6c1uGx5cyvuVgeh9q8i8TzX9lqNxZT6rJctcIsrgKy7jjGTjnjb17jFdFY+KtUvtH0+wsoWediqDzASzYxknkcYyeetNxcYqXR/1qc/tXzanqljdM9w9rISWUEgnrgHBH6itOub03dc+I7qWPJt7dTGW7FztyAe+MH9K6ShnQgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKWq/8AINn/AN3+oqjDnCkdcVe1T/kGXH+7/WqUPRfpTQjMvo/N1YRz3KW6l1kiDxArKCVyu8n5SWUcYB4461oyctnpzWde2c51f7aEUwqY1YSKspI45jB+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) | bed & bath | 0.707282 | True | **Overly Dark** images appear dim/underexposed lacking clarity, and are obviously undesirable in a product catalog. Here are the dark images Cleanlab detected in this product catalog: image_dark_issue = image_cleanlab_df.query("is_dark", engine="python").sort_values( "dark_score", ascending=False)dark_columns = ["given_label", "dark_score", "is_dark"]columns_to_display = image_path_column + dark_columnsdisplay_image(image_dark_issue.head(5)[columns_to_display]) | | image | rendered\_image | given\_label | dark\_score | is\_dark | | --- | --- | --- | --- | --- | --- | | 1017 | images/1017.jpg | ![](data:image/jpeg;base64,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) | shoes | 0.906149 | True | | 1042 | images/1042.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC3ARMDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDwvH9yplV6Mf7FTJHQBEFpyw09loJ/goAZilAqQimGgBCKUL/49UuPuUAf+O0AQ+VSCrGKiK0AMApQif8A7VSpHTvLoAjEWz56asdWmFOWOgCrsenYqUx0UARKtIY6m+ShaAIdlLt37KdinD/V0AJtpG/1dO+/Q1ADQP3aUjR/u6fRQBBsp/l7KWgGgBzCmD/O6nhqWgBvl0jinCmvQBA4pgWp2X95UdACD/O6m4p4p21KAIc/7dFP/wA/dFFACg09ZajzTw2x6AJW+emkUZpuaAHmlC1GKetAD8UItO+/s30maAFpB/sUrigUAKKftoIekx/vUALRminAUARPTVqUj/bqMmgBdlGKcpprf99UANLUgagrTl/26AEWig0LQANTQaUmkxQAhP7ukWgikFADqUCm09TQAN/sVG3+sqQGkNAETH95TgKAKVDQAwCnZp+aay/foAgxRU3z/wCcUUAQUgFA/wBXsoz+8oAkQ/36WmgUD/foAXFSrsSkSnUAOpPnpM0q0APx+7p+KYvz09aAHE0gNL9+SonFAEu6kLVEP79IxegB+aMUwb/7lOIoAkFIajz/ALdSbaAG5o/gp22gUAG2min4/wBulEdAERprGpStRtHQA2mFql20m2gBgNLmlC0hWgA3U1aDQfuUARkfvKlQ02kBoAlNITR5lDSUAGP9iimbqKAIgv8AfoxQaUUANWn0GP8AuUqxvQAA1ITvpgNSf7lADQaeKRTSigBwNSAVGKfQA5TSOaUUn36AIwacDTgNlFAETClxUmKbigBoozQFqQ0AAFOAppP7z5KcaAAU8CmKKkAoAQimEU8lKYwoAaD+8qQioSv/AOzUsdADBTGFTMP3lMNAERFMzUlNK0ARNSE1LioitACOf7lKDSUpNABmijbRQA0GkpCHpVFADqGNKKdQAokp+6ocVJigBwp5CVGtPoABTsU0VIBQAGgUw09KAFIpCKa4p9ACU0Uf7FPxQAgFANKBSigAWgLSjfS5oAAKCKaPn/8AiaePkj+SgBGFDCjP/Av9qkagBDSrs/uU5BQUoAWo2qTFMcfvKAIcUwipGCUlADAKaVp5NNJoAiFLinYppFAB5tFLlP7lFADRSEUCn0ALSUoNNzQBIDQaav8ArKcRQAE08GmCnigBop6H95TSKCaAHClIpCKXFAD6MUqmkNABinU0UtABmgUYp6igApwjoJpoZ6ABhspDS5prf6ygBGFLQDvooAcKQb/46TOylzQAhOygNSNTc/u6AFeoi37ynYprLQAhFNpSaSgBMUUA0maAG4opMv8A7VFADaAaUjfQooAUUZpTSAUAFSCkU0tACinK38FNpaAFApdtBNC0AKN9PFNBpxNAC4paQmhDQAu2grS7qQt/BQAuaUt/BTQP3lOIoAWkY0v/ACzoK/x76AEpBRRQAGlNFLuoATNFNBp1ACEU0hKWkagBhpppwphoATFNanZ/d0h/v0ARgUhH+3TzUR+egBdyf36Kbt/2KKAFzQaQ04UACmpTUYjo/wBigB4al3UgoagB26j/AJaVGtOYfvKAH07dTKVKAJB/foU00N+7pQaAHmgUu793TMUAKR+8p4G+m/8ALOnBaAFU/wCfehmoYI9GKAHA/u6bmkzRQA41G5pQ1ITvoAcGSgVEp/eUm7/vigCUmgtTCad9ygBaQ0CloAjammgmkxQAClz/AH6KjJ/eUALLUWKk3UMP7lAEeKKKKAGNTs0hNCx0AP3f7dJmjbTfnoAUU8U0CnI1AA1Pz+7pDTMvQBItKaQU4CgCQCm4oHyUpoAM0+o6UUAL/t08D93vpimkDbKAJQadj+5TN1KG/d0AKPn/AI6bmlaojQArGkFNakBoAdihTSA0UAS5pjGjNITQAUpb93SE0n/LOgBCf87aN1Gaa9AC00ClFKKAImpQaGptADvMopMUUAG2nU2lxQAlAp4NMNADSacKRhRQA9f9XThUY2Uu3fQA/wD5aVKaYopxoAKKXH8dFAABRmkZqTNACmikJozQBKp30000GjNAEgP8FR5puHpDQAuaN1NJooActFNBpwoAGopDSCgB9FR5pVoAU01qSkNAC0m+mtS5oAbuozSGkBoAX/P3aKMUUAPzSmmNQpoAdSA05qZmgBTRmk3UgNAEhWnCmq1OU/vKAJMUAU0MlIXoAlylMMlIDUZagCTNGaaDQWoAUNQP9ZULUFqALAahqgBqY0ABakpQKjZqAH7aHFIGelBoAYGoJpdz00UASKf79FRFqN9AEjUZ/d1HupGP7ugBSaYTQ1NzQApNOFNBoBoAUigrT9yf3F/4FQD/AB/d/wBmgCPFFFFAClqdmiigBrnEny/8BpoaiigBc0it/doooAeXo30UUAPDUlFFADt9MJoooAXNIWoooASkoooAcHqRWoooAcPnqKiigApoaiigBVmz0dlprN+8oooADRmiigBm5qdmiigCNjQrUUUAJupaKKAJAaGoooAZmgACiigD/9k=) | bed & bath | 0.835294 | True | **Overly Light** images appear excessively bright or overexposed, lacking adequate contrast and detail for a product catalog. Here are light images detected by Cleanlab: image_light_issue = image_cleanlab_df.query("is_light", engine="python").sort_values( "light_score", ascending=False)light_columns = ["given_label", "light_score", "is_light"]columns_to_display = image_path_column + light_columnsdisplay_image(image_light_issue.head(5)[columns_to_display]) | | image | rendered\_image | given\_label | light\_score | is\_light | | --- | --- | --- | --- | --- | --- | | 414 | images/414.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC2ARQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKSloAKKKKACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKSlpKAFpKDS0AFJS0UAFFFFABRRSUAFLRRQAlLSGloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBKWkooAKKWkoAWkopaACiiigBKWkpaACiiigApBRS0AFFFFABRRRQAUUUlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFJRRQAUUtFACGilooAQUtFFABSUtJQAUtFJQAtJRRQAUtJS0AJS0lLQAUUUlABS0UUAFJRRQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACGiiigAooFFABS0gooABRRQKAFpKKKACilpKACiiloASiiigAFFLSUALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRSUtABRRRQAUlFFABS0UUAFFFFACUtFFABSUtFABRRRQAlLRRQAUUUUAJRS0UAJS0lLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJRS0UAJS0UUAFFFFABRRRQAUlLRQAUlLRQAUUUUAJS0UUAFFFFABSUtFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVFAH//2Q==) | kitchen & dining | 0.996078 | True | **Aesthetic score:** Cleanlab Studio can compute an aesthetic score to quantify how visually appealing each image is (as rated by most people, although this is subjective). Use this score to automatically identify images which are non-realistic, artificial, or depict content that is not helpful for the customer to make a decision. For a product with multiple images, consider ordering them by aesthetic score in the display to boost customer engagement. _Note: Higher aesthetic scores correspond to higher-quality images in the dataset (unlike many of Cleanlab’s other issue scores)._ Here are the unaesthetic images with low aesthetic scores detected in this product catalog: image_unaesthetic = image_cleanlab_df.sort_values("aesthetic_score", ascending=True)aesthetic_columns = ["given_label", "aesthetic_score"]columns_to_display = image_path_column + aesthetic_columnsdisplay_image(image_unaesthetic.head(3)[columns_to_display]) | | image | rendered\_image | given\_label | aesthetic\_score | | --- | --- | --- | --- | --- | | 352 | images/352.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABBAEEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooApR33mKD5eCeo3Zx+lPkujHEzhA20Zxuxn9Kp26q6uY5EIDsv3uhDEH8Rg1JcvFbadK00qhEQjcT27f0oAsC8DYwn5mnicnqo/OqcULlNpU/Nxn0qcZjg3yYUIpLE+g70AKl2XAzGAe43Z/pTjOwUkICQOmev6VTt1Se3V0lRo5BuDKwOQeeKmmnjt4omlddzukQA7szACgB0d95igmPae43Zx+lTCckfdH51RgCuZPLdCA7L97oQxB/LFSSyRWdjJLNIAkSk5747fj2oAd9vl/wCfYf8Aff8A9aip/JP939aKAPOdO0fW21zxDcWGpRfZRqcg+yShh5bFVYncAc53ZxwBnvmotdsfEU62sF1qNpHZy3dvFNCoZ2lVpVXAOBtPPXmvQG0ewN1Ldi2CTSsHkdGKl2ACgnBGTgAc+gpV0ew8xZTbhnVxIpdi21h0IyTgj2oA868L+JfEp0S1bUdMu3UJtS4RGfzgpwG+UHbnHc59qXxD4u1h9Nlgt9HvSkxWJ5/KZBCrEKS24DI57V2Oj6JqOiadFpqXFtPawtJsZkZXCs7Mqnkg4BAzx0qPUPDt5q0AhuriGOHzonYRgksqurFecYJ24z70Acx4b0PX7bT5ZLPU7eSzF3cxwwSBlMKrM67cgHdjaeePTFOmtvEDeJ9BF7qFsbU3wLW8aszMyxuwO4gYA29P1ruo9GsIppJY7cRtI7O+xmUMzHLEgHBJPJNOi0exhuI5kg/fRszI7sWZSRgkEk44JH40AcJYaPrb+IfEVzYajELQakw+ySqRsYxoxbIBzncDjgfXNQeILXxI0Vuk+o2kds13bpLEgZ2lDSqMKcDaefevQX0awa7luvs4SeVg0jozKXYAAE4IzwAOfQUf2NYbxI0AkZXWQF2ZtrKcgjJOCDzQBp0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z) | kitchen & dining | 0.131365 | | 95 | images/95.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABBAEEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKK+X/FHxD1y8upoLi9lklguS8EUP7iKMKzBclfmYkdcnv1oA+oKK89+FnjDUfGOj3c+pm08+B1QrBnIyD94dOQB0969CoAK5nxZ4wtPCFvBLc2V/eGcsFSziDsNoGSckAdRWXf8AxU8MWlzPbQT3F/PC5jdbSEuu4DJw/CnGD361ieK9T/4TrRbVfCSyXl9FukZWTaIAVIw7EgK2cYXknHpzQB2WieMtH1zSbXUFn+xfanZEgvSsUu5TgjaTyenTPUV0dfL8Hha7uzHp95pN1d6juwRcRMG3HqckfKuRn0H619LWKSQ2FtFMV81IlV9vTcAAce2aALVFFFABXi/ij4Hi5u5L7QrsNvJY2l47feLZOJBk45PBB+te0UUAcb4F8A6f4GsJEtXklupwPPlZjgkdAq9h+tdLqNpHf6bdWku/y54XjbYSDhgQcEc557VdooA+Pba9vNDMlgkE0QVSwtp1aNkJ5V9rDI7HHevdfgxoVxpvheXVLmRvM1Vlm8snIXaCNw9N3X8BXY6t4Y0jWru2utRsY7ia1bdGxJGf9lsfeXvtORntWyqqihVACgYAAwAKAH0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//2Q==) | accessories | 0.140328 | | 102 | images/102.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAB9AH0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCWZBise8XrWvNIMVk3TA5rlRdjn7teTWTMvNbV33rJmHNVcdisOKnjNQGnq1JmiLyPipxJVFXp4krNo0TLhkqNmqDzKN9CQmx5NJnmmbqVTzVpEMsx1dhTNUoq0rcZxVEMuQw5xVoW2R0p1unAq+qDFFzNwM6S5z3qhPNnNQGfIqJ5M0WLRBcNnNZc3WtCY5FZ8o5oKKzGmhqV6iJp2C5OHp3mVXzS5pWHzFjzKXfVcGnA0WDmJ99PVuarZqRDTsTc0YWrUtT0rGhNals3Shhc37YjArQUjFY8EuBVoXHFZsZyysTTxk1Ggqwi1pcVivImRVSWM5rWMWRUL2+e1FwMR4jUJiOa2Xtvaoja+1O4jL8o04RGtIWvtTha+1K4WMzyjS+Wa1PsntSfZfai4WM3yzT0jNX/ALL7U9bb2p3CxXiQitCDimrBjtUqpik2CRbjkwKk841U3EU0yVDLRXQVajFVUNW4qB2LCpmn+TmnR1OAKVwsUmtxTPsw9K0CBSbRRcLFIWw9KeLUelXAop4UUrjSKP2UelNNsPStHaKaVFFxuJn/AGYUotxV3AowKLk2KnkAVG0eKvkCoJFouFjPkGKrk81bmFU261QxiNVyI1mxvzVyJ6dhXNONqmDiqCSU/wA2psO5cMlN8yqZmpvm0WFc0BJTxIKzxLThL70rFJl8y0xpaqGWmGWlYGy35vvR5tUTLQJaqxNzQ8ymO2aqrNTjJmlYYyWqL/eq3I2aqP1qkJmbHJVuOSspJKspLWrRmmaiy07zazxNS+d71Nirl0yUoeqYkqVXpWAtK1SA1XQ1MDUlIfmmMadmo2NAMaWpu+ms1RF6oRZElO82qXm0edRYVy20lQs3NQmWmmSiwXMVZKlWWqIeniStrGHMXxLTxLVASVIslJotSNBZKnR6zUkqwklQ0WmaiPUyvWcklTCWpsVculxUbPxVczVG0tFguSO9QM9MeWoGlqrEtkpem+ZVdpKjMlOxNy35tJ5tUzLR5tOwcxmB6eHquDTga2sc1yyGqRWqsDUimpaKTLStU6PVNTUysalo0TLiyVIJfeqYY0u41NiuYtGWmNLVcuaYWNFg5idpKiaT3qEsaYWNVYlyJS9ML1EWNMLGnYhyJS9JvqEsabk07C5j/9k=) | kitchen & dining | 0.151972 | **Odd Size and Odd Aspect Ratio** images have unusual area or width/height dimensions. On an ecommerce platform, such images may result in inconsistent & uneven display. If your website or application uses responsive design, odd-sized images might not adapt well to different screen sizes. Here are the odd size or aspect ratio images Cleanlab detected in this product catalog: image_odd_size = image_cleanlab_df.query( "is_odd_aspect_ratio or is_odd_size").sort_values("odd_aspect_ratio_score", ascending=False)odd_size_columns = [ "given_label", "odd_aspect_ratio_score", "is_odd_aspect_ratio", "odd_size_score", "is_odd_size",]columns_to_display = image_path_column + odd_size_columnsdisplay_image(image_odd_size.head(3)[columns_to_display]) | | image | rendered\_image | given\_label | odd\_aspect\_ratio\_score | is\_odd\_aspect\_ratio | odd\_size\_score | is\_odd\_size | | --- | --- | --- | --- | --- | --- | --- | --- | | 499 | images/499.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAKADgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooA3/AAN/yUHw3/2FbX/0atfY1xq5t9XisXtxtlxskEmSeP7uP16V8c+Bv+SgeG/+wra/+jVr7WYDIOBQB8U+Of8AkoHiT/sK3X/o1qwK3/HP/JQfEn/YVuv/AEa1YFABRRRQB//Z) | kitchen & dining | 0.821429 | True | 0.090175 | False | | 486 | images/486.jpg | ![](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAoAAoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/opcUlAHp/hfXdOsz4Ohmn05YYVf7WsqRnBa5k3eYSP+ee3GegxivMKWimAlFFFID//Z) | coats & jackets | 0.750000 | True | 0.091837 | False | In this dataset, there are odd aspect ratio images but no odd size images flagged above Cleanlab’s `odd_size_score` threshold. **Not Safe For Work (NSFW)** images are not suitable for viewing in a professional or public environment because they depict explicit/pornographic content or graphic violence/gore. These images must be removed from an ecommerce product catalog. Here are the images that Cleanlab flagged as NSFW in this product catalog: image_nsfw = image_cleanlab_df.query("is_NSFW").sort_values( "NSFW_score", ascending=False)nsfw_columns = ["given_label", "NSFW_score", "is_NSFW"]columns_to_display = image_path_column + nsfw_columnsdisplay_image(image_nsfw.head(1)[columns_to_display]) | | image | rendered\_image | given\_label | NSFW\_score | is\_NSFW | | --- | --- | --- | --- | --- | --- | | 844 | images/844.jpg | ![](data:image/jpeg;base64,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) | pants | 0.611196 | True | ### Near duplicates[​](#near-duplicates "Direct link to Near duplicates") Cleanlab also automatically detects data points that are exact or near duplicates. Duplicate products confuse your customers and degrade your analytics and logistical efficiency. Let’s first review the near duplicate product descriptions detected from our text project: n_near_duplicate_sets = len( set( description_cleanlab_df.loc[ description_cleanlab_df["near_duplicate_cluster_id"].notna(), "near_duplicate_cluster_id", ] ))print( f"There are {n_near_duplicate_sets} sets of near duplicate samples from the 'description' text field.") There are 72 sets of near duplicate samples from the 'description' text field. The nearly duplicated data points each have an associated `near_duplicate_cluster_id`. Data points that share the same cluster IDs are near duplicates of each other. We can use this column to find the near duplicates of any data point. The `near_duplicate_score` quantifies how semantically similar another data point is. This score = 1.0 for exactly duplicated data points, which have identical copies in the dataset. near_duplicate_cluster_id = 10description_near_duplicate_cluster = description_cleanlab_df.query( "near_duplicate_cluster_id == @near_duplicate_cluster_id", engine="python")near_duplicate_columns = ["near_duplicate_score", "is_near_duplicate", "given_label"]columns_to_display = tabular_columns + near_duplicate_columnsdisplay(description_near_duplicate_cluster.head()[columns_to_display]) | | title | description | sale\_price | average\_product\_rating | brand | near\_duplicate\_score | is\_near\_duplicate | given\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 189 | Clarks® Leisa Grove Leather Sandals | Stay comfortable and looking great all day with these sandals that are crafted in luxurious leather. technology Cushion Soft technology offers softness you can feel from your first step, long-lasting comfort and fit with minimal cushion compression optimal breathability via open-cell technology OrthoLite® cushioned footbed absorbs impact and offers breathability, moisture management and is antimicrobial construction leather upper EVA sole details strappy open-toe design adjustable hook-and-loop closure fabric lining | 60.42 | 4.8 | Clarks | 0.999996 | True | shoes | | 951 | Clarks® Leisa Grove Leather Sandals - Wide Width | Stay comfortable and looking great all day with these sandals that are crafted in luxurious leather. technology Cushion Soft technology offers softness you can feel from your first step, long-lasting comfort and fit with minimal cushion compression optimal breathability via open-cell technology OrthoLite® cushioned footbed absorbs impact and offers breathability, moisture management and is antimicrobial construction leather upper EVA sole details strappy open-toe design adjustable hook-and-loop closure fabric lining | 60.42 | 4.4 | Clarks | 0.999996 | True | shoes | Let’s also review the near duplicate product images detected in this dataset (from the image project): n_near_duplicate_sets = len( set( image_cleanlab_df.loc[ image_cleanlab_df["near_duplicate_cluster_id"].notna(), "near_duplicate_cluster_id", ] ))print( f"There are {n_near_duplicate_sets} sets of near duplicate samples identified from the images.") There are 50 sets of near duplicate samples identified from the images. near_duplicate_cluster_id = ( 20 # play with this value to see other sets of near duplicates)image_near_duplicate_cluster = image_cleanlab_df.query( "near_duplicate_cluster_id == @near_duplicate_cluster_id", engine="python")columns_to_display = image_path_column + tabular_columns + near_duplicate_columnsdisplay_image(image_near_duplicate_cluster.head()[columns_to_display]) | | image | rendered\_image | title | description | sale\_price | average\_product\_rating | brand | near\_duplicate\_score | is\_near\_duplicate | given\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 291 | images/291.jpg | ![](data:image/jpeg;base64,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) | adidas® Brand Cut Tee | Our adidas brand cut t-shirt offers comfort, style and easy care. regular fit crewneck short sleeves cotton washable imported | 21.53 | 3.1 | ADIDAS | 1.0 | True | tops | | 872 | images/872.jpg | ![](data:image/jpeg;base64,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) | adidas® Brand Cut Tee | Our adidas brand cut t-shirt offers comfort, style and easy care. regular fit crewneck short sleeves cotton washable imported | 21.53 | 1.8 | ADIDAS | 1.0 | True | tops | Cleanlab Studio automatically provides holistic quality assurance for your product catalog. The AI system closely evaluates diverse multi-modal information about each product, using its understanding of the content semantics to diagnose problems you never even considered. Cleanlab Studio automatically detects [many types of data issues](/studio/concepts/cleanlab_columns/) (not all demonstrated here). **Next Steps:** After auto-detecting all sorts of informational issues in a product catalog, you can alert the appropriate parties to fix these issues (e.g. the seller of a particular product in an e-commerce marketplace). It’s this easy to use Data-Centric AI to improve your product catalog and delight your customers! Better quality data achieved with Cleanlab Studio will improve: customer engagement, product discoverability, and your sales. Bonus: Detect erroneous numeric values (regression task)[​](#bonus-detect-erroneous-numeric-values-regression-task "Direct link to Bonus: Detect erroneous numeric values (regression task)") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Previously we analyzed issues with respect to the specified product category, designating the ML task as _multi-class classification_ within Cleanlab Studio. We can also use Cleanlab Studio for analyzing issues in numeric columns like _sale price_, _product ratings_, _size_, etc. by designating the ML task as **regression**. Suppose we are interested in flagging suspicious (or potentially incorrect) values in the listed `sale_price` of certain products. We accomplish this in Cleanlab Studio by declaring this column as the _label_ for a regression task. Based on the same previous tabular dataset loaded into Cleanlab Studio, we can specify which columns to use as predictive features for inferring this label, and launch a “regression” project. Cleanlab will train its AI model to predict sales price based on these features, and then flag the values deemed least likely. # Name of the numeric column to detect issues inregression_column = "sale_price"# Name of the tabular columns to use as predictive features (including 'category' here)tabular_columns_price = [ "title", "description", "average_product_rating", "brand", "category",]tabular_price_project_id = studio.create_project( dataset_id=tabular_dataset_id, project_name="multimodal-tabular-price", modality="tabular", task_type="regression", model_type="regular", label_column=regression_column, feature_columns=tabular_columns_price,)print( f"Project successfully created and training has begun! project_id: {tabular_price_project_id}") **You should only execute the above cell once!** Do not call `create_project` again. Come back after training is complete (you will receive an email). tabular_price_cleanset_id = studio.get_latest_cleanset_id(tabular_price_project_id)project_status = studio.wait_until_cleanset_ready(tabular_price_cleanset_id)tabular_price_cleanlab_columns = studio.download_cleanlab_columns( tabular_price_cleanset_id)# Combine original DataFrame with Cleanlab columnstabular_price_cleanlab_df = data.merge( tabular_price_cleanlab_columns, left_index=True, right_index=True)# Set "given_label" column to the original labeltabular_price_cleanlab_df.rename(columns={"sale_price": "given_label"}, inplace=True) tabular_price_label_issue = tabular_price_cleanlab_df.query( "is_label_issue", engine="python").sort_values("label_issue_score", ascending=False)columns_to_display = tabular_columns_price + label_issue_columnsdisplay(tabular_price_label_issue.head()[columns_to_display]) | | title | description | average\_product\_rating | brand | category | given\_label | suggested\_label | label\_issue\_score | is\_label\_issue | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 254 | Mixit™ Oval Bling Wedge Sandals | With its shiny stone detail and extra height in the heel, our wedge sandal is the perfect blend of comfort, style and bling. manmade materials comfortable slip-on | 5.0 | MIXIT | shoes | 1000.10 | 59.930344 | 1.0 | True | | 142 | Pillow covers free trial too | Pillow with hearts that can be placed anywhere. Call us on 202 856 1167 for free trial." spot clean imported | 2.5 | ß | bed & bath | 456.78 | 55.065586 | 1.0 | True | | 1086 | Master Massage Olympic 32” Massage Table Set | The Olympic LX massage table is all about revolutionary size and strength. At 32 inches wide with oversized ash wood legs and double thickness bed, this table supports up to 3,200 pounds | 3.8 | MASTER MASSAGE | bed & bath | 640.56 | 62.977962 | 1.0 | True | | 360 | Nike® Team Training Gym Sack | The Nike Team Training gym sack helps keep your gear organized with an interior divider and bonded zip pocket. The water-resistant fabric and polyurethane-coated bottom also help ensure your essentials stay dry. main compartment with drawcord closure water-resistant fabric zip pocket for secure, small-item storage perforated film provides breathability Swoosh graphic polyester spot clean imported | 4.9 | Nike | accessories | 2011.76 | 51.723045 | 1.0 | True | | 869 | Onasis Backless Barstool | Add sturdy and stylish seating to your counter or table with this backless barstool featuring splayed legs accented with a decorative wood trim. wood and rubberwood construction flush-joint joinery cushion filled with upholstery foam brushed bronze-tone nailhead accents 275-pound weight capacity Upholstery options: Faux leather: polyurethane; spot clean with a dry cloth; avoid direct heat and sunlight. Tweed: 75% polyester/25% acrylic; spot clean with a clean, damp cloth or have professionally cleaned. Assembly required; screwdriver needed. Imported. Counter-height barstool: 20Wx14Dx26"H Bar-height barstool: 21Wx15Dx32"H | 5.0 | Linon | kitchen & dining | 464.60 | 81.529083 | 1.0 | True | The original sales price of these flagged products seems suspiciously high. These are definitely worth a second look, good thing Cleanlab caught them! The `label_issue_score` reflects _how likely_ Cleanlab’s AI finds each product’s listed sales price to be _incorrect_. You could repeat this bonus analysis with the **size**, **rating**, or other important numeric information about each product that is vital to get right. * [Install and import dependencies](#install-and-import-dependencies) * [Get the dataset](#get-the-dataset) * [Load data into Cleanlab Studio](#load-data-into-cleanlab-studio) * [Load image data](#load-image-data) * [Load tabular data](#load-tabular-data) * [Launch projects](#launch-projects) * [Get project results](#get-project-results) * [Label issues detected in tabular project](#label-issues-detected-in-tabular-project) * [Label issues and outliers detected in "description" text project](#label-issues-and-outliers-detected-in-description-text-project) * [Other data issues detected in "description" text project](#other-data-issues-detected-in-description-text-project) * [Label issues, outliers, and ambiguous examples detected in image project](#label-issues-outliers-and-ambiguous-examples-detected-in-image-project) * [Other data issues detected in image project](#other-data-issues-detected-in-image-project) * [Near duplicates](#near-duplicates) * [Bonus: Detect erroneous numeric values (regression task)](#bonus-detect-erroneous-numeric-values-regression-task) --- # How to Produce Better-Quality Data 10x Faster in any Data Annotation Platform [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/data_annotation_label_studio.ipynb) This tutorial shows how you can integrate [Cleanlab Studio](https://cleanlab.ai/) with _any_ data annotation tool. Reduce how much data annotation work your team has to do (thanks to Cleanlab’s auto-labeling) and simultaneously produce better results (thanks to Cleanlab’s label error detection). The basic workflow looks as follows: first label some data with your tool, then use Cleanlab to **catch any incorrectly selected labels** and **auto-label a large subset of the data that AI (Foundation models) can confidently label**. You can then iterate these 2 steps multiple times. Each time you label (or re-label) a bit more data with your annotation tool, Cleanlab’s AI will learn from your new labels and become more effective for auto-labeling and label error detection. Since Cleanlab Studio is so easy to use, you can mostly focus on working with your annotation tool as you normally would – except now you’ll get datasets labeled more quickly and accurately. ![Data Annotation with Label Studio and Cleanlab Studio](/assets/images/qa-auto-label-for-data-annotation-823db4577aef11de8c670de917ad5a27.png) Here we’ll demonstrate this workflow with the [Label Studio](https://labelstud.io/) data annotation platform (one of the most popular tools that is freely open-source), but you can similarly integrate any data annotation tool of your choosing with Cleanlab Studio. For example, you could do the same workflows with annotation tools like [LabelBox](https://labelbox.com/) , [LabelMe](https://github.com/labelmeai/labelme) , or [Coco](https://github.com/jsbroks/coco-annotator) among others. Some annotation platforms have built-in AI features, but none with the same powerful capabilities and ease-of-use as Cleanlab Studio. This particular tutorial will focus on labeling image data for multi-class classification, but the same steps can be applied to text or tabular data being labeled for other types of tasks (e.g. tagging instead of multi-class classification). Here are the steps we’ll follow in this tutorial, starting with an entirely unlabeled dataset: 1. Use your data annotation tool to label some of the data. 2. Then load the currently labeled and unlabeled sets of this data into Cleanlab Studio. 3. Use Cleanlab Studio to automatically find label errors (and other issues in the data) and send data flagged as likely incorrectly labeled back to your annotation tool for relabeling. Also use Cleanlab Studio to auto-label as much of the unlabeled data as can be confidently handled by Cleanlab’s AI. 4. Iterate steps 1-3 until all of our data is labeled. Over time, there will be less unlabeled data remaining to label in later repetitions of step 1. Install and import required dependencies[​](#install-and-import-required-dependencies "Direct link to Install and import required dependencies") ------------------------------------------------------------------------------------------------------------------------------------------------- **Note**: this tutorial requires that you’ve created a [Cleanlab Studio](https://app.cleanlab.ai/) account. You can use `pip` to install all packages required for this tutorial as follows: pip install cleanlab-studio label-studio When creating this tutorial, we used version 1.11.0 of the `label-studio` Python package. from cleanlab_studio import Studiofrom datasets import load_datasetimport pandas as pdimport requestspd.set_option('display.max_colwidth', None) Prepare the dataset[​](#prepare-the-dataset "Direct link to Prepare the dataset") ---------------------------------------------------------------------------------- The dataset we’ll label is a sample of images of potato chips from PepsiCo - the original data can be found on Kaggle [here](https://www.kaggle.com/datasets/concaption/pepsico-lab-potato-quality-control) . **Our task** is to label each image from the dataset into one of 2 categories: `Defective` or `Non-Defective`. Below are some images from the dataset. 2 `Non-Defective` potato chips are depicted in the top row and 2 `Defective` potato chips in the bottom row: ![examples of dataset](/assets/images/defective_and_non_defective_potato_chip_examples-877b746a0cce4c35b43d7c54409fd54f.png) We have already stored the tutorial dataset with each image at an accessible URL. You could also produce such URLs for files in your cloud storage. Both Cleanlab Studio and Label Studio can operate directly on such linked external media files, or you run these tools on local files from your machine. Let’s fetch the files with the URLs pointing to the images that comprise our dataset: wget -nc "https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/potato_chip_image_urls.csv" Optionally, you can also download the full image dataset from [here](https://cleanlab-public.s3.amazonaws.com/Datasets/Pepsico_RnD_Potato_Chip_Images.zip) . image_df = pd.read_csv("potato_chip_image_urls.csv")image_urls = list(image_df["image"]) Next let’s define a DataFrame that will store our final labels for each image. This object will be updated throughout the tutorial. This _final labels_ DataFrame has an `image` column pointing to the URL of each image in our dataset. We initialize this DataFrame with a `label` column that is our goal to fill in for each image. We also include a column that will contain historical labels (represented as a list) for each image. Anytime a chosen label changes due to a label correction (when relabeling an image in the data annotation tool), the newly selected label will be appended to the list of historical labels that were selected by annotators of this image. Storing this set of previously selected labels is particularly useful when the data annotators are noisy. final_labels_df = image_df.copy()final_labels_df["label"] = [None] * len(image_urls)final_labels_df["historical_labels"] = [[] for _ in range(len(image_urls))]final_labels_df.head() | | image | label | historical\_labels | | --- | --- | --- | --- | | 0 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014120.jpg | None | \[\] | | 1 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_020053.jpg | None | \[\] | | 2 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_005833.jpg | None | \[\] | | 3 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013704.jpg | None | \[\] | | 4 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015012.jpg | None | \[\] | Label some of the images with your annotation tool[​](#label-some-of-the-images-with-your-annotation-tool "Direct link to Label some of the images with your annotation tool") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. Now let’s label a batch of the images using [Label Studio](https://labelstud.io/) , our example 3rd party annotation tool in this tutorial. Here we’ll use the [Label Studio Python SDK](https://labelstud.io/guide/sdk) to connect to the API. Before executing the Python code below, first run `label-studio` in a command line interface of your choice. Don’t proceed until you have Label Studio running locally at: [http://localhost:8080](http://localhost:8080) from label_studio_sdk import Client# Define the URL where Label Studio is accessible and the API key for your Label Studio user account, which you can find in your account settingsLABEL_STUDIO_URL = 'http://localhost:8080'label_studio_api_key = ""# Connect to the Label Studio API and check the connectionls = Client(url=LABEL_STUDIO_URL, api_key=label_studio_api_key)ls.check_connection() {'status': 'UP'} The status should be `UP` if everything’s working properly. Let’s create a project via our Label Studio Client Object for labeling our Potato Chip images. project = ls.start_project( title='Label Studio PepsiCo Image Tutorial Project', label_config='''''') ### Format the data for Label Studio[​](#format-the-data-for-label-studio "Direct link to Format the data for Label Studio") **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. To programmatically import our images into Label Studio, we must format them like this: [{'image': image_url1}, {'image': image_url2}, {'image': image_url3}] This is a list of dicts, where each dict has an `image` key and corresponding value `image_url` pointing to where the image is accessible. Now let’s use a previously defined helper function to format our image URLs to the list of dicts that Label Studio will accept in its `project.import_tasks` function. Optional: Define helper function to format the image URLs for Label Studio from typing import List, Dictdef format_label_studio_image_urls(image_urls: List[str]) -> List[Dict[str, str]]: """ Converts a list of image URLs into the format that Label Studio accepts. Parameters: - image_urls (List[str]): A list of full URLs to the images that need to be labeled. Returns: - List[Dict[str, str]]: A list of dictionaries, where each dictionary contains a key 'image' with its value being the full URL to an image file, ready for use in Label Studio. """ # Convert the list of URLs into the expected dictionary format for Label Studio label_studio_urls = [{'image': url} for url in image_urls] return label_studio_urls image_urls_for_label_studio = format_label_studio_image_urls(image_urls)print(len(image_urls_for_label_studio)) 400 Let’s look at 3 example images we are importing into Label Studio: # Check what some of the potato chip images look likefrom IPython.display import HTMLimages_html = "".join( f'''
''' for url in image_urls_for_label_studio[:3])# Display the images in the notebookdisplay(HTML(images_html)) ![](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_To_Label/IMG_20210319_014120.jpg) ![](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_To_Label/IMG_20210319_020053.jpg) ![](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_To_Label/IMG_20210319_005833.jpg) Now we can import the images into Label Studio for labeling! # Task IDs used in Label Studio to represent each image are the output we see printed belowimported_ids = project.import_tasks(image_urls_for_label_studio)print(imported_ids[:5]) [161861, 161862, 161863, 161864, 161865] Learn how to import your data into Label Studio via this [guide](https://labelstud.io/guide/tasks.html) . ### Label 50 images in Label Studio[​](#label-50-images-in-label-studio "Direct link to Label 50 images in Label Studio") **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. Go to your project in [Label Studio](http://localhost:8080) and start labeling your imported images. Let’s just label 50 of those images to start. This [guide](https://labelstud.io/guide/labeling.html) shows how to label/annotate your data with Label Studio, but you could use any other data annotation platform. Try to select a diverse set of initial examples to label that well represents all of the classes of interest (since Cleanlab’s AI will later learn from this initially labeled set). Once you have labeled your images, one way to export the labels from Label Studio is via the `Export` button, as you can see in the video below or within your Label Studio session running locally. In this tutorial, we choose to export programmatically. This minimizes the amount of data you need to manually move between different tools in this tutorial. This also shows you how to interact with Label Studio using the Python API. Here’s a video demonstrating how to label a some images in Label Studio after you have launched the app locally: By default, Label Studio only exports tasks (i.e. data points in Label Studio) with annotations. For more details on exporting tasks, you can go [here](https://labelstud.io/guide/export) . To be able to export all tasks programmatically, we use the following helper function. Optional: Define helper function to export data from your Label Studio project def export_data_from_label_studio_project(project_id: str, label_studio_api_key: str, output_file_path: str, export_type: str="CSV", server_url: str="http://localhost:8080"): """ Exports data from a specific project in Label Studio. This function requests an export of data from a specified project in Label Studio, supporting various export formats. The function handles the request and saves the exported data to a file at the specified path. Parameters: - project_id (str): The ID of the project in Label Studio to export data from. - label_studio_api_key (str): The API token for authenticating with the Label Studio server. - output_file_path (str, optional): The path where the exported file should be saved. - export_type (str, optional): The type of export format (e.g., CSV, JSON). Defaults to "CSV". - server_url (str, optional): The URL of the Label Studio server. Defaults to "http://localhost:8080". Returns: - None: The function saves the exported data to a file and prints the outcome. """ url = f"{server_url}/api/projects/{project_id}/export?exportType={export_type}" # Your authorization token headers = { "Authorization": f"Token {label_studio_api_key}" } response = requests.get(url, headers=headers) if response.status_code == 200: # Save the exported data to a file with open(output_file_path, "wb") as f: f.write(response.content) print("Data exported successfully.") else: print(f"Failed to export data. Status code: {response.status_code}, Message: {response.text}") We also need to pass our Label Studio project ID and our API key into our helper function to be able to export our tasks. This project ID can be found in the URL of your project after you have selected your project within Label Studio. We also create a `csv` file to export our tasks into. ls_project_id = 55 # REPLACE YOUR PROJECT ID HEREexport_filename = "label_studio_potato_chips_annotations.csv" # REPLACE YOUR FILENAME HEREexport_data_from_label_studio_project(ls_project_id, label_studio_api_key, export_filename) Let’s see what our labeled data looks like so far. label_studio_annotations = pd.read_csv(export_filename)label_studio_annotations.head(10) | | annotation\_id | annotator | choice | created\_at | id | image | lead\_time | updated\_at | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1599 | 1 | Defective | 2024-03-21T21:40:46.231429Z | 161861 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014120.jpg | 3.178 | 2024-03-21T21:40:46.231451Z | | 1 | 1600 | 1 | Defective | 2024-03-21T21:40:48.406866Z | 161862 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_020053.jpg | 2.073 | 2024-03-21T21:40:48.406890Z | | 2 | 1601 | 1 | Defective | 2024-03-21T21:40:50.714271Z | 161863 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_005833.jpg | 2.199 | 2024-03-21T21:40:50.714307Z | | 3 | 1602 | 1 | Defective | 2024-03-21T21:40:52.918417Z | 161864 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013704.jpg | 2.073 | 2024-03-21T21:40:52.918444Z | | 4 | 1603 | 1 | Defective | 2024-03-21T21:40:55.034898Z | 161865 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015012.jpg | 2.017 | 2024-03-21T21:40:55.034925Z | | 5 | 1604 | 1 | Defective | 2024-03-21T21:40:57.286808Z | 161866 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_011506.jpg | 2.131 | 2024-03-21T21:40:57.286836Z | | 6 | 1605 | 1 | Non-Defective | 2024-03-21T21:40:59.702141Z | 161867 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_002817.jpg | 2.298 | 2024-03-21T21:40:59.702167Z | | 7 | 1606 | 1 | Non-Defective | 2024-03-21T21:41:02.890256Z | 161868 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_002553.jpg | 3.059 | 2024-03-21T21:41:02.890279Z | | 8 | 1611 | 1 | Defective | 2024-03-21T22:13:55.609870Z | 161869 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_020243.jpg | 1972.597 | 2024-03-21T22:13:55.609890Z | | 9 | 1612 | 1 | Defective | 2024-03-21T22:13:58.086707Z | 161870 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014858.jpg | 2.342 | 2024-03-21T22:13:58.086738Z | ### Update final labels DataFrame with labels obtained in our annotation tool[​](#update-final-labels-dataframe-with-labels-obtained-in-our-annotation-tool "Direct link to Update final labels DataFrame with labels obtained in our annotation tool") **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. Now we can fill in the official labels for 50 images that we just annotated in Label Studio so far. # Here we define a helper function to update the values of our final labels based on annotations from Label Studiodef update_final_labels_via_labelstudio(final_labels_df, labels_df): """ Updates the 'label' column and appends labels to 'historical_labels' in final_labels_df based on the 'image' column matching between final_labels_df and labels_df. Parameters: - final_labels_df (pd.DataFrame): The DataFrame to update, containing columns 'label', 'image', and 'historical_labels'. - labels_df (pd.DataFrame): The DataFrame containing new labels from our annotation tool, with columns including 'choice' and 'image'. Returns: - pd.DataFrame: The updated final_labels_df. """ for _, label_row in labels_df.iterrows(): image_url = label_row['image'] label_choice = label_row['choice'] # Find the index in final_labels_df where the image URL matches index = final_labels_df.index[final_labels_df['image'] == image_url] if not index.empty: # Update the label column final_labels_df.at[index[0], 'label'] = label_choice # Check if the cell contains NaN or cannot be appended to directly if len(final_labels_df.at[index[0], 'historical_labels']) == 0: # Initialize with a list containing the label if NaN final_labels_df.at[index[0], 'historical_labels'] = [label_choice] else: current_value = final_labels_df.at[index[0], 'historical_labels'] # Check if current_value is a list, implying we can append to it if isinstance(current_value, list): current_value.append(label_choice) final_labels_df.at[index[0], 'historical_labels'] = current_value else: # Handle non-list, non-NaN values (e.g., initializing or converting to a list) final_labels_df.at[index[0], 'historical_labels'] = [current_value, label_choice] return final_labels_df final_labels_df = update_final_labels_via_labelstudio(final_labels_df, label_studio_annotations) final_labels_df[~final_labels_df["label"].isnull()] | | image | label | historical\_labels | | --- | --- | --- | --- | | 0 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014120.jpg | Defective | \[Defective\] | | 1 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_020053.jpg | Defective | \[Defective\] | | 2 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_005833.jpg | Defective | \[Defective\] | | 3 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013704.jpg | Defective | \[Defective\] | | 4 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015012.jpg | Defective | \[Defective\] | | 5 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_011506.jpg | Defective | \[Defective\] | | 6 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_002817.jpg | Non-Defective | \[Non-Defective\] | | 7 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_002553.jpg | Non-Defective | \[Non-Defective\] | | 8 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_020243.jpg | Defective | \[Defective\] | | 9 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014858.jpg | Defective | \[Defective\] | | 10 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210318\_235659.jpg | Non-Defective | \[Non-Defective\] | | 11 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014520.jpg | Defective | \[Defective\] | | 12 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_010752.jpg | Defective | \[Defective\] | | 13 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015937.jpg | Defective | \[Defective\] | | 14 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_002905.jpg | Non-Defective | \[Non-Defective\] | | 15 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013808.jpg | Defective | \[Defective\] | | 16 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210318\_232231.jpg | Non-Defective | \[Non-Defective\] | | 17 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_010521.jpg | Defective | \[Defective\] | | 18 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014223.jpg | Defective | \[Defective\] | | 19 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_010858.jpg | Defective | \[Defective\] | | 20 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014353.jpg | Defective | \[Defective\] | | 21 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015648.jpg | Defective | \[Defective\] | | 22 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_011017.jpg | Defective | \[Defective\] | | 23 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013341.jpg | Defective | \[Defective\] | | 24 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003754.jpg | Non-Defective | \[Non-Defective\] | | 25 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003026.jpg | Non-Defective | \[Non-Defective\] | | 26 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014639.jpg | Defective | \[Defective\] | | 27 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015451.jpg | Defective | \[Defective\] | | 28 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_020004.jpg | Defective | \[Defective\] | | 29 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_005727.jpg | Defective | \[Defective\] | | 30 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003342.jpg | Non-Defective | \[Non-Defective\] | | 31 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013435.jpg | Defective | \[Defective\] | | 32 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_001756.jpg | Non-Defective | \[Non-Defective\] | | 33 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014824.jpg | Defective | \[Defective\] | | 34 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_010315.jpg | Defective | \[Defective\] | | 35 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_000106.jpg | Non-Defective | \[Non-Defective\] | | 36 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_015545.jpg | Defective | \[Defective\] | | 37 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_004702.jpg | Defective | \[Defective\] | | 38 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_001519.jpg | Non-Defective | \[Non-Defective\] | | 39 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_011522.jpg | Defective | \[Defective\] | | 40 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210318\_233144.jpg | Defective | \[Defective\] | | 41 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014117.jpg | Non-Defective | \[Non-Defective\] | | 42 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | Non-Defective | \[Non-Defective\] | | 43 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | Non-Defective | \[Non-Defective\] | | 44 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003322.jpg | Defective | \[Defective\] | | 45 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_011524.jpg | Non-Defective | \[Non-Defective\] | | 46 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014306.jpg | Non-Defective | \[Non-Defective\] | | 47 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003531.jpg | Non-Defective | \[Non-Defective\] | | 48 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014529.jpg | Defective | \[Defective\] | | 49 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210318\_235645.jpg | Non-Defective | \[Non-Defective\] | We’ve now recorded labels (and updated the historical labels) for 50 of our images, which were manually annotated. Cleanlab Studio can help us avoid having to manually annotate the rest of the dataset. Use Cleanlab Studio to catch label errors and auto-label the data that AI can confidently handle[​](#use-cleanlab-studio-to-catch-label-errors-and-auto-label-the-data-that-ai-can-confidently-handle "Direct link to Use Cleanlab Studio to catch label errors and auto-label the data that AI can confidently handle") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- To run Cleanlab Studio, we first properly format our dataset (including both labeled and the rest of the unlabeled images). Here we use the [Cleanlab External Image format](https://help.cleanlab.ai/studio/concepts/datasets/#external-image) , so there is no need to move your images (Cleanlab will read them directly from their public URLs). You can run Cleanlab Studio on data stored in a variety of alternate cloud/local storage formats. We drop the `historical_labels` column from the final labels DataFrame prior to loading it into Cleanlab Studio, since it is not needed for us to use Cleanlab Studio to catch label errors and auto-label the images. cleanlab_df = final_labels_df.drop("historical_labels", axis=1) A quickstart tutorial for programmatically analyzing image datasets via Cleanlab Studio’s Python API is available [here](/studio/quickstart/api/) . If you prefer to use the web interface and interactively browse/correct your data, see our other tutorial: [Finding Issues in Large-Scale Image Datasets](/studio/tutorials/cleanlab-studio-api/large_image_datasets/) . Here we run through the simple steps without much explanation. # You can find your Cleanlab Studio API key by going to app.cleanlab.ai/upload, # clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# initialize studio objectstudio = Studio(API_KEY) Let’s load our set of currently labeled/unlabeled images into Cleanlab Studio. It’s important to provide your full dataset to get the best results from Cleanlab’s AI. dataset_id = studio.upload_dataset(cleanlab_df, dataset_name="Pepsico_RnD_Potato_Chip_Image_Data_Tutorial", schema_overrides=[{"name": "image", "column_type": "image_external"}])print(f"Dataset ID: {dataset_id}") Uploading dataset...: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|Ingesting Dataset...: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|Dataset ID: 7dfa48ce904e47ab9554a66ddef602b9 Once the data are loaded, we create a Project based on this Dataset in Cleanlab Studio. project_id = studio.create_project( dataset_id=dataset_id, project_name="Pepsico_RnD_Potato_Chip_Image_Data_Tutorial_Project", modality="image", task_type="multi-class", model_type="regular", label_column="label",)print( f"Project successfully created and ML training has begun! project_id: {project_id}") Project successfully created and ML training has begun! project_id: dbbac382835b4ef9bc8cc47469bae255 The Project will take a while for Cleanlab’s AI models to train on your dataset and analyze it. You’ll receive an email when the results are ready. Each Project creates a _cleanset_ (cleaned dataset). Run the cell below to fetch the `cleanset_id` from Cleanlab Studio, this code will block until your project results are ready. For big datasets, if your notebook times out, **do not recreate the project**. Instead just re-run the cell below to fetch the `cleanset_id` based on the `project_id` (which you can also find in the Cleanlab Studio Web App). cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")studio.wait_until_cleanset_ready(cleanset_id) cleanset_id: 333667428d494e54908dc7c8e9e39cecCleanset Progress: \ Step 50/50, Ready for review! Cleanlab Studio automatically generates smart metadata for any image, text, or tabular dataset. This metadata (returned as [Cleanlab Columns](/studio/concepts/cleanlab_columns/) ) helps you find and fix various problems in your dataset, or impute missing values and auto-label unlabeled data. cleanlab_columns_df = studio.download_cleanlab_columns(cleanset_id)cleanlab_columns_df.head(10) | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | suggested\_label\_confidence\_score | is\_ambiguous | ambiguous\_score | is\_well\_labeled | is\_near\_duplicate | ... | is\_odd\_size | odd\_size\_score | is\_low\_information | low\_information\_score | is\_grayscale | is\_odd\_aspect\_ratio | odd\_aspect\_ratio\_score | aesthetic\_score | is\_NSFW | NSFW\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1 | | False | 0.373451 | | 0.626549 | False | 0.993814 | False | False | ... | False | 0.0 | False | 0.305794 | False | False | 0.0 | 0.532279 | False | 0.041162 | | 1 | 2 | | False | 0.425856 | | 0.574144 | False | 0.999999 | False | False | ... | False | 0.0 | False | 0.314794 | False | False | 0.0 | 0.511932 | False | 0.051039 | | 2 | 3 | | False | 0.407524 | | 0.592476 | False | 0.999208 | False | False | ... | False | 0.0 | False | 0.278744 | False | False | 0.0 | 0.519195 | False | 0.113037 | | 3 | 4 | | False | 0.391541 | | 0.608459 | False | 0.997314 | False | False | ... | False | 0.0 | False | 0.300383 | False | False | 0.0 | 0.479944 | False | 0.054440 | | 4 | 5 | | False | 0.390192 | | 0.609808 | False | 0.997103 | False | False | ... | False | 0.0 | False | 0.330797 | False | False | 0.0 | 0.482801 | False | 0.052081 | | 5 | 6 | | False | 0.392143 | | 0.607857 | False | 0.997406 | False | False | ... | False | 0.0 | False | 0.291288 | False | False | 0.0 | 0.464114 | False | 0.000000 | | 6 | 7 | | False | 0.425907 | | 0.574093 | False | 0.951693 | False | False | ... | False | 0.0 | False | 0.348319 | False | False | 0.0 | 0.552842 | False | 0.137950 | | 7 | 8 | | False | 0.420150 | | 0.579850 | False | 0.947803 | False | False | ... | False | 0.0 | False | 0.328956 | False | False | 0.0 | 0.584307 | False | 0.092091 | | 8 | 9 | | False | 0.437139 | | 0.562861 | False | 0.999753 | False | False | ... | False | 0.0 | False | 0.310666 | False | False | 0.0 | 0.489662 | False | 0.108625 | | 9 | 10 | | False | 0.375067 | | 0.624933 | False | 0.994185 | False | False | ... | False | 0.0 | False | 0.327839 | False | False | 0.0 | 0.525412 | False | 0.110453 | 10 rows × 33 columns We’ll join our Cleanlab Studio metadata columns with some of our original data columns in order to view detected label issues, suggested labels, confidence in these suggestions, and other important columns that Cleanlab automatically generated. Learn more about these metadata columns [here](https://help.cleanlab.ai/studio/concepts/cleanlab_columns/) . Label issues in image datasets often involve challenges such as incorrectly chosen class labels due to human mistakes, inconsistencies across different data annotators, ambiguous examples where multiple classes might seem applicable, and instances where relevant features are overlooked by annotators. Cleanlab can automatically detect annotation problems stemming from a variety of sources, including: subjective interpretation of images, the complexity of scenes, variability in object appearances, and unclear portions of annotation guidelines (or changing guidelines). Identifying and resolving these annotation issues is crucial for creating a high-quality dataset. cleanlab_df = cleanlab_df.reset_index().rename(columns={'index': 'cleanlab_row_ID'})cleanlab_columns_df = pd.merge(cleanlab_columns_df, cleanlab_df[['cleanlab_row_ID', 'label', 'image']], on='cleanlab_row_ID', how='left') ### Review some of the mislabeled images that Cleanlab Studio detected[​](#review-some-of-the-mislabeled-images-that-cleanlab-studio-detected "Direct link to Review some of the mislabeled images that Cleanlab Studio detected") We have retrieved our Cleanlab Studio results, so how should we actually look at the results and use them effectively? Let’s look at an example of a mislabeled image that Cleanlab was able to detect to build trust that Cleanlab can actually do this. We can filter our `cleanlab_columns_df` based on the column `is_label_issue` to find the images that are found to be label issues by Cleanlab. We then sort (in descending order) these label issues by their `label_issue_score`, which quantifies how confident Cleanlab is that a data point is mislabeled. We identify the images most confidently to be mislabeled by thresholding the [label issue score](https://help.cleanlab.ai/studio/concepts/cleanlab_columns/#label_issue_score) . label_issues = cleanlab_columns_df.query("is_label_issue").sort_values("label_issue_score", ascending=False) Optional: Helper functions to render id column of DataFrame as images in a separate column from PIL import Imagefrom io import BytesIOfrom base64 import b64encodefrom IPython.display import HTMLdef url_to_img_html(url: str) -> str: """ Converts a URL to an HTML img tag. """ return f'Image'def display_images_in_df(df: pd.DataFrame) -> HTML: """ Modifies the DataFrame to include a column with HTML img tags for rendering images. """ image_column = "image_shown" df_copy = df.copy() # Assuming 'url_to_img_html' converts URLs in 'image' column to HTML img tags df_copy[image_column] = df_copy['image'].apply(url_to_img_html) # Determine the position of the 'image' column image_col_index = df_copy.columns.get_loc('image') + 1 # Reorder columns to ensure 'image_shown' appears immediately after 'image' columns = list(df_copy.columns) new_column_order = columns[:image_col_index] + [image_column] + columns[image_col_index:-1] df_copy = df_copy[new_column_order] # Generate HTML representation of the DataFrame to display images html = df_copy.to_html(escape=False) return HTML(html) To see that some of these images were actually mislabeled, you can view the first 2 images below in the `image_shown` column: display_images_in_df(label_issues.head(2)[["cleanlab_row_ID", "image", "is_label_issue", "label_issue_score", "label", "suggested_label"]]) | | cleanlab\_row\_ID | image | image\_shown | is\_label\_issue | label\_issue\_score | label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | | 42 | 43 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_To_Label/IMG_20210319_013912.jpg) | True | 0.778596 | Non-Defective | Defective | | 41 | 42 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_To_Label/IMG_20210319_014842.jpg) | True | 0.708746 | Non-Defective | Defective | Cleanlab has automatically flagged data that was badly annotated! Let’s use Cleanlab’s label issue detection to determine which data points should be re-labeled in our data annotation tool. Based on some threshold value we set for our `label_issue_score` column, we should choose to flag and relabel (in our data annotation tool) any images that are greater than or equal to this threshold value. Here we set our `label_issue_score` threshold to `0.7` (to only re-consider the images Cleanlab is most confident are mislabeled): images_to_relabel_in_label_studio = cleanlab_columns_df.query( "is_label_issue & label_issue_score > 0.7").sort_values("label_issue_score", ascending=False)images_to_relabel_in_label_studio.head() | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | suggested\_label\_confidence\_score | is\_ambiguous | ambiguous\_score | is\_well\_labeled | is\_near\_duplicate | ... | is\_low\_information | low\_information\_score | is\_grayscale | is\_odd\_aspect\_ratio | odd\_aspect\_ratio\_score | aesthetic\_score | is\_NSFW | NSFW\_score | label | image | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 42 | 43 | | True | 0.778596 | Defective | 0.778596 | False | 0.905642 | False | False | ... | False | 0.302884 | False | False | 0.0 | 0.5266 | False | 0.000000 | Non-Defective | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | | 41 | 42 | | True | 0.708746 | Defective | 0.708746 | False | 0.959486 | False | False | ... | False | 0.315274 | False | False | 0.0 | 0.5030 | False | 0.074041 | Non-Defective | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | 2 rows × 35 columns **Note**: The value you choose for score thresholds will affect subsequent results. We suggest you play around with this threshold to achieve optimal results for your data. For label issues, you should choose a threshold where you see images that were mislabeled around this `label_issue_score` threshold. ### Review some of the unlabeled images that we want to auto-label[​](#review-some-of-the-unlabeled-images-that-we-want-to-auto-label "Direct link to Review some of the unlabeled images that we want to auto-label") Let’s look at a few examples of unlabeled images that we want to try and auto-label using Cleanlab Studio. Auto-labeling uses predictions from Cleanlab’s AI (which was trained on your existing labeled data provided in the Cleanlab Studio Project) to suggest labels for unlabeled data points. To ensure accurate auto-labels, we must account for the confidence in these predictions. unlabeled_images = final_labels_df[final_labels_df['label'].isnull()]unlabeled_images.head() | | image | label | historical\_labels | | --- | --- | --- | --- | | 50 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_014652.jpg | None | \[\] | | 51 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210318\_234146.jpg | None | \[\] | | 52 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_010408.jpg | None | \[\] | | 53 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_001713.jpg | None | \[\] | | 54 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_020124.jpg | None | \[\] | Let’s look at some of these unlabeled images that we want to auto-label below. The `image_shown` column is to see what the images actually look like: display_images_in_df(unlabeled_images.head(3)[["label", "historical_labels", "image"]]) | | label | historical\_labels | image | image\_shown | | --- | --- | --- | --- | --- | | 50 | None | \[\] | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_014652.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210319_014652.jpg) | | 51 | None | \[\] | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210318\_234146.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210318_234146.jpg) | | 52 | None | \[\] | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_010408.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210319_010408.jpg) | We can then sort (in descending order) these unlabeled images by their `suggested_label_confidence_score` in order to see which images are considered data points we can more confidently auto-label with Cleanlab. The `suggested_label_confidence_score` is our confidence that Cleanlab’s predicted label for a data point is correct (again, higher values correspond to data points you can more confidently auto-fix / auto-label with Cleanlab). To read more about this score, you can go [here](https://help.cleanlab.ai/studio/concepts/cleanlab_columns/#suggested_label_confidence_score) . Based on some threshold value we set for our `suggested_label_confidence_score` column, we should auto-label (using the `suggested_label` column) any images that are currently unlabeled and that are greater than or equal to this threshold value. Here is an example of how to do this by setting our `suggested_label_confidence_score` threshold to `0.7`(a high threshold to find images we are most confident about being able to auto-label): auto_label_criteria = cleanlab_columns_df['suggested_label'].notnull() & \ (cleanlab_columns_df['suggested_label_confidence_score'] > 0.7) & \ cleanlab_columns_df['image'].isin(unlabeled_images['image'])images_to_auto_label = cleanlab_columns_df[auto_label_criteria].sort_values("suggested_label_confidence_score", ascending=False)images_to_auto_label.head() | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | suggested\_label\_confidence\_score | is\_ambiguous | ambiguous\_score | is\_well\_labeled | is\_near\_duplicate | ... | is\_low\_information | low\_information\_score | is\_grayscale | is\_odd\_aspect\_ratio | odd\_aspect\_ratio\_score | aesthetic\_score | is\_NSFW | NSFW\_score | label | image | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 320 | 321 | | False | 0.0 | Defective | 0.745203 | False | NaN | False | False | ... | False | 0.284669 | False | False | 0.0 | 0.565557 | False | 0.000000 | None | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_020059.jpg | | 214 | 215 | | False | 0.0 | Defective | 0.736089 | False | NaN | False | False | ... | False | 0.291471 | False | False | 0.0 | 0.530241 | False | 0.000000 | None | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_013358.jpg | | 158 | 159 | | False | 0.0 | Defective | 0.732108 | False | NaN | False | False | ... | False | 0.316843 | False | False | 0.0 | 0.568669 | False | 0.004064 | None | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_003158.jpg | | 247 | 248 | | False | 0.0 | Defective | 0.729612 | False | NaN | False | False | ... | False | 0.307088 | False | False | 0.0 | 0.538092 | False | 0.000000 | None | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_002930.jpg | | 222 | 223 | | False | 0.0 | Defective | 0.728620 | False | NaN | False | False | ... | False | 0.294260 | False | False | 0.0 | 0.493728 | False | 0.000000 | None | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_010310.jpg | 5 rows × 35 columns **Note**: The value you choose for this threshold is sensitive in how it affects results and we highly suggest you tune or play around with this threshold yourself to achieve optimal results for your use case. For deciding which auto-labels can be trusted, you should choose a threshold where you see the images with greater `suggested_label_confidence_score` have the correct suggested\_label. ### Update final labels DataFrame with our Cleanlab Studio results[​](#update-final-labels-dataframe-with-our-cleanlab-studio-results "Direct link to Update final labels DataFrame with our Cleanlab Studio results") Let’s now use our Cleanlab Studio results to achieve the following: 1. Based on some threshold value we set for Cleanlab’s `label_issue_score` column, select data points to re-label in our data annotation tool. This efficiently fixes data that was likely previously mislabeled. 2. Based on some threshold value we set for Cleanlab’s `suggested_label_confidence_score` column, select currently-unlabeled data points to auto-label with Cleanlab (using the `suggested_label` column). This allows to only auto-label the subset of data that AI can confidently handle. 3. Update our final labels to reflect the newly auto-labeled images, determine the indices of data points that need to be relabeled in our data annotation tool, as well as indices of data points that were auto-labeled by Cleanlab. Optional: Define helper function to update the values of our labels based on what we auto-label in Cleanlab Studio and determine which images to relabel from typing import Tuple, Optionaldef update_final_labels_via_cleanlab( final_labels_df: pd.DataFrame, cleanlab_columns_df: pd.DataFrame, issue_score_threshold: float = 0.6, suggested_label_confidence_score_threshold: float = 0.55, run_auto_labeling_only: bool = False) -> Tuple[pd.DataFrame, Optional[pd.DataFrame], Optional[pd.DataFrame]]: """ Updates final labels with suggested labels from cleanlab_columns_df based on specified criteria, and identifies images to relabel in Label Studio. Parameters: - final_labels_df (pd.DataFrame): DataFrame to update, containing 'label', 'image', and 'historical_labels'. - cleanlab_columns_df (pd.DataFrame): DataFrame containing cleanlab analysis and suggestions. - issue_score_threshold (float): Threshold for determining if a label issue is significant enough to require relabeling. - suggested_label_confidence_score_threshold (float): Confidence score threshold for auto-labeling. - run_auto_labeling_only (bool): If True, only run the auto-labeling logic. Returns: - pd.DataFrame: Updated final labels. - Optional[pd.DataFrame]: images_to_relabel_in_label_studio, containing images identified for relabeling (None if run_auto_labeling_only=True). - pd.DataFrame: images_to_auto_label, containing images auto-labeled based on the suggested label confidence score. """ images_to_relabel_in_label_studio = None if not run_auto_labeling_only: # Part 1: Identify images to relabel in Label Studio images_to_relabel_in_label_studio = cleanlab_columns_df.query( "is_label_issue & label_issue_score > @issue_score_threshold" ).sort_values("label_issue_score", ascending=False) # Filter out already labeled images in final_labels_df for auto-labeling unlabeled_final_labels_df = final_labels_df[final_labels_df['label'].isnull()] # Part 2: Auto-label images not in the images_to_relabel_in_label_studio DataFrame # and meeting the suggested_label confidence score criteria # Additionally, ensure these images are currently unlabeled in final_labels_df auto_label_criteria = cleanlab_columns_df['suggested_label'].notnull() & \ (cleanlab_columns_df['suggested_label_confidence_score'] > suggested_label_confidence_score_threshold) & \ cleanlab_columns_df['image'].isin(unlabeled_final_labels_df['image']) if not run_auto_labeling_only: auto_label_criteria &= ~cleanlab_columns_df['image'].isin(images_to_relabel_in_label_studio['image']) images_to_auto_label = cleanlab_columns_df[auto_label_criteria].sort_values("suggested_label_confidence_score", ascending=False) # Update final_labels_df with auto-label suggestions for _, row in images_to_auto_label.iterrows(): image_url = row['image'] suggested_label = row['suggested_label'] # Find the index in final_labels_df where the image URL matches index = final_labels_df.index[final_labels_df['image'] == image_url] if not index.empty: # Update the label column final_labels_df.at[index[0], 'label'] = suggested_label # Append the suggested label to the historical_labels list if len(final_labels_df.at[index[0], 'historical_labels']) == 0: final_labels_df.at[index[0], 'historical_labels'] = [suggested_label] else: existing_labels = final_labels_df.at[index[0], 'historical_labels'] if isinstance(existing_labels, list): existing_labels.append(suggested_label) else: final_labels_df.at[index[0], 'historical_labels'] = [existing_labels, suggested_label] # Adjust the return based on `run_auto_labeling_only` if run_auto_labeling_only: return final_labels_df, None, images_to_auto_label else: return final_labels_df, images_to_relabel_in_label_studio, images_to_auto_label Let’s update our final labels, obtain which images to relabel in Label Studio, and auto-label some of our unlabeled images using this helper function we just defined. We choose lower thresholds for `label_issue_score` and `suggested_label_confidence_score` as the default values for these scores (as arguments to the helper function) compared to the examples we showed previously in order to make it easier to find images to relabel and auto-label for this tutorial. # Obtain updated finals labels object, the images to relabel in Label Studio, and the images we auto-labeledfinal_labels_df, images_to_relabel, auto_labeled_images = update_final_labels_via_cleanlab(final_labels_df, cleanlab_columns_df) Let’s check how many images we auto labeled with Cleanlab Studio using our threshold on `suggested_label_confidence_score`: # We auto-labeled these images print(auto_labeled_images.shape) (325, 35) Let’s also look at some examples of the images we auto-labeled to see if they were correct. We will see what our `suggested_label` is for 2 of the images we auto-labeled and the `image_shown` column to see what the images actually look like: display_images_in_df(auto_labeled_images.head(2)[["cleanlab_row_ID", "image", "is_label_issue", "label_issue_score", "label", "suggested_label"]]) | | cleanlab\_row\_ID | image | image\_shown | is\_label\_issue | label\_issue\_score | label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | | 320 | 321 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_020059.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210319_020059.jpg) | False | 0.0 | None | Defective | | 214 | 215 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_013358.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210319_013358.jpg) | False | 0.0 | None | Defective | You will find after checking each image that the suggested labels are correct! Let’s see how many unlabeled images remain in our data after the auto-labeling: # We can see we still have unlabeled images that need to be handled in another round of labelingprint(final_labels_df["label"].isnull().sum()) 25 And now let’s see how many images we identified that need to relabeled in Label Studio, our 3rd party data annotation tool of choice: # We will relabel these images with Label Studioprint(images_to_relabel.shape)images_to_relabel[["is_label_issue", "label_issue_score", "label", "suggested_label", "image"]].head(10) | | is\_label\_issue | label\_issue\_score | label | suggested\_label | image | | --- | --- | --- | --- | --- | --- | | 42 | True | 0.778596 | Non-Defective | Defective | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | | 41 | True | 0.708746 | Non-Defective | Defective | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | | 43 | True | 0.685009 | Defective | Defective | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003322.jpg | | 45 | True | 0.680246 | Non-Defective | Defective | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014306.jpg | You can see for each of those images that `label` does not match `suggested_label` that found by Cleanlab’s AI. Cleanlab is very useful for catching label errors like these! Round 2: label more images (and re-label those with label errors) in your data annotation tool[​](#round-2-label-more-images-and-re-label-those-with-label-errors-in-your-data-annotation-tool "Direct link to Round 2: label more images (and re-label those with label errors) in your data annotation tool") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. After getting back the initial Cleanlab Studio results, you can use them to inform your next round of data annotation. Here we’ll use the `images_to_relabel` DataFrame to figure out the exact `task_ids` (index of our images in Label Studio) to modify when relabeling these images in Label Studio. Here we’ll continue labeling data in the same Label Studio project, which means we need to update this project with the auto-labels obtained from Cleanlab (so annotators don’t label those images that were already auto-labeled). You could alternatively start a new Label Studio project with just the remaining still-to-be-labeled data. For simplicity in this tutorial, our 2nd round of data labeling just focuses on addressing mislabeled images. In practice, you should also manually label more of the unlabeled data (that could not be confidently auto-labeled yet). Every time you re-label data or label new data in your data annotation tool, run a Cleanlab Studio project on the updated dataset and Cleanlab’s results will automatically improve. Optional: Helper function designed to help identify the right task IDs (associated with an image) in Label Studio for relabeling def identify_tasks_to_relabel(tasks, images_to_relabel_list): """ Identifies tasks to relabel based on image URLs. Parameters: - tasks (list): A list of task dictionaries. - images_to_relabel_list (list): A list of image URLs to relabel. Returns: - dict: A dictionary of task IDs to relabel, mapped to their filenames. """ # Extract the basename (filename) from the task image paths task_filenames = {task['id']: task['data']['image'].split('/')[-1] for task in tasks} # Extract filenames from the images_to_relabel_list image_relabel_filenames = [image.split('/')[-1] for image in images_to_relabel_list] # Filter the task IDs based on whether their filenames are in the list of images to relabel tasks_to_relabel = {} for task_id, filename in task_filenames.items(): if filename in image_relabel_filenames: tasks_to_relabel[task_id] = filename return tasks_to_relabeldef identify_tasks_to_autolabel(tasks, image_to_label_mapping): """ Identifies tasks to auto-label based on image URLs and assigns the suggested label. Parameters: - tasks (list): A list of task dictionaries. - image_to_label_mapping (dict): A dictionary mapping image filenames to suggested labels. Returns: - dict: A dictionary of task IDs mapped to their suggested labels. """ tasks_to_autolabel = {} # Extract the basename (filename) from the task image paths for task in tasks: filename = task['data']['image'].split('/')[-1] if filename in image_to_label_mapping: # Map task ID to the suggested label tasks_to_autolabel[task['id']] = image_to_label_mapping[filename] return tasks_to_autolabel Let’s get all of the tasks (i.e. data points in Label Studio) that we want to relabel. # Get all tasks to find the ones you want to relabeltasks = project.get_tasks()image_relabel_list = list(images_to_relabel["image"])tasks_to_relabel = identify_tasks_to_relabel(tasks, image_relabel_list)print("Task IDs to relabel:", tasks_to_relabel) Task IDs to relabel: {161903: 'IMG_20210319_014842.jpg', 161904: 'IMG_20210319_013912.jpg', 161905: 'IMG_20210319_003322.jpg', 161907: 'IMG_20210319_014306.jpg'} Let’s create a dict that maps our image filenames to the suggested labels that we are going to use to annotate our images in Label Studio and add a flag that they were auto-labeled. # Convert DataFrame to dictionary mapping image filenames to suggested labelsimage_to_label_mapping = dict(zip(auto_labeled_images['image'].apply(lambda x: x.split('/')[-1]), auto_labeled_images['suggested_label'])) # Assuming `tasks` is your list of task dictionariestasks_we_autolabeled = identify_tasks_to_autolabel(tasks, image_to_label_mapping) The task\_ids are formatted as a dictionary where each key is a `task_id` that maps to the filename of an image we want to relabel. We have now found which task\_ids to relabel and which we know we have auto-labeled, so we will remove our label (called an annotation in Label Studio) for these images associated with the relevant task\_ids identified above. Then we will also mark (using a `metadata` column) which images need to be relabeled so that this is clearly visible in the Label Studio UI. We also will mark which images we have already auto-labeled in Label Studio so that one is not confused by which images still need to be labeled or not and which ones we have already auto-labeled with Cleanlab Studio. You can use the code below to execute these steps and send the updates back to your Label Studio project that is running locally. Optional: Helper functions that list annotations for a given task and clear/mark annotations for relabeling in Label Studio from typing import Anydef fetch_annotation_metadata(api_key: str, task_id: int) -> List[Dict[str, Any]]: """ Fetches annotation metadata for a specific task from Label Studio. Parameters: - api_key (str): The API key for Label Studio. - task_id (int): The ID of the task for which annotations are fetched. Returns: - List[Dict[str, Any]]: A list of annotations for the specified task. Raises: - Exception: If the request to the Label Studio API fails. """ headers = {'Authorization': f'Token {api_key}'} response = requests.get(f'http://localhost:8080/api/tasks/{task_id}/annotations/', headers=headers) if response.status_code == 200: return response.json() else: raise Exception(f"Failed to fetch annotations. Status code: {response.status_code}, Response: {response.text}")def clear_annotations_mark_for_relabeling_and_autolabel(api_key: str, tasks_to_relabel: Dict[int, str], auto_labeled_tasks: Dict[int, str]) -> None: """ Clears annotations for specified tasks, marks them for relabeling, and annotates auto-labeled tasks. Parameters: - api_key (str): The API key for Label Studio. - tasks_to_relabel (Dict[int, str]): Tasks to be cleared and marked for relabeling. - auto_labeled_tasks (Dict[int, str]): Task IDs mapped to their suggested label for auto-labeling. Returns: - None Raises: - Exception: If requests to the Label Studio API for deleting annotations, updating tasks, or creating annotations fail. """ for task_id in tasks_to_relabel.keys(): # List all annotations for the task using the custom function annotations = fetch_annotation_metadata(api_key, task_id) # Delete each annotation for annotation in annotations: response = requests.delete(f'http://localhost:8080/api/annotations/{annotation["id"]}/', headers={'Authorization': f'Token {api_key}'}) if response.status_code != 204: raise Exception(f"Failed to delete annotation. Status code: {response.status_code}, Response: {response.text}") # Fetch the task data task_response = requests.get(f'http://localhost:8080/api/tasks/{task_id}/', headers={'Authorization': f'Token {api_key}'}) if task_response.status_code != 200: raise Exception(f"Failed to fetch task. Status code: {task_response.status_code}, Response: {task_response.text}") task_data = task_response.json()['data'] # Update the task to indicate it needs relabeling if task_data.get('metadata') is None: task_data['metadata'] = {} task_data['metadata']['needs_relabeling'] = True # Update the task with the modified data update_response = requests.patch(f'http://localhost:8080/api/tasks/{task_id}/', json={'data': task_data}, headers={'Authorization': f'Token {api_key}'}) if update_response.status_code != 200: raise Exception(f"Failed to update task. Status code: {update_response.status_code}, Response: {update_response.text}") print("Annotations cleared and tasks marked for relabeling in Label Studio.") # Handling auto-labeled tasks for task_id, suggested_label in auto_labeled_tasks.items(): # Fetch the task data for updating metadata task_response = requests.get(f'http://localhost:8080/api/tasks/{task_id}/', headers={'Authorization': f'Token {api_key}'}) if task_response.status_code != 200: raise Exception(f"Failed to fetch task. Status code: {task_response.status_code}, Response: {task_response.text}") task_data = task_response.json()['data'] # Update task metadata to indicate auto-labeled if task_data.get('metadata') is None: task_data['metadata'] = {} task_data['metadata']['auto_labeled'] = True # Update the task with the modified data including auto-labeled flag update_response = requests.patch(f'http://localhost:8080/api/tasks/{task_id}/', json={'data': task_data}, headers={'Authorization': f'Token {api_key}'}) if update_response.status_code != 200: raise Exception(f"Failed to update task. Status code: {update_response.status_code}, Response: {update_response.text}") # Correct API endpoint for creating annotations annotation_endpoint = f'http://localhost:8080/api/tasks/{task_id}/annotations/' # Prepare annotation data annotation_data = { 'result': [{ 'from_name': 'label', 'to_name': 'image', 'type': 'choices', 'value': {'choices': [suggested_label]} }] } # Attempt to create the annotation annotation_response = requests.post(annotation_endpoint, json=annotation_data, headers={'Authorization': f'Token {api_key}'}) if annotation_response.status_code not in [200, 201]: raise Exception(f"Failed to create annotation. Status code: {annotation_response.status_code}, Response: {annotation_response.text}") print("Tasks that were auto-labeled were successfully annotated in Label Studio.") We can look at specific annotation metadata for each `task_id` using the Label Studio API. This can help understand important details about the annotation, including when it was created, last updated, what the project id number is and more. Here is an example of how to list the annotation metadata for a specific `task_id` in Label Studio using a helper function we defined: example_task_id = list(tasks_to_relabel.keys())[0]print(fetch_annotation_metadata(label_studio_api_key, example_task_id)) [{'id': 1645, 'created_username': ' matt.turk@cleanlab.ai, 1', 'created_ago': '15\xa0hours, 23\xa0minutes', 'completed_by': 1, 'result': [{'value': {'choices': ['Non-Defective']}, 'id': 'E47bGehLt4', 'from_name': 'choice', 'to_name': 'image', 'type': 'choices', 'origin': 'manual'}], 'was_cancelled': False, 'ground_truth': False, 'created_at': '2024-03-21T22:15:22.666733Z', 'updated_at': '2024-03-21T22:15:22.666763Z', 'draft_created_at': None, 'lead_time': 2.482, 'import_id': None, 'last_action': None, 'task': 161903, 'project': 55, 'updated_by': 1, 'parent_prediction': None, 'parent_annotation': None, 'last_created_by': None}] ### Clear annotations for images and mark them for relabeling in Label Studio[​](#clear-annotations-for-images-and-mark-them-for-relabeling-in-label-studio "Direct link to Clear annotations for images and mark them for relabeling in Label Studio") **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. Let’s use a helper function to clear the existing annotation in Label Studio for the images (each corresponding to a task in Label Studio) we know we want to relabel. We also flag these images with a `metadata` column value to help you find the images that you manually need to relabel. If you had significantly more images to label than those in this tutorial, this flag would help you find the subset of images you are trying to relabel more easily. You could also obtain the exact task\_ids of the images and manually find each image to relabel without clearing the annotations in an automated way, but that would be a more difficult and time consuming method of relabeling your data in Label Studio. We also flag the images that we’ve already auto-labeled, as mentioned earlier, with a `metadata` column value to more easily help you see which images do not need to be labeled within Label Studio due to Cleanlab Studio already helping us label those images. For more information on deleting annotations in Label Studio, you can go [here](https://labelstud.io/guide/labeling.html#Delete-an-annotation) . clear_annotations_mark_for_relabeling_and_autolabel(label_studio_api_key, tasks_to_relabel, tasks_we_autolabeled) Annotations cleared and tasks marked for relabeling in Label Studio.Tasks that were auto-labeled were successfully annotated in Label Studio. Now you can go to your [Label Studio project](http://localhost:8080) to now relabel the images that we flagged. In your Label Studio project, you’ll see that the images that need to be relabeled have a value in the `metadata` column of your project that says `{"needs_relabeling":true}`. The images we have already auto-labeled have a value in the `metadata` column that says “ Here is a video showing you how to find the images that need to be relabeled and also which images we have already auto-labeled. Then we show how to actually relabel the specified images within Label Studio: After relabeling, export the labels as seen below. ### Update final labels DataFrame with our 2nd round of labels obtained via Label Studio[​](#update-final-labels-dataframe-with-our-2nd-round-of-labels-obtained-via-label-studio "Direct link to Update final labels DataFrame with our 2nd round of labels obtained via Label Studio") **Note**: You can skip this section if you already know how to use Label Studio or are using another data annotation tool. After relabeling some images in Label Studio, we update the DataFrame serving as our master record of each image’s final label. We’ll reuse our Label Studio project ID defined earlier and our previously defined helper function to export the new image labels from Label Studio into a `csv` file: relabeled_export_filename = "relabeled_label_studio_potato_chips_annotations.csv" # REPLACE YOUR FILENAME HEREexport_data_from_label_studio_project(ls_project_id, label_studio_api_key, relabeled_export_filename) Let’s read in our image data we just exported out of Label Studio and filter out the images we did not relabel. # Read in relabeled data exported from Label Studiorelabeled_df = pd.read_csv(relabeled_export_filename)relabeled_df = relabeled_df[relabeled_df["metadata"] == '{"needs_relabeling":true}'] Here are the images that we relabeled: relabeled_df.head(10) | | annotation\_id | annotator | choice | created\_at | id | image | lead\_time | metadata | updated\_at | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 42 | 2307 | 1 | Defective | 2024-03-22T13:40:20.268734Z | 161903 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | 2.569 | {"needs\_relabeling":true} | 2024-03-22T13:40:20.268757Z | | 43 | 2308 | 1 | Defective | 2024-03-22T13:40:24.147650Z | 161904 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | 2.230 | {"needs\_relabeling":true} | 2024-03-22T13:40:24.147698Z | | 44 | 2309 | 1 | Non-Defective | 2024-03-22T13:40:27.828297Z | 161905 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003322.jpg | 2.220 | {"needs\_relabeling":true} | 2024-03-22T13:40:27.828330Z | | 46 | 2310 | 1 | Defective | 2024-03-22T13:40:31.009574Z | 161907 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014306.jpg | 1.953 | {"needs\_relabeling":true} | 2024-03-22T13:40:31.009615Z | You can confirm the `metadata` column values show we did in fact relabel this data. The `choice` column represents what our now correct label value is after relabeling. Let’s proceed with updating our final labels with our newly relabeled data. We will look at our final labels before **AND** after we update the values using our relabeled Label Studio images to illustrate the difference. # Final labels before we update them with newly relabeled imagesfinal_labels_df.loc[relabeled_df.index] | | image | label | historical\_labels | | --- | --- | --- | --- | | 42 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | Non-Defective | \[Non-Defective\] | | 43 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | Non-Defective | \[Non-Defective\] | | 44 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003322.jpg | Defective | \[Defective\] | | 46 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014306.jpg | Non-Defective | \[Non-Defective\] | # Apply updated labels from Label Studio to final labelsfinal_labels_df = update_final_labels_via_labelstudio(final_labels_df, relabeled_df) # Final labels after we update them with newly relabeled imagesfinal_labels_df.loc[relabeled_df.index] | | image | label | historical\_labels | | --- | --- | --- | --- | | 42 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014842.jpg | Defective | \[Non-Defective, Defective\] | | 43 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_013912.jpg | Defective | \[Non-Defective, Defective\] | | 44 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_003322.jpg | Non-Defective | \[Defective, Non-Defective\] | | 46 | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_To\_Label/IMG\_20210319\_014306.jpg | Defective | \[Non-Defective, Defective\] | You can see that we have new labels for several images that originally were `Non-Defective` (which was incorrect) and are now (correctly) `Defective`. Similarly, we correct images that were supposed to be `Non-Defective` and were not. The `historical_labels` column is also correctly updated for these images. The label that is at the end of this `historical_labels` list is considered the most up-to-date label we are using for the image in the data point. The labels in this list, for each data point, are sorted by least recent label to most recent label of our image in that row. We will update our `metadata` column in Label Studio to remove the flag that images need to be relabeled. You can run the following code to do this: Optional: Helper function to update the relabeling status of all relabeled images def update_tasks_relabeling_status(api_key: str, task_ids: List[int], needs_relabeling: bool) -> None: """ Updates the relabeling status of multiple tasks in Label Studio. Parameters: - api_key (str): The API key for Label Studio. - task_ids (List[int]): A list of task IDs to update. - needs_relabeling (bool): True to mark the tasks as needing relabeling, False to clear the mark. Raises: - Exception: If any request to update a task fails. """ headers = {'Authorization': f'Token {api_key}'} for task_id in task_ids: task_response = requests.get(f'http://localhost:8080/api/tasks/{task_id}/', headers=headers) if task_response.status_code != 200: raise Exception(f"Failed to fetch task {task_id}. Status code: {task_response.status_code}, Response: {task_response.text}") task_data = task_response.json()['data'] if 'metadata' not in task_data or task_data['metadata'] is None: task_data['metadata'] = {} if needs_relabeling: task_data['metadata']['needs_relabeling'] = True else: # Remove the needs_relabeling key if it exists task_data['metadata'].pop('needs_relabeling', None) # If the metadata dictionary is empty, set it to None if not task_data['metadata']: task_data['metadata'] = None update_response = requests.patch(f'http://localhost:8080/api/tasks/{task_id}/', json={'data': task_data}, headers=headers) if update_response.status_code != 200: raise Exception(f"Failed to update task {task_id}. Status code: {update_response.status_code}, Response: {update_response.text}") print(f"All tasks relabeling status updated successfully.") # Remove metadata flag from Label Studio that images need to be relabeled.relabeled_task_ids = list(tasks_to_relabel.keys())update_tasks_relabeling_status(label_studio_api_key, relabeled_task_ids, needs_relabeling=False) All tasks relabeling status updated successfully. Now you can check your project in Label Studio to make sure no images there still have the `needs_relabeling` flag set to `True`. Without doing this step, it will be confusing to know which images you already relabeled and which images you did not relabel. This can otherwise be complex to manage for big datasets. **Note:** For brevity, we did not annotate any more unlabeled data points in Label Studio during this 2nd round of labeling in this tutorial. In practice, you should **also manually label some more of the unlabeled data in this 2nd round using your data annotation platform** (to help Cleanlab’s AI learn not only from label corrections but new labels as well). Round 2: Use Cleanlab Studio for further auto-labeling and label error detection[​](#round-2-use-cleanlab-studio-for-further-auto-labeling-and-label-error-detection "Direct link to Round 2: Use Cleanlab Studio for further auto-labeling and label error detection") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ We will now follow the same process to first properly format our dataset (including both labeled and the rest of the unlabeled images) to ingest the newest version of our data back into Cleanlab Studio. And we will create both a new Cleanlab Studio dataset and project that will be used to auto-label our remaining unlabeled images in our final labels. In this tutorial, we choose to only auto-label the remainder of our data points given the size of the sample being used. In practice, you can try to repeat the process to detect data points that you want to re-label with your data annotation tool **AND** use Cleanlab to auto-label more unlabeled data points as many times as you deem necessary to achieve optimal results for your use case. Each time you label more data / correct existing labels and then launch a Cleanlab Studio project, Cleanlab’s AI will get better at auto-labeling your data and detecting label errors. Let’s create our DataFrame object to ingest into Cleanlab Studio: new_cleanlab_df = final_labels_df.drop("historical_labels", axis=1) Let’s load our new set of currently labeled/unlabeled images into Cleanlab Studio. As mentioned earlier, it’s important to provide your full dataset to get the best results from Cleanlab’s AI. new_dataset_id = studio.upload_dataset(new_cleanlab_df, dataset_name="Round_2_Pepsico_RnD_Potato_Chip_Image_Data_Tutorial", schema_overrides=[{"name": "image", "column_type": "image_external"}])print(f"Dataset ID: {new_dataset_id}") Uploading dataset...: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|Ingesting Dataset...: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|Dataset ID: 720f4800607c4e2892e177d4e2beaa39 Once the new data are loaded, we create a new Project based on this Dataset in Cleanlab Studio. new_project_id = studio.create_project( dataset_id=new_dataset_id, project_name="Round_2_Pepsico_RnD_Potato_Chip_Image_Data_Tutorial_Project", modality="image", task_type="multi-class", model_type="regular", label_column="label",)print( f"Project successfully created and ML training has begun! project_id: {new_project_id}") Project successfully created and ML training has begun! project_id: 84cbb77617e64d9caf1a48ea27722d91 **Note**: the Project will take a while for Cleanlab’s AI models to train on your dataset and analyze it. You’ll receive an email when the results are ready. Run the cell below to fetch the `cleanset_id` from Cleanlab Studio, this code will block until your project results are ready. For big datasets, if your notebook times out, **do not recreate the project**. Instead just re-run the cell below to fetch the `cleanset_id` based on the `project_id` (which you can also find in the Cleanlab Studio Web App). new_cleanset_id = studio.get_latest_cleanset_id(new_project_id)print(f"cleanset_id: {new_cleanset_id}")studio.wait_until_cleanset_ready(new_cleanset_id) cleanset_id: ecde48d5d79a4195ba9ca6e637858239Cleanset Progress: / Step 50/50, Ready for review! Let’s now download the metadata columns from Cleanlab Studio as we did before and see what the columns look like: new_cleanlab_columns_df = studio.download_cleanlab_columns(new_cleanset_id)new_cleanlab_columns_df.head(10) | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | suggested\_label\_confidence\_score | is\_ambiguous | ambiguous\_score | is\_well\_labeled | is\_near\_duplicate | ... | is\_odd\_size | odd\_size\_score | is\_low\_information | low\_information\_score | is\_grayscale | is\_odd\_aspect\_ratio | odd\_aspect\_ratio\_score | aesthetic\_score | is\_NSFW | NSFW\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1 | | False | 0.147065 | | 0.852935 | False | 0.997672 | False | False | ... | False | 0.0 | False | 0.305794 | False | False | 0.0 | 0.532279 | False | 0.041162 | | 1 | 2 | | False | 0.194291 | | 0.805709 | False | 0.999998 | False | False | ... | False | 0.0 | False | 0.314794 | False | False | 0.0 | 0.511932 | False | 0.051039 | | 2 | 3 | | False | 0.144631 | | 0.855369 | False | 0.997418 | False | False | ... | False | 0.0 | False | 0.278744 | False | False | 0.0 | 0.519195 | False | 0.113037 | | 3 | 4 | | False | 0.166404 | | 0.833596 | False | 0.999222 | False | False | ... | False | 0.0 | False | 0.300383 | False | False | 0.0 | 0.479944 | False | 0.054440 | | 4 | 5 | | False | 0.144390 | | 0.855610 | False | 0.997392 | False | False | ... | False | 0.0 | False | 0.330797 | False | False | 0.0 | 0.482801 | False | 0.052081 | | 5 | 6 | | False | 0.161320 | | 0.838680 | False | 0.998895 | False | False | ... | False | 0.0 | False | 0.291288 | False | False | 0.0 | 0.464114 | False | 0.000000 | | 6 | 7 | | True | 0.844409 | Defective | 0.844409 | False | 0.998458 | False | False | ... | False | 0.0 | False | 0.348319 | False | False | 0.0 | 0.552842 | False | 0.137950 | | 7 | 8 | | False | 0.793626 | Defective | 0.793626 | True | 0.999799 | False | False | ... | False | 0.0 | False | 0.328956 | False | False | 0.0 | 0.584307 | False | 0.092091 | | 8 | 9 | | False | 0.297036 | | 0.702964 | False | 0.987958 | False | False | ... | False | 0.0 | False | 0.310666 | False | False | 0.0 | 0.489662 | False | 0.108625 | | 9 | 10 | | False | 0.123683 | | 0.876317 | False | 0.994688 | False | False | ... | False | 0.0 | False | 0.327839 | False | False | 0.0 | 0.525412 | False | 0.110453 | 10 rows × 33 columns Let’s repeat the process of joining our Cleanlab Studio metadata columns with some of our original data columns in order to more easily observe the important columns that Cleanlab Studio generated for us. new_cleanlab_df = new_cleanlab_df.reset_index().rename(columns={'index': 'cleanlab_row_ID'})new_cleanlab_columns_df = new_cleanlab_columns_df.merge(new_cleanlab_df[['cleanlab_row_ID', 'label', 'image']], left_index=True, right_index=True) ### Update final labels DataFrame with our 2nd round of Cleanlab Studio results[​](#update-final-labels-dataframe-with-our-2nd-round-of-cleanlab-studio-results "Direct link to Update final labels DataFrame with our 2nd round of Cleanlab Studio results") With our new Cleanlab Studio results we can now auto-label the remainder of our unlabeled data points and update our final labels object accordingly. As mentioned before, based on some threshold value we set for our `suggested_label_confidence_score` column, we should auto-label (using the `suggested_label` column) any images that are currently unlabeled and that are greater than or equal to this threshold value. In this round, we we only execute the auto-labeling logic in our helper function and not the label error detection logic (to find data points to re-label). In practice, you should repeat both of these steps as many times as you need to accurately label your dataset. In between each Cleanlab Studio project, you should aim to manually label a bit more unlabeled data in your data annotation tool (this will improve Cleanlab’s AI in the subsequent rounds). To keep this tutorial short, we won’t show many rounds of this process, and here only focus on auto-labeling in this 2nd round. We’ll also choose a slightly lower (less conservative) threshold value for `suggested_label_confidence_score` when using our helper function this time around. This illustrates how you can choose different threshold values in different rounds of the labeling process as Cleanlab’s AI improves over multiple rounds. # Obtain updated final labels and newly auto-labeled imagesfinal_labels_df, _, new_auto_labeled_images = update_final_labels_via_cleanlab(final_labels_df, new_cleanlab_columns_df, suggested_label_confidence_score_threshold=0.5, run_auto_labeling_only=True) We’ve updated our final labels and auto-labeled the unlabeled data points that could be confidently handled by Cleanlab’s AI. Let’s see how many unlabeled data points we were able to auto-label: print(new_auto_labeled_images.shape) (25, 36) The number of data points we auto-labeled matches the number of unlabeled data points remaining from the previous round of labeling! Cleanlab’s AI improved so much from our 2nd round of manual annotations that it was able to auto-label all of the remaining unlabeled data. Let’s inspect some images we auto-labeled in this round to review if they were correct. We will see what our `suggested_label` is for 2 of the images we auto-labeled and the `image_shown` column to see what the images actually look like: display_images_in_df(new_auto_labeled_images.head(2)[["is_initially_unlabeled", "image", "label", "suggested_label"]]) | | is\_initially\_unlabeled | image | image\_shown | label | suggested\_label | | --- | --- | --- | --- | --- | --- | | 102 | True | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_004902.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210319_004902.jpg) | None | Defective | | 394 | True | https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label\_Studio\_Tutorial\_Potato\_Chip\_Images\_Unlabeled/IMG\_20210319\_013246.jpg | ![Image](https://s.cleanlab.ai/PepsiCo-Potato-Chip-Images/Label_Studio_Tutorial_Potato_Chip_Images_Unlabeled/IMG_20210319_013246.jpg) | None | Defective | The `suggested_label` values confidently predicted by Cleanlab’s AI are correct for these examples! Here’s how many unlabeled data points remain after this round of auto-labeling: print(final_labels_df["label"].isnull().sum()) 0 We do not have any unlabeled images left, so we have successfully used a 3rd party data annotation tool combined with Cleanlab Studio to label all of our data points! Otherwise you could manually label some more images with your data annotation platform (in a 3rd round), and then run another Cleanlab Studio Project to further improve the auto-labeling of your data. Summary[​](#summary "Direct link to Summary") ---------------------------------------------- This tutorial demonstrated how easily Cleanlab Studio can be used with any 3rd party data annotation tool. By incorporating Cleanlab Studio into our workflow, we only had to manually label 50 data points (plus the 6 relabeled points) in our data annotation tool instead of all 400 data points. The other 350 data points we were able to accurately auto-label using Cleanlab Studio, which is `~88%` of our images, saving time and effort. Cleanlab Studio can scale to massive datasets just as easily, unlocking immense savings. Cleanlab also automatically caught incorrect labels, allowing us to produce a higher-quality dataset. While we focused on image data here, all of this works for text and tabular datasets as well. The same workflow can also be applied in other data annotation applications beyond multi-class classification, such as image/document tagging. We re-emphasize that you can apply this same workflow with any data annotation tool of your choosing (see beginning of tutorial for links to other tools beyond Label Studio). * [Install and import required dependencies](#install-and-import-required-dependencies) * [Prepare the dataset](#prepare-the-dataset) * [Label some of the images with your annotation tool](#label-some-of-the-images-with-your-annotation-tool) * [Format the data for Label Studio](#format-the-data-for-label-studio) * [Label 50 images in Label Studio](#label-50-images-in-label-studio) * [Update final labels DataFrame with labels obtained in our annotation tool](#update-final-labels-dataframe-with-labels-obtained-in-our-annotation-tool) * [Use Cleanlab Studio to catch label errors and auto-label the data that AI can confidently handle](#use-cleanlab-studio-to-catch-label-errors-and-auto-label-the-data-that-ai-can-confidently-handle) * [Review some of the mislabeled images that Cleanlab Studio detected](#review-some-of-the-mislabeled-images-that-cleanlab-studio-detected) * [Review some of the unlabeled images that we want to auto-label](#review-some-of-the-unlabeled-images-that-we-want-to-auto-label) * [Update final labels DataFrame with our Cleanlab Studio results](#update-final-labels-dataframe-with-our-cleanlab-studio-results) * [Round 2: label more images (and re-label those with label errors) in your data annotation tool](#round-2-label-more-images-and-re-label-those-with-label-errors-in-your-data-annotation-tool) * [Clear annotations for images and mark them for relabeling in Label Studio](#clear-annotations-for-images-and-mark-them-for-relabeling-in-label-studio) * [Update final labels DataFrame with our 2nd round of labels obtained via Label Studio](#update-final-labels-dataframe-with-our-2nd-round-of-labels-obtained-via-label-studio) * [Round 2: Use Cleanlab Studio for further auto-labeling and label error detection](#round-2-use-cleanlab-studio-for-further-auto-labeling-and-label-error-detection) * [Update final labels DataFrame with our 2nd round of Cleanlab Studio results](#update-final-labels-dataframe-with-our-2nd-round-of-cleanlab-studio-results) * [Summary](#summary) --- # Automated Data Quality for Large-Scale Image Datasets [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/large_image_datasets.ipynb) In this tutorial, we’ll leverage [Cleanlab Studio](https://app.cleanlab.ai/) to automate data quality improvements on a large scale image dataset. This tutorial uses the ImageNet dataset as an example, but the same methods can easily be applied to your own large scale datasets! For an in depth analysis of Cleanlab Studio’s results on ImageNet, see our accompanying [blog post](https://cleanlab.ai/blog/automated-data-quality-at-scale/) . **Overview of what we’ll do in this tutorial:** * Prep a large image dataset to be analyzed with Cleanlab Studio * Create a Project that automatically runs various data quality checks * Review the results of these quality checks and accordingly make corrections to your dataset * Produce a cleaned version of the dataset ![Issues detected in the Imagenet dataset](/assets/images/imagenet-issues-5a173396c0427cf3749cf4f461d7e83d.jpeg) Install and import required dependencies[​](#install-and-import-required-dependencies "Direct link to Install and import required dependencies") ------------------------------------------------------------------------------------------------------------------------------------------------- You can use `pip` to install all packages required for this tutorial as follows: %pip install boto3 pandas requests tqdm cleanlab-studio from cleanlab_studio import Studiofrom tqdm import tqdmimport boto3import pandas as pdimport pathlibimport requests Optional: Initialize helper methods to render url column of DataFrame as images from IPython.core.display import HTMLdef url_to_img_html(url: str) -> str: return f''def display(df: pd.DataFrame) -> None: return HTML(df.to_html(escape=False, formatters=dict(url=url_to_img_html))) Prep and Upload Dataset[​](#prep-and-upload-dataset "Direct link to Prep and Upload Dataset") ---------------------------------------------------------------------------------------------- Large image datasets are often stored in data lakes like AWS S3 or Google Cloud Storage Buckets. Using Cleanlab Studio’s _externally-hosted media_ format, you can directly analyze images stored in your data lake without having to manually download and upload them to Cleanlab Studio. In this tutorial, we’ll show you how to take images that are hosted in a **public** S3 bucket and format a dataset that you can upload to Cleanlab Studio. ### Prep Data[​](#prep-data "Direct link to Prep Data") We want to create a file that looks like this: id,url,class_id,class_name0,https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n01440764/n01440764_6130.JPEG,n01440764,tench1,https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n01440764/n01440764_18.JPEG,n01440764,tench2,https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n01440764/n01440764_21955.JPEG,n01440764,tench3,https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n01440764/n01440764_10698.JPEG,n01440764,tench You’ll replace the `url` column with public URLs for your own images. If you’re using your own dataset (rather than ImageNet), the `class_id` column is unnecessary and you can replace the `class_name` column with your own label column. Optional: Download raw ImageNet dataset and upload images to S3 **(click to expand)** Step 1: Download and unzip the ImageNet dataset You can download the ImageNet dataset as a torrent from [academic torrents](https://academictorrents.com/details/943977d8c96892d24237638335e481f3ccd54cfb) . To do this, you’ll need to have a Bittorrent client. We recommend `aria2` which can be installed in a terminal as follows: Linux: `sudo apt update && sudo apt install -y aria2` Mac: `brew install aria2` Once you have `aria2` installed, you can download ImageNet using: aria2c https://academictorrents.com/download/c5af268ec55cf2d3b439e7311ad43101ba8322eb.torrent (Warning: this requires around 166GB of disk space) This will download the dataset as a tar.gz file which you can extract in a terminal using: tar -xvf [path to downloaded file] (Warning: this requires an additional 173GB of disk space) You should now have a folder with the following structure: |-- ILSVRC| |-- Annotations| |-- Data| | |-- CLS-LOC| | | |-- train| | | |-- test| | | |-- val| |-- ImageSets For the purposes of this demo, we’ll only be working with the ImageNet training set which can be found in the `ILSVRC/Annotations/Data/CLS-LOC/train` directory Step 2: Upload images to S3 To upload your dataset images to S3, we recommend using `s5cmd` (click [here](https://github.com/peak/s5cmd#overview) for more info and installation instructions). Use the following command to upload your images: s5cmd cp -f ILSVRC/Annotations/Data/CLS-LOC/train/* s3://[your bucket name]/ Make sure the images uploaded to S3 are publicly accessible (you can configure your bucket permissions through the AWS console). For this tutorial we assume you have images in a public S3 bucket organized in the following structure: |-- | |-- | | |-- | | |-- ...| |-- ... We’ll be creating a dataset with “id” (row index), “url” (S3 object URLs for your images), “class\_id” (ImageNet class IDs), and “class\_name” (human readable class names) columns using the following code: First, setup your S3 client and some helper functions to iterate through your images in S3. from typing import Generator# initialize boto3 S3 client# you may need to provide credentials # (as described here https://boto3.amazonaws.com/v1/documentation/api/latest/studio/credentials.html)s3_client = boto3.client("s3")s3_bucket = ""# optional prefix within your S3 bucket where your dataset images are located# set to empty string if your directory structure exactly matches the example # structure in the section aboves3_prefix = "" Optional: Initialize helper methods to iterate through class directories def list_class_directories(bucket: str, prefix: str) -> Generator[str, None, None]: paginator = s3_client.get_paginator("list_objects_v2") result = paginator.paginate(Bucket=bucket, Prefix=prefix, Delimiter="/") for page in result: if "CommonPrefixes" in page: for class_dir in page["CommonPrefixes"]: yield pathlib.Path(class_dir["Prefix"]).namedef list_image_filenames(bucket: str, class_prefix: str) -> Generator[str, None, None]: paginator = s3_client.get_paginator("list_objects_v2") result = paginator.paginate(Bucket=bucket, Prefix=class_prefix) for page in result: if "Contents" in page: for obj in page["Contents"]: yield pathlib.Path(obj["Key"]).name Next, load the mapping we’ve created from ImageNet class IDs to human readable labels. class_id_to_label = requests.get( "https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/class_id_to_label.json").json() Finally, iterate through your images to build your DataFrame. class_dfs = []for class_id in tqdm(list_class_directories(s3_bucket, s3_prefix)): class_name = class_id_to_label[class_id] class_df = pd.DataFrame() s3_class_prefix = str(pathlib.Path(s3_prefix).joinpath(class_id)) class_df["url"] = [ f"https://{s3_bucket}.s3.amazonaws.com/{s3_class_prefix}/{img_filename}" for img_filename in list_image_filenames(s3_bucket, s3_class_prefix) ] class_df["class_id"] = class_id class_df["class_name"] = class_name class_dfs.append(class_df)df = pd.concat(class_dfs, ignore_index=True)# Optional: to get your dataset in the same order as oursdf = df.sort_values(by="class_id", ignore_index=True)df.index.name = "id"df = df.reset_index()# Optional: save dataframe to CSV file (not necessary if uploading via our Python API)df.set_index("id")df.to_csv("imagenet.csv") 1000it [08:39, 1.93it/s] display(df.sample(5)) | | id | url | class\_id | class\_name | | --- | --- | --- | --- | --- | | 1138521 | 1138521 | ![](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n04536866/n04536866_8781.JPEG) | n04536866 | violin | | 171438 | 171438 | ![](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n02009912/n02009912_9169.JPEG) | n02009912 | great egret | | 1067267 | 1067267 | ![](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n04347754/n04347754_85281.JPEG) | n04347754 | submarine | | 951605 | 951605 | ![](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n04005630/n04005630_61649.JPEG) | n04005630 | prison | | 386329 | 386329 | ![](https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/imagenet-1k/n02167151/n02167151_6199.JPEG) | n02167151 | ground beetle | You now have a dataset that’s ready to upload to Cleanlab Studio! ### Upload Dataset[​](#upload-dataset "Direct link to Upload Dataset") This tutorial will focus on using the Python API, but you can also use our [Web UI](https://app.cleanlab.ai) for a no-code option **(click to expand)** If you would like to upload your data without writing code, simply go to [https://app.cleanlab.ai/upload](https://app.cleanlab.ai/upload) and follow these steps: 1. Click “Upload from your computer” 2. Drag & Drop or select the CSV file you saved from the DataFrame you created in the [Prep Data](#prep-data) section 3. Click “Upload” and wait for the file to upload 4. Click “Next” 5. Select “id” as the ID column for your dataset. Leave everything else on the schema editing page as default 6. Click “Confirm” 7. Wait for data ingestion to complete You can upload your dataset to Cleanlab Studio using our Python API with the following code: # you can find your API key by going to app.cleanlab.ai/upload, # clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# initialize studio objectstudio = Studio(API_KEY)# upload datasetdataset_id = studio.upload_dataset(df, dataset_name="ImageNet", schema_overrides=[{"name": "url", "column_type": "image_external"}]) Uploading dataset...: 100%|██████████|Ingesting Dataset...: 100%|██████████| Create a Project[​](#create-a-project "Direct link to Create a Project") ------------------------------------------------------------------------- Creating a project in Cleanlab Studio will automatically run our data quality checks on your dataset. Since ImageNet is a large dataset (with 1.2 million images), it will take a while (around 20 hours) for your project to be ready. [Web UI](https://app.cleanlab.ai) instructions **(click to expand)** To create a project for your dataset, navigate to the [Cleanlab Studio Dashboard](https://app.cleanlab.ai) and follow these steps: 1. Find your dataset in the datasets grid and click the “Create Project” button. 2. Enter a name for your project (you can change this later). 3. Make sure “Image Classification” and “Multi-Class” are selected for the Machine Learning Task and Type of Classification options. 4. Select “class\_name” as your label column. 5. Select “Use a provided model” and “Fast” for the model type. 6. Click “Clean my Data”. Using your `dataset_id` from step 2, you can create a project with one line of code! project_id = studio.create_project( dataset_id, project_name="ImageNet", modality="image", model_type="fast", label_column="class_name") Once you create your project, you’ll need to wait for it to complete before proceeding with this tutorial. You can check your project’s status in the [Cleanlab Studio Dashboard](https://app.cleanlab.ai) or using the Python API. You’ll also receive an email when the project is ready. [Web UI](https://app.cleanlab.ai) instructions **(click to expand)** Navigate to the [Cleanlab Studio Dashboard](https://app.cleanlab.ai) . Find your project in the Projects grid and view it’s status. You can programmatically wait until the project has completed in the Python API using the code below. This may take a _long time_ for big datasets! cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")studio.wait_until_cleanset_ready(cleanset_id) Cleanset Progress: \ Step 5/5, Ready for review! This function will continuously poll for your project status and wait until the project is ready. You can optionally provide a `timeout` parameter after which the function will stop waiting even if the project is not ready. If your Jupyter notebook has timed out during this process, then you can resume work by re-running this cell (which should return instantly if the project has completed training; do not create a new Project). View Your Project and Make Corrections[​](#view-your-project-and-make-corrections "Direct link to View Your Project and Make Corrections") ------------------------------------------------------------------------------------------------------------------------------------------- ### View Your Project[​](#view-your-project "Direct link to View Your Project") Once your project’s ready, you can view the results and make corrections to your dataset! This step is best done through the Web UI. To find your project results, navigate to the [Cleanlab Studio Dashboard](https://app.cleanlab.ai) and click on your project name. You should see a page that looks like this: ![Imagenet Project](/assets/images/imagenet_project_page-df36143b41f8d1fcde1874fabe80d3f3.png) Here you can browse through and view analytics on the [data issues](/studio/concepts/cleanlab_columns/) Cleanlab Studio found in your project, make corrections based on Cleanlab Studio’s suggestions, and eventually export your improved dataset. ### Make Corrections[​](#make-corrections "Direct link to Make Corrections") You can make corrections to your dataset by using the resolver panel on your project page (click any row in the project grid for the resolver to appear). If you would like to make correct multiple datapoints at once, you can use the “Clean Top K” button at the bottom of the project page or select multiple rows in the project grid and apply an action to those rows. For the purposes of this tutorial, try correcting a few labels and excluding some rows from your dataset. See the video below for an example: For a deeper analysis of Cleanlab Studio’s results on ImageNet, read our blog post [here](https://cleanlab.ai/blog/automated-data-quality-at-scale/) Export Your Cleaned Data[​](#export-your-cleaned-data "Direct link to Export Your Cleaned Data") ------------------------------------------------------------------------------------------------- Once you’re happy with the corrections you’ve made to your dataset, you can export your cleaned data through the Web UI (100MB export limit) or Python API. This tutorial will focus on exporting through the Python API since your ImageNet project will be too big to export completely through the Web UI, but we’ve also included instructions for exporting a subset of your data through the Web UI. [Web UI](https://app.cleanlab.ai) instructions **(click to expand)** To export a subset of your data through the Web UI, follow these steps: 1. Navigate to your project page 2. Filter your project, so that a subset of the rows are displayed (i.e. all rows you corrected or all rows with label issues). You should be able to export around 450k rows without exceeding the 100MB Web UI export limit. 3. Click the “Export Cleanset” button at the bottom of the page. 4. Select the “Custom” export configuration. 5. Click “Export”. To export through the Python API, use the following code: # `df` should be the same DataFrame you created to upload your data to Cleanlab Studio# if you did not upload using the Python API, # uncomment out the following code before running `studio.apply_corrections()`# studio = Studio("")# cleanset_id = ""cleaned_df = studio.apply_corrections(cleanset_id, df) You should see that labels you fixed are reflected in the resulting DataFrame. In our project, we corrected the label for row 1026223 from “slot machine” to “vending machine”: # original datasetdisplay(df[df["id"] == 1026223]) | | id | url | class\_id | class\_name | | --- | --- | --- | --- | --- | | 1026223 | 1026223 | ![](https://cleanlab-public.s3.amazonaws.com/StudioTestAssets/Datasets/imagenet-1k/n04243546/n04243546_21009.JPEG) | n04243546 | slot machine | # cleaned datasetdisplay(cleaned_df[cleaned_df["id"] == 1026223]) | | id | url | class\_id | class\_name | | --- | --- | --- | --- | --- | | 1026223 | 1026223 | ![](https://cleanlab-public.s3.amazonaws.com/StudioTestAssets/Datasets/imagenet-1k/n04243546/n04243546_21009.JPEG) | n04243546 | vending machine | We also corrected labels for a few other rows: original = df.set_index("id").loc[ [825275, 722195, 825015, 940053], ["url", "class_name"]]corrected = cleaned_df.set_index("id").loc[ [825275, 722195, 825015, 940053], ["url", "class_name"]]display(original.merge(corrected, on=["id", "url"], suffixes=("", "_corrected"))) | | url | class\_name | class\_name\_corrected | | --- | --- | --- | --- | | id | | | | | --- | --- | --- | --- | | 825275 | ![](https://cleanlab-public.s3.amazonaws.com/StudioTestAssets/Datasets/imagenet-1k/n03724870/n03724870_13435.JPEG) | mask | ski mask | | 722195 | ![](https://cleanlab-public.s3.amazonaws.com/StudioTestAssets/Datasets/imagenet-1k/n03388043/n03388043_10892.JPEG) | fountain | geyser | | 825015 | ![](https://cleanlab-public.s3.amazonaws.com/StudioTestAssets/Datasets/imagenet-1k/n03724870/n03724870_3386.JPEG) | mask | ski mask | | 940053 | ![](https://cleanlab-public.s3.amazonaws.com/StudioTestAssets/Datasets/imagenet-1k/n03976657/n03976657_22445.JPEG) | pole | maypole | You should also see that any rows you excluded are dropped in the resulting DataFrame. In our project, we excluded row 529403 since it was a duplicate of row 1026223. We should that there’s no longer a row with id 529403 in our cleaned dataset: 529403 in cleaned_df["id"] False Congrats! You now have an improved version of the famous ImageNet dataset! (Bonus!) Improve Results by Rerunning Cleanlab[​](#bonus-improve-results-by-rerunning-cleanlab "Direct link to (Bonus!) Improve Results by Rerunning Cleanlab") ---------------------------------------------------------------------------------------------------------------------------------------------------------------- An additional awesome thing about Cleanlab, is that you can rerun Cleanlab on your improved dataset to get even better results! To try this, click the “Improve Results” button at the bottom of your project page. ![Improve Results](/assets/images/improve_results-47331ff53bde7f15fbb8a4b84878abe6.png) * [Install and import required dependencies](#install-and-import-required-dependencies) * [Prep and Upload Dataset](#prep-and-upload-dataset) * [Prep Data](#prep-data) * [Upload Dataset](#upload-dataset) * [Create a Project](#create-a-project) * [View Your Project and Make Corrections](#view-your-project-and-make-corrections) * [View Your Project](#view-your-project) * [Make Corrections](#make-corrections) * [Export Your Cleaned Data](#export-your-cleaned-data) * [(Bonus!) Improve Results by Rerunning Cleanlab](#bonus-improve-results-by-rerunning-cleanlab) --- # Formatting common types of Python text datasets | Cleanlab Documentation [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/format_text_data.ipynb) This tutorial demonstrates how to format text data in various popular Python formats before uploading to [Cleanlab Studio](https://app.cleanlab.ai/) . Each section of the tutorial covers one specific data format and outlines the steps to create a data file that Cleanlab Studio can seamlessly process. In this tutorial, we focus on how to produce a properly formatted data file, not how to run Cleanlab Studio on it – for that refer to our [text data quickstart tutorial](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/) . Recall that Cleanlab Studio can be directly run on text datasets stored in one of the following formats: CSV, JSON, Excel, Pandas DataFrame. The application natively supports many other data formats listed in this [guide](/studio/concepts/datasets/#texttabular) , **refer to it instead if your data are not in one of the formats presented in this tutorial**. This tutorial covers the following Python data formats: * [Huggingface Datasets](#1-huggingface-datasets) * [Tensorflow Datasets](#2-tensorflow-datasets) * [Scikit-learn Datasets](#3-sklearn-datasets) The example below shows how a data file will look after formatting. After formatting, you can directly load the dataset into Cleanlab Studio. ,text,label0,To make her feel threatened,fear1,It might be linked to the trust factor of your friend.,neutral2,"Super, thanks",gratitude3,What does FPTP have to do with the referendum?,confusion Install and import required dependencies[​](#install-and-import-required-dependencies "Direct link to Install and import required dependencies") ------------------------------------------------------------------------------------------------------------------------------------------------- You can use `pip` to install all packages required for this tutorial as follows: %pip install pandas tensorflow-datasets tensorflow datasets scikit-learn import pandas as pd 1\. Huggingface Datasets[​](#1-huggingface-datasets "Direct link to 1. Huggingface Datasets") ---------------------------------------------------------------------------------------------- Here, we load the [Go Emotions](https://huggingface.co/datasets/go_emotions) dataset which consists of Reddit comments (text) labeled for 27 emotion categories (including Neutral). This is a **multi-label classification** dataset, where more than one label can apply to a single text example. For multi-class classification text datasets, you can still use the same workflow outlined below to get a data file for Cleanlab Studio. # Load dataset from the Hubfrom datasets import load_dataset, concatenate_datasetsemotion_dict = load_dataset("go_emotions")emotion_dict For finding issues across splits, we concatenate the splits into one single dataset. emotion_ds = concatenate_datasets(emotion_dict.values())emotion_ds Dataset({features: ['text', 'labels', 'id'],num_rows: 54263}) View few examples from the dataset emotion_ds[:5] {'text': ["My favourite food is anything I didn't have to cook myself.",'Now if he does off himself, everyone will think hes having a laugh screwing with people instead of actually dead','WHY THE FUCK IS BAYLESS ISOING','To make her feel threatened','Dirty Southern Wankers'],'labels': [[27], [27], [2], [14], [3]],'id': ['eebbqej', 'ed00q6i', 'eezlygj', 'ed7ypvh', 'ed0bdzj']} ### Method for formatting Huggingface text dataset[​](#method-for-formatting-huggingface-text-dataset "Direct link to Method for formatting Huggingface text dataset") def format_huggingface_text_dataset( dataset, text_key, label_key, output_csvpath, label_mapping): """Convert a Huggingface text dataset to a Cleanlab Studio file format. dataset: datasets.Dataset HuggingFace text dataset text_key: str column name for text in dataset label_key: str column name for label in dataset label_mapping: Dict[str, int] id to label str mapping If labels are already strings, set label_mapping to None output_csvpath: str filepath to save csv file """ df = dataset.to_pandas() df = df.rename(columns={text_key: "text", label_key: "label"}) # Map integer labels to label strings, for example, 0 -> positive, 1 -> negative if label_mapping: if isinstance(dataset[0][label_key], list): df["label"] = [ ",".join([label_mapping[label_id] for label_id in label_id_list]) for label_id_list in df["label"] ] elif isinstance(dataset[0][label_key], int): df["label"] = [label_mapping[label_id] for label_id in df["label"]] # Save to csv df.to_csv(output_csvpath, index=False) print(f"Saved data file to {output_csvpath}") return # construct mapping from id to label strlabel_str_list = emotion_ds.features["labels"].feature.nameslabel_mapping = {i: name for i, name in enumerate(label_str_list)}print(label_mapping) {0: 'admiration', 1: 'amusement', 2: 'anger', 3: 'annoyance', 4: 'approval', 5: 'caring', 6: 'confusion', 7: 'curiosity', 8: 'desire', 9: 'disappointment', 10: 'disapproval', 11: 'disgust', 12: 'embarrassment', 13: 'excitement', 14: 'fear', 15: 'gratitude', 16: 'grief', 17: 'joy', 18: 'love', 19: 'nervousness', 20: 'optimism', 21: 'pride', 22: 'realization', 23: 'relief', 24: 'remorse', 25: 'sadness', 26: 'surprise', 27: 'neutral'} ### Format the dataset and save to a csv file.[​](#format-the-dataset-and-save-to-a-csv-file "Direct link to Format the dataset and save to a csv file.") format_huggingface_text_dataset( dataset=emotion_ds, text_key="text", label_key="labels", label_mapping=label_mapping, output_csvpath="./emotion.csv",) Let’s view the data file created. pd.read_csv("./emotion.csv").head(5) | | text | label | id | | --- | --- | --- | --- | | 0 | My favourite food is anything I didn't have to... | neutral | eebbqej | | 1 | Now if he does off himself, everyone will thin... | neutral | ed00q6i | | 2 | WHY THE FUCK IS BAYLESS ISOING | anger | eezlygj | | 3 | To make her feel threatened | fear | ed7ypvh | | 4 | Dirty Southern Wankers | annoyance | ed0bdzj | Now you can load the file `./emotion.csv` into Cleanlab Studio, either using the Web Interface or Python API (see [Load Dataset](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/#load-dataset-into-cleanlab-studio) for more details on the latter). 2\. Tensorflow datasets[​](#2-tensorflow-datasets "Direct link to 2. Tensorflow datasets") ------------------------------------------------------------------------------------------- import tensorflow_datasets as tfdsimport tensorflow as tf Here, we load the [IMDB Reviews](https://ai.stanford.edu/~amaas/data/sentiment/) dataset, which contains reviews classified as either positive or negative (**binary classification** data). imdb_reviews, metadata = tfds.load( "imdb_reviews", split="train", with_info=True, as_supervised=True) View few examples from the dataset. tfds.as_dataframe(imdb_reviews.take(5), metadata) | | label | text | | --- | --- | --- | | 0 | 0 (neg) | This was an absolutely terrible movie. Don't be lured in by Christopher Walken or Michael Ironside. Both are great actors, but this must simply be their worst role in history. Even their great acting could not redeem this movie's ridiculous storyline. This movie is an early nineties US propaganda piece. The most pathetic scenes were those when the Columbian rebels were making their cases for revolutions. Maria Conchita Alonso appeared phony, and her pseudo-love affair with Walken was nothing but a pathetic emotional plug in a movie that was devoid of any real meaning. I am disappointed that there are movies like this, ruining actor's like Christopher Walken's good name. I could barely sit through it. | | 1 | 0 (neg) | I have been known to fall asleep during films, but this is usually due to a combination of things including, really tired, being warm and comfortable on the sette and having just eaten a lot. However on this occasion I fell asleep because the film was rubbish. The plot development was constant. Constantly slow and boring. Things seemed to happen, but with no explanation of what was causing them or why. I admit, I may have missed part of the film, but i watched the majority of it and everything just seemed to happen of its own accord without any real concern for anything else. I cant recommend this film at all. | | 2 | 0 (neg) | Mann photographs the Alberta Rocky Mountains in a superb fashion, and Jimmy Stewart and Walter Brennan give enjoyable performances as they always seem to do.

But come on Hollywood - a Mountie telling the people of Dawson City, Yukon to elect themselves a marshal (yes a marshal!) and to enforce the law themselves, then gunfighters battling it out on the streets for control of the town?

Nothing even remotely resembling that happened on the Canadian side of the border during the Klondike gold rush. Mr. Mann and company appear to have mistaken Dawson City for Deadwood, the Canadian North for the American Wild West.

Canadian viewers be prepared for a Reefer Madness type of enjoyable howl with this ludicrous plot, or, to shake your head in disgust. | | 3 | 1 (pos) | This is the kind of film for a snowy Sunday afternoon when the rest of the world can go ahead with its own business as you descend into a big arm-chair and mellow for a couple of hours. Wonderful performances from Cher and Nicolas Cage (as always) gently row the plot along. There are no rapids to cross, no dangerous waters, just a warm and witty paddle through New York life at its best. A family film in every sense and one that deserves the praise it received. | | 4 | 1 (pos) | As others have mentioned, all the women that go nude in this film are mostly absolutely gorgeous. The plot very ably shows the hypocrisy of the female libido. When men are around they want to be pursued, but when no "men" are around, they become the pursuers of a 14 year old boy. And the boy becomes a man really fast (we should all be so lucky at this age!). He then gets up the courage to pursue his true love. | ### Method for formatting Tensorflow text dataset[​](#method-for-formatting-tensorflow-text-dataset "Direct link to Method for formatting Tensorflow text dataset") def format_tensorflow_text_dataset( dataset, metadata, text_key, label_key, output_csvpath, label_mapping): """Convert a Tensorflow text dataset to a Studio file format. dataset: tf.data.Dataset Tensorflow text dataset metadata: tfds.core.DatasetInfo Info associated with dataset text_key: str column name for text in dataset label_key: str column name for label in dataset label_mapping: Dict[str, int] id to label str mapping If labels are already strings, set label_mapping to None output_csvpath: str filepath to save csv file """ df = tfds.as_dataframe(dataset, metadata) # Map integer labels to label strings, for example, 0 -> positive, 1 -> negative if label_mapping: df[label_key] = [label_mapping[label_id] for label_id in df[label_key]] df = df.rename(columns={text_key: "text", label_key: "label"}) # Save to csv df.to_csv(output_csvpath, index=False) print(f"Saved data file to {output_csvpath}") return # construct mapping from id to label strlabel_str_list = metadata.features["label"].nameslabel_mapping = {i: label_str for i, label_str in enumerate(label_str_list)} ### Format the dataset and save to a csv file.[​](#format-the-dataset-and-save-to-a-csv-file-1 "Direct link to Format the dataset and save to a csv file.") format_tensorflow_text_dataset( dataset=imdb_reviews, metadata=metadata, text_key="text", label_key="label", label_mapping=label_mapping, output_csvpath="./imdb_reviews.csv",) Let’s view the data file created. pd.read_csv("./imdb_reviews.csv").head(5) | | label | text | | --- | --- | --- | | 0 | neg | b"This was an absolutely terrible movie. Don't... | | 1 | neg | b'I have been known to fall asleep during film... | | 2 | neg | b'Mann photographs the Alberta Rocky Mountains... | | 3 | pos | b'This is the kind of film for a snowy Sunday ... | | 4 | pos | b'As others have mentioned, all the women that... | Now you can load the file `./imdb_reviews.csv` to Cleanlab Studio, either using the Web Interface or Python API (see [Load Dataset](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/#load-dataset-into-cleanlab-studio) for more details on the latter). 3\. Sklearn datasets[​](#3-sklearn-datasets "Direct link to 3. Sklearn datasets") ---------------------------------------------------------------------------------- ### Install the scikit-learn library[​](#install-the-scikit-learn-library "Direct link to Install the scikit-learn library") pip install -U scikit-learn Here, we load the 20 newsgroups dataset which consists of 18000 newsgroups text posts categorized amongst 20 possible topics, split into train and test sets (**multi-class text classification** dataset). from sklearn.datasets import fetch_20newsgroups# Load the datasetnewsgroups_train = fetch_20newsgroups(subset="train") We can view the text and label from the `data` and `target` attributes of the dataset. Let’s view an example from the dataset and its corresponding label. print(f"Label: {newsgroups_train.target[0]}")print(newsgroups_train.data[0]) Label: 7From: lerxst@wam.umd.edu (where's my thing)Subject: WHAT car is this!?Nntp-Posting-Host: rac3.wam.umd.eduOrganization: University of Maryland, College ParkLines: 15I was wondering if anyone out there could enlighten me on this car I sawthe other day. It was a 2-door sports car, looked to be from the late 60s/early 70s. It was called a Bricklin. The doors were really small. In addition,the front bumper was separate from the rest of the body. This is all I know. If anyone can tellme a model name, engine specs, yearsof production, where this car is made, history, or whatever info youhave on this funky looking car, please e-mail.Thanks,- IL---- brought to you by your neighborhood Lerxst ---- In order to view the label names corresponding to integers, we can use the `target_names` attribute of the dataset object. # View first 5 categoriesnewsgroups_train.target_names[:5] ['alt.atheism','comp.graphics','comp.os.ms-windows.misc','comp.sys.ibm.pc.hardware','comp.sys.mac.hardware'] ### Method for formatting sklearn text dataset[​](#method-for-formatting-sklearn-text-dataset "Direct link to Method for formatting sklearn text dataset") def format_sklearn_text_dataset(dataset, output_csvpath, label_mapping): """Convert a sklearn text dataset to a Studio file format. dataset: sklearn.utils.Bunch sklearn text dataset label_mapping: Dict[str, int] id to label str mapping If labels are already strings, set label_mapping to None output_csvpath: str filepath to save csv file """ # Map integer labels to label strings, for example, 0 -> positive, 1 -> negative if label_mapping: label_col = [label_mapping[label_id] for label_id in dataset.target] else: label_col = dataset.target df = pd.DataFrame({"text": dataset.data, "label": label_col}) # Save to csv df.to_csv(output_csvpath, index=False) print(f"Saved data file to {output_csvpath}") return # construct mapping from id to label strlabel_mapping = { i: labe_str for i, labe_str in enumerate(newsgroups_train.target_names)} ### Format the dataset and save to a csv file.[​](#format-the-dataset-and-save-to-a-csv-file-2 "Direct link to Format the dataset and save to a csv file.") format_sklearn_text_dataset(newsgroups_train, "./newsgroups_train.csv", label_mapping) Let’s view the data file created. pd.read_csv("./newsgroups_train.csv").head(5) | | text | label | | --- | --- | --- | | 0 | From: lerxst@wam.umd.edu (where's my thing)\\nS... | rec.autos | | 1 | From: guykuo@carson.u.washington.edu (Guy Kuo)... | comp.sys.mac.hardware | | 2 | From: twillis@ec.ecn.purdue.edu (Thomas E Will... | comp.sys.mac.hardware | | 3 | From: jgreen@amber (Joe Green)\\nSubject: Re: W... | comp.graphics | | 4 | From: jcm@head-cfa.harvard.edu (Jonathan McDow... | sci.space | Now you can load the file `./newsgroups_train.csv` to Cleanlab Studio, either using the Web Interface or Python API (see [Load Dataset](/studio/tutorials/cleanlab-studio-api/text_data_quickstart/#load-dataset-into-cleanlab-studio) for more details on the latter). * [Install and import required dependencies](#install-and-import-required-dependencies) * [1\. Huggingface Datasets](#1-huggingface-datasets) * [Method for formatting Huggingface text dataset](#method-for-formatting-huggingface-text-dataset) * [Format the dataset and save to a csv file.](#format-the-dataset-and-save-to-a-csv-file) * [2\. Tensorflow datasets](#2-tensorflow-datasets) * [Method for formatting Tensorflow text dataset](#method-for-formatting-tensorflow-text-dataset) * [Format the dataset and save to a csv file.](#format-the-dataset-and-save-to-a-csv-file-1) * [3\. Sklearn datasets](#3-sklearn-datasets) * [Install the scikit-learn library](#install-the-scikit-learn-library) * [Method for formatting sklearn text dataset](#method-for-formatting-sklearn-text-dataset) * [Format the dataset and save to a csv file.](#format-the-dataset-and-save-to-a-csv-file-2) --- # Detecting Issues in Named Entity Recognition Datasets [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/named_entity_recognition.ipynb) In this tutorial, we’ll use Cleanlab Studio to automatically find label errors and other issues in Named Entity Recognition (NER) data. Label issues in NER datasets encompass problems like incorrect class labels, inconsistent choices across different data annotators, incorrect entity boundary labeling, ambiguity in entity types (multiple types might appear reasonable), entities overlooked by annotators, etc. Identifying and resolving these annotation problems and other data issues is essential for producing a high-quality dataset that can be used to train reliable NER models. ![Thumbnail showing NER errors.](/assets/images/thumbnail-6b82bd8ea283d8c38afe9d082b2e2470.jpg) This tutorial considers the popular CONLL-2003 Named Entity Recognition dataset that contains labeled examples of entities in text classified into categories such as persons, organizations, and locations. You can replace this dataset with your own NER data as long as you transform it into the format described in the [Download and Prepare Raw Dataset](#download-and-prepare-raw-dataset) section. (Note: this tutorial requires that you’ve created a [Cleanlab](https://app.cleanlab.ai/) account) Install and import required dependencies[​](#install-and-import-required-dependencies "Direct link to Install and import required dependencies") ------------------------------------------------------------------------------------------------------------------------------------------------- You can use `pip` to install all packages required for this tutorial as follows: %pip install "cleanlab[datalab]" cleanlab-studio from cleanlab_studio import Studiofrom cleanlab.internal.token_classification_utils import get_sentence, filter_sentence, process_token, mapping, merge_probsimport osfrom datasets import load_datasetfrom ast import literal_evalimport numpy as npimport pandas as pdpd.set_option('display.max_colwidth', None) # you can find your Cleanlab Studio API key by going to app.cleanlab.ai/upload, # clicking "Upload via Python API", and copying the API key thereAPI_KEY = "" Download and Prepare Raw Dataset[​](#download-and-prepare-raw-dataset "Direct link to Download and Prepare Raw Dataset") ------------------------------------------------------------------------------------------------------------------------- We download the CONLL-2003 dataset into a `data/` directory. This tutorial analyzes CONLL-2003 but you can use any dataset as long as it is either: stored in a similar format on your local machine as this CONLL-2003 dataset, or it is available via the Hugging Face datasets bank in a similar format to the [TNER\_huggingface](https://huggingface.co/datasets/tner/bionlp2004) dataset. **This tutorial focuses on using CONLL-2003 data which we download below**. To run this notebook on your own entity recognition dataset, first convert it to the CONLL-2003 format. wget -nc https://data.deepai.org/conll2003.zip && mkdir -p data unzip conll2003.zip -d data/ && rm conll2003.zip ### Accepted Local Format[​](#accepted-local-format "Direct link to Accepted Local Format") This notebook will also run with a dataset that is stored locally. For local datasets, they need to be in a format similar to the CONLL-2003 data. CONLL-2003 data are in the following format: `-DOCSTART- -X- -X- O` `[word] [pos_tags] [chunk_tags] [ner_tags]` ← Start of first sentence `...` `[word] [pos_tags] [chunk_tags] [ner_tags]` `[empty line]` `[word] [pos_tags] [chunk_tags] [ner_tags]` ← Start of second sentence `...` `[word] [pos_tags] [chunk_tags] [ner_tags]` The `ner_tags` (named-entity recognition tags) are stored in the IOB2 format. CONLL-2003 includes the classes detailed below however custom `ner_tags` are also accepted. | `ner_tags` | Description | | --- | --- | | `O` | Other (not a named entity) | | `B-MIS` | Beginning of a miscellaneous entity | | `I-MIS` | Miscellaneous entity | | `B-PER` | Beginning of a person entity | | `I-PER` | Person entity | | `B-ORG` | Beginning of an organization entity | | `I-ORG` | Organization entity | | `B-LOC` | Beginning of a location entity | | `I-LOC` | Location entity | For more information, see [here](https://paperswithcode.com/dataset/conll-2003) . For all local datasets, we cast all-caps words into lowercase except for the first character (eg. `JAPAN` -> `Japan`), to discourage the tokenizer from breaking such words into multiple subwords. If you are working with **data in similar format to CONLL-2003**, set the `dataset_path` variable to either a single filepath or a list of all filepaths you want to upload to Cleanlab Studio. ### Accepted Hugging Face format[​](#accepted-hugging-face-format "Direct link to Accepted Hugging Face format") Beyond running Cleanlab Studio on a locally-stored NER dataset in the CONLL-2003 format, you can also use a dataset stored in the Hugging Face datasets repository in TNER format. The [TNER](https://huggingface.co/tner) Organization hosts models and common datasets for T-NER, which is a python tool for language model fine-tuning on NER data. An example format of one dataset is below. Here each example is made up of a list of `tokens` alongside a list of their respective named entity `tags` where for the `i`\-th example, `tokens[i][j]` is the `j`\-th token in the sentence with tag `tags[i][j]`. ![Hugging Face TNER Format](/assets/images/tner_huggingface-30e669a245cc753975df5c2694bb7cb9.png) To **upload your own dataset in TNER format**, format each example into `token` and `tag` lists and then follow the instructions [here](https://huggingface.co/docs/datasets/upload_dataset) then set the `dataset_path` variable to your dataset\_repository/dataset\_name or choose one of the datasets already provided by the organization. ### Reformatting Named Entity Recognition Data[​](#reformatting-named-entity-recognition-data "Direct link to Reformatting Named Entity Recognition Data") Occasionally, you may find improved performance in modifying the original Named Entities within a dataset before using Cleanlab Studio. This could involve consolidating ‘beginning’ and ‘continuation’ tags into a single named entity tag or eliminating specific word/tag combinations. To address this, we’ve introduced the `reformat_ner_data()` function below. This function accepts a list of filepaths _in accepted local format_ and a dictionary that defines the desired transformations, and it generates new _files in accepted format_ with the transformed tags. To utilize this function, create a `transformation_map` dictionary. Each dictionary key represents a named entity in your dataset, and its corresponding value defines the desired transformation. When multiple keys share the same value, these entities will be merged in the resulting files. If a specific key has a value of ‘nan’, the corresponding tokens will be omitted from sentences in the new files. Below is an example that demonstrates how to define transformations using the `transformation_map` for the CONLL-2003 example dataset. transformation_map = { "O": "nan", "B-MISC": "nan", "I-MISC": "nan", "B-PER": "has_person", "I-PER": "has_person", "B-ORG": "has_organization", "I-ORG": "has_organization", "B-LOC": "has_location", "I-LOC": "has_location",} This `transfomation_map` lists all the Named Entities found in the data as keys `['O', 'B-MISC', 'I-MISC', 'B-PER', 'I-PER', 'B-ORG', 'I-ORG', 'B-LOC', 'I-LOC']`. The tokens marked as “O”, “B-MISC” and “I-MISC” are omitted from each sequence since these keys have `nan` set as their value. Entities marked as “B-PER” and “I-PER” are now marked as the same tag “has\_person”. A similar union happens to “B-ORG” and “I-ORG”, which are united under “has\_organization” and “B-LOC” and “I-LOC”, which become “has\_location”. Basically we are saying our analysis only cares about the following entities: “person”, “organization”, “location”. By passing this dictionary into the `reformat_ner_data(filepath, transformation_map)` function defined below, along with the desired `filepath` of the files you wish to transform, a new files featuring the updated entities will be generated. In the example below, you can locate the reformatted file at `'./data/transform_train.txt'` or at a location defined by the optional parameter `new_filepath`. filepath = './data/train.txt'dataset_path = reformat_ner_data(filepath, transformation_map) To reformat a dataset stored in the Hugging Face datasets repository, iterate through the examples and replace tags with their respective alternative in the `transform_data_entity_map`. Omit tags mapped to `nan`. Afterwards, upload the new dataset to Hugging Face and continue with the rest of the tutorial. Optional: Define helper methods for formatting and analyzing NER data with Cleanlab def reformat_ner_data( filepath, transformed_filepath_dic, new_filepath=None, overwrite=False, sep=" "): """Reformats data stored locally in the CONLL-2003 format using `transformed_filepath_dic`. Creates new data files with applied transformations and returns their names. If overwrite is set to True and new_filepath points to an already existing file, then data files are overwritten instead of created. Parameters ---------- filepath: str Path pointing to local file in CONLL-2003 format. transformed_filepath_dic: dict Transformation dictionary where each key represents a named entity in your dataset, and its corresponding value is a str of the desired transformation. If value is "nan", tokens with key are not included in the new file. new_filepath: str New filepath which the transformed data will be saved into. overwrite: bool If False, will throw error when attempting to overwrite an existing file. If set to True, data will be overwritten with a warning. sep: str Seperator between each type of tag. Returns -------- new_filepath: str Location of the reformatted file. """ ignored_labels = [key for key, value in transformed_filepath_dic.items() if value == "nan"] if new_filepath is None: split = filepath.split("/") new_filepath = "/".join(split[:-1] + ["transform_" + split[-1]]) if os.path.exists(new_filepath): if overwrite: print( f"Warning: File {new_filepath} already exists, overwriting existing file with reformatted data. " ) else: print( f"Error: File {new_filepath} already exists, cannot overwrite existing file. Either set overwrite=True or provide a path to a new file." ) with open(filepath) as lines, open(new_filepath, "w") as new_file: data, sentence, label = [], [], [] for line in lines: if len(line) == 0 or line.startswith("-DOCSTART") or line[0] == "\n": new_file.write(line) continue splits = line.split(sep) label = splits[-1][:-1] if ( label in ignored_labels ): # Ignore NEs that are marked as "nan" in transformed_filepath_dic continue splits[-1] = transformed_filepath_dic[label] + splits[-1][-1] new_line = sep.join(splits) new_file.write(new_line) return new_filepathdef read_from_huggingface(dataset_path): """Reads Hugging Face dataset from dataset bank at dataset_path. Data should be in same format as data in TNER dataset bank.""" dataset = load_dataset(dataset_path) data_instances = dataset.keys() if isinstance(data_instances, str): data_instances = [data_instances] given_words = [] given_labels = [] for instance in data_instances: instance_dataset = dataset[instance] given_words.extend(dataset[instance]["tokens"]) given_labels.extend(dataset[instance]["tags"]) return given_words, given_labelsdef read_local_data(filepath, sep=" "): """Reads local data that is in a format like the CONLL-2003 dataset from a single string filepath or a list of local files.""" # This code is adapted from: https://github.com/kamalkraj/BERT-NER/blob/dev/run_ner.py lines = open(filepath) data, sentence, label = [], [], [] for line in lines: if len(line) == 0 or line.startswith("-DOCSTART") or line[0] == "\n": if len(sentence) > 0: data.append((sentence, label)) sentence, label = [], [] continue splits = line.split(sep) word = splits[0] if len(word) > 0 and word[0].isalpha() and word.isupper(): word = word[0] + word[1:].lower() sentence.append(word) label.append(splits[-1][:-1]) if len(sentence) > 0: data.append((sentence, label)) given_words = [d[0] for d in data] given_labels = [d[1] for d in data] return given_words, given_labelsdef read_ner_data(dataset_path, format): """Function that takes in NER data and returns an array of given words and given labels for each example. Compatible with "conll2003_like" and "from_huggingface" formats. """ if format == "conll2003_like": if isinstance(dataset_path, str): dataset_path = [dataset_path] given_words, given_labels = [], [] for data in dataset_path: words, labels = read_local_data(data, sep=" ") given_words.extend(words) given_labels.extend(labels) elif format == "from_huggingface": given_words, given_label = read_from_huggingface(dataset_path) else: print( f"Error. format=={format} is not a supported as a NER data format at this time. Supported formats: [conll2003_like, from_huggingface]." ) return None ner_df = create_ner_df(given_words, given_labels) return ner_dfdef create_ner_df(given_words, given_labels): """Transforms NER given_words and given_labels into a format required by Studio.""" sentences = list(map(get_sentence, given_words)) sentences, mask = filter_sentence(sentences) given_words = [words for m, words in zip(mask, given_words) if m] given_labels = [labels for m, labels in zip(mask, given_labels) if m] unique_labels = [list(np.unique(label)) for label in given_labels] labels = [",".join(str(k) for k in label) for label in unique_labels] id = range(len(labels)) ner_df = pd.DataFrame([id, sentences, given_labels, labels]).transpose() ner_df.columns = ["id", "tokens", "tags", "tag_sets"] ner_df["tags"] = ner_df["tags"].astype(str) return ner_dfdef get_suggested_labels(cleanlab_cols): """Returns suggested labels as a list of labels for each example provided by cleanlab_cols.""" suggested_labels = cleanlab_cols["suggested_label"] suggested_labels = [label.split(",") for label in suggested_labels] return suggested_labelsdef get_issue_df(ner_df, cleanlab_cols): """Returns NER results in a dataframe containing original labels, cleanlab_cols and "issue_details" column which summarizes NER issues found in each example. """ cleanlab_issue_col_names = [ "cleanlab_row_ID", "is_label_issue", "label_issue_score", "is_well_labeled", "is_near_duplicate", "near_duplicate_score", "near_duplicate_cluster_id", "is_ambiguous", "ambiguous_score", ] df_suggested_given = ner_df[["id", "tag_sets"]].merge( cleanlab_cols[["suggested_label"]], how="right", left_index=True, right_index=True ) suggested_labels = df_suggested_given["suggested_label"] suggested_labels = [label.split(",") for label in suggested_labels] given_labels = [tag.split(",") for tag in df_suggested_given["tag_sets"]] suggested_but_not_given = [ np.setdiff1d(suggested, given).tolist() for given, suggested in zip(given_labels, suggested_labels) ] given_but_not_suggested = [ np.setdiff1d(given, suggested).tolist() for given, suggested in zip(given_labels, suggested_labels) ] ne_issue_column = [] for suggested, given, is_issue in zip( suggested_but_not_given, given_but_not_suggested, cleanlab_cols["is_label_issue"] ): issue_detail = "" if not is_issue: issue_detail = np.nan elif len(suggested) == 0 and len(given) == 0: issue_detail = "This sentence contains a label issue with one or more named entities." else: issue_detail = "" if len(suggested) > 0: issue_detail += ( "Possible named entitiy tags that are missing: " + ",".join(suggested) + ". " ) if len(given) > 0: issue_detail += ( "Possible named entities tags that are incorrectly present: " + ",".join(given) + ". " ) ne_issue_column.append(issue_detail) issue_df = cleanlab_cols[cleanlab_issue_col_names] issue_df.insert(1, "issue_details", ne_issue_column) return issue_df Load Data into Cleanlab Studio[​](#load-data-into-cleanlab-studio "Direct link to Load Data into Cleanlab Studio") ------------------------------------------------------------------------------------------------------------------- Once we have our data in an acceptable format, we can use the helper function `upload_ner_data()` to upload our dataset into Cleanlab Studio. The function returns the `dataset_id` which we will need for the following step to start a project. It takes in the following arguments: * **api\_key**: Your Cleanlab Studio API key which you can find by going to app.cleanlab.ai/upload, clicking “Upload via Python API”, and copying the API key there * **dataset\_path**: The location of the dataset you want to run Named Entity Recognition on. If this data is in “from\_huggingface” data format then `dataset_path` should be the Hugging Face hub data path. If data is in “conll2003\_like” format, then the path can be a single local file or list of local file paths. * **data\_format**: Expected format of NER data to be read in. Acceptable formats are described in the [Download and Prepare Raw Dataset](#download-and-prepare-raw-dataset) section above. * **dataset\_name (optional)**: Name for your dataset in Cleanlab Studio. def upload_ner_data( api_key, dataset_path, data_format, dataset_name="NER_tutorial_example_dataset",): """Uploads dataset from dataset_path to Cleanlab Studio and returns the dataset_id. Parameters ---------- api_key: str Cleanlab Studio API key. dataset_path: str, list Location of dataset (either local path or name of the dataset in hugging face). data_format: str Expected format of NER data to be read in. Acceptable formats: {"conll2003_like", "from_huggingface"}. dataset_name: str Name for your dataset in Cleanlab Studio. Returns -------- dataset_id: str Cleanlab Studio ID of the uploaded dataset. """ # Start Cleanlab Studio studio = Studio(api_key) # Upload Data to Studio ner_df = read_ner_data(dataset_path, format=data_format) display(ner_df.head()) dataset_id = studio.upload_dataset(ner_df, dataset_name=dataset_name) return dataset_id For our example, let’s transform the beginning and continuation named entity tags into single tags `has_[entity]` because we are interested in detecting annotation errors at the entity-level not with respect to beginning vs. continuation subcategories. Let’s also group all miscellaneous entities together under `has_other` using `reformat_ner_data()` as described in [Reformatting Named Entity Recognition Data](#reformatting-named-entity-recognition-data) . In your data, similarly group the entities that you are not interested in distinguishing between to avoid seeing a bunch of Cleanlab outputs related to trivial distinctions between entities within the same group. We then pass in our API key and transformed filepaths into `upload_ner_data()` to upload the dataset to Cleanlab Studio. filepaths = [ "./data/train.txt", "./data/valid.txt", "./data/test.txt",] # test with multiple filepathstransform_data_entity_map = { "O": "has_other", "B-MISC": "has_other", "I-MISC": "has_other", "B-PER": "has_person", "I-PER": "has_person", "B-ORG": "has_organization", "I-ORG": "has_organization", "B-LOC": "has_location", "I-LOC": "has_location",}dataset_path = [ reformat_ner_data(filepath, transform_data_entity_map, overwrite=True) for filepath in filepaths]data_format = "conll2003_like" # Change this to from_huggingface if dataset_path points to a huggingface dataset.print(f"data_format: {data_format}\ndataset_path: {dataset_path}") dataset_id = upload_ner_data(api_key=API_KEY, dataset_path=dataset_path, data_format=data_format)print(f"Uploaded dataset_id: {dataset_id}") | | id | tokens | tags | tag\_sets | | --- | --- | --- | --- | --- | | 0 | 0 | Eu rejects German call to boycott British lamb. | \['has\_organization', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other'\] | has\_organization,has\_other | | 1 | 1 | Peter Blackburn | \['has\_person', 'has\_person'\] | has\_person | | 2 | 2 | Brussels 1996-08-22 | \['has\_location', 'has\_other'\] | has\_location,has\_other | | 3 | 3 | The European Commission said on Thursday it disagreed with German advice to consumers to shun British lamb until scientists determine whether mad cow disease can be transmitted to sheep. | \['has\_other', 'has\_organization', 'has\_organization', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other'\] | has\_organization,has\_other | | 4 | 4 | Germany's representative to the European Union's veterinary committee Werner Zwingmann said on Wednesday consumers should buy sheepmeat from countries other than Britain until the scientific advice was clearer. | \['has\_location', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_organization', 'has\_organization', 'has\_other', 'has\_other', 'has\_other', 'has\_person', 'has\_person', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_location', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other', 'has\_other'\] | has\_location,has\_organization,has\_other,has\_person | Train Model to Analyze the CONLL-2003 Data[​](#train-model-to-analyze-the-conll-2003-data "Direct link to Train Model to Analyze the CONLL-2003 Data") ------------------------------------------------------------------------------------------------------------------------------------------------------- Once we have our data in an acceptable format, we can launch a Project in Cleanlab Studio. A Project automatically trains ML models that analyze the data for various issues, which takes some time to complete. To launch a Project, use the `launch_ner_project()` function, which takes in the following arguments: * **api\_key**: Your Cleanlab Studio API key which you can find by going to app.cleanlab.ai/upload, clicking “Upload via Python API”, and copying the API key there. * **dataset\_id**: Cleanlab Studio ID of a dataset uploaded using `upload_ner_data()` * **project\_name (optional)**: Name for resulting project. * **model\_type (optional)**: Type of model to train (either ‘fast’ or ‘regular’). Cleanlab Studio’s analysis of your dataset is based on training a ML model. A fast model may train quicker but give inferior results. If argument is not specified, a regular model is trained to return the best results. def launch_ner_project( api_key, dataset_id, project_name="NER_tutorial_example_project", model_type="regular"): """Creates project and begins training in Cleanlab Studio with dataset provided in dataset_id. Parameters ---------- api_key: str Cleanlab Studio API key. dataset_id: str Cleanlab Studio ID of an uploaded dataset. project_name: str Name for project in Cleanlab Studio. If no name is provided, the project is titled "NER_tutorial_example_project". model_type: str Type of model to train (fast or regular). Returns -------- project_id: str Cleanlab Studio ID of created project. """ # Start Cleanlab Studio studio = Studio(api_key) project_id = studio.create_project( dataset_id, project_name=project_name, modality="text", task_type="multi-label", model_type=model_type, label_column="tag_sets", text_column="tokens", ) return project_id project_id = launch_ner_project(API_KEY, dataset_id)print(f"Project successfully created and training has begun! project_id: {project_id}") Once the Project has been launched successfully and you see your `project_id` you can feel free to close this notebook. It will take some time for Cleanlab’s AI to train on your data and analyze it. Come back after training is complete (you’ll get an email) and continue with the notebook to review your results. You should only execute the above cell once per dataset. After launching the Project, you can poll for its status to programmatically wait until the results are ready for review as done below. You can optionally provide a `timeout` parameter after which the function will stop waiting even if the project is not ready. **Warning:** This next cell may take a long time to execute for big datasets. studio = Studio(API_KEY)cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")studio.wait_until_cleanset_ready(cleanset_id) If your Jupyter notebook has timed out during this process, then you can resume work by re-running the cell (which should return instantly if the project has completed; **do not** create a new Project). After notebook timeout: you’d also need to re-run the starting cells up to the _Initialize Helper Methods_ section. Finally, redefine `dataset_path` and `data_format` as they are printed above. If you applied any reformatting to your data using `reformat_ner_data()` you should pass in the updated `dataset_path` pointing to these reformatted files (or apply the same transformations again to the original data). **Do not** create a new Project though! Results of the Data Analysis[​](#results-of-the-data-analysis "Direct link to Results of the Data Analysis") ------------------------------------------------------------------------------------------------------------- Once it is ready, you can optionally go view your Project via the [web interface](https://app.cleanlab.ai/) to explore the results interactively. Identifying and analyzing examples with label issues is essential for improving dataset quality and training reliable NER models. Here we proceed programmatically via the `issues_df` returned by Cleanlab Studio, which lists automatically detected issues in our entity recognition dataset. def get_ner_results(api_key, cleanset_id, dataset_path, data_format): """Takes in cleanset_id and original data and returns DataFrame of issues detected in the dataset. The rows of this DataFrame correspond to same ordering of text examples in your original dataset. Parameters ---------- api_key: str Cleanlab Studio API key. cleanset_id: str Cleanlab Studio ID of completed project. dataset_path: str Location of dataset (either local path or name of the dataset in hugging face). data_format: str Expected format of NER data to be read in. Acceptable formats: {"conll2003_like", "from_huggingface"}. Returns -------- issue_df: pd.DataFrame Dataframe containing original labels, cleanlab_cols and "issue_details" column which summarizes NER issues found in each example. """ # Start Cleanlab Studio studio = Studio(api_key) # Get Cleanlab Studio results cleanlab_cols = studio.download_cleanlab_columns(cleanset_id) # Create an issue df reporting results for NER using Cleanlab ner_df = read_ner_data(dataset_path, format=data_format) issue_df = get_issue_df(ner_df, cleanlab_cols) # Add original columns for readability issue_df = ner_df[["id", "tokens", "tags"]].merge( issue_df, how="right", left_index=True, right_index=True ) issue_df["tags"] = issue_df["tags"].apply(literal_eval) return issue_df We want to review the examples most likely annotated with an incorrect set of named entity tags. To do so, we sort the `issue_df` DataFrame by `label_issue_score` (descending). The top resulting examples (with the highest label issue scores) are the ones Cleanlab estimates are most likely mislabeled in the original dataset. For your own dataset, you should review these examples and consider correcting their labels. You can also see which data suffers from other types of issues by sorting `issue_df` based on other issue scores (such as the `ambiguous_score` to see the most confusing examples). Each issue score indicates the severity of the issue, where higher values indicate problems worthy of your attention. CLEANSET_ID = "" # We used the ID of the project trained aboveissue_df = get_ner_results( API_KEY, cleanset_id, dataset_path, "conll2003_like") # Alternatively, pass in CLEANSET_IDissue_df = issue_df.sort_values(by=["label_issue_score"], ascending=False)issue_df.head() | | id | tokens | tags | cleanlab\_row\_ID | issue\_details | is\_label\_issue | label\_issue\_score | is\_well\_labeled | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_ambiguous | ambiguous\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 9072 | 9072 | Sao Paulo 1996-08-27 | \[has\_person, has\_person, has\_other\] | 9073 | Possible named entitiy tags that are missing: has\_location. Possible named entities tags that are incorrectly present: has\_person. | True | 0.959718 | False | True | 1.000000 | 859 | False | 0.558464 | | 13237 | 13237 | Denver 1996-08-29 | \[has\_person, has\_other\] | 13238 | Possible named entitiy tags that are missing: has\_location. Possible named entities tags that are incorrectly present: has\_person. | True | 0.958938 | False | False | 0.876708 | | False | 0.563274 | | 15769 | 15769 | pakistan | \[has\_other\] | 15770 | Possible named entitiy tags that are missing: has\_location. Possible named entities tags that are incorrectly present: has\_other. | True | 0.958618 | False | True | 0.999996 | 830 | False | 0.726484 | | 18727 | 18727 | Santiago 1996-12-05 | \[has\_person, has\_other\] | 18728 | Possible named entitiy tags that are missing: has\_location. Possible named entities tags that are incorrectly present: has\_person. | True | 0.955143 | False | False | 0.442889 | | False | 0.483547 | | 9112 | 9112 | Sao Paulo 1996-08-27 | \[has\_person, has\_person, has\_other\] | 9113 | Possible named entitiy tags that are missing: has\_location. Possible named entities tags that are incorrectly present: has\_person. | True | 0.954981 | False | True | 1.000000 | 859 | False | 0.557956 | Lets take a closer look at the most likely label issue, example `id=18378` below. We can see the original tokens are “Prince Rupert 1 3” while their original tags are `[has_location, has_location, has_other, has_other]`. We know this example is an issue since the `is_label_issue` boolean is true and the example’s `label_issue_score` is close to 1. Column `issue_details` will tell us more details on which tags Cleanlab Studio believes contribute to the example being marked a label issue. Here Cleanlab Studio suggests that possible named entity tags that are incorrectly present in the tokens are `has_location` while tags that are missing from the tokens are `has_organization` and `has_person`. Tokens “Prince Rupert” pretty clearly represent a person however they were originally marked as `has_location`. With the help of `issue_details` we can confirm that `has_location` is incorrectly present in the tags. Instead, it should be replaced with one of the missing tokens: `has_person`. issue_df.iloc[0:1] | | id | tokens | tags | cleanlab\_row\_ID | issue\_details | is\_label\_issue | label\_issue\_score | is\_well\_labeled | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_ambiguous | ambiguous\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 9072 | 9072 | Sao Paulo 1996-08-27 | \[has\_person, has\_person, has\_other\] | 9073 | Possible named entitiy tags that are missing: has\_location. Possible named entities tags that are incorrectly present: has\_person. | True | 0.959718 | False | True | 1.0 | 859 | False | 0.558464 | ### Learn more about the dataset[​](#learn-more-about-the-dataset "Direct link to Learn more about the dataset") In addition to using Cleanlab Studio to detect label errors, we can also identify examples that are: _well labeled_ or _ambiguous_. This information provides additional insights about our data annotations. Examples marked as **well labeled** are accurately annotated (with great confidence according to Cleanlab’s AI) and do not require extra review from human annotators. These instances are indicated by `True` in the `is_well_labeled` column. Given the prevalence of label issues in this dataset, auto-marking examples as “well labeled” is exercised with caution, resulting in no instances here. print( "Number of well labeled examples in dataset: ", issue_df[issue_df["is_well_labeled"] == True].shape[0],) Number of well labeled examples in dataset: 0 issue_df[issue_df["is_well_labeled"] == True] | | id | tokens | tags | cleanlab\_row\_ID | issue\_details | is\_label\_issue | label\_issue\_score | is\_well\_labeled | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_ambiguous | ambiguous\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | Cleanlab Studio can also auto-detect which examples are **ambiguous**. These are examples that seemingly _may or may not_ contain the given tags, it will be hard for your data annotators to decide correctly without precise instructions on how to handle such cases (different annotators may disagree). In this dataset, there are 68 examples judged to be ambiguous. Looking at one of the examples with a high ambiguity score, we can guess that the token “Karlsruhe” is a city in Germany but could also represent a team name or an individual player. Without additional context, annotators may struggle between choosing `has_organization`, `has_location` and `has_person`. Despite being ambiguous, this example is not considered a label issue. This is a common as ambiguous examples may be correctly labeled but still confusing and worthy of note. ambiguous_df = issue_df[issue_df["is_ambiguous"] == True]print("Number of ambiguous examples in dataset: ", ambiguous_df.shape[0]) Number of ambiguous examples in dataset: 68 # sort by ambiguous score (most ambiguous first)ambiguous_df = ambiguous_df.sort_values(by="ambiguous_score", ascending=False)ambiguous_df.iloc[[10]] | | id | tokens | tags | cleanlab\_row\_ID | issue\_details | is\_label\_issue | label\_issue\_score | is\_well\_labeled | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_ambiguous | ambiguous\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 14586 | 14586 | Karlsruhe won the August 20 match 3-1 thanks to two late goals. | \[has\_organization, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other, has\_other\] | 14587 | NaN | False | 0.446649 | False | False | 0.1052 | | True | 0.999984 | * [Install and import required dependencies](#install-and-import-required-dependencies) * [Download and Prepare Raw Dataset](#download-and-prepare-raw-dataset) * [Accepted Local Format](#accepted-local-format) * [Accepted Hugging Face format](#accepted-hugging-face-format) * [Reformatting Named Entity Recognition Data](#reformatting-named-entity-recognition-data) * [Load Data into Cleanlab Studio](#load-data-into-cleanlab-studio) * [Train Model to Analyze the CONLL-2003 Data](#train-model-to-analyze-the-conll-2003-data) * [Results of the Data Analysis](#results-of-the-data-analysis) * [Learn more about the dataset](#learn-more-about-the-dataset) --- # Automatically Detect Erroneous Values in Numerical Data via AI [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/regression.ipynb) This tutorial demonstrates how to use Cleanlab Studio’s [Python API](/studio/quickstart/api/) to analyze a regression dataset. In regression, the dataset labels correspond to a target (aka. outcome/dependent) variable and take continuous/numeric values (i.e. price, income, age) rather than discrete categories (for a similar tutorial on data with categorical labels, check out the [Tabular Quickstart](/studio/tutorials/cleanlab-studio-api/tabular_data_quickstart/) ). ![Visualizing errors in a regression dataset](/assets/images/thumbnail-10fada8c8fcbf71c4ea1c3df5339d172.png) Cleanlab Studio supports both text and tabular regression datasets. In this tutorial, we’ll look at a tabular dataset where labels are students’ final grades in a course (which may have data entry errors). This tutorial can be generally used to detect erroneous values in _any_ numeric column of a dataset. Note: regression is currently only supported in the Python API in the generally-available version of Cleanlab Studio. If you require an interactive interface to improve your dataset, please [contact us](mailto:sales@cleanlab.ai) to discuss your use case. Install and import dependencies[​](#install-and-import-dependencies "Direct link to Install and import dependencies") ---------------------------------------------------------------------------------------------------------------------- %pip install -U cleanlab-studio import numpy as npimport pandas as pdfrom cleanlab_studio import Studiofrom IPython.display import displaypd.set_option("display.max_colwidth", None) Prepare and Upload Dataset[​](#prepare-and-upload-dataset "Direct link to Prepare and Upload Dataset") ------------------------------------------------------------------------------------------------------- Our dataset for this tutorial is a collection of student grades and other information about each student. Suppose we are interested in detecting incorrect values (data entry errors) in students’ `final_score`, which ranges from 0 to 100. In machine learning terminology, this can be considered a **regression** dataset, where the `final_score` column is the **label** for each row (student) in the table. ### Load Dataset into Pandas DataFrame[​](#load-dataset-into-pandas-dataframe "Direct link to Load Dataset into Pandas DataFrame") We’ll load the dataset into a Pandas DataFrame from a CSV file hosted in S3. The CSV file contains the following columns: stud_ID,exam_1,exam_2,exam_3,notes,final_score0,72,81,80,,73.31,89,62,93,,83.82,80,76,96,missed class frequently -10,78.6,,,,,... You can similarly format any other tabular or text dataset and run the rest of this tutorial. Details on how to format your dataset can be found in [this guide](/studio/concepts/datasets/) , which also outlines other format options. Cleanlab Studio works out-of-the-box for messy tabular datasets with arbitrary numeric/string columns that may contain missing values. dataset_url = "https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/student_grades_regression.csv"df = pd.read_csv(dataset_url)display(df.head(3)) | | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | final\_score | | --- | --- | --- | --- | --- | --- | --- | | 0 | 0 | 72 | 81 | 80 | NaN | 73.3 | | 1 | 1 | 89 | 62 | 93 | NaN | 83.8 | | 2 | 2 | 97 | 0 | 94 | NaN | 73.5 | ### Upload Dataset to Cleanlab Studio[​](#upload-dataset-to-cleanlab-studio "Direct link to Upload Dataset to Cleanlab Studio") Use your API key to instantiate a `Studio` object, which can be used to analyze your dataset. # you can find your API key by going to app.cleanlab.ai/upload,# clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""# authenticate with your API keystudio = Studio(API_KEY) Next load the dataset into Cleanlab Studio (more details/options can be found in [this guide](/studio/concepts/datasets/) ). This may take a while for big datasets. We explicitly set the type for the `final_score` column to `float` here, since the label column must have type `float` for a [regression project](https://help.cleanlab.ai/studio/concepts/datasets/#regression) (otherwise specifying schemas is optional). See [this guide](/studio/concepts/datasets/#schema-updates) for more information on schema overrides. dataset_id = studio.upload_dataset( df, dataset_name="Student Grades (regression)", schema_overrides=[{"name": "final_score", "column_type": "float"}],) Launch a Project[​](#launch-a-project "Direct link to Launch a Project") ------------------------------------------------------------------------- Let’s now create a project using this dataset. A Cleanlab Studio project will automatically train ML models to provide AI-based analysis of your dataset. **Note:** By default Cleanlab Studio uses all columns provided as predictive features except the label column. Since our dataset contains a `stud_ID` column which is not a predictive feature of the output score, we explicitly specify the feature columns as well as the name of the label column, i.e. `final_score` column in the dataset. project_id = studio.create_project( dataset_id=dataset_id, project_name="Student Grades (regression) Project", modality="tabular", task_type="regression", model_type="regular", label_column="final_score", feature_columns=["exam_1", "exam_2", "exam_3", "notes"],)print(f"Project successfully created and training has begun! project_id: {project_id}") Above, we specified `modality="tabular"` because this tutorial uses a tabular dataset; you can specify `modality="text"` if you’re using a text dataset. See the documentation for [`create_project`](/studio/api/python/studio/#method-create_project) for the full set of options. Once the project has been launched successfully and you see your `project_id`, feel free to close this notebook. It will take some time for Cleanlab’s AI to train on your data and analyze it. Come back after training is complete (you will receive an email) and continue with the notebook to review your results. You should only execute the above cell once per dataset. After launching the project, you can poll for its status to programmatically wait until the results are ready for review. Each project creates a [cleanset](/studio/concepts/cleanset/) , an improved version of your original dataset that contains additional metadata for helping you clean up the data. The next code cell simply waits until this _cleanset_ has been created. **Warning!** For big datasets, this next cell may take a long time to execute while Cleanlab’s AI model is training. If your notebook has timed out during this process, you can resume work by re-running the below cell (which should return the `cleanset_id` instantly if the project has completed training). Do not re-run the above cell and create a new project. cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")project_status = studio.wait_until_cleanset_ready(cleanset_id) Once the above cell completes execution, your project results are ready for review! Download Cleanlab columns[​](#download-cleanlab-columns "Direct link to Download Cleanlab columns") ---------------------------------------------------------------------------------------------------- We can fetch the [Cleanlab columns](/studio/concepts/cleanlab_columns/) that contain the metadata of this _cleanset_ using its `cleanset_id`. These columns have the same length as your original dataset and provide metadata about each individual data point, like what types of issues it exhibits and how severe these issues are. If at any point you want to re-run the remaining parts of this notebook (without creating another project), simply call `studio.download_cleanlab_columns(cleanset_id)` with the `cleanset_id` printed from the previous cell. cleanlab_columns_df = studio.download_cleanlab_columns(cleanset_id)cleanlab_columns_df.head() | | cleanlab\_row\_ID | corrected\_label | is\_label\_issue | label\_issue\_score | suggested\_label | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_outlier | outlier\_score | is\_initially\_unlabeled | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1 | NaN | False | 0.779405 | NaN | True | 0.952681 | 0 | False | 0.000522 | False | | 1 | 2 | NaN | False | 0.640746 | NaN | False | 0.553077 | | False | 0.000351 | False | | 2 | 3 | NaN | True | 0.985484 | 62.87463 | False | 0.578622 | | False | 0.000766 | False | | 3 | 4 | NaN | False | 0.681494 | NaN | False | 0.628423 | | False | 0.000755 | False | | 4 | 5 | NaN | False | 0.662657 | NaN | False | 0.521975 | | False | 0.000884 | False | Review detected data issues[​](#review-detected-data-issues "Direct link to Review detected data issues") ---------------------------------------------------------------------------------------------------------- Optional: Initialize helper methods to better visualize numeric and string columns based on colored values Coloring helps us clearly understand data entry errors for this particular tutorial dataset, but is optional for your own datasets. from typing import Callable, Dict, Optionalfrom IPython.core.display import HTMLimport matplotlib.colorsdef color_calc(value: float): """ Calculate color based on the given value. Intended for the range of 0 to 100. No error checking is done. Parameters: value (int or float): Value based on which the color is determined. Returns: str: Hexadecimal color code. """ if value <= 50: r = 1.0 g = (value / 50) * 194.0 / 255.0 + 61.0 / 255.0 b = 61.0 / 255.0 else: r = (100 - value) / 50 g = 1.0 b = 0.0 hex_color = matplotlib.colors.to_hex((r, g, b)) return hex_colordef grade_to_color(value: float): """ Format numerical grade value with background color. Intended for the range of 0 to 100. No error checking is done. Parameters: value (int or float): Numerical grade value. Returns: str: HTML div string with background color based on grade value. """ hex_color = color_calc(value) return ( f'
{value}
' )def highlight_notes(note: str): """ Format notes with background color based on keywords. Notes are returned as is if no keywords are found. Parameters: note (str): Text of notes. Returns: str: HTML div string with background color based on keywords found in notes. """ if "missed" in note: value = 40 elif "cheated" in note: value = 0 elif "great participation" in note: value = 100 else: return note # default (no color) hex_color = color_calc(value) return f'
{note}
'_TUTORIAL_FORMATTERS = { "exam_1": grade_to_color, "exam_2": grade_to_color, "exam_3": grade_to_color, "given_label": grade_to_color, "suggested_label": grade_to_color, "notes": highlight_notes,}def display(df, formatters: Optional[Dict[str, Callable]] = None): """ Display DataFrame with formatted columns. Parameters: df (pd.DataFrame): DataFrame to display. Returns: IPython.core.display.HTML: HTML representation of formatted DataFrame. """ if formatters is None: formatters = {} return HTML(df.to_html(escape=False, formatters=formatters, index=False))disable_pretty_print = ( False # set to True to disable pretty printing when displaying DataFrames)optional_df_display_formatters = None if disable_pretty_print else _TUTORIAL_FORMATTERS Details about all of the returned Cleanlab columns and their meanings can be found in [this guide](/studio/concepts/cleanlab_columns/) . In this tutorial, we focus on columns related to label issues, outliers and near duplicates: * **is\_label\_issue** indicates that the original value in the column you chose as the class label appears incorrect for a particular row (perhaps due to data entry error, or accidental mislabeling). For such data, consider correcting this value to the `suggested_label` value if it seems more appropriate. * **label\_issue\_score** represents the severity of the label issue in each row (on a scale of 0-1 with 1 indicating the most severe instances of the issue). * **is\_outlier** indicates that a particular row is an outlier in the dataset. * **outlier\_score** represents the severity of the outlier issue in each row (on a scale of 0-1 with 1 indicating the most severe instances of the issue). * **is\_near\_duplicate** indicates that a particular row is a near(or exact) duplicate of another row in the dataset. * **near\_duplicate\_score** represents the severity of the near duplicate issue in each row (on a scale of 0-1 with 1 indicating the most severe instances of the issue). ### Label issues[​](#label-issues "Direct link to Label issues") Let’s take a look at the label quality in our dataset. We first create a `given_label` column in our DataFrame to clearly indicate the class label originally assigned to each data point in this dataset. # Combine the dataset with the cleanlab columnscombined_dataset_df = df.merge(cleanlab_columns_df, left_index=True, right_index=True)# Set a "given_label" column to the original labelcombined_dataset_df.rename(columns={"final_score": "given_label"}, inplace=True)# Store the column names of the dataset for visualizationDATASET_COLUMNS = df.columns.drop("final_score").tolist() To see which data points are estimated to be mislabeled (i.e. have potentially erroneous values in the class label column), we filter by `is_label_issue`. We sort by `label_issue_score` to see which of these data points are _most likely_ mislabeled. samples_ranked_by_label_issue_score = combined_dataset_df[ combined_dataset_df["is_label_issue"]].sort_values("label_issue_score", ascending=False)columns_to_display = DATASET_COLUMNS + [ "label_issue_score", "is_label_issue", "given_label", "suggested_label",]display( samples_ranked_by_label_issue_score.head(5)[columns_to_display], formatters=optional_df_display_formatters,) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | label\_issue\_score | is\_label\_issue | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 659 | 67 | 93 | 93 | NaN | 1.0 | True | 17.4 | 84.1853179932 | | 560 | 95 | 0 | 72 | NaN | 1.0 | True | 0.0 | 53.5097465515 | | 318 | 41 | 88 | 98 | missed class frequently -10 | 1.0 | True | 0.0 | 70.3309936523 | | 160 | 97 | 86 | 54 | missed homework frequently -10 | 1.0 | True | 0.0 | 61.021068573 | | 367 | 78 | 0 | 86 | NaN | 1.0 | True | 0.0 | 55.161655426 | For example, looking at the first row above: the student recieved grades of 67, 93, and 93 on their exams, but ended up with a final grade of 17.4/100, which is certainly a data entry error! ### Outliers[​](#outliers "Direct link to Outliers") Let’s take a look at the outliers detected in the dataset. To view the outliers, we again filter using `is_outlier` column and sort by `outlier_score` in descending order to view most likely outliers. samples_ranked_by_outlier_score = combined_dataset_df[ combined_dataset_df["is_outlier"]].sort_values("outlier_score", ascending=False)columns_to_display = DATASET_COLUMNS + [ "outlier_score", "is_outlier", "given_label", "suggested_label",]display( samples_ranked_by_outlier_score.head(5)[columns_to_display], formatters=optional_df_display_formatters,) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | outlier\_score | is\_outlier | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 509 | 65 | 85 | 80 | great participation +10 | 0.168298 | True | 82.2 | NaN | | 613 | 93 | 58 | 70 | great final presentation +10 | 0.166990 | True | 83.8 | NaN | | 889 | 75 | 91 | 68 | great final presentation +10 | 0.166341 | True | 85.7 | NaN | | 178 | 90 | 67 | 77 | missed class frequently -10 | 0.155053 | True | 77.6 | NaN | | 570 | 90 | 67 | 77 | missed class frequently -10 | 0.155053 | True | 71.7 | NaN | We can note that the student well or poorly in 2 out of 3 exams, whereas the performance is opposite in the third one. This most likely indicates an outlier issue either related to data entry or evaluation of the exam. ### Near Duplicates[​](#near-duplicates "Direct link to Near Duplicates") For viewing near duplicates in the dataset, we filter the rows using `is_near_duplicate` column and then sort using `near_duplicate_score` as well as `near_duplicate_cluster_id`. The rows that belong to the same set of near duplicates have the same `near_duplicate_cluster_id`. samples_ranked_by_near_duplicate_score = combined_dataset_df[ combined_dataset_df["is_near_duplicate"]].sort_values(["near_duplicate_score", "near_duplicate_cluster_id"], ascending=False)columns_to_display = DATASET_COLUMNS + [ "near_duplicate_score", "is_near_duplicate", "near_duplicate_cluster_id", "given_label", "suggested_label",]display( samples_ranked_by_near_duplicate_score.head(6)[columns_to_display], formatters=optional_df_display_formatters,) | stud\_ID | exam\_1 | exam\_2 | exam\_3 | notes | near\_duplicate\_score | is\_near\_duplicate | near\_duplicate\_cluster\_id | given\_label | suggested\_label | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 544 | 78 | 58 | 86 | great final presentation +10 | 1.0 | True | 23 | 84.4 | NaN | | 549 | 78 | 58 | 86 | great final presentation +10 | 1.0 | True | 23 | 84.3 | NaN | | 399 | 86 | 80 | 89 | NaN | 1.0 | True | 17 | 81.2 | NaN | | 953 | 86 | 80 | 89 | NaN | 1.0 | True | 17 | 82.5 | NaN | | 269 | 73 | 80 | 95 | NaN | 1.0 | True | 11 | 80.7 | NaN | | 562 | 73 | 80 | 95 | NaN | 1.0 | True | 11 | 83.5 | NaN | We can clearly note that some rows are duplicated in this dataset, which can affect the performance of model trained on it. Improve the dataset based on the detected issues[​](#improve-the-dataset-based-on-the-detected-issues "Direct link to Improve the dataset based on the detected issues") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Since the results of this analysis appear reasonable, let’s use the Cleanlab columns to improve the quality of our dataset. For your own datasets, which actions you should take to remedy the detected issues will depend on what you are using the data for. No single action is going to be the best choice across all datasets, so we caution against blindly copying the actions we perform below. For data marked as `label_issue`, we create a new `corrected_label` column, which will be the given label for data without detected label issues, and the `suggested_label` for data with detected label issues. We are not using the results for outlier and near duplicates issues to improve the dataset, as that requires more careful consideration and domain expertise. corrected_label = np.where( combined_dataset_df["is_label_issue"], combined_dataset_df["suggested_label"], combined_dataset_df["given_label"],) Finally, let’s actually make a new version of our dataset with these changes. We craft a new DataFrame from the original, applying corrections and exclusions, and then use this DataFrame to save the new dataset in a separate CSV file. The new dataset is a CSV file that looks just like our original dataset — you can use it as a plug-in replacement to get more reliable results in your ML and Analytics pipelines, without any change in your existing modeling code. new_dataset_filename = "improved_dataset.csv" # Fetch the original datasetfixed_dataset = combined_dataset_df[DATASET_COLUMNS].copy()# Add the corrected label columnfixed_dataset["final_score"] = corrected_label# Save improved dataset to new CSV filefixed_dataset.to_csv(new_dataset_filename, index=False)print(f"Adjusted dataset saved to {new_dataset_filename}") * [Install and import dependencies](#install-and-import-dependencies) * [Prepare and Upload Dataset](#prepare-and-upload-dataset) * [Load Dataset into Pandas DataFrame](#load-dataset-into-pandas-dataframe) * [Upload Dataset to Cleanlab Studio](#upload-dataset-to-cleanlab-studio) * [Launch a Project](#launch-a-project) * [Download Cleanlab columns](#download-cleanlab-columns) * [Review detected data issues](#review-detected-data-issues) * [Label issues](#label-issues) * [Outliers](#outliers) * [Near Duplicates](#near-duplicates) * [Improve the dataset based on the detected issues](#improve-the-dataset-based-on-the-detected-issues) --- # How to detect issues in datasets without labels (unsupervised learning) [Skip to main content](#__docusaurus_skipToContent_fallback) On this page [![Run in Google Colab](https://colab.research.google.com/img/colab_favicon_256px.png)Run in Google Colab](https://colab.research.google.com/github/cleanlab/cleanlab-studio-tutorials/blob/main/studio/cleanlab-studio-api/unsupervised.ipynb) This tutorial demonstrates how to use Cleanlab Studio’s [Python API](/studio/quickstart/api/) to analyze and find issues in datasets without labels. This can be useful if you don’t have a single column in your dataset that you want to predict values for but still want to find issues such as low-quality/unsafe image or text content (e.g. NSFW or blurry images, toxic or unreadable text). In machine learning nomenclature, working with such data is called _unsupervised learning_ (because there is no supervised label to predict). Cleanlab Studio supports analyzing data without labels for text and image modalities. In this tutorial, we’ll look at a text dataset consisting of Tweets about airlines. This tutorial can be generally used to detect issues in _any_ text column of a dataset or collection of images. Note: analyzing data without labels is currently only supported in the Python API. If you require an interactive interface to improve your unsupervised dataset, please [contact us](mailto:sales@cleanlab.ai) to discuss your use case. Install and import dependencies[​](#install-and-import-dependencies "Direct link to Install and import dependencies") ---------------------------------------------------------------------------------------------------------------------- pip install -U cleanlab-studio import pandas as pdfrom cleanlab_studio import Studiofrom IPython.display import displaypd.set_option('display.max_colwidth', None) Prepare and Upload Dataset[​](#prepare-and-upload-dataset "Direct link to Prepare and Upload Dataset") ------------------------------------------------------------------------------------------------------- Our dataset for this tutorial is a collection of Tweets directed at various airlines. ### Load Dataset[​](#load-dataset "Direct link to Load Dataset") We’ll load the dataset into a Pandas DataFrame from a CSV file hosted in S3. The CSV file contains the following columns: tweet_id,text0,@VirginAmerica What @dhepburn said.1,@VirginAmerica plus you've added commercials to the experience... tacky., You can similarly format any other text or image dataset and run the rest of this tutorial. Details on how to format your dataset can be found in [this guide](/studio/concepts/datasets/) , which also outlines other format options. dataset_url = "https://cleanlab-public.s3.amazonaws.com/StudioDemoDatasets/tweets-tutorial.csv"df = pd.read_csv(dataset_url)display(df.head(3)) | | tweet\_id | text | | --- | --- | --- | | 0 | 0 | @VirginAmerica What @dhepburn said. | | 1 | 1 | @VirginAmerica plus you've added commercials to the experience... tacky. | | 2 | 2 | @VirginAmerica I didn't today... Must mean I need to take another trip! | Load Dataset into Cleanlab Studio[​](#load-dataset-into-cleanlab-studio "Direct link to Load Dataset into Cleanlab Studio") ---------------------------------------------------------------------------------------------------------------------------- First instantiate a `Studio` object, which can be used to analyze your dataset. # you can find your API key by going to app.cleanlab.ai/upload, # clicking "Upload via Python API", and copying the API key thereAPI_KEY = ""studio = Studio(API_KEY) Next load the dataset into Cleanlab Studio (more details/options can be found in [this guide](/studio/concepts/datasets/) ). This may take a while for big datasets. dataset_id = studio.upload_dataset(df, dataset_name="Tweets (no-labels)") Launch a Project[​](#launch-a-project "Direct link to Launch a Project") ------------------------------------------------------------------------- Let’s now create a project using this dataset. A Cleanlab Studio project will automatically train ML models to provide AI-based analysis of your dataset. Here, we explicitly set the `task_type` parameter to `unsupervised` to specify that there is _no_ supervised ML training task to run. If you would like to run supervised ML training and detect label errors in a labeled dataset or **annotate unlabeled data**, instead choose another ML task type (e.g. `"multi-class"`, `"multi-label"`, or `"regression"`; see [this guide](/studio/concepts/projects/#machine-learning-task--dataset-type) for details). project_id = studio.create_project( dataset_id=dataset_id, project_name="Tweets (no-labels) Project", modality="text", task_type="unsupervised", model_type="regular", # text issue detection is currently only available in Regular mode label_column=None,)print(f"Project successfully created and training has begun! project_id: {project_id}") Above, we specified `modality="text"` because this tutorial uses a text dataset; you can specify `modality="image"` if you’re using a image dataset. See the documentation for [`create_project`](/studio/api/python/studio/#method-create_project) for the full set of options. Once the project has been launched successfully and you see your `project_id`, feel free to close this notebook. It will take some time for Cleanlab’s AI to train on your data and analyze it. Come back after training is complete (you will receive an email) and continue with the notebook to review your results. You should only execute the above cell once per dataset. After launching the project, you can poll for its status to programmatically wait until the results are ready for review. Each project creates a [cleanset](/studio/concepts/cleanset/) , an improved version of your original dataset that contains additional metadata for helping you clean up the data. The next code cell simply waits until this _cleanset_ has been created. **Warning!** For big datasets, this next cell may take a long time to execute while Cleanlab’s AI model is training. If your notebook has timed out during this process, you can resume work by re-running the below cell (which should return the `cleanset_id` instantly if the project has completed training). Do not re-run the above cell and create a new project. cleanset_id = studio.get_latest_cleanset_id(project_id)print(f"cleanset_id: {cleanset_id}")project_status = studio.wait_until_cleanset_ready(cleanset_id, show_cleanset_link=True) Once the above cell completes execution, your project results are ready for review! Download Cleanlab columns[​](#download-cleanlab-columns "Direct link to Download Cleanlab columns") ---------------------------------------------------------------------------------------------------- We can fetch the [Cleanlab columns](/studio/concepts/cleanlab_columns/) that contain the metadata of this _cleanset_ using its `cleanset_id`. These columns have the same length as your original dataset and provide metadata about each individual data point, like what types of issues it exhibits and how severe these issues are. If at any point you want to re-run the remaining parts of this notebook (without creating another project), simply call `studio.download_cleanlab_columns(cleanset_id)` with the `cleanset_id` printed from the previous cell. cleanlab_columns_df = studio.download_cleanlab_columns(cleanset_id)cleanlab_columns_df.head() | | cleanlab\_row\_ID | is\_near\_duplicate | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_outlier | outlier\_score | is\_empty\_text | text\_num\_characters | is\_PII | PII\_score | ... | non\_english\_score | predicted\_language | is\_toxic | toxic\_score | sentiment\_score | bias\_score | is\_biased | gender\_bias\_score | racial\_bias\_score | sexual\_orientation\_bias\_score | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | 1 | False | 0.399615 | | False | 0.580445 | False | 35 | True | 0.2 | ... | 0.490506 | | False | 0.083435 | 0.834229 | 0.380908 | False | 0.380908 | 0.152832 | 0.018829 | | 1 | 2 | False | 0.415263 | | False | 0.569778 | False | 72 | True | 0.2 | ... | 0.081569 | | False | 0.612305 | 0.142975 | 0.351074 | False | 0.014209 | 0.351074 | 0.001138 | | 2 | 3 | False | 0.370318 | | False | 0.609644 | False | 71 | True | 0.2 | ... | 0.071165 | | False | 0.108826 | 0.573975 | 0.159546 | False | 0.000000 | 0.159546 | 0.000110 | | 3 | 4 | False | 0.281063 | | False | 0.705755 | False | 126 | True | 0.2 | ... | 0.126798 | | False | 0.651855 | 0.145264 | 0.333789 | False | 0.333789 | 0.281250 | 0.018372 | | 4 | 5 | False | 0.538334 | | False | 0.476579 | False | 55 | True | 0.2 | ... | 0.059800 | | False | 0.320312 | 0.164673 | 0.413330 | False | 0.209766 | 0.413330 | 0.029282 | 5 rows × 28 columns Review detected data issues[​](#review-detected-data-issues "Direct link to Review detected data issues") ---------------------------------------------------------------------------------------------------------- Details about all of the Cleanlab columns and their meanings can be found in [this guide](/studio/concepts/cleanlab_columns/) . Here we briefly showcase some of the Cleanlab columns that correspond to issues detected in our tutorial dataset. Since our dataset only has a text column, this tutorial focuses on issues specific to text fields such as the occurence of personally identifiable information (PII) and toxic language (see [here](/studio/concepts/cleanlab_columns/#columns-specific-to-text-data) for details). The data points exhibiting each type of issue are indicated with boolean values in the respective `is_` column, and the severity of this issue in each data point is quantified in the respective `_score` column (on a scale of 0-1 with 1 indicating the most severe instances of the issue). Let’s take a closer look at some issues flagged in our dataset. We merged the columns from our original dataset with the Cleanlab columns (metadata) produced by Cleanlab Studio: # Load the dataset into a DataFramedf = pd.read_csv(dataset_url)# Combine the dataset with the cleanlab columnscombined_dataset_df = df.merge(cleanlab_columns_df, left_index=True, right_index=True) **Personally Identifiable Information (PII)** is information that could be used to identify an individual or is otherwise sensitive. Exposing PII can compromise an individual’s security and hence should be safeguarded and anonymized/removed if discovered in publicly shared data. Cleanlab’s [PII detection](https://help.cleanlab.ai/studio/concepts/cleanlab_columns/#personally-identifiable-information-pii) also returns two extra columns, `PII_items` and `PII_types`, which list the specific PII detected in the text and its type. Possible types of PII that can be detected are detailed in the [guide](https://help.cleanlab.ai/studio/concepts/cleanlab_columns/#personally-identifiable-information-pii) and scored according to how sensitive each type of information is. Here are some examples of PII detected in the dataset: PII_samples = combined_dataset_df.query("is_PII").sort_values("PII_score", ascending=False)columns_to_display = ["tweet_id", "text", "PII_score", "is_PII", "PII_types", "PII_items"]display(PII_samples.head(5)[columns_to_display]) | | tweet\_id | text | PII\_score | is\_PII | PII\_types | PII\_items | | --- | --- | --- | --- | --- | --- | --- | | 407 | 407 | @VirginAmerica FYI the info@virginamerica.com email address you say to contact in password reset emails doesn't exist. Emails bounce. | 0.5 | True | \["Twitter username", "email"\] | \["@VirginAmerica", "info@virginamerica.com"\] | | 3377 | 3377 | @united Need to track lost luggage being shipped to me. Need ph # for human. Not automated 800-335-2247. | 0.5 | True | \["Twitter username", "phone number"\] | \["@united", "800-335-2247"\] | | 742 | 742 | @united I send you an urgent message via eservice@united.com. BG0KWM Narayanan. Please respond ASAP. Also, NO local United Tel # @ KUL | 0.5 | True | \["Twitter username", "email"\] | \["@united", "eservice@united.com"\] | | 3872 | 3872 | @united delayed about 8 hours because of missed connections due to mechanical issues on 1st flight. rebooked, but please call me 9148445695 | 0.5 | True | \["Twitter username", "phone number"\] | \["@united", "9148445695"\] | | 960 | 960 | @united iCloud it is not there yet -- PLEASE HELP 917 703 1472 | 0.5 | True | \["Twitter username", "phone number"\] | \["@united", "917 703 1472"\] | Text that contains **toxic language** may have elements of hateful speech and language others may find harmful or aggressive. Identifying toxic language is vital in tasks such as content moderation and LLM training/evaluation, where appropriate action should be taken to ensure safe platforms, chatbots, or other applications depending on this dataset. Here are some examples in this dataset detected to contain toxic language: toxic_samples = combined_dataset_df.query("is_toxic").sort_values("toxic_score", ascending=False)columns_to_display = ["tweet_id", "text", "toxic_score", "is_toxic"]display(toxic_samples.head(5)[columns_to_display]) | | tweet\_id | text | toxic\_score | is\_toxic | | --- | --- | --- | --- | --- | | 1197 | 1197 | @united you are the worst airline in the world! From your crap website to your worthless app to your Late Flight flight. You SUCK! Just shut down. | 0.912598 | True | | 2122 | 2122 | @united I hope your corporate office is ready to deal with the rage created by your shitty service and bullshit pilots. #UnitedAirlinesSucks | 0.904785 | True | | 2039 | 2039 | @united thanks for letting me sleep at DIA to ensure you ruin as much of my vacation as possible. Wait, no, fuck you. #unitedairlinessucks | 0.894531 | True | | 2566 | 2566 | @united no. U guys suck. I'll never fly with u again. And ur supervisors suck too. | 0.894043 | True | | 1374 | 1374 | @united after a Cancelled Flighted flight, and 2 delays, you lost my luggage AGAIN! You're the WORST! Disgraceful! Awful company, horrible service! | 0.890625 | True | **Outlier** indicates this data point is very different from the rest of the data (looks atypical). The presence of outliers may indicate problems in your data sources, consider deleting such data from your dataset if appropriate. samples_ranked_by_outlier_score = combined_dataset_df.query("is_outlier").sort_values("outlier_score", ascending=False)columns_to_display = ["text", "outlier_score", "text_num_characters", "is_outlier"]display(samples_ranked_by_outlier_score.head(10)[columns_to_display]) | | text | outlier\_score | text\_num\_characters | is\_outlier | | --- | --- | --- | --- | --- | | 2292 | @united The Opal Dragon book The Dragon (ALI) has woven his murdering ways from the Philippines to Australia http://t.co/N2fvElcYgz | 0.885225 | 131 | True | | 10 | @VirginAmerica did you know that suicide is the second leading cause of death among teens 10-24 | 0.885063 | 95 | True | | 469 | @VirginAmerica Man of steel flies to more cities though...and with more frequency too. | 0.851450 | 86 | True | | 2811 | .@united It's worth saying that, if you litter in Singapore, you get caned. "But there are rules" says @united | 0.842480 | 110 | True | | 1817 | @united welcome to our world, that's a snow world today. @GooseBayAirport Goose Bay, Labrador, Canada. http://t.co/4kI6Xr67nk | 0.837079 | 125 | True | | 418 | @VirginAmerica Your back of seat entertainment system does not accept credit cards that have an apostrophe in the surname. #apostrophefail | 0.836217 | 139 | True | | 2357 | @united SATURDAY this morning Man dies from Ebola http://t.co/hXVVIS0VWw | 0.832924 | 72 | True | | 677 | @united So what does someone with severe anxiety do when the one person who can help him isn't next to him? | 0.832567 | 107 | True | | 2296 | @united Hello we are doing a world record attempt on the amount of ball point pens in a collection please could you help with a pen? | 0.830536 | 132 | True | | 361 | Bruh “@VirginAmerica: @giannilee Turn down for what. #VXSafetyDance” | 0.829851 | 68 | True | **Near duplicate** indicates there are other data points that are (exactly or nearly) identical to this data point. Duplicated data points can have an outsized impact on models/analytics, so consider deleting the extra copies from your dataset if appropriate. n_near_duplicate_sets = len(set(combined_dataset_df.loc[combined_dataset_df["near_duplicate_cluster_id"].notna(), "near_duplicate_cluster_id"]))print(f"There are {n_near_duplicate_sets} sets of near duplicate texts in the dataset.") There are 18 sets of near duplicate texts in the dataset. # Sort the combined dataset by near_duplicate_cluster_idsorted_combined_dataset_df = combined_dataset_df[combined_dataset_df['is_near_duplicate']].sort_values(by="near_duplicate_cluster_id")columns_to_display = ["text", "near_duplicate_score", 'near_duplicate_cluster_id', "is_near_duplicate"]sorted_combined_dataset_df[columns_to_display] | | text | near\_duplicate\_score | near\_duplicate\_cluster\_id | is\_near\_duplicate | | --- | --- | --- | --- | --- | | 14 | @VirginAmerica Thanks! | 1.000000 | 0 | True | | 193 | @VirginAmerica thanks! | 1.000000 | 0 | True | | 231 | @VirginAmerica thanks so much! | 0.912910 | 0 | True | | 281 | @VirginAmerica Thank you!! | 0.938341 | 0 | True | | 331 | @VirginAmerica Thanks! | 1.000000 | 0 | True | | ... | ... | ... | ... | ... | | 3462 | @united THIS IS THE YEAR FOR VAN GOGH FANS TO VISIT EUROPE\\nhttp://t.co/e1EOfthgAJ | 0.921737 | 16 | True | | 4176 | @United Airlines Cancelled Flights OC FLL #flight today. $700 to switch. No notice no apology. We are done flying #UnitedAirlines. | 0.989779 | 17 | True | | 4181 | @United Airlines Cancelled Flights OC FLL #flight today. $700 to switch. No notice no apology. Done flying #UnitedAirlines. | 0.989779 | 17 | True | | 4366 | @SouthwestAir sent! | 0.940663 | 18 | True | | 4481 | @SouthwestAir sent | 0.940663 | 18 | True | 70 rows × 4 columns Note that the near duplicate data points each have an associated `near_duplicate_cluster_id` integer. Data points that share the same IDs are near duplicates of each other, so you can use this column to find the near duplicates of any data point. And remember the near duplicates also include _exact_ duplicates as well (which have `near_duplicate_score` = 1). The above only showcases a small subset of all the different types of issues and metadata that Cleanlab Studio can provide for an unsupervised dataset with no labels. See [this guide](/studio/concepts/cleanlab_columns/) for the full set of issues that Cleanlab Studio audits your data for to help you prevent problems. ![Visualizing issues in an unsupervised text dataset](/assets/images/reviewsissues-37133e5b5aa5bc7af46f75b8e2798580.png) Using these results[​](#using-these-results "Direct link to Using these results") ---------------------------------------------------------------------------------- Depending on your goal, you may want to take some steps to improve your dataset based on these results (i.e. by removing text detected to be low-quality or unsafe from your dataset). Alternatively, you might use the Cleanlab-generated metadata to better understand your dataset (e.g. understanding the prevalence of toxic language). Determining how to use the results of these analyses will vary based on your dataset and use case. Remember that Cleanlab Studio can also auto-detect low-quality or unsafe **images** as well. If you’d like to discuss your use case, please [contact us](mailto:sales@cleanlab.ai) . ![Visualizing issues in an unsupervised image dataset](/assets/images/unsupervisedimageissues-862b7833aa110b55fad4688ce9dc100a.png) * [Install and import dependencies](#install-and-import-dependencies) * [Prepare and Upload Dataset](#prepare-and-upload-dataset) * [Load Dataset](#load-dataset) * [Load Dataset into Cleanlab Studio](#load-dataset-into-cleanlab-studio) * [Launch a Project](#launch-a-project) * [Download Cleanlab columns](#download-cleanlab-columns) * [Review detected data issues](#review-detected-data-issues) * [Using these results](#using-these-results) ---