Vous êtes sur la page 1sur 17

Lingwistyka

NLP: Natural Language Processing


Zadania inynierii lingwistycznej:

Zautomatyzowanie przetwarzania danych wyraonych w jzyku naturalnym

Wyszukiwanie, klasyfikacja, selekcja informacji

Wiedza o jzyku: morfologia, skadnia, semantyka, pragmatyka wypowiedzi

Tumaczenia, streszczenia, analiza mowy


Dziedziny wiedzy lingwistycznej:

fonetyka (dwiki),

fonologia (dwiki nalece do jzyka),

ortografia (zasady pisowni),

morfologia (struktura i opis form wyrazw),

skadnia (zalenoci strukturalne midzy sowami budowa fraz),

semantyka (znaczenie fraz i zda),

pragmatyka (relacja do wiata),

reprezentacja dyskursu (zalenoci midzyzdaniowe).


Dwie zasadnicze klasy analizy danych jzykowych:

metody formalne zbir regu pozwalajcy otrzyma rozbir gramatyczny zdania zgodny z
wybran teori (jak do tej pory brak implementacji wydajnej i dajcej jednoznaczne rozbiory),

metody statystyczne gromadzenie rzeczywistych danych jzykowych (korpusy) i szukanie


praw ilociowych (przykadowe zastosowania: OCR, poprawianie bdw pisowni, rozpoznawanie mowy,
tumaczenie maszynowe).
Jzykami programowania czsto wybieranymi przez lingwistykw komputerowych s Prolog (Europa), Lisp (USA)
i Perl.
Elementy tekstu:

segment (token): podstawowy element tekstu oddzielony najczciej odstpami lub znakami
interpunkcyjnymi; moe to by sowo, ale te np. PESEL, kod pocztowy, nr telefonu, data, godzina, adres e-mail,

sowo: cig liter od spacji do spacji,

zdanie
Problemem s wyraenia typu po prostu czasami traktuje si je jako jeden atom.

Wyraz napis sowa nioscy okrelone znaczenie bd penice funkcj skadniow.


Fleksemy s rnymi formami fleksyjnymi nalecymi do tej samej klasy gramatycznej np. kot, kotem to rne
formy fleksyjne.
Leksem jest zbiorem fleksemw np. biegn, bieganie, biegnie. Wyrazy zawieraj wsplne elementy, lecz
peni rn funkcje w zdaniu. Nale do jednego leksemu biec.
Jedn z efektywnych metod stosowanych do reprezentacji komputerowych sownikw form fleksyjnych s
automaty skoczone.
Morfologia nauka o budowie sw, zajmuje si dwiema dziedzinami:

fleksja opisuje rne formy tego samego fleksemu np. kot kotem

sowotwrstwo definiuje zasady tworzenia wyrazw pochodnych np. zebra zebranie.


Analiza morfologiczna znajdowanie moliwych opisw morfoskadniowych dla sw, czyli ich interpretacja
jako form wyrazowych. Polega na przypisywaniu sowom ich interpretacji znacznikw morfologicznych (tagw).
np. bez:
<bez>, <przyimek>
<bez>, <rzeczownik, rodzaj mski, mianownik, liczba pojedyncza>
<beza>, <rzeczownik, rodzaj eski, dopeniacz, liczba mnoga>

Lematyzacja: to analiza morfologiczna ograniczona do znalezienia podstawowej formy wyrazu (identyfikacja


leksemu).
Stemming: znajdowanie tematw sw lub tych ich fragmentw, ktre s niezmienne dla wszystkich form.
np. krzesem krzes.
Tagowanie: wybr opisu morfoskadniowego, ktry jest waciwy w konkretnym kontekcie uycia danej formy
(ujednoznacznianie morfologiczne) np. sportowiec bez formy: bez przyimek. Wykorzystuje si metody
statystyczne lub zbir regu. Swobodny szyk wyrazw jzyka polskiego sprawia, e reguy ujednoznaczniania
musz by skomplikowane i odnosi si do szerokiego kontekstu, a i tak w wielu (jednoznacznych) przypadkach
nie dadz jednoznacznych wynikw.
Synteza morfologiczna znajdowanie formy wyrazu na podstawie jego opisu morfologicznego. np. <bez,
rzeczownik, rodzaj mski, dopeniacz, liczba pojedyncza> bzu
Klasy gramatyczne (czci mowy) i ich kategorie gramatyczne (morfoskadniowe)

