Tanulja meg a TensorFlow-t, a Word2Vec modellt és a TSNE algoritmust kőzetsávok segítségével

A neurális hálózat kiépítésének „TensorFlow módjának” elsajátítása nagy akadálynak tűnhet a gépi tanulás elkezdésében. Ebben az oktatóanyagban lépésről lépésre megtesszük, és elmagyarázzuk az összes kritikus összetevőt, amikor egy Bands2Vec modellt építünk a Kaggle Pitchfork adatainak felhasználásával.

A teljes kódot a GitHub oldalon találja.

A Word2Vec modell

Az ideghálózatok számokat fogyasztanak és számokat állítanak elő. Nagyon jók benne. De adj nekik egy kis szöveget, és akkor dührohamot okoznak, és nem tesznek semmi távolról érdekeset.

Ha a neurális hálózat feladata összegyűjteni a számokat és értelmes kimenetet produkálni, akkor az a feladatunk, hogy megbizonyosodjunk arról, hogy bármit is táplálunk, az is értelmes. Ez az információ értelmes ábrázolásának törekvése szülte a Word2Vec modellt.

A szavakkal való munkavégzés egyik megközelítése egy forró kódolású vektorok létrehozása. Hozzon létre egy hosszú (a szókincsünkben különálló szavak száma) nulla listát, és mindegyik szóra mutatjon a lista egyedi indexe. Ha látjuk ezt a szót, akkor tegye a listában azt az indexet elsővé.

Bár ez a megközelítés működik, sok helyet igényel, és teljesen értelmetlen. A „jó” és a „kiváló” hasonlóak, mint a „kacsa” és a „fekete lyuk”. Ha csak lenne mód a szavak vektorizálására, hogy megőrizzük ezt a kontextusbeli hasonlóságot ...

Szerencsére van rá mód!

Neurális hálózat segítségével előállíthatjuk szavaink „beágyazásait”. Ezek olyan vektorok, amelyek a hálózatunkon belüli kapcsolatok súlyából kivont minden egyedi szót képviselnek.

De a kérdés továbbra is fennáll: hogyan tudjuk biztosítani, hogy értelmesek legyenek? A válasz: takarmány pár szóban, mint célszó és egy kontextus szó. Tegye ezt elégszer, véve néhány rossz példát is, és az ideghálózat elkezdi megtanulni, hogy milyen szavak jelennek meg együtt, és hogyan képez ez szinte grafikont. Mint a szavak szociális hálója, amelyeket összefüggések kötnek össze. A „jó” a „segítőkész”, a „gondoskodás” stb. Feladatunk, hogy ezeket az adatokat betápláljuk az ideghálózatba.

Az egyik legelterjedtebb megközelítés a Skipgram modell, amely ezeket a cél-kontextus párosításokat állítja elő, abból kiindulva, hogy az ablak áthelyezi a szöveg adatait. De mi van akkor, ha az adataink nem mondatok, de mégis van kontextus szerinti jelentése?

Ebben az oktatóanyagban szavaink művésznevek, összefüggéseink műfajok és áttekintési pontszámokat jelentenek. Azt akarjuk, hogy az A művész közel álljon a B művészhez, ha közös műfajuk van, és az átlagos pontszámuk hasonló. Tehát kezdjük.

Adatkészletünk felépítése

A Pitchfork egy online amerikai zenei magazin, amely főleg rock, független és új zenéket tartalmaz. A Kaggle-nek kiadott adatokat lekaparták a weboldalukról, és olyan információkat tartalmaznak, mint az egyes művészekhez kapcsolt vélemények, műfajok és dátumok.

Hozzunk létre egy művész osztályt és szótárt az összes szükséges információ tárolására.

Nagy! Most a cél-kontextus párosításokat szeretnénk gyártani műfaj és az átlagos áttekintési pontszám alapján. Ehhez két szótárat hozunk létre: egyet a különböző egyedi műfajokhoz és egyet a pontszámokhoz (egész számokra diszkrétálva).

Az összes művészünket hozzáadjuk a megfelelő műfajhoz, és ezekben a szótárakban az átlagpontszámot később használhatjuk művészpárok létrehozásakor.

Egy utolsó lépés, mielőtt belemerülnénk a TensorFlow kódba: egy tétel generálása! A köteg olyan, mint egy adatminta, amelyet ideghálózatunk minden korszakban felhasználni fog. Egy korszak az egyik ideghálózat söpörése egy edzés szakaszában. Két numerikus tömböt szeretnénk létrehozni. Az egyik a következő kódot fogja tartalmazni:

TensorFlow

