Word2Vec. Högkvalitativa vektorrepresentationer av ord tränat på stora mängder data. Innehåll LINKÖPINGS UNIVERSITET. 1. Inledning...

Relevanta dokument
729G43 Artificiell intelligens (2016) Maskininlärning 3. Marco Kuhlmann Institutionen för datavetenskap

729G43 Artificiell intelligens / Maskininlärning 3. Marco Kuhlmann

Neurala nätverk och språkigenkänning. Henrik Linnarsson. Linköping University

Forskning och utveckling inom språkteknologi Uppgift 3: Projektförslag Parallelliserad dependensparsning i CUDA

ARTIFICIELLA NEURALA NÄT. MARCO KUHLMANN Institutionen för datavetenskap

Word2vec2syn. Tove Pettersson. Synonymidentifiering med Word2vec

Perceptron som ordklasstaggare: ett fördjupningsarbete i 729G43 -Artificiell Intelligens

Tekniker för storskalig parsning

Ett Neuralt Nätverk Tittar På Kläder

Introduktion till programmering och Python Grundkurs i programmering med Python

TDDD02 Språkteknologi för informationssökning (2016) Introduktion. Marco Kuhlmann Institutionen för datavetenskap

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

729G43 Artificiell intelligens (2016) Maskininlärning 2. Marco Kuhlmann Institutionen för datavetenskap

Personifierad Netflix

Statistisk mönsterigenkänning

SF1911 Statistik för bioteknik: Autumn 2016 Lab 3 för CBIOT3. 1 Problem 1 - Fördelning av nukleotider i DNA

Johan Karlsson Johka490. Statistical machine translation JOHAN KARLSSON

Algoritmer och maskininlärning

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Automatisk synonymgenerering med Word2Vec för query expansion inom e-handel

Grundläggande textanalys. Joakim Nivre

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Word- sense disambiguation

Statistisk Maskinöversättning eller:

Ontologier. Cassandra Svensson

de var svåra att implementera och var väldigt ineffektiva.

Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens Erik Claesson

med hjälp av Deep Reinforcement Learning

Språkteknologi och Open Source

Comparing artificial neural network algorithms for classification of reviews

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Tekniker för storskalig parsning: Grundbegrepp

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Matematiska Institutionen KTH. Lösning till tentamensskrivning på kursen Linjär algebra II, SF1604, den 9 juni 2011 kl

729G43 Artificiell intelligens / Maskininlärning 2. Marco Kuhlmann

SPEECH RECOGNITION USING ARTIFICIAL NEURAL NETWORKS. Linköpings Universitet 729G43 Artificiell Intelligens

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht Block 5, översikt

Tillämpad statistik (A5), HT15 Föreläsning 24: Tidsserieanalys III

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

TDDD02 Språkteknologi för informationssökning (2016) Textklassificering. Marco Kuhlmann Institutionen för datavetenskap

Föreläsning G60 Statistiska metoder

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 7. Felrättande koder

Tentamen i Matematik 3: M0031M.

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Synonymutvärdering: Synonymlexikon slår ordvektormetod. Anna Westin Augusti 2018

TDDD02 Språkteknologi för informationssökning (2016) Ordpredicering. Marco Kuhlmann Institutionen för datavetenskap

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Tentamen MVE301 Sannolikhet, statistik och risk

Vad behövs för att skapa en tillståndsrymd?

729G09 Språkvetenskaplig databehandling (2018) Kursintroduktion. Marco Kuhlmann Institutionen för datavetenskap

KUNDCASE. Inovia gjorde sin AI-utveckling 10 gånger snabbare med Power-plattformen

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Att använda Weka för språkteknologiska problem

NEURAL MASKINÖVERSÄTTNING

Föreläsning 5: Grafer Del 1

Föreläsning 13 Innehåll

Klassificering av homonymer Inlämningsuppgift språkteknologi

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

Taligenkänning med fördjupning på Hidden Markov Models

Tentamen MVE301 Sannolikhet, statistik och risk

