back to list
[Dutch] De macht van word vectors
Duco van Rossem
Sep 24

Het werken met grote hoeveelheden text is een lastige affaire. Computers aanleren om context en betekenis uit text te halen is moeilijk. Een grote ontwikkeling van de afgelopen 1-2 jaar in dit veld is het gebruik van word vectors.

Word vectors zoals ze genoemd worden binnen machine learning zijn grote verzamelingen van nummers die het concept van een bepaald woord kunnen weergeven. GloVe en word2vec zijn twee verschillende methodes die uit text dit soort word vectors kunnen genereren.

Dus bijvoorbeeld met GloVe, een methode die in 2014 is gepubliceerd is door researchers uit Stanford, kan een word vector gebouwd worden voor het woord 'Amsterdam'. Hieronder staat een klein stukje van de 250 dimensies van de word vector voor het woord 'Amsterdam'.

$$ amsterdam = \pmatrix{0.0532 \\ -0.0362 \\ 0.2188 \\ 0.0192 \\ -0.0271 \\ ... \\ -0.1388 \\ -0.0299 \\ -0.1063 \\ 0.1545 } $$

Het idee is dat in de vectoren een bepaald concept of betekenis zit ge-encodeerd. Deze vectoren worden gebouwd door een algoritme dat geen idee heeft welke taal of wat voor text het analyseert. Het algoritme bouwt op autonoom een conceptuele weergave puur op hoe woorden in een bepaalde context gebruikt worden.

Als we kijken bijvoorbeeld naar de woord vectoren die het meest lijken op de vector voor Amsterdam:

 --- amsterdam ---
rotterdam - 0.869
leiden - 0.862
utrecht - 0.86
haag - 0.85

 

Wat kunnen we met deze vectoren doen? Deze vectoren kunnen we gebruiken in functies en andere algoritmes waar we nog hogere niveaus van context of betekenis uit kunnen halen.

Een simpel voorbeeld is als we de relatie tussen de vectoren 'Amsterdam', 'Nederland', 'Duitsland' en 'Berlijn' bijvoorbeeld analyseren. Dus: Amsterdam is tot nederland als Berlijn is tot ...

Als we dit met de vectoren vergelijken kunnen we de volgende opeenteling van de vectoren doen:

$$amsterdam - nederland + berlijn$$

Als we dan vervolgens gaan zoeken naar de vector die het meeste op de output lijkt, dan is dat: 'duitsland'.

Dit resultaat is enigsinds verbazendwekkend; binnen het algoritme is niets expliciet geinput/gecodeerd over landen en hoofdsteden. Het analyseert puur hoe woorden in verhouding met elkaar worden gebruikt en alleen op basis hiervan kan het algoritme dit soort analogen genereren.

De input om deze relaties te bouwen is als enige een hele hoop nederlandstalige text - tienduizenden zinnen waar verschillende onderwerpen worden besproken. Het algoritme 'weet' dan dat Wimbledon en Roland Garros gerelateerd zijn aan tennis, dat een 'verhaal' in dezeflde context zit als de woorden 'geschreven' en 'boek'. En je kan het zelfde doen met Engelse of Koreaanse text bijvoorbeeld - zonder het onderliggende algoritme te hoeven aanpassen.
Hieronder zijn nog een aantaal voorbeeld woorden met de 4 woordvectoren die het meest gelijksoortig zijn, met daarachter een quotiënt van gelijkenis:

 --- leraar ---
onderwijzer - 0.906
docent - 0.885
opleiding - 0.858
hoogleraar - 0.837

 --- blij ---
liever - 0.92
gelukkig - 0.906
tevreden - 0.895
iedereen - 0.892

 --- colombia ---
bolivia - 0.91
peru - 0.885
paraguay - 0.859
rica - 0.856

 --- lezen ---
zien - 0.905
idee - 0.894
schrijven - 0.89
horen - 0.882

 

Dit soort methodes zullen fundamenteel zijn in hoe computers in de toekomst grote hoeveelheden text kullen analyzeren en intepreteren. Bij Keenalytics gebruiken we deze vectoren op verschillende manieren. Deze vectoren worden gerbuikt in zo-geheten 'deeplearning' systems op bijvoorbeeld sentiment te klassificeren.

Met het zien van text als hogere dimensionale abstracties kunnen we veel verder gaan. Interacties met dit soort objecten kan tot een hoger niveau - van vragen beantwoorden tot het genereren van zinnen.

Tags
Dutch
comments