Számtalan TensorFlow oktatóanyag és tudásforrás létezik. Ezen kiváló cikkek bármelyike ​​segítséget nyújt Önnek, valamint a dokumentációt. A következő kód nagymértékben maguk a TensorFlow-emberek word2vec oktatóanyagán alapul. Remélhetőleg néhányat demisztifikálhatok, és a legfontosabb dolgokig leforrázhatom.

Az első lépés a „gráf” ábrázolás megértése. Ez hihetetlenül hasznos a TensorBoard vizualizációkhoz és a neurális hálózaton belüli adatfolyamok mentális képének létrehozásához.

Szánjon egy kis időt az alábbi kód és kommentek átolvasására. Mielőtt adatokat táplálnánk egy neurális hálózatra, inicializálnunk kell az összes alkatrészt, amelyet használni fogunk. A helyőrzők azok a bemenetek, amelyek a „feed_dict” értéket adják meg. A változók a grafikon módosítható részei, amelyeket végül módosítani fogunk. Modellünk legfontosabb része a veszteségfüggvény. Ez a pontszám, hogy milyen jól teljesítettünk, és a kincstérkép, hogyan tudunk fejlődni.

A zajkontrasztív becslés (NCE) veszteségfüggvény. Általában kereszt-entrópiát és softmax-ot használunk, de a természetes nyelvfeldolgozó világban minden osztályunk minden egyes egyedi szót tartalmaz.

Számítási szempontból ez rossz. Az NCE megváltoztatja a probléma kialakítását az osztályok valószínűségéről arra, hogy a cél-kontextus párosítás helyes-e vagy sem (bináris osztályozás). Igaz párosításra van szükség, majd mintákra van szükség a rossz párosításokhoz, az állandó num_sampledezt ellenőrzi. Ideghálózatunk megtanul különbséget tenni e jó és rossz párosítás között. Végül megtanulja a kontextusokat! Az NCE-ről és működéséről itt olvashat bővebben.

Futtassa a neurális hálózatot

Most, hogy minden rendben van, csak meg kell nyomnunk a nagy zöld „go” gombot, és kissé meg kell fonni a hüvelykujjunkat.

Megjelenítés a TSNE használatával

Oké, még nem vagyunk készen. Most már kontextusban gazdag, 64 dimenziós vektorok állnak rendelkezésünkre művészeink számára, de ez talán túl sok dimenzió ahhoz, hogy valóban megjelenítsük hasznosságát.

Szerencsénkre ezt az információt két dimenzióba gyűjthetjük, miközben megtartjuk annyi tulajdonságot, amennyi a 64 dimenzióban volt! Ez a T-eloszlású sztochasztikus szomszéd beágyazás, röviden TSNE. Ez a videó remekül megmagyarázza a TSNE fő gondolatát, de megpróbálok átfogó áttekintést adni.

A TSNE a dimenziócsökkentés megközelítése, amely megtartja a magasabb dimenziók hasonlóságait (mint például az euklideszi távolság). Ehhez először felépít egy pont-pont hasonlóságok mátrixát, amelyet normál eloszlás alapján számolnak. Az eloszlás középpontja az első pont, a második pont hasonlósága pedig az eloszlás értéke az eloszlás középpontjától távol eső pontok közötti távolságban.

Ezután véletlenszerűen vetítünk az alábbi dimenzióra, és pontosan ugyanazt a folyamatot hajtjuk végre egy t-eloszlás segítségével. Most két pont-pont hasonlósági mátrixunk van. Ezután az algoritmus lassan mozgatja az alsó dimenzió pontjait, hogy megpróbálja úgy kinézni, mint a magasabb dimenzió mátrixa, ahol a hasonlóságok megmaradtak. És ismételje meg. Szerencsére a Sci-kit Learn-nek van egy olyan funkciója, amely meg tudja csinálni számunkra a számot.

Az eredmények

Ezeknek a beágyazásoknak az a csodálatos aspektusa, hogy a vektorokhoz hasonlóan matematikai műveleteket is támogatnak. A klasszikus példa: King — Man + Woman = Queenvagy legalábbis nagyon közel áll hozzá. Próbáljunk ki egy példát.

Take the low dimensional embeddings of Coil, a band with the following genres, [‘electronic’, ‘experimental', ‘rock’] , and mean score 7.9. Now subtract the low dimensional embeddings of Elder Ones, a band with genres,['electronic'] , and mean score 7.8. With this embedding difference, find the closest bands to it and print their names and genres.

Artist: black lips, Mean Score: 7.48, Genres: ['rock', 'rock', 'rock', 'rock', 'rock']
Artist: crookers, Mean Score: 5.5, Genres: ['electronic']
Artist: guided by voices, Mean Score: 7.23043478261, Genres: ['rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock']

It worked! We’re getting rock and electronic bands with vaguely similar review scores. Below are the first three hundred bands plotted with labels. Hopefully you’ve found this project educational and inspiring. Go forth and build, explore, and play!