czasowniki: liczba, osoba, czas, rodzaj, tryb, aspekt,

rzeczowniki: przypadek, liczba, rodzaj,

przymiotniki: przypadek, rodzaj, liczba, stopie,

przyswki: stopie

Tagset lista etykiet wybrana do oznaczenia form wyrazw danego jzyka


Tag (znacznik) element tagsetu. Najbardziej znane tagsety: Brown, Penn, CLAWS, Multext[-East] (jzyk
angielski).

system skrtw kada cecha gramatyczna ma okrelon nazw (skrt)

system pozycyjny poszczeglnym cechom gramatycznym przypisane s konkretne pozycje w


znaczniku
Opis skadniowy (syntaktyczny) zdania to reprezentacja struktury zdania w postaci drzewka pokazujcego
kolejno sw i zwizki strukturalne midzy elementami fraz (np. typu podmiot-orzeczenie). Wywd zdania w
gramatyce bezkontekstowej odpowiada drzewu rozbioru syntaktycznego.
Dla niektrych jzykw naturalnych (angielski, niemiecki, francuski, japoski) istnieje wiele gramatyk, ale ich
wykorzystanie napotyka spore trudnoci:

jzyk naturalny jest bardzo skomplikowany i adna z gramatyk nie opisuje go w caoci, w
praktyce oznacza to, e jeeli wemiemy np. codzienn gazet, to prawie na pewno ju na pierwszej stronie
znajdziemy zdania, ktre nie bd analizowane przez adn z istniejcych gramatyk danego jzyka, to znaczy, e
zdania te nie uznane zostan za poprawne,

gramatyki komputerowe daj wiele alternatywnych rozbiorw i zazwyczaj adnych wskazwek,


ktry z nich jest w danym kontekcie waciwy; oznacza to, e zdania, ktre posiadaj rozbiory, na og posiadaj
ich wiele, przy czym zwykle tylko niektre z nich maj poprawn interpretacj semantyczn,

analiza syntaktyczna jest do kosztowna, nie jest wic moliwa analiza duej liczby zda w
krtkim czasie (cho powoli czasy analizy syntaktycznej staj si akceptowalne).
Najwaniejsz przeszkod w praktycznym wykorzystaniu dokadnych analiz syntaktycznych jest brak metod
pozwalajcych na zapis znaczenia zda w jzyku naturalnym, nawet jeli posiadamy ich bardzo dokadn analiz
syntaktyczn. Sam rozbir gramatyczny zdania nie jest zwykle celem samym w sobie. To, co rzeczywicie chcemy
pozna, to znaczenie zdania.
Prby komputerowej analizy skadniowej zda jzyka polskiego podejmowane s od wielu lat, wci jednak s
do wyrywkowe, a efekty tych prac mao dostpne poza grupami bezporednio si nimi zajmujcymi.
Do wielu zastosowa (np. indeksowanie tekstu, wyszukiwanie nazw wasnych) nie opaca si dokonywa
dokadnej analizy skadniowej.
Parsowanie pytkie rozpoznawanie podstawowych typw fraz (czenie wyrazw zdania w grupy wyrazw
strukturalnie powizanych, czsto odmieniajcych si jednakowo)
Semantyka. Rozpoznawanie sw i konstrukcji skadniowych jest tylko wstpem do zasadniczej operacji, jakiej
naley dokona, by mc posugiwa si jzykiem naturalnym zrozumienia znaczenia. Niestety, aden z
istniejcych obecnie formalizmw nie jest w stanie odda caej rnorodnoci procesw zwizanych z
rozumieniem jzyka naturalnego, a wic adna z zaproponowanych metod reprezentacji semantyki zda jzyka
naturalnego nie pozwala na pene reprezentowanie tego, co dla czowieka jest znaczeniem tekstu.
Sowosie (WordNet) rozbudowana baza wiedzy o powizaniach semantycznych sw konkretnego jzyka
naturalnego.