TDDD02 Språkteknologi för informationssökning / Textsammanfattning. Marco Kuhlmann Institutionen för datavetenskap

Höftledsdysplasi hos dansk-svensk gårdshund

GRIDWORLD OCH MDP PROJEKTRAPPORT 729G43 MICHAEL JONASSON

Tentamen ID1004 Objektorienterad programmering October 29, 2013

. (2p) 2x + 2y + z = 4 y + 2z = 2 4x + 3y = 6

Logistisk regression och Indexteori. Patrik Zetterberg. 7 januari 2013

Distributionella representationer av ord för effektiv informationssökning

LINKÖPINGS UNIVERSITET 729G11, Artificiell Intelligens II, HT10 SMT. En fördjupning i statistiska maskinöversättningssystem

Np MaB vt Låt k = 0 och rita upp de båda linjerna. Bestäm skärningspunkten mellan linjerna.

Regression med Genetiska Algoritmer

SELF- ORGANIZING MAPS

MVE022 Urval av bevis (på svenska)

SHAZAM! En!smart!musiktjänst! Linha108! Fördjupningsarbete!729G43!

Krafts olikhet. En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om. 2 l i. 1 i=1

Laboration 2. i 5B1512, Grundkurs i matematisk statistik för ekonomer

Tommy Färnqvist, IDA, Linköpings universitet. 2 Strukturer Domäner Tolkningar... 3

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

TMV166 Linjär Algebra för M. Tentamen

Sub-symbolisk kognition & Konnektionism. Kognitionsvetenskaplig Introduktionskurs (729G01) Mats Andrén,

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Prestanda och skalbarhet

TMV142/186 Linjär algebra Z/TD

2D Potentialen i en nervcell definieras normalt som skillnaden i spänning mellan dess axon och dendrit.

International Olympiad in Informatics July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

Grundkurs i programmering - intro

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

JavaScript del 2 DocumentWrite, Prompt och ParseInt

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Matriser och vektorer i Matlab

Teoretisk del. Facit Tentamen TDDC (6)

Sökning och sortering

Installera Anaconda Python

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Asymptotisk analys innebär att... man försöker uppskatta vad som händer för stora indatamängder.

Taligenkänning. Sanna Aronsson sanar429 Artificiell Intelligens, HKGBB0

Transkript:

LINKÖPINGS UNIVERSITET Innehåll 1. Inledning... 2 2. Terminologi... 3 3. Allmänt om Word2Vec... 3 4. Continous Skip-gram model... 4 Word2Vec Högkvalitativa vektorrepresentationer av ord tränat på stora mängder data 2016-01-07 4.1 Hierarchical softmax... 5 4.2 Negative Sampling... 5 4.3 Subsampling av frekventa ord... 6 7. Tillämpning och implementation... 6 7.1 Exempel på tillämpningar... 6 7.2 Test av implementationen i Python 2.7... 7 8. Avslutning... 9 9. Personlig reflektion... 9 10. Litteraturförteckning... 10, 1

