У скоро свакој платформи за слање е-поште или порука постоји филтер за нежељену пошту. Филтер испитује сваку пошту или поруку како стигне и класификује је или као нежељену пошту или као шуку. Ваше пријемно сандуче приказује оне који спадају под шунку. Одбацује или засебно приказује поруке које спадају у нежељену пошту.
Можете креирати сопствени филтер за нежељену пошту користећи НЛТК, регек и сцикит-леарн као главне библиотеке. Такође ће вам требати скуп података за обуку вашег модела.
Разумевање вашег скупа података
„Класификација нежељене поште за основни НЛП“ је бесплатно доступна Каггле скуп података. Садржи мешавину нежељене поште и необрађених порука поште. Има 5.796 редова и 3 колоне.
Тхе КАТЕГОРИЈА колона показује да ли је порука нежељена пошта или шунка. Број један представља нежељену пошту док нула представља шунку. Тхе МЕССАГЕ колона садржи стварну сирову пошту. Тхе НАЗИВ ДОКУМЕНТА категорија је јединствени идентификатор поруке.
Припрема вашег окружења
Да бисте пратили, мораћете да имате а основно разумевање Пајтона и машинско учење. Такође би требало да вам буде удобно радити Гоогле Цолаб или Јупитер Нотебоок.
За Јупитер Нотебоок, идите до фасцикле у којој желите да се пројекат налази. Направите ново виртуелно окружење и покрените Јупитер бележницу из ове фасцикле. Гоогле Цолаб-у није потребан овај корак. Направите нову бележницу у Гоогле Цолаб или Јупитер бележници.
Потпуни изворни код и скуп података доступни су у а ГитХуб спремиште.
Покрените следећу магичну команду да бисте инсталирали потребне библиотеке.
!пип инсталл нлтк сцикит-леарн регек нумпи пандас
Користићете:
- НЛТК за обрада природног језика (НЛП).
- сцикит-леарн да креирате модел машинског учења.
- регек за рад са регуларним изразима.
- НумПи за рад са низовима.
- Панде да манипулишу вашим скупом података.
Увезите библиотеке
Увезите библиотеке које сте инсталирали у свом окружењу. Увезите библиотеку регуларних израза као ре и сцикит-леарн као склеарн.
увоз панде као пд
увоз нумпи као нп
увоз нлтк
из нлтк.стем увоз ВордНетЛемматизер
из нлтк.цорпус увоз стопвордс
увоз ре
из склеарн.модел_селецтион увоз траин_тест_сплит
из склеарн.метрицс увоз извештај о класификацији
из склеарн.феатуре_ектрацтион.тект увоз ЦоунтВецторизер
из склеарн.феатуре_ектрацтион.тект увоз ТфидфВецторизер
Користићете ВордНетЛемматизер и модуле за заустављање из НЛТК-а да унапред обрадите необрађене поруке у скупу података. Користићете увезене склеарн модуле током изградње модела.
Предобрада података
Позовите пандас реад_цсв функцију да учитате скуп података. Уверите се да складиштите скуп података у истом директоријуму као и ваш пројекат. Прикажите првих пет редова скупа података да бисте добили визуелни приказ скупа података.
дф = пд.реад_цсв('/цонтент/Спам Пошаљите необрађени текст е-поштом за НЛП.цсв')
дф.хеад()
Испустите колону ФИЛЕ_НАМЕ из скупа података. То није корисна функција за класификацију нежељене поште.
дф.дроп('НАЗИВ ДОКУМЕНТА', акис=1, инплаце=Истина)
Проверите број шунке и нежељене поште у скупу података. Ово ће вам касније помоћи да одредите како да поделите податке за обуку модела и тестирање.
дф. ЦАТЕГОРИ.валуе_цоунтс()
Преузмите корпус стоп речи из НЛТК библиотеке. Зауставне речи су скуп речи које се често јављају. Претходна обрада их уклања из порука. Учитајте зауставне речи на енглеском и сачувајте их у променљивој зауставне речи.
нлтк.довнлоад('зауставне речи')
стопворд = нлтк.цорпус.стопвордс.вордс('енглески језик')
Преузмите отворени вишејезични ВордНет. То је лексичка база података енглеских речи и њихових семантичких значења.
нлтк.довнлоад('омв-1.4')
Преузмите ворднет корпус. Користићете га за класификацију текста. Инстанцирајте ВордНетЛемматизер() објекат. Објекат ћете користити током лематизације. Лематизација је техника која се користи у НЛП-у за свођење деривационих облика речи на њихово речничко значење.
На пример: Смањењем речи „мачке“ добићете „мачка“. Реч после лематизације постаје лема.
нлтк.довнлоад('ворднет')
лемматизер = ВордНетЛемматизер()
Направите празну листу коју ћете користити за чување претходно обрађених порука.
корпус=[]
Креирајте фор петљу за обраду сваке поруке у колони МЕССАГЕ скупа података. Уклоните све знакове који нису алфанумерички. Претворите поруку у мала слова. Поделите текст на речи. Уклоните зауставне речи и лематизујте речи. Претворите речи назад у реченице. Додајте претходно обрађену поруку у корпусну листу.
за и ин опсег (лен (дф)):
# уклањање свих знакова који нису алфанумерички
порука = ре.суб('[^а-зА-З0-9]', ' ', дф['ПОРУКА'][и])# претварање поруке у мала слова
порука = мессаге.ловер()# дељење реченице на речи за лематизацију
порука = мессаге.сплит()# уклањање зауставних речи и лематизација
порука = [лемматизатор.лематизовати (реч) за реч ин порука
ако реч неин сет (стопвордс.вордс('енглески језик'))]# Претварање речи назад у реченице
порука = ' '.јоин (порука)
# Додавање претходно обрађене поруке на корпусну листу
цорпус.аппенд (порука)
Ова петља ће трајати око пет минута. Корак лематизације и уклањања зауставних речи одузима већину времена. Сада сте претходно обрадили своје податке.
Инжењеринг карактеристика коришћењем модела Баг-оф-Вордс наспрам ТФ-ИДФ технике
Инжењеринг карактеристика је процес претварања карактеристика необрађених података у нове функције погодне за моделе машинског учења.
Модел торбе речи
Модел врећице речи представља текстуалне податке као дистрибуцију фреквенција речи присутних у документу. Ово је једноставно колико пута се реч појављује у документу.
Користите класу ЦоунтВецторизер из сцикит-леарн да бисте претворили текстуалне податке у нумеричке векторе. Уградите корпус претходно обрађених порука и трансформишите корпус у ретку матрицу.
# Узмите топ 2500 функција
цв = ЦоунтВецторизер (мак_феатурес=2500, нграм_ранге=(1,3))
Кс = цв.фит_трансформ (цорпус).тоарраи()
и = дф['КАТЕГОРИЈА']
Поделите трансформисане податке у скупове за обуку и тестове. Користите двадесет посто података за тестирање и осамдесет посто за обуку.
к_траин, к_тест, и_траин, и_тест = траин_тест_сплит(
Кс, и, тест_сизе=0.20, рандом_стате=1, стратифи=и)
Модел врећице речи ће правилно класификовати поруке у скупу података. Али неће бити добро у класификовању ваших порука. Не узима у обзир семантичко значење порука. Да бисте само класификовали поруке у скупу података, користите ову технику.
ТФ-ИДФ техника
Термин Фрекуенци-Инверсе Доцумент Фрекуенци (ТФ-ИДФ) функционише тако што се речима у документу додељују тежине на основу тога колико се често појављују. ТФ-ИДФ даје речи које се често појављују у документу, али су ретке у корпусу веће тежине. Ово омогућава алгоритмима машинског учења да боље разумеју значење текста.
тф = ТфидфВецторизер (нграм_ранге=(1,3), мак_феатурес=2500)
Кс = тф.фит_трансформ (цорпус).тоарраи()
к_траин, к_тест, и_траин, и_тест = траин_тест_сплит(
Кс, и, тест_сизе=0.20, рандом_стате=1, стратифи=и)
Да бисте издвојили семантичко значење из порука и класификовали своје поруке, користите ТФ-ИДФ.
Креирање и обука вашег модела
Започните креирањем и иницијализацијом наивног Бајесовог модела користећи класу сцикит-леарн МултиномиалНБ.
модел = МултиномиалНБ()
Поставите податке за обуку, омогућавајући моделу да тренира на сету за обуку:
модел.фит (к_траин, и_траин)
Затим направите предвиђања за сетове за обуку и тестирање користећи метод предвиђања.
траин_пред = модел.предицт (к_траин)
тест_пред = модел.предицт (к_тест)
Ова предвиђања ће вам помоћи да процените свој модел.
Модел Евалуатион
Процените перформансе свог модела користећи функцију цлассифицатион_репорт из сцикит-леарн. Проследите предвиђања скупа за обуку и ознаке стварног скупа за обуку као улаз. Урадите исто за тест сет.
штампа (извештај о класификацији (воз_пред, и_воз))
принт (цлассифицатион_репорт (тест_пред, и_тест))
Што је већа прецизност, памћење и тачност за обе класе, то је модел бољи.
Резултати класификације сопствених порука
Трансформишите поруку у вектор користећи ТФ-ИДФ технику. Користите модел да предвидите да ли је порука нежељена пошта или шунка, а затим прикажите то предвиђање на екрану.
штампа ('Предвиђање...')
порука = [„Освојили сте 10000 долара, наведите свој налог
детаљи, тако да можемо да пребацимо новац"]
мессаге_вецтор = тф.трансформ (порука)
категорија = модел.предицт (мессаге_вецтор)
штампа ("Порука је", "Спам"ако категорија == 1друго"није нежељено")
Замените поруку својом.
Излаз је следећи:
Модел може да класификује нове невидљиве поруке као нежељену пошту или хам.
Класификација нежељене поште у апликацијама изазов
Главни изазов са којим се суочава класификација нежељене поште у апликацијама је погрешна класификација порука. Модели машинског учења нису увек тачни. Они могу класификовати нежељену пошту као шунку и обрнуто. У случају класификовања шунке као нежељене поште, програм може да уклони е-пошту из пријемног сандучета корисника, узрокујући да пропусте важне поруке.