ایجاد مدل متنی ساده برای طبقه بندی در MATLAB
این مثال نشان می دهد که چگونه می توان یک طبقه بندی کننده متن ساده را با استفاده از مدل بسته ای کلمات در مورد تعداد فراوانی کلمات آموزش داد. شما می توانید یک مدل طبقه بندی ساده ایجاد کنید که از شمارش فراوانی کلمات به عنوان پیش بینی کننده استفاده می کند. این مثال یک مدل طبقه بندی ساده را برای پیش بینی دسته گزارش های کارخانه با استفاده از توضیحات متنی آموزش می دهد.
بارگیری و استخراج داده های متنی
داده های نمونه را بارگیری کنید. فایل factoryReports.csv شامل گزارش های کارخانه، از جمله توضیحات متنی و برچسب های طبقه بندی شده برای هر گزارش است.
1 2 3 | filename = "factoryReports.csv"; data = readtable(filename,'TextType','string'); head(data) |
برچسب های موجود در ستون Category جدول را به دسته بندی تبدیل کنید و توزیع کلاس ها را در داده ها با استفاده از یک هیستوگرام مشاهده کنید.
1 2 3 4 5 6 | data.Category = categorical(data.Category); figure histogram(data.Category) xlabel("Class") ylabel("Frequency") title("Class Distribution") |
داده ها را به یک مجموعه آموزشی و یک مجموعه تست نگهدارنده تقسیم کنید. درصد ماندگاری را 10 درصد تعیین کنید.
1 2 3 | cvp = cvpartition(data.Category,'Holdout',0.1); dataTrain = data(cvp.training,:); dataTest = data(cvp.test,:); |
داده های متنی و برچسب ها را از جداول استخراج کنید.
1 2 3 4 | textDataTrain = dataTrain.Description; textDataTest = dataTest.Description; YTrain = dataTrain.Category; YTest = dataTest.Category; |
آماده سازی داده های متنی برای تجزیه و تحلیل
تابعی ایجاد کنید که داده های متنی را نشانه گذاری و پیش پردازش می کند تا بتوان از آن برای تجزیه و تحلیل استفاده کرد. تابع preprocessText مراحل زیر را به ترتیب انجام می دهد:
- با استفاده از tokenizedDocument متن را نشانه گذاری کنید.
- فهرستی از کلمات توقف (مانند “and” ، “of” و “the” را با استفاده از removeStopWords حذف کنید.
- کلمات را با استفاده از normalizeWords یکنواخت کنید.
- با استفاده از erasePunctuation علائم نگارشی را پاک کنید.
- کلمات دارای 2 کاراکتر یا کمتر را با استفاده از removeShortWords حذف کنید.
- کلمات دارای 15 کاراکتر یا بیشتر را با استفاده از removeLongWords حذف کنید.
از مثال تابع preprocessing preprocessText برای تهیه داده های متنی استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 | documents = preprocessText(textDataTrain); documents(1:5) ans = 5×1 tokenizedDocument: 6 tokens: items occasionally get stuck scanner spool 7 tokens: loud rattle bang sound come assembler piston 4 tokens: cut power start plant 3 tokens: fry capacitor assembler 3 tokens: mixer trip fuse |
یک مدل بسته ای از کلمات از اسناد طبقه بندی شده ایجاد کنید.
1 2 3 4 5 6 7 | bag = bagOfWords with properties: Counts: [432×336 double] Vocabulary: [1×336 string] NumWords: 336 NumDocuments: 432 |
کلماتی که در مجموع بیش از دو بار ظاهر نمی شوند را از مدل بسته ای کلمات حذف کنید. هر سندی که حاوی کلمه ای نباشد را از مدل بسته ای کلمات حذف کنید و ورودی های مربوطه را در برچسب ها حذف کنید.
1 2 3 4 5 6 7 8 9 10 11 12 | bag = removeInfrequentWords(bag,2); [bag,idx] = removeEmptyDocuments(bag); YTrain(idx) = []; bag bag = bagOfWords with properties: Counts: [432×155 double] Vocabulary: [1×155 string] NumWords: 155 NumDocuments: 432 |
آموزش طبقه بندی کننده تحت نظارت
یک مدل طبقه بندی نظارت شده را با استفاده از شمارش فراوانی کلمات از مدل بسته ای کلمات و برچسب ها آموزش دهید. یک مدل طبقه بندی خطی چند کلاسه با استفاده از fitcecoc آموزش دهید. ویژگی Counts مدل بسته ای کلمات را به عنوان پیش بینی کننده ها و برچسب های نوع رویداد را به عنوان پاسخ مشخص کنید. خطی بودن زبان آموزان را مشخص کنید. این یادگیرندگان از ورودی داده های پراکنده پشتیبانی می کنند.
1 2 3 4 5 6 7 8 9 10 11 12 | XTrain = bag.Counts; mdl = fitcecoc(XTrain,YTrain,'Learners','linear') mdl = CompactClassificationECOC ResponseName: 'Y' ClassNames: [Electronic Failure Leak Mechanical Failure Software Failure] ScoreTransform: 'none' BinaryLearners: {6×1 cell} CodingMatrix: [4×6 double] Properties, Methods |
برای تناسب بهتر، می توانید پارامترهای مختلف زبان آموزان خطی را مشخص کنید. برای اطلاعات بیشتر در مورد الگوهای یادگیرنده طبقه بندی خطی، به مقاله آموزشی templateLinear مراجعه کنید.
تست طبقه بندی
برچسب های داده های آزمون را با استفاده از مدل آموزش دیده پیش بینی کنید و دقت طبقه بندی را محاسبه کنید. دقت طبقه بندی نسبت برچسب هایی است که مدل به درستی پیش بینی می کند. داده های تست را با استفاده از همان مراحل پیش پردازش داده های آموزشی، از قبل پردازش کنید. اسناد آزمون به دست آمده را به عنوان ماتریسی از تعداد فراوانی کلمات بر اساس مدل کیسه کلمات رمزگذاری کنید.
1 2 | documentsTest = preprocessText(textDataTest); XTest = encode(bag,documentsTest); |
برچسب های داده های آزمون را با استفاده از مدل آموزش دیده پیش بینی کنید و دقت طبقه بندی را محاسبه کنید.
1 2 3 4 | YPred = predict(mdl,XTest); acc = sum(YPred == YTest)/numel(YTest) acc = 0.8542 |
پیش بینی با استفاده از داده های جدید
نوع رویداد گزارش های کارخانه جدید را طبقه بندی کنید. یک آرایه رشته ای حاوی گزارش های کارخانه جدید ایجاد کنید.
1 2 3 4 5 6 7 8 9 10 11 12 | str = [ "Coolant is pooling underneath sorter." "Sorter blows fuses at start up." "There are some very loud rattling sounds coming from the assembler."]; documentsNew = preprocessText(str); XNew = encode(bag,documentsNew); labelsNew = predict(mdl,XNew) labelsNew = 3×1 categorical Leak Electronic Failure Mechanical Failure |
مثال تابع پیش پردازش
تابع preprocessText مراحل زیر را به ترتیب انجام می دهد:
- با استفاده از tokenizedDocument متن را نشانه گذاری کنید.
- فهرستی از کلمات توقف (مانند “and” ، “of” و “the” را با استفاده از removeStopWords حذف کنید.
- کلمات را با استفاده از normalizeWords یکنواخت کنید.
- با استفاده از erasePunctuation علائم نگارشی را پاک کنید.
- کلمات دارای 2 کاراکتر یا کمتر را با استفاده از removeShortWords حذف کنید.
کلمات دارای 15 کاراکتر یا بیشتر را با استفاده از removeLongWords حذف کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function documents = preprocessText(textData) % Tokenize the text. documents = tokenizedDocument(textData); % Remove a list of stop words then lemmatize the words. To improve % lemmatization, first use addPartOfSpeechDetails. documents = addPartOfSpeechDetails(documents); documents = removeStopWords(documents); documents = normalizeWords(documents,'Style','lemma'); % Erase punctuation. documents = erasePunctuation(documents); % Remove words with 2 or fewer characters, and words with 15 or more % characters. documents = removeShortWords(documents,2); documents = removeLongWords(documents,15); end |
نکته پایانی: این مقاله آموزشی متلب از مثال های آماده خود نرم افزار MATLAB است که اگر تولباکس تجزیه و تحلیل متن (Text Analytics Toolbox) بر روی متلب شما نصب باشد، می توانید با تایپ دستور زیر در پنجره کامند متلب به این کدها و دستورات دسترسی داشته باشید.
1 | openExample('textanalytics/CreateSimpleTextModelForClassificationExample') |
منبع: mathworks
هیچ نظری ثبت نشده است