1. Inledning 2. Terminologi Inom Natural Language Processing finns stora problem med hög beräkningskomplexitet. De senaste åren har det kommit ett genombrott och en möjlighet att träna neurala nät på stora mängder rå data för att komma åt så precisa representationer av ord som möjligt. Genombrottet gjordes på Google av en forskargrupp som leds av Tomas Mikolov och kommer att beskrivas och diskuteras. Denna rapport är en undersökning och sammanfattning av två av Mikolovs artiklar. Den första (Mikolov, Chen, Corrado, & Dean, 2013) introducerar Word2Vec och två modeller. Den andra artikeln (Mikolov, Sutskever, Chen, Corrado, & Dean, 2013) avhandlar en av modellerna, skip-gram. Word2Vec-implementationen i Python 2.7 (Gensim) har även undersökts och kod finns bifogat. Både skip-gram och CBOW har använts för att träna två modeller, men fokus i rapporten är på skip-gram. En vektor kan enligt olika discipliner beskrivas på olika sätt. Enligt användningen i denna rapport kan en vektor beskrivas som en ordnad sekvens av värden. För enkelhetens skull kan läsaren tänka sig en lista med värden. En vektor existerar i vektorrum med n dimensioner (Russel & Norvig, 2013, s. 1055-1056). Korpus är en stor samling språkliga data i textform som används av forskare i lingvistik. Texter som finns i en korpus kan vara antingen transkriberat tal eller vanlig text. Vanligt för en korpus är att texterna är av naturligt språkbruk (Kann, 2006). 3. Allmänt om Word2Vec På Google har ett forskarlag (Mikolov, Chen, et al., 2013) utvecklat två modeller för bearbetning av naturligt språk genom text som går under paraplytermen Word2Vec. Den är uppbyggd av C-kod och har öppen källkod. Även textfiler som krävs för att testa precision finns i öppen källkod. Studiens huvudtes är att mycket stora obearbetade datamängder (som innehåller flera miljarder ord) kan användas för att kontinuerligt skapa ordrepresentationer. Representationerna är högkvalitativa ordvektorer som skapas med en av de två modellerna som introduceras i artikeln. Inom tidigare Natural Language Processing-arkitekturer har ordrepresentationer tränats på hundratals miljoner ord med lägre dimensionalitet på vektorerna (50-100) än Word2Vec (300 dimensioner). Den största rapporterade datamängden Word2Vec har tränas på är 30 miljarder token. Utöver att ha tränats på mindre datamängder så har tidigare modellarkitekturer som använder vektorer hög beräkningskomplexitet jämfört med Word2Vec. Modellerna i Word2Vec tränas genom stokastisk gradientsökning och backpropagation. Likt människor predicerar vilket ord som kommer näst i en mening kan man lära ett neuralt nätverk att förutsäga ett ord givet kontextord P(W C), samt kontext givet ett ord P(C W). Dessa två representerar Word2Vecs två modeller; Continous Bag of Words (CBOW) som förutsäger ord givet kontextord respektive Skip-gram som förutsäger kontext givet ord (Mikolov, Chen, et al., 2013a). Skip-gram kommer att undersökas vidare senare i rapporten. Båda modellerna bygger på att ord kan representeras genom högkvalitativa ordvektorer med egenskaper. De är utmarkerade i vektorrummet. Om sträckan mellan två vektorer är liten 2 3