Niektre relacje midzy sowami:

homonimia jednakowy ksztat sowa, rne znaczenia, np. pokj pomieszczenie i pokj
przeciwiestwo wojny

homofonia jednakowe brzmienie sw, a rne znaczenie (czasem zakada si rnice w


pisowni, czasem uznaje si za homofony take homonimy), np. moe i morze

polisemia wielo powizanych znacze jednego sowa, np. gra (wzniesienie terenu, pitro
domu, cz ubrania)

synonimia rne leksemy o tym samym (prawie) znaczeniu (mogce si nawzajem zastpi
w pewnym kontekcie), np.samochd i auto

antonimia przeciwiestwo (dobry zy, gra d)

hiponimia sowo o wszym znaczeniu jest hiponimem sowa o szerszym znaczeniu,


np. ko ssak

hiperonimia (hipernimia) sowo o szerszym znaczeniu jest hipernimem sowa o wszym


znaczeniu, np. uczucie zo

holonimia sowo oznaczajce cao jest holonimem sowa oznaczajcego cz,


np. kapelusz rondo

meronimia sowo okrelajce cz jest meronimem sowa okrelajcego cao,


np. kciuk do.
Prawo Zipfa: w przecitnym zbiorze tekstw okoo poowy sw pojawia si tylko raz.
Korpus lingwistyczny zbir tekstw w jzyku naturalnym, opatrzonych tagami morfosyntaktycznymi lub
nawet semantycznymi.Reprezentatywno (zbalansowanie) korpusu oglnego polega na umieszczeniu w
nim moliwie wszystkich rodzajw tekstw (bd wypowiedzi) w proporcjach odpowiadajcych w przyblieniu
rzeczywistym proporcjom uycia ich w praktyce.

korpusy oglne w miar zrwnowaona reprezentacja rnych form wykorzystania jzyka,

korpusy specjalistyczne dla dialektu bd okresu czasu, dla jzyka z jakiej dziedziny
specjalistycznej,

korpusy rwnolege zawierajce te same teksty w rnych jzykach naturalnych (na


potrzeby np. uczenia algorytmw tumaczcych). Historycznie najbardziej znanym takim dokumentem jest
kamie z Rosetty zawierajcy ten sam tekst w trzech wersjach: po egipsku pismem hieroglificznym i demotycznym
oraz po grecku. Dziki niemu moliwe byo odczytanie egipskich hieroglifw.
Konkordancje zbir wszystkich wystpie danego sowa w danym zbiorze tekstw
Kolokacja najbardziej typowe poczenia danego sowa z innymi (wskie znaczenie tego sowa obejmuje tylko
takie zwizki wyrazw, w ktrych znaczenie caoci nie jest sum znacze skadnikw, na przykad biay kruk w
znaczeniu rzadki okaz, ale na og przyjmuje si szersze znaczenie kolokacji jako dowolnego utartego/czsto
powtarzanego zestawienia sw)
Przeszukiwanie dokumentw

Dokadno stosunek liczby podanych waciwych dokumentw do liczby wszystkich


dokumentw w odpowiedzi, czyli ocena siy selektywnej metody.

Peno to stosunek liczby podanych waciwych dokumentw do wszystkich waciwych


dokumentw w zbiorze, czyli ocena kompletnoci zwracanych wynikw.

