අද ලෝකයේ සන්නිවේදනය සඳහා විද්යුත් තැපෑල අත්යවශ්ය මෙවලමකි; කෙසේ වෙතත්, අයාචිත තැපැල් විද්යුත් තැපෑල ප්රධාන අභියෝගයක් ලෙස මතුවී ඇත. නොදන්නා මූලාශ්රවලින් ලැබෙන මෙම අනවශ්ය පණිවිඩ බොහෝ විට එන ලිපි පුරවන අතර එමඟින් සන්නිවේදනය සහ ඵලදායිතාවයට බාධා ඇති වේ. "අයාචිත තැපැල්" හෝ "හැම්" (අයාචිත තැපැල් නොවන) ලෙස ඊමේල් වර්ගීකරණය කිරීම සඳහා විවිධ යන්ත්ර ඉගෙනුම් ශිල්පීය ක්රම භාවිතා කිරීම මෙම පත්රිකාව විමර්ශනය කරයි.
K-Nearest Neighbours (KNN), Logistic Regression, Support Vector Machines (SVM) සහ Naïve Bayes වැනි වර්ගීකරණ ආකෘති ඇගයීමට ලක් කරනු ලබන්නේ, විද්යුත් තැපැල් වර්ගීකරණයේ ඒවායේ කාර්යක්ෂමතාව සංසන්දනය කරමිනි. මෙම කාර්යය සඳහා වඩාත් සුදුසු ප්රවේශය තීරණය කිරීම සඳහා නිරවද්යතාවය, නිරවද්යතාවය, නැවත කැඳවීම සහ F1 ලකුණු වැනි මිනුම් මත පදනම්ව එක් එක් ආකෘතියේ කාර්ය සාධනය ඇගයීමට ලක් කෙරේ.
2023 දී, සෑම දිනකම ඊමේල් බිලියන 347.3 ක් යවනු ලබන අතර, එයින් සියලුම විද්යුත් තැපැල් ගමනාගමනයෙන් 45% ක් ස්පෑම් ඊමේල් වේ. මෙම විද්යුත් තැපැල් ස්පෑම් ව්යාපාරවලට සෑම වසරකම ඩොලර් බිලියන 20.5 ක් වැය වේ. මේ අනුව, ස්පෑම් නිවැරදිව වර්ගීකරණය කර ඇති බවත් නීත්යානුකූල විද්යුත් තැපැල් ගමනාගමනයට බාධා නොකරන බවත් සහතික කිරීමේ අවශ්යතාවයක් සැමවිටම පවතිනු ඇත. යන්ත්ර ඉගෙනීමේ විභවය සහ යෙදුම තේරුම් ගැනීමට මෙය ප්රයෝජනවත් ක්රමයකි.
ස්පෑම් හඳුනාගැනීමේදී, විද්යුත් තැපෑල ගැන හුරුපුරුදු මානව පරිශීලකයෙකුට එය බැලූ වහාම පාහේ ස්පෑම් පහසුවෙන් තීරණය කළ හැකිය. එහි ප්රතිඵලයක් වශයෙන්, ස්පෑම් හඳුනා ගැනීම යන්ත්ර ඉගෙනුම් වර්ගීකරණයක් සඳහා ප්රයෝජනවත් යෙදුමක් බව මෙම කාර්යය තහවුරු කරන බව මම විශ්වාස කරමි. විද්යුත් තැපෑලක් ස්පෑම් හෝ හැම් ලෙස වර්ගීකරණය කිරීම සඳහා, පූර්ව සැකසුම් පියවර රාශියක් ඇතුළත් වේ - රේඛීය වර්ගීකරණයකට පිළිගත හැකි වන පරිදි දත්ත සකස් කිරීම, පසුව TF-IDF (කාලීන සංඛ්යාතය - ප්රතිලෝම ලේඛන සංඛ්යාතය) වගුවකට පරිවර්තනය කිරීම සඳහා එක් එක් පේළිය ටෝකනීකරණය කිරීම සහ කඳ කිරීම.
K=3 සහිත KNN මූලික ආකෘතිය ලෙස තෝරා ගන්නා ලදී. හොඳම ආකෘතිය තීරණය කිරීමට පෙර L1 නියාමනය සමඟ ලොජිස්ටික් ප්රතිගමනය, Naïve Bayes ආකෘතිය සහ SVM ආකෘති ද පරීක්ෂා කරන ලදී. මෙම ව්යාපෘතියේ අරමුණ සඳහා, Kaggle වෙතින් දත්ත කට්ටලයක් භාවිතා කර ඇති අතර, එහි “ham” විද්යුත් තැපැල් ගොනු 2551 ක් සහ spam විද්යුත් තැපැල් ගොනු 501 ක් ඇති අතර ආකෘති නිර්මාණය R ක්රමලේඛන භාෂාව භාවිතයෙන් සිදු කර ඇත.
පහත දැක්වෙන වගුව අනුගමනය කරන ලද විවිධ පියවරවල ප්රවාහය තේරුම් ගැනීමට උපකාරී වනු ඇත -
පෙර සැකසුම් පියවර
පෙළ දත්ත විශාල ප්රමාණයක් භාවිතා වන බැවින්, වර්ගීකරණ ආකෘති මගින් භාවිතා කළ හැකි ආකෘතියකට දත්ත පිරිසිදු කර ලබා ගැනීම සඳහා පූර්ව සැකසුම් කිරීමේ අවශ්යතාවයක් තිබුණි. දත්ත පූර්ව සැකසුම් කිරීමේ කොටසක් ලෙස අනුගමනය කරන ලද පියවරෙන් පියවර ක්රියාවලිය පහත දැක්වේ -
පෙළ දත්ත රේඛීය වර්ගීකරණයකට පිළිගත හැකි විය යුතුය. මෙයින් අදහස් කරන්නේ දත්ත කට්ටලය පෙළ විශේෂාංග නිස්සාරණ ක්රම භාවිතයෙන් සංඛ්යාත්මක විශේෂාංග බවට පරිවර්තනය කළ යුතු බවයි.
පළමුව, පෙළෙහි සෑම පේළියක්ම ටෝකනීකරණය කර පහත දැක්වෙන ස්වරූපයට ගෙන එනු ලැබේ. ස්ටෙමිං ක්රියාවලිය නැමුණු අවසානයන් ඉවත් කිරීමෙන් වචන කෙටි කරයි. උදාහරණයක් ලෙස, පහත උදාහරණයේ කම්කරුවන් කම්කරු බවට පත්වේ.
ඊළඟට, ටෝකනීකරණය කරන ලද දත්ත TF-IDF වගුවකට පරිවර්තනය කරනු ලැබේ (කාලීන සංඛ්යාතය - ප්රතිලෝම ලේඛන සංඛ්යාතය). TF-IDF යනු ලේඛනයක සෑම n-ග්රෑම් එකක්ම එහි වාර සංඛ්යාතය-ප්රතිලෝම ලේඛන සංඛ්යාතය අනුව සඳහන් කරන පෙළ විශ්ලේෂණය සඳහා ප්රවේශයකි. වාර සංඛ්යාතය යනු ලේඛනයක් තුළ දී ඇති පදයක සංඛ්යාතය පමණි (මෙම අවස්ථාවේදී, විද්යුත් තැපෑලක්). ප්රතිලෝම ලේඛන සංඛ්යාතය සාමාන්යයෙන් මෙසේ සඳහන් වේ:
log ((මුළු ලේඛන ගණන/කාලසීමාව සහිත ලේඛන ගණන)
මෙය ඉතා නිතර භාවිතා වන සහ ඒ අනුව අඩු වැදගත්කමක් ඇති පදවලට වඩා සැලකිය යුතු පද වඩාත් ඉහළින් කිරා මැන බැලීමට උපකාරී වේ.
මෙය පුහුණු දත්ත කට්ටලයේ මුළු පද 1,130 ක් ලබා දෙයි.
පරීක්ෂණ කට්ටලය සමඟ TF-IDF භාවිතා කිරීමේ උපාය මාර්ගය වනුයේ පුහුණු TF-IDF පිළිබඳ ආදර්ශ පුහුණුවක් පමණක් සිදු කිරීම සහ පසුව නිරවද්යතාවය පරීක්ෂා කිරීම සඳහා සම්පූර්ණ දත්ත සමඟ TF-IDF නැවත ගණනය කිරීම බව සැලකිල්ලට ගැනීම වැදගත්ය. මෙය අවශ්ය වන්නේ TF-IDF නිශ්චිත පදයක සම්පූර්ණ දත්ත කට්ටලයේ සංඛ්යාතය මත රඳා පවතින නිසා සහ පුහුණුව අතරතුර පරීක්ෂණ දත්ත ඇතුළත් නොකිරීම නිසාය.
අවසාන වශයෙන්, පුහුණු කට්ටලයේ සමස්ත වාර සංඛ්යාතය අනුව ඉහළම පද 1000 පමණක් තෝරා ගනු ලැබේ.
පෙර සැකසුම් පියවර සඳහා කේතය -
#tokenize word_tokens <- complete_tbl %>% unnest_tokens(word,content) #stemming word_tokens<-word_tokens %>% mutate(word_stem=SnowballC::wordStem(word)) #remove any words with numbers word_tokens <- word_tokens[-grep('^\\d+$', word_tokens$word_stem),] #remove any words with . word_tokens <- word_tokens[-grep('[.]', word_tokens$word_stem),] #remove any single character words word_tokens <- word_tokens[-grep('.\\b[az]\\b.', word_tokens$word_stem),] #remove tokens which match stop words word_tokens <- word_tokens %>% filter(!word %in% stopWords) word_tokens <- word_tokens %>% filter(!word_stem %in% stopWords) #split into training and test word_tokens_train <- word_tokens %>% filter(document %in% ind) #create tfidf for training and then a complete tfidf for testing tfidf_train<-word_tokens_train %>% count(document,word_stem,sort=TRUE) %>% bind_tf_idf(word_stem,document,n) tfidf_complete<-word_tokens %>% count(document,word_stem,sort=TRUE) %>% bind_tf_idf(word_stem,document,n)
භාවිතා කළ ආකෘති
මෙම ආකෘතිය සාධාරණ නිශ්චිතතාවයක් ලබා ගනී, නමුත් අතිශයින් දුර්වල සංවේදීතාවයක්, එනම් බොහෝ හැම් ව්යාජ ලෙස ස්පෑම් ලෙස පුරෝකථනය කර ඇත. පහත එක් එක් ප්රතිඵලවල ධනාත්මක පන්තිය "හැම්" බව සලකන්න. මෙය සැබවින්ම පරිශීලකයෙකුට සිදුවිය හැකි නරකම ප්රතිඵලයයි, මන්ද ඔවුන්ට ස්පෑම් ලෙස වර්ගීකරණය කර ඇති බොහෝ සැබෑ ඊමේල් මග හැරෙනු ඇත.
KNN ආකෘතිය සඳහා කේතය -
##train a model library(e1071) library(caret) library(class) library(LiblineaR) ##remove document number since this is indicative of spam or ham wide_feat_train<-subset(wide_feat_train, select=-c(document)) wide_feat_test<-subset(wide_feat_test,select=-c(document)) #Base model is a knn attempt knn_pred<-knn(train=wide_feat_train,test=wide_feat_test,cl=labels_train$label,k=3) knn_results<-confusionMatrix(knn_pred,labels_test$label) knn_results knn_results$byClass["F1"] knn_results$byClass["Precision"] knn_results$byClass["Recall"]
KNN ආකෘතියෙන් දුර්වල ප්රතිඵල ලැබීමෙන් පසු, ලොජිස්ටික් ප්රතිගමනය ඊළඟට භාවිතා කරන ලද ආකෘතිය විය.
මෙම අවස්ථාව සඳහා,
පහත සඳහන් අධි පරාමිතීන් සමඟ ලොජිස්ටික් ප්රතිගමනය යොදන ලදී -
මෙම ආකෘතිය පරීක්ෂණ දත්ත කට්ටලයේ පහත ප්රතිඵල සපයයි, එය දැනටමත් KNN ආකෘතියට වඩා සැලකිය යුතු දියුණුවකි. සමස්ත නිරවද්යතාවය තරමක් ඉහළ ය, නමුත් නිශ්චිතභාවයෙන් පෙන්නුම් කරන්නේ තවමත් වැඩිදියුණු කිරීමට යම් ඉඩක් ඇති බවයි. මෙම ආකෘතිය භාවිතා කරන්නෙකුට හැම් කිහිපයක් ස්පෑම් ලෙස පුරෝකථනය කර ඇති බව සොයාගත හැකිය.
ලොජිස්ටික් ප්රතිගමන ආකෘතිය සඳහා කේතය -
#Next is a logistic regression usin the below hyperparameters grid_logit <- expand.grid(loss="L1",cost=2,epsilon=0.1) lr <- train(x=wide_feat_train,y=labels_train$label,method="regLogistic",tuneGrid=grid_logit) lr_results<-confusionMatrix(as.factor(predict(lr,wide_feat_test)),labels_test$label) lr_results p_lr = predict(lr,wide_feat_test) prednum_lr<-ifelse(p_lr=="spam",0,1) roc_lr<-roc(labels_test$label,prednum_lr) plot(roc_lr) roc_lr$auc p1_lr<- prediction(as.numeric(p_lr),as.numeric(labels_test$label)) pr_lr <- performance(p1_lr, "prec", "rec") plot(pr_lr) lr_results$byClass["F1"] lr_results$byClass["Precision"] lr_results$byClass["Recall"]
ඊළඟ ආකෘතිය උත්සාහ කළේ Naïve Bayes ආකෘතියයි. මෙම ආකෘතිය සඳහා, පස් ගුණයක ප්රවේශයක් සහිත ප්රශස්ත අධි පරාමිතීන් සොයා ගැනීම සඳහා හරස් වලංගුකරණය සිදු කරන ලදී. මෙය Naive-Bayes සඳහා පහත පරාමිතීන් ලබා දෙයි -
මෙම ආකෘතිය නිශ්චිතභාවය සහ සංවේදීතාව යන දෙකෙහිම හොඳ ප්රතිඵල අත්කර ගනී.
Naive Bayes ආකෘතිය සඳහා කේතය -
##naive bayes main model nb_cv <- train( x=wide_feat_train, y=labels_train$label, method = "naive_bayes", trControl = train_control, tuneGrid = grid ) nb <- naiveBayes(wide_feat_train,labels_train$label,adjust=1,laplace=0,usekernel=FALSE) nb_results<-confusionMatrix(as.factor(predict(nb,wide_feat_test)),labels_test$label) nb_results p = predict(nb,wide_feat_test) prednum<-ifelse(p=="spam",0,1) roc_nb<-roc(labels_test$label,prednum) plot(roc_nb) roc_nb$auc p1<- prediction(as.numeric(p),as.numeric(labels_test$label)) pr <- performance(p1, "prec", "rec") plot(pr) nb_results$byClass["F1"] nb_results$byClass["Precision"] nb_results$byClass["Recall"]
4. ආධාරක දෛශික යන්ත්රය (SVM)
අවසාන ආකෘතිය රේඛීය කර්නලයක් සහිත SVM හරස්-වලංගුකරණයකි. ආධාරක දෛශික යන්ත්ර පන්ති දෙකක් අතර දත්ත වෙන් කිරීම සඳහා උපරිම ලෙස වෙන් කරන අධිතලය ප්රශස්ත ලෙස සොයා ගැනීමට උත්සාහ කරයි.
මෙහිදී, ප්රශස්ත අධි පරාමිති හඳුනා ගැනීම සඳහා R පුස්තකාල කැරට් භාවිතයෙන් 5 ගුණයක CV එකක් සිදු කරනු ලැබේ. මෙම අධි පරාමිති පහත දැක්වේ -
මෙම ආකෘතියේ රඳවා තබා ගත් පරීක්ෂණ දත්ත කට්ටලයට යොදන විට ලැබුණු ප්රතිඵල පහත දැක්වේ -
SVM සඳහා කේතය -
#svm train_control <- trainControl( method = "cv", number = 5 ) svm <- train(x=wide_feat_train,y=labels_train$label,method="svmLinearWeights2",trControl=train_control) svm$bestTune svm_results<-confusionMatrix(as.factor(predict(svm,wide_feat_test)),labels_test$label) svm_results p_svm = predict(svm,wide_feat_test) prednum_svm<-ifelse(p_svm=="spam",0,1) roc_svm<-roc(labels_test$label,prednum_svm) plot(roc_svm,colorize=T,lwd=3, main=" ROC curve for SVM model") roc_svm$auc p1_svm<- prediction(as.numeric(p_svm),as.numeric(labels_test$label)) pr <- performance(p1_svm, "prec", "rec") plot(pr) svm_results$byClass["F1"] svm_results$byClass["Precision"] svm_results$byClass["Recall"]
හොඳම ආකෘතිය තෝරා ගැනීම සඳහා සලකා බැලූ පියවර පහත වගුවේ සාරාංශ කර ඇත–
ආකෘතිය | නිරවද්යතාවය | F1 ලකුණු | නිරවද්යතාවය | සිහිපත් කරන්න |
---|---|---|---|---|
කේඑන්එන් | 0.252 යනු කුමක්ද? | 0.2293 යනු කුමක්ද? | 0.8947 යනු කුමක්ද? | 0.1315 |
සැපයුම් පසුබෑම | 0.9624 යනු කුමක්ද? | 0.9781 | 0.9591 යනු කුමක්ද? | 0.998 කි |
නයිව් බේස් | 0.9722 | 0.9834 යනු කුමක්ද? | 0.9882 යනු | 0.9787 කි |
එස්වීඑම් | 0.9885 | 0.9932 කි | 0.9886 | 1 |
ඉහත වගුවෙන්, අනෙකුත් මාදිලි හා සසඳන විට SVM හොඳම දේ කරන බව දැකිය හැකිය.
තවදුරටත් තහවුරු කිරීම සඳහා, ROC වක්ර සැලසුම් කර AUC අගයන් ගණනය කරන ලදී.
ආකෘතිය | කේඑන්එන් | සැපයුම් පසුබෑම | නයිව් බේස් | එස්වීඑම් |
---|---|---|---|---|
ඒ.යූ.සී. | .5232 යනු කුමක්ද? | .882 | .9574 යනු කුමක්ද? | .9628 යනු කුමක්ද? |
රූපය: ආකෘති 4 සඳහා AUC අගයන්
ඉහත මිනුම් වලින්, 5-fold cross-validation සහිත SVM, ඊමේල් ham සහ spam ලෙස වර්ගීකරණය කිරීමේදී දත්ත කට්ටලයේ හොඳම දේ කරන බව නිගමනය කළ හැක.
ස්පෑම් පෙරීම සැමවිටම අඛණ්ඩ පරිණාමයක් සහිත ක්ෂේත්රයක් වනු ඇත, මන්ද ස්පෑම්කරුවන් නිරන්තරයෙන් ස්පෑම් පණිවිඩ යැවීමට නව සහ නව්ය ක්රම සොයා ගනිමින් සිටී. තනි ප්රති-ස්පෑම් විසඳුමක් නිවැරදි විය නොහැක. මෙම ව්යාපෘතියේදී, හැම් සහ ස්පෑම් ඊමේල් සඳහා වර්ගීකරණයන් ලෙස ඒවා ක්රියා කරන ආකාරය බැලීමට යන්ත්ර ඉගෙනුම් මෙවලම් කිහිපයක් භාවිතා කරන ලදී. ගණනය කිරීම් පිළිබඳ විස්තර මෙන්ම ඒවායේ ක්රියාකාරිත්වයේ සංසන්දනයක් ද ඉදිරිපත් කෙරේ.
පරීක්ෂා කරන ලද යන්ත්ර ඉගෙනුම් ආකෘති හතරෙන්, SVM කාර්ය සාධනය අතින් හොඳම බව සොයා ගන්නා ලදී. ලොජිස්ටික් ප්රතිගමනය සහ නයිව් බේස් ආකෘති ද පොරොන්දු වූ ප්රතිඵල පෙන්වයි.