1. ПрограммингВелика датаДата наука Употреба АИ за анализу осећаја

Аутор: Јохн Паул Муеллер, Луца Муеллер

Анализа осећаја рачунски произлази из писменог текста користећи писачев став (било позитиван, негативан или неутралан) према теми текста. Ова врста анализе показала се корисном за људе који раде у маркетингу и комуникацији јер им помаже да схвате шта купци и потрошачи мисле о производу или услузи и на тај начин поступају на одговарајући начин (на пример, покушавајући да опораве незадовољне купце или одлуче да користе другачију стратегију продаје ). Свако врши анализу осећања. На пример, када читају текст, људи природно покушавају да утврде осећај који је покренуо особу која га је написала. Међутим, када је број текстова за читање и разумевање превелик и текст се стално накупља, као што је то случај са друштвеним медијима и е-маиловима корисника, аутоматизација анализа осећања је важна.

Анализа расположења АИ

Сљедећи примјер је пробни рад РНН-а помоћу Кераса и ТенсорФлов-а који гради алгоритам анализе осјећаја који је способан класифицирати ставове изражене у прегледу филма. Подаци су узорак базе података ИМДб који садржи 50.000 прегледа (подељених на пола између возних и тестних скупова) филмова праћених етикетом која изражава осећај прегледа (0 = негативан, 1 = позитиван). ИМДб је велика мрежна база података која садржи информације о филмовима, ТВ серијама и видео играма. Оригинално га одржава база обожавалаца, а сада га води подружница компаније Амазон. На ИМДб-у људи проналазе потребне информације о својој омиљеној емисији, као и објављују своје коментаре или пишу рецензију коју ће други посетиоци прочитати.

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

Као почетна тачка, код увози имдб функцију од Кераса и користи је за проналажење података с Интернета (око 17.5МБ за преузимање). Параметри које пример користи обухватају првих 10.000 речи, а Керас би требало да помера податке користећи специфично случајно семе. (Познавање семена омогућава репродукцију измене по потреби.) Функција враћа два воза и тест теста, оба направљена од текстуалних низова и резултата осећања.

фром керас.датасетс импорт имдб
топ_вордс = 10000
((к_траин, и_траин),
(к_тест, и_тест)) = имдб.лоад_дата (нум_вордс = топ_вордс,
семе = 21)

Након довршетка претходног кода, можете проверити број примера помоћу следећег кода:

принт ("Примјери тренинга:% и"% лен (к_траин))
принт ("Примјери тестирања:% и"% лен (к_тест))

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

увести нумпи као нп
принт (нп.уникуе (и_траин, ретурн_цоунтс = Тачно))

Резултат, низ ([12500, 12500]), потврђује да је скуп података равномерно подељен између позитивних и негативних исхода. Таква равнотежа између класа одговора искључиво је због демонстративне природе скупа података. У стварном свету ретко можете наћи уравнотежене скупове података. Следећи корак креира Питхон речнике који могу претворити између кода који се користи у скупу података и стварних речи. У ствари, скуп података који се користи у овом примеру је унапред обрађен и пружа низове бројева који представљају речи, а не саме речи. (ЛСТМ и ГРУ алгоритми које пронађете у Керасу очекују низове бројева као бројеве.)