Model wektorowy (VSM, ang. Vector Space Model) dokumenty i pytania przedstawiane s
w postaci wektorw cech reprezentujcych poszczeglne obiekty (dokadniej warto i-tej wsprzdnej okrela,
czy obiekt i-ty wystpuje czy nie w danym dokumencie). Dla dokumentw tekstowych obiektami s zazwyczaj
wystpujce w nich sowa zwykle dokonuje si wstpnego wyboru podzbioru sw istotnych dla separacji
tekstw.
Numeryczne metody wyszukiwania interesujcych nas dokumentw musz uwzgldni fakt, e zarwno sw, jak i
dokumentw jest bardzo wiele, tak wic przestrze przeszukiwania jest wielowymiarowa. Niejawna (ukryta)
analiza semantyczna (LSA Latent Semantic Analysis, lub LSI Latent Semantic Indexing) jest jedn z bardziej
popularnych metod obnienia zoonoci tego problemu.
Zbir dokumentw reprezentowany jest na og jako macierz X, ktrej kolumny opisuj dokumenty w postaci
wektorw czstoci wystpowania poszczeglnych sw. Jeeli zaoymy, e baza zawiera m dokumentw i n sw,
to odpowiednia macierz ma rozmiar nxm. Ide podstawow LSA jest redukcja liczby ocenianych zmiennych, przy
jednoczesnym zapewnieniu warunku, by wykorzystywana do nich macierz bya najblisz (dla wybranego rzdu)
macierzy oryginalnej. W konsekwencji obniania wymiaru wiele poj czonych jest w jedno (uzyskujemy liniowe
kombinacje ich wag). Jeeli czone s pojcia pokrewne, to dziki tej operacji uzyskujemy metod
reprezentowania synonimii. O ile zatem oryginalna macierz reprezentujca dokument zawiera tylko informacje o
sowach, ktre rzeczywicie si w nim znalazy, to macierz uzyskana w wyniku przeksztace zawiera take
informacje o wyrazach bliskoznacznych, czyli takich, ktre czytelnik bez trudu z nim skojarzy (wiemy, e tekst o
wierkach jest tekstem o rolinach, nawet jeli sowo rolina w nim si nie znajduje).
Automatyczne streszczenia

Wyselekcjonowanie czci zda i utworzenie z nich krtszej wersji, w ktrej z duym


prawdopodobiestwem zawarte bd kluczowe informacje

Ocena systemw streszczajcych nie jest atwa, gdy trudno jest znale obiektywny punkt
odniesienia

Czowiek zazwyczaj parafrazuje streszczany tekstu, rzadziej wybiera jego fragmenty


Cechy brane pod uwag podczas tworzenia streszczenia

Sowa, ktre pojawiaj si w tytule i pierwszych paru zdaniach maj wysz wag

Sowa z klas otwartych (o zmiennej w czasie czstoci wystpowania) wystpujce czsto w


tekcie s waniejsze od sw pojawiajcych si sporadycznie

Typ tekstu wyznacza pozycje, ktre zawieraj najistotniejsze informacje

Dugo zdania moe by skorelowana z jego istotnoci

Zdanie, ktre ma wicej elementw wsplnych z innymi zdaniami, moe by istotniejsze

Istotne s zdania zawierajce: liczby, nazwy wasne, nazwy dni tygodnia itp.

Istotne s zdania zawierajce przymiotniki i zaimki

Pierwsze zdanie akapitu jest najbardziej istotne


Systemy dialogowe (Question Answering, QA) systemy udzielajce odpowiedzi na pytania zadane w jzyku
naturalnym.

uwzgldniaj typ pytania, odpowiedzi powinno by poprawne gramatycznie zdanie lub


fragment dokumentu zawierajcy odpowied,
czsto wykorzystuje si encyklopedie internetowe, np. Wikipedi,
Tumaczenie maszynowe

Na wiecie jest obecnie ok. 4500 opisanych jzykw, z czego ok. 2200 jzykw ma wersj pisan.

Jeeli bierzemy pod uwag jzyk ojczysty, to nie jzyk angielski jest najbardziej popularny, ale
chiski, a dopiero do daleko po nim jest angielski, hiszpaski, hindi i arabski.

Jeli rozpatrujemy liczb mieszkacw krajw, w ktrych dany jzyk jest jzykiem urzdowym
(lub jednym z takowych), to kolejno jest odmienna: angielski, chiski, hindi, hiszpaski i francuski.

Tumaczenie powinno wiernie zachowa znaczenie oryginau (faithfulnes) i by poprawne


(fluency). Osignicie obu tych celw jest jednak czsto nierealne trzeba wybiera odejcie od oryginau na rzecz
pynnoci wypowiedzi.
Prby rozwizania problemu automatycznego tumaczenia mona podzieli na dwie grupy:

