இன்றைய உலகில் தகவல் தொடர்புக்கு மின்னஞ்சல் ஒரு முக்கிய கருவியாகும்; இருப்பினும், ஸ்பேம் மின்னஞ்சல்கள் ஒரு பெரிய சவாலாக உருவெடுத்துள்ளன. அறியப்படாத மூலங்களிலிருந்து வரும் இந்த தேவையற்ற செய்திகள் பெரும்பாலும் இன்பாக்ஸ்களை நிரப்புகின்றன, இது தகவல் தொடர்பு மற்றும் உற்பத்தித்திறனை சீர்குலைக்கிறது. மின்னஞ்சல்களை "ஸ்பேம்" அல்லது "ஹாம்" (ஸ்பேம் அல்லாதது) என வகைப்படுத்த பல்வேறு இயந்திர கற்றல் நுட்பங்களைப் பயன்படுத்துவதை இந்த ஆய்வுக் கட்டுரை ஆராய்கிறது.
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 இலிருந்து ஒரு தரவுத்தொகுப்பு பயன்படுத்தப்பட்டுள்ளது, இதில் 2551 “ham” மின்னஞ்சல் கோப்புகள் மற்றும் 501 ஸ்பேம் மின்னஞ்சல் கோப்புகள் உள்ளன, மேலும் மாதிரியாக்கம் R நிரலாக்க மொழியைப் பயன்படுத்தி செய்யப்பட்டுள்ளது.
பின்பற்றப்படும் பல்வேறு படிகளின் ஓட்டத்தைப் புரிந்துகொள்ள கீழே உள்ள விளக்கப்படம் உதவும் -
முன் செயலாக்க படிகள்
அதிக அளவிலான உரைத் தரவு பயன்படுத்தப்படுவதால், தரவைச் சுத்தம் செய்து, வகைப்பாடு மாதிரிகளால் பயன்படுத்தக்கூடிய ஒரு வடிவத்திற்கு மாற்றுவதற்கு முன் செயலாக்க வேண்டிய அவசியம் ஏற்பட்டது. தரவு முன் செயலாக்கத்தின் ஒரு பகுதியாகப் பின்பற்றப்பட்ட படிப்படியான செயல்முறையை பின்வருவன விளக்கும் -
உரைத் தரவு ஒரு நேரியல் வகைப்படுத்திக்கு ஏற்றுக்கொள்ளத்தக்கதாக இருக்க வேண்டும். இதன் பொருள் தரவுத்தொகுப்பை உரை அம்ச பிரித்தெடுக்கும் முறைகளைப் பயன்படுத்தி எண் அம்சங்களாக மாற்ற வேண்டும்.
முதலில், உரையின் ஒவ்வொரு வரியும் டோக்கனைஸ் செய்யப்பட்டு பின்வரும் வடிவத்திற்கு ஸ்டெம் செய்யப்படுகிறது. ஸ்டெம்மிங் செயல்முறை வளைந்த முடிவுகளை அகற்றுவதன் மூலம் சொற்களைக் குறைக்கிறது. எடுத்துக்காட்டாக, கீழே உள்ள எடுத்துக்காட்டில் தொழிலாளர்கள் தொழிலாளியாக மாறுகிறார்கள்.
அடுத்து, டோக்கனைஸ் செய்யப்பட்ட தரவு TF-IDF அட்டவணையாக மாற்றப்படுகிறது (கால அதிர்வெண் - தலைகீழ் ஆவண அதிர்வெண்). TF-IDF என்பது ஒரு ஆவணத்தில் உள்ள ஒவ்வொரு n-கிராமையும் அதன் கால அதிர்வெண்-தலைகீழ் ஆவண அதிர்வெண் அடிப்படையில் குறிப்பிடும் உரை பகுப்பாய்விற்கான அணுகுமுறையாகும். கால அதிர்வெண் என்பது ஒரு ஆவணத்திற்குள் கொடுக்கப்பட்ட சொல்லின் அதிர்வெண் (இந்த விஷயத்தில், ஒரு மின்னஞ்சல்) ஆகும். தலைகீழ் ஆவண அதிர்வெண் பொதுவாக இவ்வாறு கூறப்படுகிறது:
பதிவு ((மொத்த ஆவணங்களின் எண்ணிக்கை/காலவரையறை கொண்ட ஆவணங்களின் எண்ணிக்கை)
இது மிகவும் அடிக்கடி பயன்படுத்தப்படும் மற்றும் குறைந்த முக்கியத்துவம் வாய்ந்த சொற்களை விட குறிப்பிடத்தக்க சொற்களை மிக அதிகமாக எடைபோட உதவுகிறது.
இது பயிற்சி தரவுத்தொகுப்பில் மொத்தம் 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"]
அடுத்ததாக முயற்சிக்கப்பட்ட மாதிரி நைவ் பேயஸ் மாதிரி. இந்த மாதிரிக்கு, ஐந்து மடங்கு அணுகுமுறையுடன் உகந்த ஹைப்பர் அளவுருக்களைக் கண்டறிய குறுக்கு சரிபார்ப்பு செய்யப்பட்டது. இது நைவ்-பேயஸுக்கு பின்வரும் அளவுருக்களில் விளைகிறது -
இந்த மாதிரி குறிப்பிட்ட தன்மை மற்றும் உணர்திறன் இரண்டிலும் நல்ல முடிவுகளை அடைகிறது.
நேவ் பேயஸ் மாடலுக்கான குறியீடு -
##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.252) என்பது | 0.2293 (ஆங்கிலம்) | 0.8947 (ஆங்கிலம்) | 0.1315 (ஆங்கிலம்) |
லாஜிஸ்டிக் பின்னடைவு | 0.9624 (ஆங்கிலம்) | 0.9781 (ஆங்கிலம்) | 0.9591 (ஆங்கிலம்) | 0.998 (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-மடங்கு குறுக்கு-சரிபார்ப்புடன் கூடிய SVM, மின்னஞ்சல்களை ஹாம் மற்றும் ஸ்பேம் என வகைப்படுத்துவதில் தரவுத்தொகுப்பில் சிறப்பாக செயல்படுகிறது என்று முடிவு செய்யலாம்.
ஸ்பேம் வடிகட்டுதல் எப்போதும் தொடர்ச்சியான பரிணாம வளர்ச்சியைக் கொண்ட ஒரு துறையாக இருக்கும், ஏனெனில் ஸ்பேமர்கள் தொடர்ந்து ஸ்பேம் செய்திகளை அனுப்ப புதிய மற்றும் புதுமையான முறைகளைக் கண்டுபிடித்து வருகின்றனர். எந்த ஒரு ஸ்பேம் எதிர்ப்பு தீர்வும் சரியாக இருக்காது. இந்த திட்டத்தில், ஹாம் மற்றும் ஸ்பேம் மின்னஞ்சல்களுக்கான வகைப்படுத்திகளாக அவை எவ்வாறு செயல்படுகின்றன என்பதைக் காண சில இயந்திர கற்றல் கருவிகள் பயன்படுத்தப்பட்டன. கணக்கீடுகளின் விளக்கங்களும் அவற்றின் செயல்திறன்களின் ஒப்பீடும் வழங்கப்படுகின்றன.
சோதிக்கப்பட்ட நான்கு இயந்திர கற்றல் மாதிரிகளில், செயல்திறன் அடிப்படையில் SVM சிறந்ததாகக் கண்டறியப்பட்டது. லாஜிஸ்டிக் ரிக்ரஷன் மற்றும் நேவ் பேயஸ் மாதிரிகளும் நம்பிக்கைக்குரிய முடிவுகளைக் காட்டுகின்றன.