indikerar detta semantisk och/eller syntaktisk relation mellan dessa. Sträcka mellan ordvektorer i vektorrummet mäts i cosinusavstånd (eng. cosine distance). Ord som ofta förekommer tillsammans i träningskorpusen kommer att vara inprickade nära varandra i vektorrummet (Ghodsi, 2015a, 2015b). Det finns många olika sorters likheter mellan ord (Mikolov, Chen, et al., 2013), till exempel finns det skillnader mellan syntaktiska relationer. Med anledning av detta kan kvaliteten på ordvektorerna inte utforskas endast genom att generera ord som är mest lika ett antal exempelord, vilket tidigare forskning inom ämnet gjort. Istället, för att undersöka kvaliteten av ordvektorerna, kan en fråga ställas: What is the word most that is similar to small in the same sense as biggest is similar to big? (formen beskrivs hädanefter som A is to B as C is to D ). För att svara på denna fråga kan enkla algebraiska beräkningar göras på respektive ords vektorer; X = vektor( biggest ) vector( big ) + vector( small ). Vektorn som är mest lik och således närmast X bör vara smallest om representationerna mellan ord är högkvalitativa och vältränade vektorer. Om beräkningarna ger samma svar som de faktiska semantiska och syntaktiska relationerna i språket kan man anta att vektorerna är av hög kvalitet. Ett precisionstest beskrivs i studierna (Mikolov, Chen, et al., 2013; Mikolov, Sutskever, et al., 2013) som är i formen A is to B as C is to D med semantiska och syntaktiska relationer. Prestation på testet beskrivs i procent. Bearbetning av stora mängder träningsdata är väsentligt och därför låg beräkningskomplexitet prioriteras framför exakta representationer i Word2Vec (Mikolov, Chen, et al., 2013). 4. Continous Skip-gram model Som tidigare nämnt predicerar skip-gram modellen kontext givet ett ord (w(t)). Indata till modellen är en one-hot vektor. Det innebär att vektorn har samma längd som ordlistan med värdet 0 vid alla index utom det aktuella ordets index, där värdet är 1. One-hot vektorer leder till att användaren skapar träningsexempel från ren text och således finns en näst intill oändlig mängd möjlig träningsdata (Minnaar, 2015). Kontext, vilket motsvarar window i Gensim, är ett mått på hur många ord före och efter ordet (w(t)) som är kontexten. Om window=10 prediceras 5 ord innan (w-1, w-2, etc.) och 5 ord efter (w+1, w+2, etc.). Utdata från skip-gram modellen är vektorer som representerar ordets kontext, givet en längd på kontexten. Vid högre värden på window ökar kvaliteten på ordvektorerna, men som en konsekvens ökar beräkningskomplexiteten. En utjämning för relationen mellan ord (w(t-n)) som ligger nära respektive långt bort från w(t) görs genom att sampla mindre från orden långt bort vid träning. 4 Värden på window bör dock inte vara långt över 10 eftersom relationen mellan ord blir svagare ju längre bort de är från varandra. Varje ord (w) används som en input till en loglinjär klassificerare (Mikolov, Chen, et al., 2013). Med logistisk regression ämnar skip-gram maximera antal par i mängden D (Mikolov, Chen, et al., 2013). Formellt beskrivet är skip-gram modellens inlärningsmål att maximera där c är window. Den genomsnittliga logaritmiska sannolikheten p(w t+j w t) definieras av softmax-funktionen, vilken har stor beräkningskomplexitet (termernas storlek varierar från 10 5 till 10 7 )(Mikolov, Sutskever, et al., 2013). 4.1 Hierarchical softmax Ett alternativ till softmax-funktionen som har lägre beräkningskomplexitet är hierarchical softmax. Funktionen bygger ett binärt träd vars löv (W) representerar utdata-lagret. En stig till löven tilldelar sannolikheter till orden (W). I artikeln har Huffman-träd använts, vilket är en bra struktur för snabb inlärning (Mikolov, Sutskever, et al., 2013). 4.2 Negative Sampling Trots att hierarchial softmax har lägre beräkningskomplexitet ger den inte vektorer med högst kvalitet när den används med skip-gram. Studien (Mikolov, Sutskever, et al., 2013) visade att negative sampling med skip-gram (SGNS) gav högst precision på syntaktiska och semantiska A is to B as C is to D -test 1, 61 % (med samma resultat för subsampling 10-5 och kortare körtid). Negative sampling är en log-linjär funktion som gör om den objektiva funktionen till ett klassificeringsproblem med två klasser; D och D, där D är ett dataset innehållande par (w, c) som existerar i korpus och D innehåller par som inte finns i korpus. Klassificeraren bedömer således P(z=1 (w,c)) samt P(z=0 (w,c)). Negative sampling ämnar maximera P(z=1 (w,c)) och maximera P(z=0 (w,c)) för negativa par. De negativa paren är slumpmässigt utvalda och bygger på antagandet att slumpmässiga par (w, c) sannolikt inte finns i korpus (Ghodsi, 2015a, 2015b). I Gensim är negative sampling en variabel till 1 Testet finns på https://word2vec.googlecode.com/svn/trunk/questions-words.txt 5