tumaczenie zgrubne, do poprawiania przez czowieka (czyli raczej wspomaganie tumaczenia,


a nie samo tumaczenie),

tumaczenie ograniczone do wskiego podzbioru jzyka (np. prognozy pogody, raporty giedowe,
instrukcje obsugi urzdze).
Metody automatycznego tumaczenia (w praktyce czy si kilka z nich):

transfer z jednego jzyka na drugi przejcie od drzewa rozbioru syntaktycznego w


jednym jzyku na drzewo rozbioru syntaktycznego w jzyku docelowym, np. Systran system tumaczenia
dokumentw stworzony na potrzeby Komisji Europejskiej

tumaczenie poprzez reprezentacj znaczenia (interlingua) tumaczenie z uyciem


jzyka poredniego; opracowana jest wewntrzna, niezalena od jzyka reprezentacja semantyki wypowiedzi

tumaczenie bezporednie oparte na reguach opisujcych zalenoci zachodzce


bezporednio midzy fragmentami zda obu jzykw; czsto uytkownik zamiast odpowiedzi typu nie rozumiem
zdania uytkownik woli dosta wynik czciowy, nawet jeli wymaga on sporych poprawek.

tumaczenie za pomoc metod statystycznych wykorzystuje si korpusy rwnolege,

metody mieszane (czenie elementw rnych metod jest najczciej spotykane w praktyce).
Podejmowane s prby opracowania programw tumaczcych teksty na jzyk polski i teksty polskie na inne
jzyki. Gwne obecnie na rynku komercyjne systemy automatycznego tumaczenia to English Translator firmy
Techland oraz Translatica wydawana przez PWN.
System Translatica jest owocem wsppracy poznaskiego rodowiska akademickiego, w ktrym od wielu lat
prowadzone byy prace nad systemem tumaczcym teksty polskie na angielskie oraz uznanego polskiego
wydawcy sownikw (zarwno jzyka polskiego, jak i sownikw dwujzycznych). Historia prac nad Translatic

siga roku 1995. W pierwszej wersji systemu pod nazw PolEng tumaczenie dokonywane byo na drodze
interpretacji klauzul Prologowych. W kolejnej wersji jdro systemu zaimplementowano w C++, a zstpujcy
mechanizm parsowania zastpiono wstpujcym, dziki czemu znacznie wzrosa szybko tumaczenia, a ponadto
moliwe stao si tumaczenie zda, dla ktrych system nie umia znale rozbioru syntaktycznego. W roku 2003
w wyniku wsppracy z PWN wczono do systemu Wielki Sownik Angielsko-Polski PWN-Oxford i zrealizowano
drugi, bardziej komercyjnie interesujcy, kierunek tumaczenia (z angielskiego na polski). Opracowano te
dostosowan do potrzeb tumaczenia baz powiza semantycznych sw.

A quick foray into linear algebra and Python: tf-idf


My goal with this is to introduce you, the reader, to two things: a beautiful language
called Python and an algorithm for finding which words most uniquely describe a
document. Hopefully this will be easier than finding an anti-gravity repository, but who
knows I hated writing in college and nobody said I was very good at it. Anyways.
Linear Algebra
I'm not sure there's any other when to say this other than to just say it...term frequency-inverse document frequency. That's the name of the game, but I'll call it tf-idf instead of
its catchy full name. Tf-idf is straight up statistics for determining how unique a token or
word is to a specific document. For instance "battle school" and "toon leader" are
probably very unique to Ender's Game. I mean it's pretty unlikely they'll show in
something like Harry Potter or Lord of the Rings. What's brilliant about this algorithm is
common words such as "the" or "and" aren't unique to any one document, so their
frequency in one document compared to all the rest actually approaches zero rather
quickly.
Before I scare away anyone with crazy looking equations, let me break it down to you.
The td-idf weight of a word is calculated by multiplying together two things, tf and idf, so
let's look at tf, or term frequency first.
The term frequency is actually really simple, it's the number of times a given word occurs
divided by the number or words in the document. Why do we divide by the number or
words in the document? That's just a simple way to normalize the bias toward longer
documents. I mean Harry Potter probably has the word "brown" more times than "the
quick brown fox jumped over the lazy dog" but it's not as unique to that document. Hence