ворд_то_ид = {в: и + 3 за в, и у имдб.гет_ворд_индек (). итемс ()}
ид_то_ворд = {0: '<ПАД>', 1: '<СТАРТ>', 2: '<ПУН>>}
ид_то_ворд.упдате ({и + 3: в за в, и у имдб.гет_ворд_индек (). ставке ()})
деф цонверт_то_тект (редослед):
ретурн '' .јоин ([ид_то_ворд [с] за с у низу ако је с> = 3])
испис (претворити_то_тект (к_траин [8]))

Претходни исјечак кода дефинира два рјечника конверзије (од ријечи до нумеричких кодова и обрнуто) и функцију која примјере скупа података преводи у читљив текст. Као пример, код пише девети пример: "овај филм је био попут олупине лошег влака, подједнако страшан као и ...". Из овог уломка можете лако претпоставити да став према овом филму није позитиван. Речи као што су лоша, олупина и грозно преносе снажан негативан осећај, а то олакшава нагађање исправног осећања.

У овом примјеру добијате нумеричке секвенце и враћате их у ријечи, али супротно је уобичајено. Обично добијете изразе састављене од речи и претвара их их у низове целих бројева како би се унели у слој РНН-ова. Керас нуди специјализовану функцију, Токенизер која то може учинити за вас. Користи методе фит_он_тект да научи како пресликати речи на цео бројеве из података о тренингу и тект_то_матрик да трансформише текст у низ.

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

Конвенционално узимате почетни део текста и користите га као репрезентативни за целу рецензију. Понекад вам је потребно само неколико почетних речи - на пример првих 50 речи - да бисте добили смисао; понекад вам треба више. Нарочито дуги текстови не откривају своју оријентацију рано. Стога је на вама да разумете врсту текста са којим радите и да одлучите колико речи анализирати користећи дубинско учење. Овај пример разматра само првих 200 речи, што би требало бити довољно.

Приметили сте да код почиње давати код речима које почињу са бројем 3, на тај начин остављајући кодове од 0 до 2. Нижи бројеви се користе за посебне ознаке, попут сигнализације почетка фразе, попуњавања празних места да би се редослед фиксирао у одређеној дужини и обележавање речи које су искључене јер нису довољно честе. Овај пример приказује само најчешћа 10.000 речи. Употреба ознака за истицање почетка, краја и приметних ситуација је трик који функционише са РНН-овима, посебно за машинско превођење.

фром импорт керас.препроцессинг.секуенце импорт пад_секуенцес
мак_пад = 200
к_траин = пад_ последице (к_траин,
маклен = мак_пад)
к_тест = пад_ последице (к_тест,
маклен = мак_пад)
принт (к_траин [0])

Употребом функције пад_секуенцес из Кераса са мак_пад постављеном на 200, код узима првих двјесто ријечи сваке рецензије. У случају да преглед садржи мање од двеста речи, онолико нула вредности колико је потребно претходи низу да би се постигао потребан број елемената секвенце. Скраћивање секвенце на одређену дужину и попуњавање празнина са нултим вредностима назива се улазним паддингом, важним процесним активностима када се користе РНН-ови попут алгоритама дубоког учења. Сада код дизајнира архитектуру:

фром керас.моделс импорт Секвенцијални
из керас.лаиерс увозно Двосмерно, Густо, Одустајање
из керас.лаиерс увозе ГлобалМакПоол1Д, ЛСТМ
фром керас.лаиерс.ембеддингс импорт Уградња
ембеддинг_вецтор_ленгтх = 32
модел = секвенцијални ()
модел.адд (Уградња (топ_вордс,
ембеддинг_вецтор_ленгтх,
инпут_ленгтх = мак_пад))
модел.адд (Двосмерни (ЛСТМ (64, ретурн_секуенцес = тачно)))
модел.адд (ГлобалМакПоол1Д ())
модел.адд (густо (16, активација = "релу"))
модел.адд (густо (1, активација = "сигмоид"))
модел.цомпиле (губитак = 'бинарни_кросцентропија',
оптимизер = 'адам',
метрицс = ['тачност'])
принт (модел.суммари ())

Претходни исјечак кода дефинира облик модела дубоког учења гдје користи неколико специјализираних слојева за обраду природног језика из Кераса. Пример је такође захтевао резиме модела (наредба модел.суммари ()) да би се утврдило шта се дешава са архитектуром коришћењем различитих неуронских слојева.

Имате слој Ембеддинг, који нумеричке секвенце претвара у густо убацивање речи. Та врста уградње речи је погоднија за учење помоћу слоја РНН-ова. Керас нуди слој за уградњу који, осим што мора да буде први слој мреже, може да обави и два задатка:

  • Примјењујући преиспитано уметање ријечи (као што је Ворд2вец или ГлоВе) на унос секвенце. Само требате проследити матрицу која садржи уграђивање до тежине његових параметара. Израда уграђене речи од нуле, на основу уноса који добија.

У овом другом случају Уградња треба само знати:

  • инпут_дим: Величина вокабулара која се очекује од података оутпут_дим: Величина уграђеног простора који ће се произвести (тзв. димензије) инпут_ленгтх: Величина секвенце која се очекује

Након што одредите параметре, Ембеддинг ће пронаћи боље тегове како би се сеансе претвориле у густу матрицу током тренинга. Величина густе матрице је дата дужином секвенце и димензијом уграђивања.

Ако користите слој Ембеддинг који је пружио Керас, морате имати на уму да ова функција пружа само матрицу тежине величине вокабулара према димензији жељеног уграђивања. Мапира речи у ступце матрице, а затим прилагођава утеге матрице на датим примерима. Ово решење, иако је практично за нестандардне језичке проблеме, није аналогно претходним уметањима речи, које се тренирају на другачији начин и на милионима примера.

Пример користи двосмерно омотавање - ЛСТМ слој од 64 ћелије. Двосмерни трансформише нормалан ЛСТМ слој дуплирајући га: На првој страни, он примењује нормалан редослед уноса који пружате; с друге стране прелази обрнуту секвенцу. Користите овај приступ јер понекад користите речи у различитом редоследу, а изградња двосмерног слоја ће ухватити било који образац речи, без обзира на редослед. Керасова имплементација је заиста једноставна: једноставно је примијените као функцију на слоју који желите двосмјерно приказати.

Двосмјерни ЛСТМ је постављен да враћа секвенце (ретурн_секуенцес = Тачно); то јест, за сваку ћелију враћа добијени резултат након што је видео сваки елемент секвенце. Резултати су, за сваку секвенцу, излазна матрица од 200 к 128, где је 200 број елемената секвенце и 128 је број ЛСТМ ћелија коришћених у слоју. Ова техника спречава РНН да узме последњи резултат сваке ЛСТМ ћелије. Савети о осећању текста заправо се могу појавити било где у низу уграђених речи.

Укратко, важно је не узети последњи резултат сваке ћелије, већ њен најбољи резултат. Код се, дакле, ослања на следећи слој, ГлобалМакПоол1Д, како би проверио сваки низ резултата који пружа свака ЛСТМ ћелија и задржао само максимални резултат. То би требало да осигура да пример одабере најјачи сигнал из сваке ЛСТМ ћелије, за који се надамо да је обучен за одабир неких значајних сигнала.

Након филтрирања неуронских сигнала, пример има слој од 128 излаза, по један за сваку ЛСТМ ћелију. Код смањује и меша сигнале користећи узастопни густи слој од 16 неурона са РеЛУ активацијом (на тај начин пролазе само позитивни сигнали). Архитектура се завршава завршним чвором помоћу сигмоидне активације, што ће резултате притиснути у распон 0–1 и учинити да изгледају као вероватноће.

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

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

Добијање резултата траје неко време, али ако користите ГПУ, то ће се завршити у времену потребном за пиће шољице кафе. У овом тренутку можете проценити резултате, поново користећи податке за потврду. (Резултати не би требало да имају изненађења или разлике од онога што је код пријављен током тренинга.)

губитак, метрички = модел.евалуате (к_тест, и_тест, вербосе = 0)
принт ("Тачност теста:% 0,3ф"% метричка вредност)

Коначна тачност, која је проценат тачних одговора из дубоке неуронске мреже, биће вредност од око 85–86 процената. Резултат ће се мало променити сваки пут када покренете експеримент због рандомизације приликом изградње ваше неуронске мреже. То је потпуно нормално с обзиром на малу величину података са којима радите. Ако започнете са правим теговима, среће ће бити лакше у тако кратком тренингу.

На крају, ваша мрежа је анализатор осећаја који може претпоставити да су осећаји изражени у прегледу филма тачно око 85 одсто времена. С обзиром на још више података о обуци и софистицираније неуронске архитектуре, можете добити резултате који су још импресивнији. У маркетингу, сличан алат се користи за аутоматизацију многих процеса који захтевају читање текста и предузимање акција. Опет, можете повезати мрежу попут ове са неуронском мрежом која слуша глас и претвара га у текст. (Ово је још једна апликација РНН-ова, која сада напаја Алека, Сири, Гоогле Воице и многе друге личне помоћнике.) Прелаз омогућава апликацији да разуме осећања чак и у говорним изразима, као што је телефонски позив купца.

Такође видети

Како попунити свој фантастични ногометни пописСимптоми и лекови за рецепт за десерт Кето ФлуКето: кремасти колач са тијестом од кекса Рецепт за доручак: авокадо облак тостКето један оброк за оброк: бифтек од непца с хрскавом калеКето рецептуром за предјело: хрскави печени лук с прстимаРударство криптовалута и доказ алгоритма улогаКако заштитити своју МацБоок приватностМеет замјену за иТунес: Нова музичка и ТВ апликација у мацОС ЦаталинаШта је ново с мацОС Цаталина? Брзи савјети за подешавање мацОС Цаталина и регистровање МацБоокМацБоок-а за лутке Цхеат СхеетДифференцес између МацБоок Аир-а и МацБоок ПроХов за пребацивање између Рачуни на вашем МацТест микрофону на Виндовс ПЦ-уКако да вратите датотеке из историје датотека у Виндовсима 10Коришћење мрежног диска на рачунару са Виндовс 10 рачунаромКако проверити кочне линијеКако скочити Покрените аутомобил како да кажете да ли вам возило треба подешавањеКако да отклоните каталитичке претварачеКако често мењате уље? Како да проверите ниво уља у вашем возилу Како испрати систем хлађења вашег возилаКако да решите проблем прегревања мотораКако Промјена гумицеКако инсталирати свјећицуКако уклонити старе свјећицеКако провјерити диск кочницеКако промијенити своју кочничку текућинуКако провјерити главни цилиндар кочног системаКако провјерити кочиони флуид вашег кочног возилаЗашто се прегријава аутомобил и шта могу учинити? Упишите ваше возилоКако да проверите своје кочне линије