Изградња сопственог модела анализе осећања може изгледати застрашујуће. Овај водич вас води кроз кораке за почетак.

Анализа осећања је техника обраде природног језика (НЛП) која идентификује став иза текста. Такође је познато као рударење мишљења. Циљ анализе сентимента је да се утврди да ли одређени текст има позитиван, негативан или неутралан сентимент. Предузећа га широко користе за аутоматску класификацију осећања у рецензијама купаца. Анализа великих количина рецензија помаже да се стекне вредан увид у преференције купаца.

Подешавање вашег окружења

Морате бити упознати са Основе Питхона да прати до краја. Иди на Гоогле Цолаб или отворите Јупитер Нотебоок. Затим направите нову бележницу. Извршите следећу команду да бисте инсталирали потребне библиотеке у своје окружење.

Комплетан изворни код овог пројекта доступан је у овом ГитХуб спремиште.

! пип инсталл тенсорфлов сцикит-леарн пандас нумпи пицкле5

Користићете НумПи и пандас библиотека за манипулисање скупом података. ТенсорФлов за креирање и обуку модела машинског учења. Сцикит-леарн за поделу скупа података у скупове за обуку и тестирање. Коначно, користићете пицкле5 за серијализацију и чување објекта токенизера.

instagram viewer

Увоз потребних библиотека

Увезите потребне библиотеке које ћете користити за претходну обраду података и креирање модела.

увоз нумпи као нп
увоз панде као пд
увоз тенсорфлов као тф
из склеарн.модел_селецтион увоз траин_тест_сплит
из склеарн.метрицс увоз аццураци_сцоре
из тенсорфлов.керас.препроцессинг.тект увоз Токенизер
из тенсорфлов.керас.препроцессинг.секуенце увоз пад_секуенцес
из тенсорфлов.керас.моделс увоз Редни
из тенсорфлов.керас.лаиерс увоз Уграђивање, Цонв1Д, ГлобалМакПоолинг1Д, Густо, Испуштање
увоз кисели краставци5 као кисели краставац

Користићете класе које увезете из модула касније у коду.

Учитавање скупа података

Овде ћете користити скуп података Трип Адвисор Хотел Ревиевс из Каггле да се изгради модел анализе сентимента.

дф = пд.реад_цсв('/цонтент/трипадвисор_хотел_ревиевс.цсв')
штампа (дф.хеад())

Учитајте скуп података и одштампајте његових првих пет редова. Штампање првих пет редова ће вам помоћи да проверите називе колона вашег скупа података. Ово ће бити пресудно када се скуп података унапред обрађује.

Скуп података Трип Адвисор Хотел Ревиевс има колону индекса, колону Рецензије и колону Оцена.

Предобрада података

Изаберите Преглед и Оцена колоне из скупа података. Направите нову колону на основу колоне Оцена и дајте јој назив сентимент. Ако је оцена већа од 3, означите осећај као позитивним. Ако је оцена мања од 3, означите је као негативан. Ако је оцена тачно 3, означите је као неутралан.

Изаберите само колоне Преглед и мишљење из скупа података. Промешајте редове насумично и ресетујте индекс оквира података. Мешање и ресетовање осигуравају да су подаци насумично распоређени, што је неопходно за правилну обуку и тестирање модела.

дф = дф[['Рецензија', 'Ратинг']]
дф['осећање'] = дф['Ратинг'].применити(ламбда Икс: 'позитивно'ако к > 3
друго'негативан'ако к < 3
друго'неутрално')
дф = дф[['Рецензија', 'осећање']]
дф = дф.узорак (фрац=1).ресет_индек (дроп=Истина)

Цонверт тхе Преглед текст у низ целих бројева помоћу токенизера. Ово креира речник јединствених речи присутних у тексту прегледа и мапира сваку реч у јединствену целобројну вредност. Користити пад_секуенцес функција од Кераса како би се осигурало да све секвенце прегледа имају исту дужину.

токенизер = Токенизер (број_речи=5000, оов_токен='')
токенизер.фит_он_тектс (дф['Рецензија'])
ворд_индек = токенизер.ворд_индек
секвенце = токенизер.тектс_то_секуенцес (дф['Рецензија'])
паддед_секуенцес = пад_секуенцес (секвенце, маклен=100, трунцатинг='пошта')

Претворите ознаке осећања у Оне-хот кодирање.

сентимент_лабелс = пд.гет_думмиес (дф['осећање']).вредности

Оне-хот енцодинг представља категоричке податке у формату са којим ваши модели лакше раде.

Подела скупа података у скупове за обуку и тестирање

Користите сцикит-леарн да насумично поделите скуп података у скупове за обуку и тестирање. Користићете сет за обуку да обучите модел да класификује осећања рецензија. И користићете скуп тестова да бисте приступили томе колико је модел добар у класификовању нових невидљивих рецензија.