we need a way to level the playing field for documents of all shapes and sizes. Maybe
just sizes.

Idf, the other factor in the equation, also known as inverse document frequency,
normalizes the term frequency value so that common words used by all documents are
given very little importance. Examples include "the" for English documents or "for" for
source code, as neither term is unique to any particular document even though they both
probably appear very often in all documents.
One example application of this algorithm would be listing the top ten most interesting
words for a post on a blog. This would surface words that more or less uniquely identify a
post, and could be used for the keywords in the HTML header to maximize the SEO
value of a permalink. But of course there's plenty of other uses.
Still confused? Let's just jump right into the code!
Putting tf-idf into action: using Python
As Randall Munroe puts it, Python is executable psuedocode. Take a for loop in PHP for
example:
for ($i=0; $i<10; $i++) {
echo $i;
}
In PHP you use curly braces to indicate control flow. It's great and explicit. But when I'm
prototyping something quickly it's kind of annoying to have to use curly braces to realize
an idea in my head. Sheesh. If I just wanted to write the pseudocode for it now and write
the real, executable code later I would write something like this:
for i in range(10):
print i
Oh wait, that's Python. And it's executable. Niiiiice. The whitespace is important as it
contains the control flow information. Everything that's indented after that for statement

will be looped through and the first non-indented statement after the for loop will indicate
the end of the for loop.
OK, so let's put this tf-idf algorithm into psuedocode/Python! Let's make it object-oriented
so I'll start with the tf part of the equation:
def tf(word, document):
return (freq(word,document) / float(wordCount(document)))
Hmm, looks like we'll need to write a couple helper functions...
def freq(word, document):
return document.split(None).count(word)
def wordCount(document):
return len(document.split(None))
There we go. If you're curious what the split(None) does it breaks a string into chunks
when it hits whitespace. Alright, half way there...now for idf:
def idf(word, documentList):
return math.log(len(documentList) /
numDocsContaining(word,documentList))
Again we'll need a helper function that counts the number of documents containing a
word:
def numDocsContaining(word,documentList):
count = 0
for document in documentList:
if freq(word,document) &gt; 0:
count += 1
return count
Finally we've got both parts of the equations so all we need is one last function!
def tfidf(word, document, documentList):

return (tf(word,document) * idf(word,documentList))


Tada! That's it...executable pseudocode for finding out how unique a word is to a specific
document. If you want to know more check out the Wikipedia entry for tf-idf.
Just copy and paste the following code save it as tfidf.py, head over to your shell of
choice and type "python tfidf.py" and you're good to go!
#!/usr/bin/env python
import math
from operator import itemgetter
def freq(word, document):
return document.split(None).count(word)
def wordCount(document):
return len(document.split(None))
def numDocsContaining(word,documentList):
count = 0
for document in documentList:
if freq(word,document) > 0:
count += 1
return count
def tf(word, document):
return (freq(word,document) / float(wordCount(document)))
def idf(word, documentList):
return math.log(len(documentList) /
numDocsContaining(word,documentList))
def tfidf(word, document, documentList):
return (tf(word,document) * idf(word,documentList))

if __name__ == '__main__':
documentList = []
documentList.append("""DOCUMENT #1 TEXT""")
documentList.append("""DOCUMENT #2 TEXT""")
documentList.append("""DOCUMENT #3 TEXT""")
words = {}
documentNumber = 0
for word in documentList[documentNumber].split(None):
words[word] =
tfidf(word,documentList[documentNumber],documentList)
for item in sorted(words.items(), key=itemgetter(1),
reverse=True):
print "%f <= %s" % (item[1], item[0])
Download or fork the source code on Github: http://github.com/timtrueman/tf-idf
#!/usr/bin/env python
"""
The simplest TF-IDF library imaginable.
Add your documents as two-element lists `[docname,
[list_of_words_in_the_document]]` with `addDocument(docname,
list_of_words)`. Get a list of all the `[docname, similarity_score]` pairs relative
to a document by calling `similarities([list_of_words])`.
See the README for a usage example.
"""
import sys
import os
class tfidf:
def __init__(self):
self.weighted = False
self.documents = []
self.corpus_dict = {}
def addDocument(self, doc_name, list_of_words):
# building a dictionary
doc_dict = {}

