From 7148e7f280a0a3082821ff0b02e5c5000d60ebef Mon Sep 17 00:00:00 2001 From: Mansoorinho Date: Mon, 29 Apr 2024 12:02:10 +0200 Subject: [PATCH 1/3] First notebook translated to fa, issues in text dataset. --- notebooks/fa/_toctree.yml | 6 + notebooks/fa/issues_in_text_dataset.ipynb | 3360 +++++++++++++++++++++ 2 files changed, 3366 insertions(+) create mode 100644 notebooks/fa/_toctree.yml create mode 100644 notebooks/fa/issues_in_text_dataset.ipynb diff --git a/notebooks/fa/_toctree.yml b/notebooks/fa/_toctree.yml new file mode 100644 index 00000000..e35f3223 --- /dev/null +++ b/notebooks/fa/_toctree.yml @@ -0,0 +1,6 @@ +- title: کتاب متن باز دستورالعمل هوش مصنوعی (Cookbook) + sections: + - local: index + title: کتاب متن باز دستورالعمل هوش مصنوعی (Cookbook) + - local: issues_in_text_dataset + title: Cleanlab تشخیص مشکلات در یک مجموعه داده متنی با \ No newline at end of file diff --git a/notebooks/fa/issues_in_text_dataset.ipynb b/notebooks/fa/issues_in_text_dataset.ipynb new file mode 100644 index 00000000..e4ff7491 --- /dev/null +++ b/notebooks/fa/issues_in_text_dataset.ipynb @@ -0,0 +1,3360 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "pw6cvzTocw4G" + }, + "source": [ + "# شناسایی مشکلات در یک مجموعه داده متنی با ‫ Cleanlab" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0yPBE0Xccw4J" + }, + "source": [ + "[Mansoor Nabawi](https://github.com/Mansoorinho) :نویسنده\n", + " \n", + "\n", + "در این آموزش شروع سریع 5 دقیقه ای, ما از ‫ Cleanlab برای شناسایی مشکلات مختلف در یک مجموعه داده دسته بندی قصد (intent classifcation dataset) که از درخواست های خدمات مشتری (متن) در یک بانک آنلاین تشکیل شده است استفاده میکنیم. ما زیرمجموعه‌ای از [Banking77-OOS Dataset](https://arxiv.org/abs/2106.04564) را در نظر می‌گیریم که شامل 1000 درخواست خدمات مشتری است که بر اساس هدفشان در 10 دسته طبقه‌بندی شده اند. (شما میتوانید همین کد را روی هر مجموعه داده دسته بندی اجرا کنید). [Cleanlab](https://github.com/cleanlab/cleanlab) به‌طور خودکار نمونه‌های بد را در مجموعه داده‌های ما شناسایی می‌کند، از جمله داده‌های دارای برچسب اشتباه، نمونه‌ داده های پرت (outliers)، یا نمونه‌های مبهم دیگر. قبل از اینکه به مدل‌سازی داده‌هایتان بپردازید! ,فیلتر کردن یا تصحیح چنین مثال‌های بد را در نظر بگیرید.\n", + "\n", + "**:مروری بر کارهایی که در این آموزش انجام خواهیم داد**\n", + "\n", + "- از یک مدل ترنسفورمر‫ (transformer) از قبل آموزش دیده شده برای استخراج embedding های متن از درخواست های خدمات مشتری استفاده کنید.\n", + "\n", + "- یک مدل ساده ‫ (Logistic Regression) بر روی embedding های متن آموزش دهید تا احتمالات خارج از نمونه را پیش بینی کند.\n", + "\n", + "- حسابرسی ‫`Datalab` را در Cleanlab با این پیش بینی ها و embedding ها اجرا کنید تا مشکلاتی مانند : مسایل برچسب زنی, داده های پرت (outliers) و تقریبا تکراری را در مجموعه داده شناسایی شوند." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "o__pRLFYcw4K" + }, + "source": [ + "## شروع سریع\n", + "\n", + " \n", + " آیا قبلا ‫`pred_probs` (out-of-sample خارج از نمونه) از یک مدل آموزش داده شده روی مجموعه‌ای از برچسب‌ها موجود دارید؟ شاید شما هم تعدادی `features` عددی داشته باشید؟ کد زیر را اجرا کنید تا هر گونه خطای برچسب احتمالی را در مجموعه داده خود بیابید.\n", + "\n", + "**توجه:** اگر کد خود را روی ‫Colab اجرا می کنید، ممکن است بخواهید از GPU استفاده کنید (برای اینکار انتخاب کنید: Runtime > Change runtime type > Hardware accelerator > GPU)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qaZA0cFs1fW4" + }, + "outputs": [], + "source": [ + "from cleanlab import Datalab\n", + "\n", + "lab = Datalab(data=your_dataset, label_name=\"column_name_of_labels\")\n", + "lab.find_issues(pred_probs=your_pred_probs, features=your_features)\n", + "\n", + "lab.report()\n", + "lab.get_issues()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dp4lpApmcw4K" + }, + "source": [ + "## کتابخانه های لازم را نصب کنید\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DjoWBgGAcw4K" + }, + "source": [ + "شما میتوانید از\t‫ `pip` برای نصب تمامی بسته/کتابخانه های لازم برای این آموزش طبق موارد زیر استفاده کنید:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fRsBIj3L_RUb" + }, + "outputs": [], + "source": [ + "!pip install -U scikit-learn sentence-transformers datasets\n", + "!pip install -U \"cleanlab[datalab]\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-16T06:26:13.467211Z", + "iopub.status.busy": "2024-02-16T06:26:13.466877Z", + "iopub.status.idle": "2024-02-16T06:26:13.470222Z", + "shell.execute_reply": "2024-02-16T06:26:13.469761Z" + }, + "id": "zgezWF-2cw4L" + }, + "outputs": [], + "source": [ + "import re\n", + "import string\n", + "import pandas as pd\n", + "from sklearn.metrics import accuracy_score, log_loss\n", + "from sklearn.model_selection import cross_val_predict\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sentence_transformers import SentenceTransformer\n", + "\n", + "from cleanlab import Datalab" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-16T06:26:13.472374Z", + "iopub.status.busy": "2024-02-16T06:26:13.471951Z", + "iopub.status.idle": "2024-02-16T06:26:13.475065Z", + "shell.execute_reply": "2024-02-16T06:26:13.474625Z" + }, + "id": "mO3pnA1ncw4L", + "nbsphinx": "hidden" + }, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np\n", + "\n", + "pd.set_option(\"display.max_colwidth\", None)\n", + "\n", + "SEED = 123456 # for reproducibility\n", + "np.random.seed(SEED)\n", + "random.seed(SEED)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yj_5JcO1cw4L" + }, + "source": [ + "## مجموعه داده متنی را بارگیری و قالب بندی کنید" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:13.476949Z", + "iopub.status.busy": "2024-02-16T06:26:13.476773Z", + "iopub.status.idle": "2024-02-16T06:26:13.502278Z", + "shell.execute_reply": "2024-02-16T06:26:13.501755Z" + }, + "id": "HztO4qU9cw4L", + "outputId": "c6ff9e95-6326-413e-a72f-6f3c05af1055" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"data\",\n \"rows\": 1000,\n \"fields\": [\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1000,\n \"samples\": [\n \"I made an international purchase, but the exchange rate was wrong\",\n \"I would like to know why a withdraw I made for some cash shows up as pending.\",\n \"I tried to get cash out of the ATM but it is taking too long\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12,\n \"min\": 11,\n \"max\": 46,\n \"num_unique_values\": 7,\n \"samples\": [\n 11,\n 13,\n 46\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "data" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textlabel
0I am still waiting on my card?11
1What can I do if my card still hasn't arrived after 2 weeks?11
2I have been waiting over a week. Is the card still coming?11
3Can I track my card while it is in the process of delivery?11
4How do I know if I will get my card, or if it is lost?11
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " text label\n", + "0 I am still waiting on my card? 11\n", + "1 What can I do if my card still hasn't arrived after 2 weeks? 11\n", + "2 I have been waiting over a week. Is the card still coming? 11\n", + "3 Can I track my card while it is in the process of delivery? 11\n", + "4 How do I know if I will get my card, or if it is lost? 11" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from datasets import load_dataset\n", + "\n", + "dataset = load_dataset(\"PolyAI/banking77\", split=\"train\")\n", + "data = pd.DataFrame(dataset[:1000])\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:13.504463Z", + "iopub.status.busy": "2024-02-16T06:26:13.504049Z", + "iopub.status.idle": "2024-02-16T06:26:13.508243Z", + "shell.execute_reply": "2024-02-16T06:26:13.507706Z" + }, + "id": "Ujp0luqRcw4M", + "outputId": "b438fed5-aa75-450d-dc84-0b3398960487" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This dataset has 7 classes.\n", + "Classes: {32, 34, 36, 11, 13, 46, 17}\n" + ] + } + ], + "source": [ + "raw_texts, labels = data[\"text\"].values, data[\"label\"].values\n", + "num_classes = len(set(labels))\n", + "\n", + "print(f\"This dataset has {num_classes} classes.\")\n", + "print(f\"Classes: {set(labels)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PVza57cecw4M" + }, + "source": [ + "مثال \t‫i-م را در این مجموعه داده مشاهده کنید:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:13.510435Z", + "iopub.status.busy": "2024-02-16T06:26:13.510163Z", + "iopub.status.idle": "2024-02-16T06:26:13.513358Z", + "shell.execute_reply": "2024-02-16T06:26:13.512906Z" + }, + "id": "lXHi90Kecw4M", + "outputId": "af8a9b19-986f-44fe-c564-dd83e400309e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Example Label: 11\n", + "Example Text: What can I do if my card still hasn't arrived after 2 weeks?\n" + ] + } + ], + "source": [ + "i = 1 # change this to view other examples from the dataset\n", + "print(f\"Example Label: {labels[i]}\")\n", + "print(f\"Example Text: {raw_texts[i]}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JH7UU9Wscw4M" + }, + "source": [ + "داده ها به صورت دو آرایه \t‫numpy ذخیره می شوند:\n", + "\n", + "1. \t‫ `raw_texts` درخواست های خدمات مشتری را در قالب متن ذخیره می کند\n", + "2. ‫ `labels` دسته های قصد (برچسب‌ها) را برای هر مثال ذخیره می‌ کند" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T0d80apCcw4M" + }, + "source": [ + "
\n", + "‫ داده خود را بیاورید ؟Bringing Your Own Data (BYOD)\n", + "\n", + "شما به راحتی می توانید مجموعه داده های متنی خود را جایگزین موارد فوق کنید و با بقیه آموزش ادامه دهید. \n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YLDeD09Ncw4M" + }, + "source": [ + "سپس رشته های متنی را به بردارهایی تبدیل می کنیم که به عنوان ورودی برای مدل های ‫ ML ما مناسب تر هستند.\n", + "\n", + "ما از نمایش های عددی از یک مدل ترانسفورمر از پیش آموزش دیده به عنوان ‫embeddings متن خود استفاده خواهیم کرد. کتابخانه ‫[Sentence Transformers](https://huggingface.co/docs/hub/sentence-transformers) روش های ساده ای را برای محاسبه این ‫ embedding ها برای داده های متنی ارائه می دهد. در اینجا، مدل ‫ `electra-small-discriminator` از پیش آموزش دیده را بارگیری می کنیم و سپس داده های خود را از طریق شبکه اجرا می کنیم تا یک ‫ embedding برداری از هر نمونه استخراج کنیم." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-16T06:26:13.515306Z", + "iopub.status.busy": "2024-02-16T06:26:13.515126Z", + "iopub.status.idle": "2024-02-16T06:26:18.244024Z", + "shell.execute_reply": "2024-02-16T06:26:18.243354Z" + }, + "id": "DbDb6Ni6cw4M" + }, + "outputs": [], + "source": [ + "transformer = SentenceTransformer('google/electra-small-discriminator')\n", + "text_embeddings = transformer.encode(raw_texts)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Moz0KJvzcw4M" + }, + "source": [ + "مدل ‫ ML بعدی ما مستقیماً بر روی عناصر ‫ `text_embeddings` عمل می‌کند تا درخواست‌های خدمات مشتری را طبقه‌بندی کند." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4FK2Q72gcw4M" + }, + "source": [ + "## یک مدل دسته بندی تعریف کنید و احتمالات پیش بینی شده خارج از نمونه را محاسبه کنید" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yaicOGrhcw4N" + }, + "source": [ + "یک روش معمول برای استفاده از شبکه های از پیش آموزش دیده‫ (pretrained networks) برای یک کار دسته بندی خاص، اضافه کردن یک لایه خروجی خطی و تنظیم دقیق پارامترهای شبکه بر روی داده های جدید است. با این حال این می تواند از نظر محاسباتی فشرده باشد. از طرف دیگر، می‌توانیم وزن‌های از پیش آموزش‌ دیده‌شده‫ (pretrained weights) شبکه را ثابت/منجمد ‫(freeze) کنیم و فقط لایه خروجی را بدون تکیه بر GPU (ها) آموزش دهیم. در اینجا ما این کار را به راحتی با قرار دادن یک مدل خطی ‫ scikit-learn در بالای ‫embedding های استخراج شده انجام می دهیم.\n", + "\n", + "برای شناسایی مشکلات برچسب، ‫cleanlab به یک پیش‌بینی احتمالی از مدل شما برای هر نقطه داده نیاز دارد. با این حال، این پیش‌بینی‌ها برای نقاط داده‌ای که مدل قبلاً روی آن‌ها آموزش داده شده، ‫ _overfit_ میباشد (و در نتیجه غیرقابل اعتماد) خواهد بود. ‫ cleanlab فقط برای استفاده با احتمالات کلاس پیش بینی شده ‫ **out-of-sample** **خارج از نمونه** در نظر گرفته شده. یعنی در نقاطی که از مدل در هنگام آموزش دادن کنار گذاشته شده اند.\n", + "\n", + "\n", + "در اینجا ما با استفاده از یک مدل ‫ Logistic Regression با ‫ cross-validation، احتمالات کلاس پیش‌بینی‌شده خارج از نمونه را برای هر نمونه در مجموعه داده خود به دست می‌آوریم.\n", + "مطمئن شوید که ستون‌های ‫`pred_probs` شما با توجه به ترتیب کلاس‌ها به درستی مرتب شده‌اند، که برای ‫ Datalab این است: از نظر واژگانی بر اساس نام کلاس مرتب شده‌اند." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-16T06:26:18.247142Z", + "iopub.status.busy": "2024-02-16T06:26:18.246652Z", + "iopub.status.idle": "2024-02-16T06:26:19.133641Z", + "shell.execute_reply": "2024-02-16T06:26:19.132953Z" + }, + "id": "tiIqp1arcw4N", + "scrolled": true + }, + "outputs": [], + "source": [ + "model = LogisticRegression(max_iter=400)\n", + "\n", + "pred_probs = cross_val_predict(model, text_embeddings, labels, method=\"predict_proba\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9s0pcMk1cw4N" + }, + "source": [ + "## از ‫ Cleanlab برای پیدا کردن مشکلات در مجموعه داده تان استفاده کنید؟" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qa8ltsx9cw4N" + }, + "source": [ + "با توجه به ‫ feature embedding های داده شده و احتمالات کلاس پیش‌بینی‌شده (خارج از نمونه) به‌دست‌آمده از هر مدلی که دارید، ‫ cleanlab می‌تواند به سرعت به شما در شناسایی نمونه‌های با کیفیت پایین در مجموعه داده‌تان کمک کند.\n", + "\n", + "در اینجا، ما از ‫`Datalab` در ‫Cleanlab برای یافتن مشکلات در داده‌های خود استفاده می‌کنیم. Datalab راه های مختلفی برای بارگذاری داده ها ارائه می دهد. ما به سادگی ‫ feature های آموزشی و برچسب های دارای اختلال را در یک ‫ dictionary قرار می دهیم." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-16T06:26:19.136722Z", + "iopub.status.busy": "2024-02-16T06:26:19.136482Z", + "iopub.status.idle": "2024-02-16T06:26:19.139419Z", + "shell.execute_reply": "2024-02-16T06:26:19.138870Z" + }, + "id": "UNj4rWW2cw4N" + }, + "outputs": [], + "source": [ + "data_dict = {\"texts\": raw_texts, \"labels\": labels}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IpNmBc_Lcw4N" + }, + "source": [ + "تنها چیزی که برای بررسی داده های شما نیاز است، فراخوانی ‫`()find_issues` است. ما احتمالات پیش‌بینی‌شده و ‫ feature embedding های به‌دست‌آمده در بالا را به آن میدهیم، اما شما لزوماً نیازی به ارائه همه این اطلاعات بسته به نوع مسائلی که به آن‌ها علاقه دارید ندارید. هرچه شما ورودی بیشتری فراهیم کنید ‫ `Datalab` میتواند مشکلات و مسایل بیشتری را در داده شما شناسایی کند. استفاده از یک مدل بهتر برای تولید این ورودی‌ها، تضمین می‌کند که ‫ cleanlab با دقت بیشتری مسائل را تخمین می‌زند." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-16T06:26:19.141893Z", + "iopub.status.busy": "2024-02-16T06:26:19.141673Z", + "iopub.status.idle": "2024-02-16T06:26:20.809087Z", + "shell.execute_reply": "2024-02-16T06:26:20.808461Z" + }, + "id": "R0xuUDRWcw4N", + "scrolled": true + }, + "outputs": [], + "source": [ + "lab = Datalab(data_dict, label_name=\"labels\")\n", + "lab.find_issues(pred_probs=pred_probs, features=text_embeddings)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d6Iqy0vGq7w9" + }, + "source": [ + ":خروجی میتواند به صورت زیر باشد\n", + "\n", + "```bash\n", + "Finding null issues ...\n", + "Finding label issues ...\n", + "Finding outlier issues ...\n", + "Fitting OOD estimator based on provided features ...\n", + "Finding near_duplicate issues ...\n", + "Finding non_iid issues ...\n", + "Finding class_imbalance issues ...\n", + "Finding underperforming_group issues ...\n", + "\n", + "Audit complete. 62 issues found in the dataset.\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4aitesJccw4N" + }, + "source": [ + ": پس از تکمیل رسیدگی، یافته ها را با استفاده از روش ‫ `report` مرور کنید" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.813057Z", + "iopub.status.busy": "2024-02-16T06:26:20.811515Z", + "iopub.status.idle": "2024-02-16T06:26:20.838760Z", + "shell.execute_reply": "2024-02-16T06:26:20.838088Z" + }, + "id": "ALXu32nzcw4N", + "outputId": "733d2ed4-5bcd-49e6-93a7-285f3d66278c", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Here is a summary of the different kinds of issues found in the data:\n", + "\n", + " issue_type num_issues\n", + " outlier 37\n", + "near_duplicate 14\n", + " label 10\n", + " non_iid 1\n", + "\n", + "Dataset Information: num_examples: 1000, num_classes: 7\n", + "\n", + "\n", + "---------------------- outlier issues ----------------------\n", + "\n", + "About this issue:\n", + "\tExamples that are very different from the rest of the dataset \n", + " (i.e. potentially out-of-distribution or rare/anomalous instances).\n", + " \n", + "\n", + "Number of examples with this issue: 37\n", + "Overall dataset quality in terms of this issue: 0.3671\n", + "\n", + "Examples representing most severe instances of this issue:\n", + " is_outlier_issue outlier_score\n", + "791 True 0.024866\n", + "601 True 0.031162\n", + "863 True 0.060738\n", + "355 True 0.064199\n", + "157 True 0.065075\n", + "\n", + "\n", + "------------------ near_duplicate issues -------------------\n", + "\n", + "About this issue:\n", + "\tA (near) duplicate issue refers to two or more examples in\n", + " a dataset that are extremely similar to each other, relative\n", + " to the rest of the dataset. The examples flagged with this issue\n", + " may be exactly duplicated, or lie atypically close together when\n", + " represented as vectors (i.e. feature embeddings).\n", + " \n", + "\n", + "Number of examples with this issue: 14\n", + "Overall dataset quality in terms of this issue: 0.5961\n", + "\n", + "Examples representing most severe instances of this issue:\n", + " is_near_duplicate_issue near_duplicate_score near_duplicate_sets distance_to_nearest_neighbor\n", + "459 True 0.009544 [429] 0.000566\n", + "429 True 0.009544 [459] 0.000566\n", + "501 True 0.046044 [412, 517] 0.002781\n", + "412 True 0.046044 [501] 0.002781\n", + "698 True 0.054626 [607] 0.003314\n", + "\n", + "\n", + "----------------------- label issues -----------------------\n", + "\n", + "About this issue:\n", + "\tExamples whose given label is estimated to be potentially incorrect\n", + " (e.g. due to annotation error) are flagged as having label issues.\n", + " \n", + "\n", + "Number of examples with this issue: 10\n", + "Overall dataset quality in terms of this issue: 0.9930\n", + "\n", + "Examples representing most severe instances of this issue:\n", + " is_label_issue label_score given_label predicted_label\n", + "379 False 0.025486 32 11\n", + "100 False 0.032102 11 36\n", + "300 False 0.037742 32 46\n", + "485 True 0.057666 17 34\n", + "159 True 0.059408 13 11\n", + "\n", + "\n", + "---------------------- non_iid issues ----------------------\n", + "\n", + "About this issue:\n", + "\tWhether the dataset exhibits statistically significant\n", + " violations of the IID assumption like:\n", + " changepoints or shift, drift, autocorrelation, etc.\n", + " The specific violation considered is whether the\n", + " examples are ordered such that almost adjacent examples\n", + " tend to have more similar feature values.\n", + " \n", + "\n", + "Number of examples with this issue: 1\n", + "Overall dataset quality in terms of this issue: 0.0000\n", + "\n", + "Examples representing most severe instances of this issue:\n", + " is_non_iid_issue non_iid_score\n", + "988 True 0.563774\n", + "975 False 0.570179\n", + "997 False 0.571891\n", + "967 False 0.572357\n", + "956 False 0.577413\n", + "\n", + "Additional Information: \n", + "p-value: 0.0\n" + ] + } + ], + "source": [ + "lab.report()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sAuLE6Macw4N" + }, + "source": [ + "### مشکلات برچسب زنی\n", + "\n", + "این گزارش نشان می دهد که ‫ cleanlab بسیاری از مشکلات برچسب را در مجموعه داده ما شناسایی کرده است. ما می‌توانیم ببینیم کدام نمونه‌ها به‌عنوان احتمال اشتباه برچسب‌گذاری شده‌اند و امتیاز کیفیت برچسب برای هر نمونه با استفاده از متد ‫ `get_issues`، مشخص کردن ‫ `label` به‌عنوان آرگومان برای تمرکز بر روی مسائل برچسب در داده‌ها." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.843083Z", + "iopub.status.busy": "2024-02-16T06:26:20.842045Z", + "iopub.status.idle": "2024-02-16T06:26:20.852505Z", + "shell.execute_reply": "2024-02-16T06:26:20.852016Z" + }, + "id": "6gATaXWscw4N", + "outputId": "0d0e70c5-1548-4fe6-b67e-668c8dfedf0e", + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"label_issues\",\n \"rows\": 1000,\n \"fields\": [\n {\n \"column\": \"is_label_issue\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 2,\n \"samples\": [\n true,\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.2150390046430028,\n \"min\": 0.025486333476725527,\n \"max\": 0.999751760644687,\n \"num_unique_values\": 1000,\n \"samples\": [\n 0.98954913626076,\n 0.44264330724848383\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"given_label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12,\n \"min\": 11,\n \"max\": 46,\n \"num_unique_values\": 7,\n \"samples\": [\n 11,\n 13\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"predicted_label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12,\n \"min\": 11,\n \"max\": 46,\n \"num_unique_values\": 7,\n \"samples\": [\n 11,\n 13\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "label_issues" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
is_label_issuelabel_scoregiven_labelpredicted_label
0False0.9039261111
1False0.8605441111
2False0.6583091111
3False0.6970851111
4False0.4349341111
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " is_label_issue label_score given_label predicted_label\n", + "0 False 0.903926 11 11\n", + "1 False 0.860544 11 11\n", + "2 False 0.658309 11 11\n", + "3 False 0.697085 11 11\n", + "4 False 0.434934 11 11" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "label_issues = lab.get_issues(\"label\")\n", + "label_issues.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eBLFyMMcs5NT" + }, + "source": [ + "| | is_label_issue | label_score | given_label | predicted_label |\n", + "|----------------|-------------|-------------|-----------------|-----------------|\n", + "| 0 | False | 0.903926 | 11 | 11 |\n", + "| 1 | False | 0.860544 | 11 | 11 |\n", + "| 2 | False | 0.658309 | 11 | 11 |\n", + "| 3 | False | 0.697085 | 11 | 11 |\n", + "| 4 | False | 0.434934 | 11 | 11 |\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-tYlhmKYcw4N" + }, + "source": [ + "این روش یک دیتافریم حاوی امتیاز کیفیت برچسب ‫(label quality score) را برای هر مثال برمی گرداند. این نمرات عددی بین 0 و 1 قرار دارند، که در آن نمرات پایین تر نشان می دهد که نمونه هایی با احتمال بیشتری به اشتباه برچسب زده می شوند. این دیتافریم همچنین حاوی یک ستون بولین است که مشخص می کند آیا هر نمونه دارای مشکل برچسب است یا خیر (که نشان می دهد احتمالاً برچسب اشتباهی دارد)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XcD-oCLlcw4N" + }, + "source": [ + "ما می‌توانیم زیرمجموعه‌ای از نمونه‌های علامت گذاری شده با مشکلات برچسب را دریافت کنیم، و همچنین بر اساس امتیاز کیفیت برچسب مرتب‌ سازی کنیم تا شاخص‌های 5 نمونه با احتمال اشتباه برچسب‌گذاری شده را در مجموعه داده ما پیدا کنیم. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.854743Z", + "iopub.status.busy": "2024-02-16T06:26:20.854394Z", + "iopub.status.idle": "2024-02-16T06:26:20.858961Z", + "shell.execute_reply": "2024-02-16T06:26:20.858409Z" + }, + "id": "QtloV-NBcw4N", + "outputId": "86c32e99-7dc8-470c-b102-f0f5acc13855" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cleanlab found 10 potential label errors in the dataset.\n", + "Here are indices of the top 5 most likely errors: \n", + " [379 100 300 485 159]\n" + ] + } + ], + "source": [ + "identified_label_issues = label_issues[label_issues[\"is_label_issue\"] == True]\n", + "lowest_quality_labels = label_issues[\"label_score\"].argsort()[:5].to_numpy()\n", + "\n", + "print(\n", + " f\"cleanlab found {len(identified_label_issues)} potential label errors in the dataset.\\n\"\n", + " f\"Here are indices of the top 5 most likely errors: \\n {lowest_quality_labels}\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8J49bTeocw4N" + }, + "source": [ + "بیایید برخی از محتمل ترین خطاهای برچسب را مرور کنیم.\n", + "\n", + "در اینجا ما 5 نمونه برتر شناسایی شده به عنوان محتمل ترین خطاهای برچسب در مجموعه داده را همراه با برچسب (اصلی) آنها و یک برچسب جایگزین پیشنهادی از ‫cleanlab نشان می دهیم." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 276 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.861048Z", + "iopub.status.busy": "2024-02-16T06:26:20.860742Z", + "iopub.status.idle": "2024-02-16T06:26:20.867443Z", + "shell.execute_reply": "2024-02-16T06:26:20.866904Z" + }, + "id": "c-niFVJvcw4N", + "outputId": "5bbc5217-3581-4e2e-8b56-7a1fc77cc427" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"data_with_suggested_labels\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"can you share card tracking number?\",\n \"Is there any way to see my card in the app?\",\n \"If I need to cash foreign transfers, how does that work?\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"given_label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10,\n \"min\": 11,\n \"max\": 32,\n \"num_unique_values\": 4,\n \"samples\": [\n 11,\n 13,\n 32\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"suggested_label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 15,\n \"min\": 11,\n \"max\": 46,\n \"num_unique_values\": 4,\n \"samples\": [\n 36,\n 34,\n 11\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textgiven_labelsuggested_label
379Is there a specific source that the exchange rate for the transfer I'm planning on making is pulled from?3211
100can you share card tracking number?1136
300If I need to cash foreign transfers, how does that work?3246
485Was I charged more than I should of been for a currency exchange?1734
159Is there any way to see my card in the app?1311
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " text \\\n", + "379 Is there a specific source that the exchange rate for the transfer I'm planning on making is pulled from? \n", + "100 can you share card tracking number? \n", + "300 If I need to cash foreign transfers, how does that work? \n", + "485 Was I charged more than I should of been for a currency exchange? \n", + "159 Is there any way to see my card in the app? \n", + "\n", + " given_label suggested_label \n", + "379 32 11 \n", + "100 11 36 \n", + "300 32 46 \n", + "485 17 34 \n", + "159 13 11 " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_with_suggested_labels = pd.DataFrame(\n", + " {\"text\": raw_texts, \"given_label\": labels, \"suggested_label\": label_issues[\"predicted_label\"]}\n", + ")\n", + "data_with_suggested_labels.iloc[lowest_quality_labels]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "g2dvMySPtkbL" + }, + "source": [ + ":خروجی دستور بالا به شکل زیر است\n", + " \n", + "| | text | given_label | suggested_label |\n", + "|------|-----------------------------------------------------------------------------------------------------------|----------------|-----------------|\n", + "| 379 | Is there a specific source that the exchange rate for the transfer I'm planning on making is pulled from? | 32 | 11 |\n", + "| 100 | can you share card tracking number? | 11 | 36 |\n", + "| 300 | If I need to cash foreign transfers, how does that work? | 32 | 46 |\n", + "| 485 | Was I charged more than I should of been for a currency exchange? | 17 | 34 |\n", + "| 159 | Is there any way to see my card in the app? | 13 | 11 |\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eH8ltGj0cw4O", + "scrolled": true + }, + "source": [ + "اینها خطاهای برچسب زنی بسیار واضحی هستند که ‫cleanlab در این داده ها شناسایی کرده است! توجه داشته باشید که ‫`given_label` به درستی قصد این درخواست‌ها را منعکس نمی‌کند، هر کسی که این مجموعه داده را تولید کرده است اشتباهات زیادی مرتکب شده است که قبل از مدل‌سازی داده‌ها باید به آنها رسیدگی شود." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ULFeD3bzcw4O" + }, + "source": [ + "### مشکلات داده های پرت/دورافتاده‫ Outlier\n", + "\n", + "بر اساس این گزارش، مجموعه داده ما حاوی برخی موارد داده پرت است.\n", + "از طریق ‫`get_issues` می‌توانیم ببینیم کدام نمونه‌ها پرت هستند (و یک امتیاز کیفی عددی که مشخص می‌کند هر نمونه چقدر معمولی به نظر می‌رسد). ما ‫ DataFrame دیتافریم به دست آمده را بر اساس امتیاز کیفیت داده پرتِ ‫cleanlab مرتب می کنیم تا دورافتاده ترین داده های پرت را در مجموعه داده خود ببینیم." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.869718Z", + "iopub.status.busy": "2024-02-16T06:26:20.869251Z", + "iopub.status.idle": "2024-02-16T06:26:20.876386Z", + "shell.execute_reply": "2024-02-16T06:26:20.875851Z" + }, + "id": "jBLuqUXBcw4O", + "outputId": "d5d2dbc6-c708-4750-e3ea-6dcd5c24a64d" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"outlier_issues\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"is_outlier_issue\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 1,\n \"samples\": [\n true\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"outlier_score\",\n \"properties\": {\n \"dtype\": \"float32\",\n \"num_unique_values\": 5,\n \"samples\": [\n 0.03116183541715145\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
is_outlier_issueoutlier_score
791True0.024866
601True0.031162
863True0.060738
355True0.064199
157True0.065075
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " is_outlier_issue outlier_score\n", + "791 True 0.024866\n", + "601 True 0.031162\n", + "863 True 0.060738\n", + "355 True 0.064199\n", + "157 True 0.065075" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outlier_issues = lab.get_issues(\"outlier\")\n", + "outlier_issues.sort_values(\"outlier_score\").head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "F7Z2VJQAujui" + }, + "source": [ + ":خروجی به شکل زیر خواهد بود\n", + "\n", + "| | is_outlier_issue | outlier_score |\n", + "|---| ----------------|---------------|\n", + "| 791 | True | 0.024866 |\n", + "| 601 | True | 0.031162 |\n", + "| 863 | True | 0.060738 |\n", + "| 355 | True | 0.064199 |\n", + "| 157 | True | 0.065075 |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 246 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.878435Z", + "iopub.status.busy": "2024-02-16T06:26:20.878117Z", + "iopub.status.idle": "2024-02-16T06:26:20.884073Z", + "shell.execute_reply": "2024-02-16T06:26:20.883533Z" + }, + "id": "Kjn-muLGcw4O", + "outputId": "a5ae0a32-cac4-442d-89fc-8f7f64da9dfc" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"data\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"$1 charge in transaction.\",\n \"lost card found, want to put it back in app\",\n \"My atm withdraw is stillpending\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13,\n \"min\": 13,\n \"max\": 46,\n \"num_unique_values\": 4,\n \"samples\": [\n 34,\n 13,\n 46\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textlabel
791withdrawal pending meaning?46
601$1 charge in transaction.34
863My atm withdraw is stillpending46
355explain the interbank exchange rate32
157lost card found, want to put it back in app13
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " text label\n", + "791 withdrawal pending meaning? 46\n", + "601 $1 charge in transaction. 34\n", + "863 My atm withdraw is stillpending 46\n", + "355 explain the interbank exchange rate 32\n", + "157 lost card found, want to put it back in app 13" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lowest_quality_outliers = outlier_issues[\"outlier_score\"].argsort()[:5]\n", + "\n", + "data.iloc[lowest_quality_outliers]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kuZMsLPZYARL" + }, + "source": [ + ":یک نمونه خروجی برای پایین ترین کیفیت های داده پرت به شکل زیر است\n", + "\n", + "|index|text|label|\n", + "|---|---|---|\n", + "|791|withdrawal pending meaning?|46|\n", + "|601|$1 charge in transaction\\.|34|\n", + "|863|My atm withdraw is stillpending|46|\n", + "|355|explain the interbank exchange rate|32|\n", + "|157|lost card found, want to put it back in app|13|\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sBal-KDrcw4R" + }, + "source": [ + "می بینیم که ‫cleanlab ورودی هایی را در این مجموعه داده شناسایی کرده است که به نظر نمی رسد درخواست مشتری مناسبی باشد. به نظر می‌رسد موارد پرت در این مجموعه داده‌ها درخواست‌های مشتری خارج از محدوده و سایر متن‌های بی‌معنی است که برای دسته بندی قصد منطقی نیست. به دقت در نظر بگیرید که آیا چنین موارد پرت ممکن است بر مدل‌سازی داده‌های شما تأثیر منفی بگذارد یا خیر، و در صورت وجود، حذف آنها از مجموعه داده را در نظر بگیرید." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ch71b_0qcw4S" + }, + "source": [ + "### مشکلات تقریبا تکراری\n", + "\n", + "بر اساس این گزارش، مجموعه داده ما شامل مجموعه‌ای از نمونه‌های تقریبا تکراری است.\n", + "از طریق ‫`get_issues` می‌توانیم ببینیم کدام نمونه‌ها (تقریباً) تکراری هستند (و یک امتیاز کیفی عددی که مشخص می‌کند چقدر هر نمونه با نزدیک‌ترین همسایه‌اش در مجموعه داده متفاوت است). ما DataFrame حاصل را بر اساس نمره کیفیت تقریبا تکراریِ ‫cleanlab مرتب می‌کنیم تا نمونه‌های متنی را در مجموعه داده خود ببینیم که تقریباً تکراری هستند." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 226 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.886079Z", + "iopub.status.busy": "2024-02-16T06:26:20.885805Z", + "iopub.status.idle": "2024-02-16T06:26:20.894466Z", + "shell.execute_reply": "2024-02-16T06:26:20.893919Z" + }, + "id": "TbI49Rdccw4S", + "outputId": "1978cdb5-02c2-4f82-e7d5-553ad1b6dca9" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"duplicate_issues\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"is_near_duplicate_issue\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 1,\n \"samples\": [\n true\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"near_duplicate_score\",\n \"properties\": {\n \"dtype\": \"float32\",\n \"num_unique_values\": 3,\n \"samples\": [\n 0.00954437255859375\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"near_duplicate_sets\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"distance_to_nearest_neighbor\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.0013286758192588926,\n \"min\": 0.0005658268928527832,\n \"max\": 0.0033143162727355957,\n \"num_unique_values\": 3,\n \"samples\": [\n 0.0005658268928527832\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
is_near_duplicate_issuenear_duplicate_scorenear_duplicate_setsdistance_to_nearest_neighbor
459True0.009544[429]0.000566
429True0.009544[459]0.000566
501True0.046044[412, 517]0.002781
412True0.046044[501]0.002781
698True0.054626[607]0.003314
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " is_near_duplicate_issue near_duplicate_score near_duplicate_sets \\\n", + "459 True 0.009544 [429] \n", + "429 True 0.009544 [459] \n", + "501 True 0.046044 [412, 517] \n", + "412 True 0.046044 [501] \n", + "698 True 0.054626 [607] \n", + "\n", + " distance_to_nearest_neighbor \n", + "459 0.000566 \n", + "429 0.000566 \n", + "501 0.002781 \n", + "412 0.002781 \n", + "698 0.003314 " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "duplicate_issues = lab.get_issues(\"near_duplicate\")\n", + "duplicate_issues.sort_values(\"near_duplicate_score\").head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EawP0y1Lcw4S" + }, + "source": [ + "نتایج بالا نشان می‌دهد که ‫cleanlab کدام نمونه‌ها را تقریباً تکراری در نظر می‌گیرد (ردیف‌هایی که ‫`is_near_duplicate_issue == True` است). در اینجا، می بینیم که مثال های 459 و 429 تقریباً تکراری هستند، همانطور که نمونه های 501 و 412 هستند.\n", + "\n", + "بیایید این نمونه ها را ببینیم تا ببینیم چقدر شبیه هستند." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 182 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.896501Z", + "iopub.status.busy": "2024-02-16T06:26:20.896175Z", + "iopub.status.idle": "2024-02-16T06:26:20.901983Z", + "shell.execute_reply": "2024-02-16T06:26:20.901420Z" + }, + "id": "0TEW5igFcw4S", + "outputId": "86343985-26bb-44ce-f27b-610357f43030" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"data\",\n \"rows\": 2,\n \"fields\": [\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"I purchased something overseas and the incorrect exchange rate was applied.\",\n \"I purchased something abroad and the incorrect exchange rate was applied.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 17,\n \"max\": 17,\n \"num_unique_values\": 1,\n \"samples\": [\n 17\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textlabel
459I purchased something abroad and the incorrect exchange rate was applied.17
429I purchased something overseas and the incorrect exchange rate was applied.17
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " text \\\n", + "459 I purchased something abroad and the incorrect exchange rate was applied. \n", + "429 I purchased something overseas and the incorrect exchange rate was applied. \n", + "\n", + " label \n", + "459 17 \n", + "429 17 " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.iloc[[459, 429]]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DoAyD-FZpsSm" + }, + "source": [ + ": نمونه خروجی\n", + "\n", + "|index|text|label|\n", + "|---|---|---|\n", + "|459|I purchased something abroad and the incorrect exchange rate was applied\\.|17|\n", + "|429|I purchased something overseas and the incorrect exchange rate was applied\\.|17|" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 198 + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.904159Z", + "iopub.status.busy": "2024-02-16T06:26:20.903821Z", + "iopub.status.idle": "2024-02-16T06:26:20.909681Z", + "shell.execute_reply": "2024-02-16T06:26:20.909160Z" + }, + "id": "VnbIBYaHcw4S", + "outputId": "8b00bb96-0d9d-43f6-b85f-c41e437d41b5" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"data\",\n \"rows\": 2,\n \"fields\": [\n {\n \"column\": \"text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"The exchange rate you are using is bad.This can't be the official interbank exchange rate.\",\n \"The exchange rate you are using is really bad.This can't be the official interbank exchange rate.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 17,\n \"max\": 17,\n \"num_unique_values\": 1,\n \"samples\": [\n 17\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textlabel
501The exchange rate you are using is really bad.This can't be the official interbank exchange rate.17
412The exchange rate you are using is bad.This can't be the official interbank exchange rate.17
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " text \\\n", + "501 The exchange rate you are using is really bad.This can't be the official interbank exchange rate. \n", + "412 The exchange rate you are using is bad.This can't be the official interbank exchange rate. \n", + "\n", + " label \n", + "501 17 \n", + "412 17 " + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.iloc[[501, 412]]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y4QD35-dqeGg" + }, + "source": [ + ": نمونه خروجی\n", + "\n", + "|index|text|label|\n", + "|---|---|---|\n", + "|501|The exchange rate you are using is really bad\\.This can't be the official interbank exchange rate\\.|17|\n", + "|412|The exchange rate you are using is bad\\.This can't be the official interbank exchange rate\\.|17|" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UG8xfTa5cw4S" + }, + "source": [ + "می بینیم که این دو مجموعه درخواست در واقع بسیار شبیه یکدیگر هستند! نمونه های تقریباً تکراری در یک مجموعه داده ممکن است تأثیرات ناخواسته ای روی مدل ها داشته باشد و در مورد تقسیم آنها در مجموعه های آموزشی‫ (training)/تست ‫(test) محتاط باشید. درباره مدیریت نزدیک به موارد تکراری در مجموعه داده از ‫[the FAQ](../faq.html#How-to-handle-near-duplicate-data-identified-by-cleanlab?) بیشتر بیاموزید." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iefctl3rcw4S" + }, + "source": [ + "### مشکلات توزیع نا-یکسان و نا-مستقل ‫Non-IID (انحراف داده ها)\n", + "بر اساس این گزارش، به نظر نمی رسد مجموعه داده ما مستقل و به طور یکسان توزیع شده باشد ‫(IID). امتیاز کلی ‫non-iid برای مجموعه داده (نمایش داده شده در زیر) مربوط به ‫`p-value` یک آزمون آماری است که نشان می دهد ترتیب نمونه ها در مجموعه داده مربوط به شباهت بین مقادیر ویژگی آنها است یا خیر. یک ‫`p-value` پایین کاملا نشان می‌دهد که مجموعه داده، فرض ‫IID را نقض می‌کند، که یک فرض کلیدی برای نتیجه‌گیری (مدل‌های) تولید شده از مجموعه داده برای تعمیم به جمعیت بزرگ‌تر است." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-02-16T06:26:20.911817Z", + "iopub.status.busy": "2024-02-16T06:26:20.911434Z", + "iopub.status.idle": "2024-02-16T06:26:20.915049Z", + "shell.execute_reply": "2024-02-16T06:26:20.914501Z" + }, + "id": "oEMWOQQPcw4S", + "outputId": "18eca4cd-2451-4850-960c-0bf1e35d9729" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p_value = lab.get_info('non_iid')['p-value']\n", + "p_value" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6swPCnncw4S" + }, + "source": [ + "در اینجا، مجموعه داده ما به‌عنوان ‫non-IID علامت شد، زیرا ردیف‌ها بر اساس برچسب کلاس در داده‌های اصلی مرتب شدند. اگر به یاد داشته باشیم که ردیف‌ها را قبل از آموزش مدل و تقسیم داده‌ها مخلوط کنیم، ممکن است این ‫(benign) خوش‌خیم باشد. اما اگر نمی‌دانید چرا داده‌های شما به‌عنوان ‫non-IID علامت گذاری شده‌اند، باید نگران انحراف احتمالی داده یا تعاملات غیرمنتظره بین نقاط داده باشید (مقادیر آنها ممکن است از نظر آماری مستقل نباشند). به دقت فکر کنید که داده‌های تست آینده ممکن است چگونه باشد (و اینکه آیا داده‌های شما نماینده جمعیتی است که به آن اهمیت می‌دهید یا خیر). شما نباید قبل از اجرای آزمایش non-IID داده های خود را مخلوط کنید (نتیجه گیری آن را باطل می کند)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uCoKXqBrcw4S" + }, + "source": [ + "همانطور که در بالا نشان داده شد، ‫cleanlab می‌تواند به‌طور خودکار محتمل‌ترین مسائل موجود در مجموعه داده شما را فهرست کند تا به شما کمک کند مجموعه داده خود را برای مدل‌سازی بعدی مدیریت کنید. با این فهرست کوتاه، می‌توانید تصمیم بگیرید که آیا این مشکلات برچسب را برطرف کنید یا نمونه‌های غیرمعنا یا تکراری را از مجموعه داده خود حذف کنید تا مجموعه داده با کیفیت بالاتری برای آموزش مدل بعدی ‫ML خود به دست آورید. تشخیص مشکل ‫cleanlab را می توان با خروجی های *هر* نوع مدلی که در ابتدا آموزش داده اید اجرا کرد." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qnncoRWUcw4S" + }, + "source": [ + "### پروژه متن باز ‫Cleanlab\n", + "\n", + "‫[Cleanlab](https://github.com/cleanlab/cleanlab) یک بسته استاندارد هوش مصنوعی مبتنی بر داده است که برای رسیدگی به مسایل کیفیت داده برای داده های کثیف ‫(messy) و واقعی طراحی شده است.\n", + "\n", + "به مخزن ‫Cleanlab در Github ستاره بدهید، و ما از ‫[contribution](https://github.com/cleanlab/cleanlab/issues?q=is:issue+is:open+label:%22good+first+issue%22 ) به پروژه استقبال می کنیم." + ] + } + ], + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 015b3d6d2d466bb80f18767e6ea7021582a025a5 Mon Sep 17 00:00:00 2001 From: mansoorinho Date: Mon, 29 Apr 2024 14:00:08 +0200 Subject: [PATCH 2/3] typo fixed. --- notebooks/fa/_toctree.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/fa/_toctree.yml b/notebooks/fa/_toctree.yml index e35f3223..ac309890 100644 --- a/notebooks/fa/_toctree.yml +++ b/notebooks/fa/_toctree.yml @@ -3,4 +3,4 @@ - local: index title: کتاب متن باز دستورالعمل هوش مصنوعی (Cookbook) - local: issues_in_text_dataset - title: Cleanlab تشخیص مشکلات در یک مجموعه داده متنی با \ No newline at end of file + title: Cleanlab شناسایی مشکلات در یک مجموعه داده متنی با \ No newline at end of file From 843084418173af02800d53f90172cf45bd558cb8 Mon Sep 17 00:00:00 2001 From: mansoorinho Date: Mon, 29 Apr 2024 14:15:32 +0200 Subject: [PATCH 3/3] author name fixed. --- notebooks/fa/issues_in_text_dataset.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/notebooks/fa/issues_in_text_dataset.ipynb b/notebooks/fa/issues_in_text_dataset.ipynb index e4ff7491..f82a2e48 100644 --- a/notebooks/fa/issues_in_text_dataset.ipynb +++ b/notebooks/fa/issues_in_text_dataset.ipynb @@ -15,7 +15,9 @@ "id": "0yPBE0Xccw4J" }, "source": [ - "[Mansoor Nabawi](https://github.com/Mansoorinho) :نویسنده\n", + "نویسنده: ‫[Aravind Putrevu](https://huggingface.co/aravindputrevu)\n", + "\n", + "[Mansoor Nabawi](https://github.com/Mansoorinho) :مترجم\n", " \n", "\n", "در این آموزش شروع سریع 5 دقیقه ای, ما از ‫ Cleanlab برای شناسایی مشکلات مختلف در یک مجموعه داده دسته بندی قصد (intent classifcation dataset) که از درخواست های خدمات مشتری (متن) در یک بانک آنلاین تشکیل شده است استفاده میکنیم. ما زیرمجموعه‌ای از [Banking77-OOS Dataset](https://arxiv.org/abs/2106.04564) را در نظر می‌گیریم که شامل 1000 درخواست خدمات مشتری است که بر اساس هدفشان در 10 دسته طبقه‌بندی شده اند. (شما میتوانید همین کد را روی هر مجموعه داده دسته بندی اجرا کنید). [Cleanlab](https://github.com/cleanlab/cleanlab) به‌طور خودکار نمونه‌های بد را در مجموعه داده‌های ما شناسایی می‌کند، از جمله داده‌های دارای برچسب اشتباه، نمونه‌ داده های پرت (outliers)، یا نمونه‌های مبهم دیگر. قبل از اینکه به مدل‌سازی داده‌هایتان بپردازید! ,فیلتر کردن یا تصحیح چنین مثال‌های بد را در نظر بگیرید.\n",