к_траин, к_тест, и_траин, и_тест = траин_тест_сплит (подстављене_секвенце, сентимент_лабелс, тест_сизе=0.2)

Величина поделе скупа података је 0,2. То значи да ће 80% података обучити модел. А осталих 20% ће тестирати перформансе модела.

Креирање неуронске мреже

Створити неуронске мреже са шест слојева.

модел = Секуентиал()
модел.адд (Уграђивање(5000, 100, инпут_ленгтх=100))
модел.адд (Цонв1Д(64, 5, активација='релу'))
модел.адд (ГлобалМакПоолинг1Д())
модел.адд (Густо(32, активација='релу'))
модел.адд (Отпусти(0.5))
модел.адд (Густо(3, активација='софтмак'))
модел.цомпиле (оптимизер='адам', губитак='цатегорицал_цроссентропи', метрицс=['тачност'])
модел.суммари()

Први слој неуронске мреже је слој за уграђивање. Овај слој учи густу репрезентацију речи у речнику. Други слој је Цонв1Д слој са 64 филтера и величином кернела 5. Овај слој изводи операције конволуције на улазним секвенцама, користећи мали клизни прозор величине 5.

Трећи слој своди низ мапа обележја на један вектор. Узима максималну вредност за сваку мапу обележја. Четврти слој врши линеарну трансформацију на улазном вектору. Пети слој насумично поставља део улазних јединица на 0 током тренинга. Ово помаже у спречавању претеривања. Последњи слој конвертује излаз у дистрибуцију вероватноће у три могуће класе: позитивне, неутралне и негативне.

Обука неуронске мреже

Поставите сетове за обуку и тестирање на модел. Обучите модел за десет епоха. Можете променити број епоха по свом укусу.

модел.фит (к_траин, и_траин, епоцхс=10, батцх_сизе=32, валидатион_дата=(к_тест, и_тест))

После сваке епохе, перформансе модела на сету за тестирање се процењују.

Евалуација перформанси обученог модела

Користити модел.предицт() метод за предвиђање ознака осећања за скуп тестова. Израчунајте оцену тачности користећи аццураци_сцоре() функција из сцикит-леарн.

и_пред = нп.аргмак (модел.предицт (к_тест), акис=-1)
штампа („Тачност:“, аццураци_сцоре (нп.аргмак (и_тест, акис=-1), и_пред))

Тачност овог модела је око 84%.

Чување модела

Сачувајте модел користећи модел.саве() методом. Користите пицкле за серијализацију и чување објекта токенизера.

модел.саве('сентимент_аналисис_модел.х5')
са отвори ('токенизер.пицкле', 'вб') као ручка:
пицкле.думп (токенизер, ручка, протокол=пикле. ХИГХЕСТ_ПРОТОЦОЛ)

Објекат токенизер ће токенизовати ваш сопствени унос текста и припремити га за уношење обученом моделу.

Коришћење модела за класификацију осећања сопственог текста

Након креирања и чувања модела, можете га користити да класификујете осећај сопственог текста. Прво учитајте сачувани модел и токенизер.

# Учитајте сачувани модел и токенизер
увоз керас

модел = керас.моделс.лоад_модел('сентимент_аналисис_модел.х5')
са отвори ('токенизер.пицкле', 'рб') као ручка:
токенизер = пицкле.лоад (ручка)

Дефинишите функцију за предвиђање осећаја унесеног текста.

дефпредицт_сентимент(текст):
# Токенизујте и напуните уносни текст
тект_секуенце = токенизер.тектс_то_секуенцес([текст])
тект_секуенце = пад_секуенце (текст_секвенца, маклен=100)

# Направите предвиђање користећи обучени модел
предицтед_ратинг = модел.предицт (текст_секвенца)[0]
ако нп.аргмак (предицтед_ратинг) == 0:
повратак'негативно'
елиф нп.аргмак (предицтед_ратинг) == 1:
повратак'неутрално'
друго:
повратак'позитивно'

На крају, предвидите свој текст.

тект_инпут = „Апсолутно ми се допао боравак у том хотелу. Особље је било невероватно и соба је била фантастична!”
предвиђено_осјећање = предвиђање_сентимента (унос_текста)
штампа (предицтед_сентимент)

Предвиђено расположење горње рецензије је следеће:

Модел је у стању да правилно класификује осећања сва три прегледа.

Предвиђање осећања помоћу унапред обучених модела

Понекад у машинском учењу можете имати изазов да пронађете прави скуп података. Можда вам такође недостају ресурси за креирање сопственог скупа података. Овде долазе унапред обучени модели. Морате знати како да користите њихов АПИ и препустите им да се баве осталим.