for w in list_of_words:
doc_dict[w] = doc_dict.get(w, 0.) + 1.0
self.corpus_dict[w] = self.corpus_dict.get(w, 0.0) + 1.0
# normalizing the dictionary
length = float(len(list_of_words))
for k in doc_dict:
doc_dict[k] = doc_dict[k] / length
# add the normalized document to the corpus
self.documents.append([doc_name, doc_dict])
def similarities(self, list_of_words):
"""Returns a list of all the [docname, similarity_score] pairs relative to a
list of words."""
# building the query dictionary
query_dict = {}
for w in list_of_words:
query_dict[w] = query_dict.get(w, 0.0) + 1.0
# normalizing the query
length = float(len(list_of_words))
for k in query_dict:
query_dict[k] = query_dict[k] / length
# computing the list of similarities
sims = []
for doc in self.documents:
score = 0.0
doc_dict = doc[1]
for k in query_dict:
if doc_dict.has_key(k):
score += (query_dict[k] / self.corpus_dict[k]) + (doc_dict[k] /
self.corpus_dict[k])
sims.append([doc[0], score])
return sims
*IthasbeenalongtimesinceIwrotetheTFIDFtutorial(Part IandPart II)andasI
promissed,hereisthecontinuationofthetutorial.UnfortunatelyIhadnotimetofixthe
previoustutorialsforthenewerversionsofthescikit-learn (sklearn)packagenorto
answerallthequestions,butIhopetodothatinaclosefuture.
So,ontheprevioustutorialswelearnedhowadocumentcanbemodeledintheVector
Space,howtheTFIDFtransformationworksandhowtheTFIDFiscalculated,now
whatwearegoingtolearnishowtouseawellknownsimilaritymeasure(Cosine
Similarity)tocalculatethesimilaritybetweendifferentdocuments.

Letsbeginwiththedefinitionofthedotproductfortwovectors:

and
,where and arethecomponentsofthevector(featuresofthe
document,orTFIDFvaluesforeachwordofthedocumentinourexample)andthe is
thedimensionofthevectors:

Asyoucansee,thedefinitionofthedotproductisasimplemultiplicationofeach
componentfromthebothvectorsaddedtogether.Seeanexampleofadotproductfor
twovectorswith2dimensionseach(2D):

Thefirstthingyouprobablynoticedisthattheresultofadotproductbetweentwo
vectorsisntanothervectorbutasinglevalue,ascalar.
Thisisallverysimpleandeasytounderstand,butwhatisadotproduct?Whatisthe
intuitiveideabehindit?Whatdoesitmeantohaveadotproductofzero?To
understandit,weneedtounderstandwhatisthegeometricdefinitionofthedot
product:

Rearrangingtheequationtounderstanditbetterusingthecommutativeproperty,we
have:

So,whatistheterm
?Thistermistheprojectionofthevector intothevector
asshownontheimagebelow:

THEPROJECTIONOFTHEVECTORAINTOTHEVECTORB.BYWIKIPEDIA.
Now,whathappenswhenthevector isorthogonal(withanangleof90degrees)tothe
vector likeontheimagebelow?

TWOORTHOGONALVECTORS(WITH90DEGREESANGLE).
Therewillbenoadjacentsideonthetriangle,itwillbeequivalenttozero,the
term
willbezeroandtheresultingmultiplicationwiththemagnitudeofthe
vector willalsobezero.Nowyouknowthat,whenthedotproductbetweentwo
differentvectorsiszero,theyareorthogonaltoeachother(theyhaveanangleof90
degrees),thisisaveryneatwaytochecktheorthogonalityofdifferentvectors.Itisalso
importanttonotethatweareusing2Dexamples,butthemostamazingfactaboutitis
thatwecanalsocalculateanglesandsimilaritybetweenvectorsinhigherdimensional
spaces,andthatiswhymathletusseefarthantheobviousevenwhenwecantvisualize
orimaginewhatistheanglebetweentwovectorswithtwelvedimensionsforinstance.
Thecosinesimilaritybetweentwovectors(ortwodocumentsontheVectorSpace)isa
measurethatcalculatesthecosineoftheanglebetweenthem.Thismetricisa
measurementoforientationandnotmagnitude,itcanbeseenasacomparisonbetween
documentsonanormalizedspacebecausewerenottakingintotheconsiderationonly
themagnitudeofeachwordcount(tfidf)ofeachdocument,buttheanglebetweenthe
documents.Whatwehavetodotobuildthecosinesimilarityequationistosolvethe
equationofthedotproductforthe
:

Andthatisit,thisisthecosinesimilarityformula.CosineSimilaritywillgeneratea
metricthatsayshowrelatedaretwodocumentsbylookingattheangleinsteadof
magnitude,likeintheexamplesbelow:

THECOSINESIMILARITYVALUESFORDIFFERENTDOCUMENTS,1(SAME
DIRECTION),0(90DEG.),1(OPPOSITEDIRECTIONS).
Notethatevenifwehadavectorpointingtoapointfarfromanothervector,theystill
couldhaveansmallangleandthatisthecentralpointontheuseofCosineSimilarity,
themeasurementtendstoignorethehighertermcountondocuments.Supposewehave
adocumentwiththewordskyappearing200timesandanotherdocumentwiththe
wordskyappearing50,theEuclideandistancebetweenthemwillbehigherbutthe
anglewillstillbesmallbecausetheyarepointingtothesamedirection,whichiswhat
matterswhenwearecomparingdocuments.
NowthatwehaveaVectorSpaceModelofdocuments(likeontheimagebelow)
modeledasvectors(withTFIDFcounts)andalsohaveaformulatocalculatethe
similaritybetweendifferentdocumentsinthisspace,letsseenowhowwedoitin
practiceusingscikit-learn (sklearn).

VECTORSPACEMODEL
*InthistutorialImusingthePython2.7.5andScikitlearn0.14.1.
Thefirstthingweneedtodoistodefineoursetofexampledocuments:
documents = (
"The sky is blue",
"The sun is bright",
"The sun in the sky is bright",
"We can see the shining sun, the bright sun"

AndthenweinstantiatetheSklearnTFIDFVectorizerandtransformourdocuments
intotheTFIDFmatrix:
sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
tfidf_matrix.shape
11)
NowwehavetheTFIDFmatrix(tfidf_matrix)foreachdocument(thenumberofrows
ofthematrix)with11tfidfterms(thenumberofcolumnsfromthematrix),wecan
calculatetheCosineSimilaritybetweenthefirstdocument(Theskyisblue)witheach
oftheotherdocumentsoftheset:
sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(tfidf_matrix[0:1], tfidf_matrix)
array([[ 1.
, 0.36651513, 0.52305744, 0.13448867]])
Thetfidf_matrix[0:1]istheScipyoperationtogetthefirstrowofthesparsematrixand
theresultingarrayistheCosineSimilaritybetweenthefirstdocumentwithall
documentsintheset.Notethatthefirstvalueofthearrayis1.0becauseitistheCosine
Similaritybetweenthefirstdocumentwithitself.Alsonotethatduetothepresenceof
similarwordsonthethirddocument(Thesunintheskyisbright),itachievedabetter
score.
Ifyouwant,youcanalsosolvetheCosineSimilarityfortheanglebetweenvectors:

Weonlyneedtoisolatetheangle( )andmovethe

The

isthesameastheinverseofthecosine(

totherighthandoftheequation:

).

Letsforinstance,checktheanglebetweenthefirstandthirddocuments:
import math
# This was already calculated on the previous step, so we just use the value
cos_sim = 0.52305744
angle_in_radians = math.acos(cos_sim)
math.degrees(angle_in_radians)
58.462437107432784
Andthatangleof~58.5istheanglebetweenthefirstandthethirddocumentofour
documentset.
Thatisit,Ihopeyoulikedthisthirdtutorial!

Vous aimerez peut-être aussi