gensim.models.word2vec.word2vec som heter negative (Rehurek, 2015). Värdet på negative anger antal negativa par per positivt par och bör vara mellan 5-20 för mindre storlek på korpus och 2-5 för större korpus (Mikolov, Sutskever, et al., 2013). 4.3 Subsampling av frekventa ord Några exempel på vanliga ord i en korpus på engelska är in, a och the. Dessa kan förekomma flera hundra miljoner gånger i en korpus, vilket leder till att dessa antas vara mindre viktiga än de ovanliga orden. De anses ha lägre informationsvärde. Genom subsampling av frekventa ord jämnas obalansen mellan vanliga och ovanliga ord ut. Det leder till att ovanliga ords vektorer får högre kvalitet. Utöver det förkortas även träningstiden och större mängd data kan testas. Vilka ord som ska subsamplas bestäms från formeln där f(w i) är frekvensen av ord w i och t är det valda gränsvärdet. Alla ord vars frekvens överskrider gränsvärdet subsamplas (Mikolov, Sutskever, et al., 2013). 7. Tillämpning och implementation 7.1 Exempel på tillämpningar Med anledning av att ordvektorerna har både syntaktiska och semantiska egenskaper kan dessa användas för att förbättra nuvarande tillämpningar av olika modeller inom naturliga språk. Några exempel är maskininlärning, informationssökning och fråga-svar-system. På grund av vektorernas kvalitet, men främst på grund av låg beräkningskomplexitet kan Word2Vec sannolikt möjliggöra framtida tillämpningar för naturligt språk (Mikolov, Chen, et al., 2013). 7.2 Test av implementationen i Python 2.7 Jag har testat Word2Vecs modell i Gensim (Rehurek, 2015) för att träna ett neuralt nät med skip-gram modellen. Min träningsdatamängd är de första 10 9 byte av Wikipedia, text8.txt 2. Jag har använt mig av gensim.models.word2vec.text8corpus som är en funktion som itererar över meningarna i text8. Gensim är ett bibliotek till Python 2.7 och kräver en C-kompilator. Jag använde mig av Visual C++ 2008 och Cython för att kompilera Gensim och därmed kunde jag använda mig av den optimerade C-koden som tillåter multitrådning. Detta tillät att variabeln workers>1. Både skip-gram och CBOW kallas på i samma funktion, Word2Vec, med olika variabler. Som default används skip-gram (sg=1) och hierarchial softmax (hs=1). Eftersom det har visats i en studie (Mikolov, Sutskever, et al., 2013) att skip-gram med negative sampling (SGNS) får högst kvalitet på vektorerna testade jag det. Jag testade med olika värden på variablerna, men alltid med skip-gram. Som mest fick jag 50,9 % träffsäkerhet på testet med syntaktiska och semantiska relationer som beskrevs tidigare i rapporten. Mina värden 3 var då size=200, window=8, alpha=0.05, min_count=5, workers=12, iter=15, hs=0, negative=25. Alphavärdets minimum är som default 0,0001, vilket ledde till att jag valde ett något högre värde att börja med. min_count=5 innebär att alla ord med lägre frekvens i hela korpusen ignoreras, vilket var runt 2 % av korpusen. workers=12 innebär att koden körs parallelliserat med 12 trådar. iter=15 innebär att testet körs 15 gånger (epoker) över hela korpusen. När negative=15 fick Mikolov, Sutskever, Chen, Corrado och Dean (2013) 61 % träffsäkerhet på ett test med syntaktiska och semantiska relationer. Noterbart är att det inte är beskrivet att testet är detsamma som finns med öppen källkod som jag har använt mig av. Med en större mängd testdata är det möjligt att jag skulle få högre träffsäkerhet, men i skrivande stund har inte min dator prestanda nog att klara det. Jag har också testat CBOW-modellen 4 med vilken jag fick 49,6 % träffsäkerhet på testet. 2 Finns att ladda ned här: http://mattmahoney.net/dc/text8.zip 3 Mer om detta i TrainingK.py. 4 Modellen har tränats av TrainingJ.py. 6 7

