Likhetsmätvärden i NLP

Källnod: 1852346

By James Briggs, Datavetare



Bild av författaren

 

När vi konverterar språk till ett maskinläsbart format, standard tillvägagångssätt är att använda täta vektorer.

Ett neuralt nätverk genererar vanligtvis täta vektorer. De tillåter oss att omvandla ord och meningar till högdimensionella vektorer – organiserade så att varje vektors geometriska position kan tillskriva betydelse.



Det välkända språkräkneexemplet visar det Drottning = Kung — Man + Kvinna

 

Det finns ett särskilt välkänt exempel på detta, där vi tar vektorn av King, subtrahera vektorn Man, och lägg till vektorn Kvinna. Den närmast matchande vektorn till den resulterande vektorn är Drottning.

Vi kan tillämpa samma logik på längre sekvenser också, som meningar eller stycken - och vi kommer att finna att liknande betydelse motsvarar närhet/orientering mellan dessa vektorer.

Så likhet är viktig - och vad vi kommer att täcka här är de tre mest populära måtten för att beräkna den likheten.

Euklidisk avstånd

 
Euklidiskt avstånd (ofta kallat L2-norm) är det mest intuitiva av måtten. Låt oss definiera tre vektorer:



Tre vektorexempel

 

Bara genom att titta på dessa vektorer kan vi med säkerhet säga det a och b är närmare varandra - och vi ser detta ännu tydligare när vi visualiserar var och en på ett diagram:



vektorer a och b är nära ursprunget, vektor c är mycket mer avlägsen

 

Klart, a och b är närmare varandra - och vi beräknar det med euklidiskt avstånd:



Euklidisk avståndsformel

 

För att tillämpa denna formel på våra två vektorer, a och b, vi gör:



Beräkning av euklidiskt avstånd mellan vektorer a och b

 

Och vi får distans till 0.014, utför samma beräkning för d(a, c) återgår 1.145och d(b, c) återgår 1.136. Klart, a och b är närmare i det euklidiska rymden.

Punkt produkt

 
En nackdel med det euklidiska avståndet är bristen på orientering som beaktas i beräkningen - den baseras enbart på storleken. Och det är här vi kan använda våra andra två mätvärden. Den första av dem är dot-produkten.

Punktprodukten beaktar riktning (orientering) och skalar även med vektorstorlek.

Vi bryr oss om orientering eftersom liknande betydelse (som vi ofta kommer att finna) kan representeras av vektorns riktning - inte nödvändigtvis storleken på den.

Till exempel kan vi upptäcka att vår vektors storlek korrelerar med frekvensen av ett ord som den representerar i vår datauppsättning. Nu ordet hi betyder samma som hallå, och detta kanske inte representeras om vår träningsdata innehöll ordet hi 1000 gånger och hallå bara två gånger.

Så vektorers orientering ses ofta som lika viktig (om inte mer) som avstånd.

Punktprodukten beräknas med:



Dot produktformel

 

Punktprodukten beaktar vinkeln mellan vektorer, där vinkeln är ~0, den cos θ komponenten i formeln är lika med ~1. Om vinkeln är närmare 180 (ortogonal/vinkelrät), cos θ komponent är lika med ~0.

Därför cos θ komponent ökar resultatet där det är mindre vinkel mellan de två vektorerna. Så, en högre punktprodukt korrelerar med högre orientering.

Återigen, låt oss tillämpa denna formel på våra två vektorer, a och b:



Beräkning av punktprodukt för vektorer a och b

 

Uppenbarligen är punktproduktberäkningen enkel (den enklaste av de tre) - och detta ger oss fördelar när det gäller beräkningstid.

Det finns dock en nackdel. Det är inte normaliserat - vilket innebär att större vektorer tenderar att få högre prickprodukter, trots att de är mindre lika.

Till exempel om vi räknar a·a — Vi förväntar oss ett högre betyg än a·c (a är en exakt matchning till a). Men det är inte så det fungerar, tyvärr.



Punktprodukten är inte så bra när våra vektorer har olika storlek.

 

Så i verkligheten används punktprodukten för att identifiera den allmänna orienteringen av två vektorer - eftersom:

  • Två vektorer som pekar i liknande riktning returnerar a positiv punkt produkt.
  • Två vinkelräta vektorer returnerar en punktprodukt av noll-.
  • Vektorer som pekar i motsatta riktningar returnerar a negativ punkt produkt.

Cosine likhet

 
Cosinuslikhet tar hänsyn till vektororientering, oberoende av vektorns storlek.



Cosinus likhetsformel

 

Det första vi bör vara medvetna om i den här formeln är att täljaren i själva verket är prickprodukten - som tar hänsyn till både Storleken och riktning.

I nämnaren har vi de konstiga dubbla vertikala staplarna — dessa betyder "längden på". Så vi har längden på u multiplicerat med längden på v. Längden, naturligtvis, beaktar Storleken.

När vi tar en funktion som tar hänsyn till båda Storleken och riktning och dividera det med en funktion som anser rättvist Storleken - dom där två magnituder avbryta, vilket ger oss en funktion som överväger riktning oberoende av storlek.

Vi kan tänka på cosinuslikhet som en normaliserad punkt produkt! Och det fungerar helt klart. Kosinuslikheten av a och b är nära 1 (perfekt):



Beräkning av cosinuslikhet för vektorer a och b

 

Och att använda sklearn implementering av cosinuslikhet att jämföra a och c återigen ger oss mycket bättre resultat:



Cosinuslikhet kan ofta ge mycket bättre resultat än dot-produkten.

 

Det är allt för den här artikeln som täcker de tre mätvärdena för avstånd/likhet - Euklidiskt avstånd, punktprodukt och cosinuslikhet.

Det är värt att vara medveten om hur var och en fungerar och deras för- och nackdelar - eftersom de alla används flitigt inom maskininlärning, och särskilt NLP.

Du kan hitta Python-implementationer av varje mätvärde i den här anteckningsboken.

Jag hoppas att du har haft artikeln. Låt mig veta om du har några frågor eller förslag via Twitter eller i kommentarerna nedan. Om du är intresserad av mer sådant här innehåll lägger jag upp det Youtube också.

Tack för läsning!

 
*Alla bilder är av författaren om inte annat anges

 
Bio: James Briggs är en datavetare som specialiserat sig på bearbetning av naturliga språk och arbetar inom finanssektorn med säte i London, Storbritannien. Han är också frilans mentor, författare och innehållsskapare. Du kan nå författaren via e-post (jamescalam94@gmail.com).

Ursprungliga. Skickas om med tillstånd.

Relaterat:

Källa: https://www.kdnuggets.com/2021/05/similarity-metrics-nlp.html

Tidsstämpel:

Mer från KDnuggets