تصویر بذریعہ ایڈیٹر
قدرتی لینگویج پروسیسنگ میں بڑھتی ہوئی دلچسپی کے ساتھ، زیادہ سے زیادہ پریکٹیشنرز دیوار سے ٹکرا رہے ہیں اس لیے نہیں کہ وہ ایل ایل ایم کو بنا یا ٹھیک نہیں کر سکتے، بلکہ اس لیے کہ ان کا ڈیٹا گڑبڑ ہے!
ہم ٹیکسٹ ڈیٹا میں شور والے لیبلز کو ٹھیک کرنے کے لیے سادہ، لیکن بہت موثر کوڈنگ طریقہ کار دکھائیں گے۔ ہم حقیقی دنیا کے متنی ڈیٹا میں 2 عام منظرناموں سے نمٹیں گے:
- ایک زمرہ ہونا جس میں چند دیگر زمروں کی مخلوط مثالیں شامل ہوں۔ مجھے اس قسم کے زمرے کو میٹا زمرہ کہنا پسند ہے۔
- 2 یا اس سے زیادہ زمرے ہیں جنہیں 1 زمرہ میں ضم کیا جانا چاہئے کیونکہ ان سے تعلق رکھنے والے متن ایک ہی موضوع کا حوالہ دیتے ہیں۔
ہم اس ٹیوٹوریل (CCO لائسنس) کے لیے بنائے گئے ITSM (IT سروس مینجمنٹ) ڈیٹاسیٹ کا استعمال کریں گے۔ یہ نیچے کے لنک سے Kaggle پر دستیاب ہے:
https://www.kaggle.com/datasets/nikolagreb/small-itsm-dataset
یہ تمام لائبریریوں کی درآمد اور بنیادی ڈیٹا کی جانچ کے ساتھ شروع کرنے کا وقت ہے۔ اپنے آپ کو سنبھالیں، کوڈ آ رہا ہے!
import pandas as pd
import numpy as np
import string from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import ComplementNB
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn import metrics df = pd.read_excel("ITSM_data.xlsx")
df.info()
RangeIndex: 118 entries, 0 to 117
Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 ID_request 118 non-null int64 1 Text 117 non-null object 2 Category 115 non-null object 3 Solution 115 non-null object 4 Date_request_recieved 118 non-null datetime64[ns] 5 Date_request_solved 118 non-null datetime64[ns] 6 ID_agent 118 non-null int64 dtypes: datetime64[ns](2), int64(2), object(3)
memory usage: 6.6+ KB
ہر قطار ITSM ڈیٹا بیس میں ایک اندراج کی نمائندگی کرتی ہے۔ ہم کسی صارف کے لکھے ہوئے ٹکٹ کے متن کی بنیاد پر ٹکٹ کی کیٹیگری کا اندازہ لگانے کی کوشش کریں گے۔ آئیے بیان کردہ کاروباری استعمال کے معاملات کے لیے انتہائی اہم شعبوں کا گہرائی سے جائزہ لیں۔
for text, category in zip(df.Text.sample(3, random_state=2), df.Category.sample(3, random_state=2)): print("TEXT:") print(text) print("CATEGORY:") print(category) print("-"*100)
TEXT:
I just want to talk to an agent, there are too many problems on my pc to be explained in one ticket. Please call me when you see this, whoever you are. (talk to agent)
CATEGORY:
Asana
----------------------------------------------------------------------------------------------------
TEXT:
Asana funktionierte nicht mehr, nachdem ich meinen Laptop neu gestartet hatte. Bitte helfen Sie.
CATEGORY:
Help Needed
----------------------------------------------------------------------------------------------------
TEXT:
My mail stopped to work after I updated Windows.
CATEGORY:
Outlook
----------------------------------------------------------------------------------------------------
اگر ہم پہلے دو ٹکٹوں پر ایک نظر ڈالیں، اگرچہ ایک ٹکٹ جرمن زبان میں ہے، ہم دیکھ سکتے ہیں کہ بیان کردہ مسائل ایک ہی سافٹ ویئر کا حوالہ دیتے ہیں؟—؟آسانہ، لیکن ان پر مختلف لیبل ہوتے ہیں۔ یہ ہمارے زمروں کی تقسیم شروع کر رہا ہے:
df.Category.value_counts(normalize=True, dropna=False).mul(100).round(1).astype(str) + "%"
Outlook 19.1%
Discord 13.9%
CRM 12.2%
Internet Browser 10.4%
Mail 9.6%
Keyboard 9.6%
Asana 8.7%
Mouse 8.7%
Help Needed 7.8%
Name: Category, dtype: object
مطلوبہ مدد مشکوک نظر آتی ہے، جیسے زمرہ جس میں متعدد دیگر زمروں کے ٹکٹ ہو سکتے ہیں۔ نیز، آؤٹ لک اور میل کی کیٹیگریز ایک جیسی لگتی ہیں، ہو سکتا ہے کہ انہیں ایک زمرے میں ضم کر دیا جائے۔ مذکور زمروں میں گہرائی میں جانے سے پہلے، ہم اپنی دلچسپی کے کالموں میں گم شدہ اقدار سے چھٹکارا حاصل کر لیں گے۔
important_columns = ["Text", "Category"]
for cat in important_columns: df.drop(df[df[cat].isna()].index, inplace=True)
df.reset_index(inplace=True, drop=True)
ننگی آنکھ سے ڈیٹا کی جانچ کا کوئی درست متبادل نہیں ہے۔ پانڈوں میں ایسا کرنے کے لیے فینسی فنکشن .sample() ہے، اس لیے ہم ایک بار پھر، اب مشکوک زمرے کے لیے بالکل وہی کریں گے:
meta = df[df.Category == "Help Needed"] for text in meta.Text.sample(5, random_state=2): print(text) print("-"*100)
Discord emojis aren't available to me, I would like to have this option enabled like other team members have.
---------------------------------------------------------------------------
Bitte reparieren Sie mein Hubspot CRM. Seit gestern funktioniert es nicht mehr
---------------------------------------------------------------------------
My headphones aren't working. I would like to order new.
---------------------------------------------------------------------------
Bundled problems with Office since restart:
Messages not sent
Outlook does not connect, mails do not arrive
Error 0x8004deb0 appears when Connection attempt, see attachment
The company account is affected: AB123
Access via Office.com seems to be possible.
---------------------------------------------------------------------------
Asana funktionierte nicht mehr, nachdem ich meinen Laptop neu gestartet hatte. Bitte helfen Sie.
---------------------------------------------------------------------------
ظاہر ہے، ہمارے پاس ڈسکارڈ، آسنا، اور CRM کے بارے میں بات کرنے والے ٹکٹ ہیں۔ لہذا زمرہ کا نام "مدد درکار" سے موجودہ، زیادہ مخصوص زمروں میں تبدیل کر دیا جانا چاہیے۔ دوبارہ تفویض کے عمل کے پہلے مرحلے کے لیے، ہم نیا کالم "مطلوبہ الفاظ" بنائیں گے جو کہ معلومات فراہم کرے گا کہ آیا ٹکٹ میں "ٹیکسٹ" کالم میں زمرہ جات کی فہرست میں سے کوئی لفظ موجود ہے۔
words_categories = np.unique([word.strip().lower() for word in df.Category]) # list of categories def keywords(row): list_w = [] for word in row.translate(str.maketrans("", "", string.punctuation)).lower().split(): if word in words_categories: list_w.append(word) return list_w df["Keywords"] = df.Text.apply(keywords) # since our output is in the list, this function will give us better looking final output. def clean_row(row): row = str(row) row = row.replace("[", "") row = row.replace("]", "") row = row.replace("'", "") row = string.capwords(row) return row df["Keywords"] = df.Keywords.apply(clean_row)
نیز، یہ بھی نوٹ کریں کہ "if word in str(words_categories)" کے بجائے "if word in words_categories" استعمال کرنے سے 1 سے زیادہ الفاظ والے زمرہ جات کے الفاظ پکڑیں گے (ہمارے معاملے میں انٹرنیٹ براؤزر)، لیکن مزید ڈیٹا پری پروسیسنگ کی بھی ضرورت ہوگی۔ چیزوں کو سادہ اور سیدھی بات پر رکھنے کے لیے، ہم صرف ایک لفظ سے بنے زمرہ جات کے لیے کوڈ کے ساتھ جائیں گے۔ ہمارا ڈیٹاسیٹ اب اس طرح دکھتا ہے:
df.head(2)
تصویر کے طور پر آؤٹ پٹ:
کلیدی الفاظ کے کالم کو نکالنے کے بعد، ہم ٹکٹوں کے معیار کا اندازہ لگائیں گے۔ ہمارا مفروضہ:
- ٹیکسٹ فیلڈ میں صرف 1 کلیدی لفظ کے ساتھ ٹکٹ جو اس زمرے کے برابر ہے جس کا ٹکٹ ہے اس کی درجہ بندی کرنا آسان ہوگا۔
- ٹیکسٹ فیلڈ میں ایک سے زیادہ مطلوبہ الفاظ کے ساتھ ٹکٹ، جہاں کم از کم ایک مطلوبہ الفاظ اس زمرے کے برابر ہے جس سے ٹکٹ کا تعلق ہے زیادہ تر معاملات میں درجہ بندی کرنا آسان ہوگا۔
- وہ ٹکٹ جس میں کلیدی الفاظ ہیں، لیکن ان میں سے کوئی بھی اس زمرے کے نام کے برابر نہیں ہے جس سے ٹکٹ کا تعلق ہے شاید ایک شور والا لیبل کیس ہے۔
- دیگر ٹکٹیں کلیدی الفاظ کی بنیاد پر غیر جانبدار ہیں۔
cl_list = [] for category, keywords in zip(df.Category, df.Keywords): if category.lower() == keywords.lower() and keywords != "": cl_list.append("easy_classification") elif category.lower() in keywords.lower(): # to deal with multiple keywords in the ticket cl_list.append("probably_easy_classification") elif category.lower() != keywords.lower() and keywords != "": cl_list.append("potential_problem") else: cl_list.append("neutral") df["Ease_classification"] = cl_list
df.Ease_classification.value_counts(normalize=True, dropna=False).mul(100).round(1).astype(str) + "%"
neutral 45.6%
easy_classification 37.7%
potential_problem 9.6%
probably_easy_classification 7.0%
Name: Ease_classification, dtype: object
ہم نے اپنی نئی تقسیم کی ہے اور اب وقت آ گیا ہے کہ ایک ممکنہ مسئلہ کے طور پر درجہ بند ٹکٹوں کی جانچ کی جائے۔ عملی طور پر، مندرجہ ذیل مرحلے کے لیے بہت زیادہ نمونے لینے کی ضرورت ہوگی اور اعداد و شمار کے بڑے ٹکڑوں کو ننگی آنکھ سے دیکھنا ہوگا، لیکن دلیل ایک ہی ہوگی۔ آپ کو پریشانی والے ٹکٹ تلاش کرنا ہوں گے اور فیصلہ کرنا ہوگا کہ آیا آپ ان کے معیار کو بہتر بنا سکتے ہیں یا آپ کو انہیں ڈیٹاسیٹ سے چھوڑ دینا چاہیے۔ جب آپ کو کسی بڑے ڈیٹاسیٹ کا سامنا ہو تو پرسکون رہیں، اور یہ نہ بھولیں کہ ڈیٹا کی جانچ اور ڈیٹا کی تیاری میں عام طور پر ML الگورتھم بنانے سے زیادہ وقت لگتا ہے!
pp = df[df.Ease_classification == "potential_problem"] for text, category in zip(pp.Text.sample(5, random_state=2), pp.Category.sample(3, random_state=2)): print("TEXT:") print(text) print("CATEGORY:") print(category) print("-"*100)
TEXT:
outlook issue , I did an update Windows and I have no more outlook on my notebook ? Please help !
Outlook
CATEGORY:
Mail
-------------------------------------------------------------------- TEXT:
Please relase blocked attachements from the mail I got from name.surname@company.com. These are data needed for social media marketing campaing.
CATEGORY:
Outlook
--------------------------------------------------------------------
TEXT:
Asana funktionierte nicht mehr, nachdem ich meinen Laptop neu gestartet hatte. Bitte helfen Sie.
CATEGORY:
Help Needed
--------------------------------------------------------------------
ہم سمجھتے ہیں کہ آؤٹ لک اور میل کیٹیگریز کے ٹکٹ ایک ہی مسئلے سے متعلق ہیں، اس لیے ہم ان 2 زمروں کو ضم کریں گے اور اپنے مستقبل کے ML درجہ بندی الگورتھم کے نتائج کو بہتر بنائیں گے۔
mail_categories_to_merge = ["Outlook", "Mail"] sum_mail_cluster = 0
for x in mail_categories_to_merge: sum_mail_cluster += len(df[df["Category"] == x]) print("Number of categories to be merged into new cluster: ", len(mail_categories_to_merge))
print("Expected number of tickets in the new cluster: ", sum_mail_cluster) def rename_to_mail_cluster(category): if category in mail_categories_to_merge: category = "Mail_CLUSTER" else: category = category return category df["Category"] = df["Category"].apply(rename_to_mail_cluster) df.Category.value_counts()
Number of categories to be merged into new cluster: 2
Expected number of tickets in the new cluster: 33
Mail_CLUSTER 33
Discord 15
CRM 14
Internet Browser 12
Keyboard 11
Asana 10
Mouse 10
Help Needed 9
Name: Category, dtype: int64
آخر میں، لیکن کم از کم، ہم میٹا زمرہ "مدد درکار" سے کچھ ٹکٹوں کو مناسب زمرے میں ری لیبل کرنا چاہتے ہیں۔
df.loc[(df["Category"] == "Help Needed") & ([set(x).intersection(words_categories) for x in df["Text"].str.lower().str.replace("[^ws]", "", regex=True).str.split()]), "Category"] = "Change" def cat_name_change(cat, keywords): if cat == "Change": cat = keywords else: cat = cat return cat df["Category"] = df.apply(lambda x: cat_name_change(x.Category, x.Keywords), axis=1)
df["Category"] = df["Category"].replace({"Crm":"CRM"}) df.Category.value_counts(dropna=False)
Mail_CLUSTER 33
Discord 16
CRM 15
Internet Browser 12
Asana 11
Keyboard 11
Mouse 10
Help Needed 6
Name: Category, dtype: int64
ہم نے اپنے ڈیٹا کو ری لیبلنگ اور کلیننگ کیا لیکن اگر ہم کم از کم ایک سائنسی تجربہ نہیں کرتے اور حتمی درجہ بندی پر اپنے کام کے اثرات کی جانچ نہیں کرتے ہیں تو ہمیں خود کو ڈیٹا سائنسدان نہیں کہنا چاہیے۔ ہم sklearn میں Complement Naive Bayes درجہ بندی کو لاگو کرکے ایسا کریں گے۔ دیگر، زیادہ پیچیدہ الگورتھم آزمانے کے لیے آزاد محسوس کریں۔ اس کے علاوہ، آگاہ رہیں کہ مزید ڈیٹا کی صفائی کی جا سکتی ہے - مثال کے طور پر، ہم "مدد درکار" زمرہ میں باقی تمام ٹکٹوں کو بھی چھوڑ سکتے ہیں۔
model = make_pipeline(TfidfVectorizer(), ComplementNB()) # old df
df_o = pd.read_excel("ITSM_data.xlsx") important_categories = ["Text", "Category"]
for cat in important_categories: df_o.drop(df_o[df_o[cat].isna()].index, inplace=True) df_o.name = "dataset just without missing"
df.name = "dataset after deeper cleaning" for dataframe in [df_o, df]: # Split dataset into training set and test set X_train, X_test, y_train, y_test = train_test_split(dataframe.Text, dataframe.Category, test_size=0.2, random_state=1) # Training the model with train data model.fit(X_train, y_train) # Predict the response for test dataset y_pred = model.predict(X_test) print(f"Accuracy of Complement Naive Bayes classifier model on {dataframe.name} is: {round(metrics.accuracy_score(y_test, y_pred),2)}")
Accuracy of Complement Naive Bayes classifier model on dataset just without missing is: 0.48
Accuracy of Complement Naive Bayes classifier model on dataset after deeper cleaning is: 0.65
بہت متاثر کن، ٹھیک ہے؟ ہم نے جو ڈیٹاسیٹ استعمال کیا ہے وہ چھوٹا ہے (جان بوجھ کر، لہذا آپ آسانی سے دیکھ سکتے ہیں کہ ہر قدم میں کیا ہوتا ہے) اس لیے مختلف بے ترتیب بیج مختلف نتائج پیدا کر سکتے ہیں، لیکن زیادہ تر معاملات میں، ماڈل ڈیٹاسیٹ پر مقابلے کی صفائی کے بعد نمایاں طور پر بہتر کارکردگی کا مظاہرہ کرے گا۔ اصل ڈیٹاسیٹ پر۔ ہم نے اچھا کام کیا!
نکولا گریب چار سال سے زیادہ عرصے سے کوڈنگ کر رہا ہے، اور پچھلے دو سالوں سے اس نے NLP میں مہارت حاصل کی۔ ڈیٹا سائنس کا رخ کرنے سے پہلے وہ سیلز، ایچ آر، رائٹنگ اور شطرنج میں کامیاب رہے۔
- SEO سے چلنے والا مواد اور PR کی تقسیم۔ آج ہی بڑھا دیں۔
- پلیٹو بلاک چین۔ Web3 Metaverse Intelligence. علم میں اضافہ۔ یہاں تک رسائی حاصل کریں۔
- ایڈریین ایشلے کے ساتھ مستقبل کا نقشہ بنانا۔ یہاں تک رسائی حاصل کریں۔
- ماخذ: https://www.kdnuggets.com/2023/04/dealing-noisy-labels-text-data.html?utm_source=rss&utm_medium=rss&utm_campaign=dealing-with-noisy-labels-in-text-data
- : ہے
- : ہے
- : نہیں
- :کہاں
- 1
- 10
- 100
- 11
- 2%
- 7
- 8
- 9
- a
- ہمارے بارے میں
- اکاؤنٹ
- درستگی
- کے بعد
- ایجنٹ
- یلگورتم
- یلگوردمز
- تمام
- بھی
- اگرچہ
- an
- اور
- کیا
- AS
- At
- دستیاب
- کی بنیاد پر
- بنیادی
- BE
- کیونکہ
- رہا
- اس سے پہلے
- نیچے
- بہتر
- بلاک کردی
- براؤزر
- تعمیر
- عمارت
- کاروبار
- لیکن
- by
- فون
- کر سکتے ہیں
- لے جانے کے
- کیس
- مقدمات
- CAT
- پکڑو
- اقسام
- قسم
- تبدیل
- شطرنج
- درجہ بندی
- درجہ بندی
- درجہ بندی کرنا۔
- صفائی
- کلسٹر
- کوڈ
- کوڈنگ
- کالم
- کالم
- COM
- کامن
- کمپنی کے
- مقابلے میں
- مکمل
- پیچیدہ
- رابطہ قائم کریں
- کنکشن
- پر مشتمل ہے
- سکتا ہے
- تخلیق
- بنائی
- CRM
- اعداد و شمار
- ڈیٹا کی تیاری
- ڈیٹا سائنس
- ڈیٹا بیس
- نمٹنے کے
- معاملہ
- فیصلہ کرنا
- گہرے
- بیان کیا
- DID
- مختلف
- اختلاف
- تقسیم
- do
- ڈان
- چھوڑ
- ہر ایک
- آسانی سے
- موثر
- چالو حالت میں
- اندراج
- Ether (ETH)
- بالکل
- مثال کے طور پر
- مثال کے طور پر
- موجودہ
- توقع
- تجربہ
- وضاحت کی
- آنکھ
- سامنا کرنا پڑا
- چند
- میدان
- قطعات
- فائنل
- مل
- پہلا
- کے بعد
- کے لئے
- چار
- مفت
- سے
- تقریب
- مزید
- مستقبل
- جرمن
- حاصل
- دے دو
- فراہم کرتا ہے
- Go
- اچھا
- ہوتا ہے
- ہے
- he
- ہیڈ فون
- مدد
- مارنا
- کس طرح
- hr
- HTTPS
- HubSpot
- i
- تصویر
- اثر
- پر عمل درآمد
- درآمد
- اہم
- متاثر کن
- کو بہتر بنانے کے
- in
- انڈکس
- معلومات
- کے بجائے
- دلچسپی
- انٹرنیٹ
- میں
- مسئلہ
- IT
- آئی ٹی سروس
- صرف
- صرف ایک
- KDnuggets
- رکھیں
- بچے
- لیبل
- لیبل
- زبان
- لیپ ٹاپ
- بڑے
- بڑے
- لائبریریوں
- لائسنس
- کی طرح
- LINK
- لنکڈ
- لسٹ
- دیکھو
- تلاش
- دیکھنا
- محبت
- بنا
- اکثریت
- انتظام
- بہت سے
- مارکیٹنگ
- میڈیا
- اراکین
- یاد داشت
- ذکر کیا
- ضم کریں
- میٹا
- پیمائش کا معیار
- شاید
- لاپتہ
- مخلوط
- ML
- ماڈل
- زیادہ
- سب سے زیادہ
- ایک سے زیادہ
- نام
- قدرتی
- قدرتی زبان
- قدرتی زبان عملیات
- ضرورت
- غیر جانبدار
- نئی
- ویزا
- نوٹ بک
- اب
- تعداد
- عجیب
- اعتراض
- of
- دفتر
- پرانا
- on
- ایک
- اختیار
- or
- حکم
- اصل
- دیگر
- ہمارے
- آؤٹ لک
- پیداوار
- pandas
- گزشتہ
- PC
- انجام دینے کے
- پائپ لائن
- پلاٹا
- افلاطون ڈیٹا انٹیلی جنس
- پلیٹو ڈیٹا
- مہربانی کرکے
- پوائنٹ
- ممکن
- ممکنہ
- پریکٹس
- پیشن گوئی
- شاید
- مسئلہ
- مسائل
- طریقہ کار
- عمل
- پروسیسنگ
- پیدا
- مناسب
- مقصد
- معیار
- بے ترتیب
- حقیقی دنیا
- متعلقہ
- کی نمائندگی کرتا ہے
- کی ضرورت
- جواب
- نتائج کی نمائش
- واپسی
- چھٹکارا
- بڑھتی ہوئی
- ROW
- فروخت
- اسی
- منظرنامے
- سائنس
- سائنسدانوں
- دیکھنا
- بیج
- لگتا ہے
- سروس
- مقرر
- ہونا چاہئے
- دکھائیں
- نمایاں طور پر
- اسی طرح
- سادہ
- بعد
- چھوٹے
- So
- سماجی
- سوشل میڈیا
- سافٹ ویئر کی
- حل
- کچھ
- آواز
- خصوصی
- مخصوص
- تقسیم
- شروع کریں
- شروع
- رہنا
- مرحلہ
- بند کر دیا
- براہ راست
- سلک
- کامیاب
- سمجھا
- مشکوک
- لے لو
- بات
- بات کر
- ٹیم
- ٹیم کے ارکان
- ٹیسٹ
- سے
- کہ
- ۔
- کے بارے میں معلومات
- ان
- ان
- وہاں.
- یہ
- وہ
- چیزیں
- اس
- ٹکٹ
- ٹکٹ
- وقت
- کرنے کے لئے
- بھی
- موضوع
- کل
- ٹرین
- ٹریننگ
- ٹرننگ
- سبق
- سمجھ
- اپ ڈیٹ کریں
- اپ ڈیٹ
- us
- استعمال
- استعمال کی شرائط
- استعمال کیا جاتا ہے
- رکن کا
- کا استعمال کرتے ہوئے
- عام طور پر
- اقدار
- وسیع
- بہت
- کی طرف سے
- دیوار
- تھا
- we
- کیا
- جب
- جس
- جو بھی
- گے
- کھڑکیاں
- ساتھ
- بغیر
- لفظ
- الفاظ
- کام
- کام کر
- گا
- تحریری طور پر
- لکھا
- X
- سال
- آپ
- اپنے آپ کو
- زیفیرنیٹ