Utöver att skapa modeller och testat deras träffsäkerhet har jag undersökt andra relationer i språket 5. Metoderna jag använde mig av finns i Word2Vec i Gensim. Metoden most_similar svarar på frågeformen beskriven i del 3: A is to B as C is to D. 8. Avslutning Den första artikeln (Mikolov, Chen, et al., 2013) introducerar modellerna och den andra artikeln (Mikolov, Sutskever, et al., 2013) vidareutvecklar skip-gram modellen och lägger till en implementation av frasanalys (skip-phrase). I den första artikeln är vektorerna endast ett ord, men i den andra artikeln beskrivs hur vissa ord som förekommer oftare tillsammans än med andra ord kan bearbetas som en enhet. Ett exempel på detta är New York som behandlas som new_york istället för separat. Tidigare har det funnits metoder för att representera ord som kontinuerliga vektorer, till exempel en neural network language model (NNLM) som bygger på en vektorrepresentation av ord samt en statistisk språkmodell. Modellen har ett icke-linjärt dolt lager och uppbyggt av ett feed-forward nät. Projektionslagret är linjärt. Det finns fler modeller som bygger på denna, men alla har de samma problem; hög beräkningskomplexitet vid träning av modellen (Mikolov, Chen, et al., 2013). När Word2Vec beskrivs i relation till andra modeller i artiklarna finns det, enligt mig, alltid ett jämförande resonemang kring Word2Vec och tidigare modeller. Word2Vec beskrivs som överlägset i och med sin lägre beräkningskomplexitet och därmed möjlighet att tränas på större mängder data. I den andra artikeln (Mikolov, Sutskever, et al., 2013) jämförs skip-phrase och tre andra liknande arkitekturer (med öppen källkod) som alla har tränats på ungefär 30 miljarder token. Som jämförelse skrivs tre token ut som är närmast fem ovanliga token. Två modeller saknade ordet i sin ordlista, och endast skip-phrase kunde bearbeta fraser. Skip-phrase hade överlägset bäst kvalitet på ordrepresentationerna. Mikolov, Sutskever, Chen, Corrado och Dean (2013) attributerar detta till att skip-gram modellen brukar använda denna mängd token för inlärning som jämfört med de andra modellernas vanliga träningsmängd är två till tre gånger större. Åter igen, enligt min tolkning, beskriver författarna skip-gram modellen som överlägsen givet uppenbara bevis, vilket är figur 6 i artikeln, trots att det saknas ett objektivt mått på prestation. Däremot är tidsåtgång för en körning av modellen rapporterat och skip-gram har betydligt mindre tidskomplexitet. 9. Personlig reflektion 5 Kod till detta är Queries.py. När jag har skrivit kod, försökt installera c-kompilator, läst artiklar och testat min kod har jag lärt mig mycket om hur Word2Vec faktiskt fungerar och olika möjliga användningsområden. Vikten av parallellisering och att hålla beräkningskomplexiteten låg har gått upp för mig när jag har testat kod utan parallellisering och med dimensionen på vektorerna satta till 1000. 8 9

10. Litteraturförteckning Ghodsi, A. (2015a). Lec [3,1]: Deep Learning, Word2vec. Retrieved January 1, 2016, from https://www.youtube.com/watch?v=tsegsdvjjua Ghodsi, A. (2015b). Lec [3,2]: Deep Learning, Word2vec. Retrieved January 1, 2016, from https://www.youtube.com/watch?v=nuiruembaju Kann, V. (2006). Korpusar. Retrieved January 7, 2016, from http://sprakteknologi.se/vad-aersprakteknologi/lexikon/korpusar Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient Estimation of Word Representation in Vector Space. In ICLR. Mikolov, T., Sutskever, I., Chen, K., Corrado, G., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. In NIPS. Minnaar, A. (2015). Word2Vec Tutorial Part I: The Skip-Gram Model. Retrieved January 7, 2016, from http://alexminnaar.com/word2vec-tutorial-part-i-the-skip-gram-model.html Rehurek, R. (2015). Deep learning with word2vec. Retrieved January 7, 2016, from http://radimrehurek.com/gensim/models/word2vec.html Russel, S., & Norvig, P. (2013). Artificial Intelligence (3rd ed.). New Jersey: Pearson Education. 10