Latentní sémantická analýza
Latentní sémantická analýza ( LSA je anglicky : Latentní sémantická analýza ), nebo latentní sémantické indexování (nebo LSI , anglicky: latentní sémantické indexování ) je proces zpracování přirozeného jazyka , jako součást sémantiky Vector . LSA byl patentován v roce 1988 a publikován v roce 1990 .
Umožňuje vytvořit vztahy mezi sadou dokumentů a pojmy, které obsahují, vytvořením „konceptů“ souvisejících s dokumenty a pojmy.
Matice výskytů
LSA používá matici, která popisuje výskyt určitých termínů v dokumentech. Jedná se o řídkou matici, jejíž řádky odpovídají „výrazům“ a jejichž sloupce odpovídají „dokumentům“.
„Termíny“ jsou obecně slova zkrácená nebo zredukovaná na jejich radikál převzatá z celého korpusu. Proto máme v každém dokumentu počet výskytů slova a pro všechna slova. Toto číslo je normalizováno pomocí vážení tf-idf (z angličtiny : termín frekvence - inverzní frekvence dokumentu ), kombinace dvou technik: koeficient matice je tím větší, čím více se v dokumentu objeví, a že je vzácné - předložit je.
Tato matice je běžná ve standardních sémantických modelech, jako je vektorový model , i když její maticová forma není systematická, protože matematické vlastnosti matic se používají jen zřídka.
LSA transformuje matici výskytů na „vztah“ mezi pojmy a „koncepty“ a vztah mezi těmito pojmy a dokumenty. Můžeme tedy dokumenty propojit.
Aplikace
Tato organizace mezi pojmy a koncepty se obecně používá pro:
Rozlišení synonymie a polysémie je hlavním problémem automatického zpracování jazyka :
- dvě synonyma popisují stejnou myšlenku, vyhledávač by tak mohl najít relevantní dokumenty, ale neobsahující přesný termín vyhledávání;
- polysémie slova znamená, že má několik významů v závislosti na kontextu - by bylo možné vyhnout se rovněž dokumenty, které obsahují hledané slovo, ale v akceptaci, které neodpovídá co jeden přání nebo na pole v úvahu.
Snížení hodnosti
Po zkonstruování matice výskytů umožňuje LSA najít matici nižšího řádu , která poskytuje aproximaci této matice výskytů. Tuto aproximaci můžeme ospravedlnit několika aspekty:
- původní matice může být příliš velká pro výpočetní kapacitu stroje - díky tomu je proces proveditelný a je to „nutné zlo“ -;
- původní matice může být „hlučná“: výrazy, které se objevují pouze anekdoticky - matice je tedy „vyčištěna“, jedná se o operaci, která zlepšuje výsledky -;
- lze předpokládat, že původní matice je „příliš řídká“: obsahuje spíše slova specifická pro každý dokument než výrazy spojené s několika dokumenty - to je také problém synonymie.
Snížení pořadí matice výskytu má však účinek kombinace některých dimenzí, které nemusí být relevantní. Obecně se nám podaří - pokud je to možné - sloučit termíny s podobným významem. Snížení z pozice 3 na pozici 2 tedy může ovlivnit transformaci:
{(Car), (Truck), (Flower)} → {(1.3452 × Car + 0.2828 × Truck), (Flower)}
Synonymie je vyřešena tímto způsobem. Ale někdy to není možné. V těchto případech může LSA provést následující transformaci:
{(Auto), (Láhev), (Květina)} - → {(1,3452 × Auto + 0,2828 × Láhev), (Květ)}
Toto seskupení je mnohem obtížnější interpretovat - je to oprávněné z matematického hlediska, ale není relevantní pro lidského mluvčího -.
Popis
Konstrukce matice výskytu
Nechť X je matice, kde prvek (i, j) popisuje výskyty termínu i v dokumentu j - například frekvenci . Pak X bude vypadat takto:
dj↓tiT→(X1,1...X1,ne⋮⋱⋮Xm,1...Xm,ne){\ displaystyle {\ begin {matrix} & {\ textbf {d}} _ {j} \\ & \ downarrow \\ {\ textbf {t}} _ {i} ^ {T} \ rightarrow & {\ begin { pmatrix} x_ {1,1} & \ dots & x_ {1, n} \\\ vdots & \ ddots & \ vdots \\ x_ {m, 1} & \ dots & x_ {m, n} \\\ end {pmatrix}} \ end {matrix}}}![{\ displaystyle {\ begin {matrix} & {\ textbf {d}} _ {j} \\ & \ downarrow \\ {\ textbf {t}} _ {i} ^ {T} \ rightarrow & {\ begin { pmatrix} x_ {1,1} & \ dots & x_ {1, n} \\\ vdots & \ ddots & \ vdots \\ x_ {m, 1} & \ dots & x_ {m, n} \\\ end {pmatrix}} \ end {matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/17daf72976642fb56f38740291c90316b6782428)
Řádek této matice je tedy vektor, který odpovídá pojmu a jehož komponenty dávají jeho přítomnost (nebo spíše jeho důležitost) v každém dokumentu:
tiT=(Xi,1...Xi,ne){\ displaystyle {\ textbf {t}} _ {i} ^ {T} = {\ begin {pmatrix} x_ {i, 1} & \ dots & x_ {i, n} \ end {pmatrix}}}![{\ displaystyle {\ textbf {t}} _ {i} ^ {T} = {\ begin {pmatrix} x_ {i, 1} & \ dots & x_ {i, n} \ end {pmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7a8432ae3835b260e80d3b2cf07f488405b7f5ed)
Podobně sloupec této matice je vektor, který odpovídá dokumentu a jehož komponenty jsou důležité v jeho vlastním obsahu každého výrazu.
dj=(X1,j⋮Xm,j){\ displaystyle {\ textbf {d}} _ {j} = {\ begin {pmatrix} x_ {1, j} \\\ vdots \\ x_ {m, j} \ end {pmatrix}}}![{\ displaystyle {\ textbf {d}} _ {j} = {\ begin {pmatrix} x_ {1, j} \\\ vdots \\ x_ {m, j} \ end {pmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/aab8fcccf9bbf09a931c3234a72b37fc8b59ca42)
Korelace
Skalární součin :
tiTtp{\ displaystyle {\ textbf {t}} _ {i} ^ {T} {\ textbf {t}} _ {p}}![{\ displaystyle {\ textbf {t}} _ {i} ^ {T} {\ textbf {t}} _ {p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b40180690fc204063af80e669a058b93be21d112)
mezi dvěma „ členy “ vektory dává korelaci mezi dvěma členy v celém korpusu. Maticový produkt obsahuje všechny tečkové produkty této formy: položka (i, p) - která je stejná jako položka (p, i), protože matice je symetrická - je tedy bodový produkt:
XXT{\ displaystyle XX ^ {T}}![{\ displaystyle XX ^ {T}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e6bd9b876c6fad0022fb4b7c4ff3dd007629d4fe)
tiTtp{\ displaystyle {\ textbf {t}} _ {i} ^ {T} {\ textbf {t}} _ {p}}![{\ displaystyle {\ textbf {t}} _ {i} ^ {T} {\ textbf {t}} _ {p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b40180690fc204063af80e669a058b93be21d112)
( ).
=tpTti{\ displaystyle = {\ textbf {t}} _ {p} ^ {T} {\ textbf {t}} _ {i}}![{\ displaystyle = {\ textbf {t}} _ {p} ^ {T} {\ textbf {t}} _ {i}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4e2475a3de0452bd8eedb16c27940a67c5f2e66a)
Podobně produkt obsahuje všechny skalární produkty mezi vektory „dokumentu“, které dávají své korelace v celé lexikonu:
XTX{\ displaystyle X ^ {T} X}![{\ displaystyle X ^ {T} X}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1cf126839e1552c18f9c9951a9267bee93f3d243)
djTdq=dqTdj{\ displaystyle {\ textbf {d}} _ {j} ^ {T} {\ textbf {d}} _ {q} = {\ textbf {d}} _ {q} ^ {T} {\ textbf {d }} _ {j}}![{\ displaystyle {\ textbf {d}} _ {j} ^ {T} {\ textbf {d}} _ {q} = {\ textbf {d}} _ {q} ^ {T} {\ textbf {d }} _ {j}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5af74d46c74cac1af0f7220893654d7bc52b7e44)
.
Rozklad singulární hodnoty
Jeden pak provede rozklad v singulárních hodnotách na X , což dá dvě ortonormální matice U a V a diagonální matici Σ . Pak máme:
X=UΣPROTIT{\ displaystyle {\ begin {matrix} X = U \ Sigma V ^ {T} \ end {matrix}}}![{\ displaystyle {\ begin {matrix} X = U \ Sigma V ^ {T} \ end {matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/33e58022849f09a7abae84d87abfc9d1c97f40e9)
Potom se zapíší maticové produkty, které dávají korelace mezi pojmy na jedné straně a mezi dokumenty na straně druhé:
XXT=(UΣPROTIT)(UΣPROTIT)T=(UΣPROTIT)(PROTITTΣTUT)=UΣPROTITPROTIΣTUT=UΣΣTUTXTX=(UΣPROTIT)T(UΣPROTIT)=(PROTITTΣTUT)(UΣPROTIT)=PROTIΣTUTUΣPROTIT=PROTIΣTΣPROTIT{\ displaystyle {\ begin {matrix} XX ^ {T} & = & (U \ Sigma V ^ {T}) (U \ Sigma V ^ {T}) ^ {T} = (U \ Sigma V ^ {T }) (V ^ {T ^ {T}} \ Sigma ^ {T} U ^ {T}) = U \ Sigma V ^ {T} V \ Sigma ^ {T} U ^ {T} = U \ Sigma \ Sigma ^ {T} U ^ {T} \\ X ^ {T} X & = & (U \ Sigma V ^ {T}) ^ {T} (U \ Sigma V ^ {T}) = (V ^ { T ^ {T}} \ Sigma ^ {T} U ^ {T}) (U \ Sigma V ^ {T}) = V \ Sigma ^ {T} U ^ {T} U \ Sigma V ^ {T} = V \ Sigma ^ {T} \ Sigma V ^ {T} \ end {matrix}}}![{\ displaystyle {\ begin {matrix} XX ^ {T} & = & (U \ Sigma V ^ {T}) (U \ Sigma V ^ {T}) ^ {T} = (U \ Sigma V ^ {T }) (V ^ {T ^ {T}} \ Sigma ^ {T} U ^ {T}) = U \ Sigma V ^ {T} V \ Sigma ^ {T} U ^ {T} = U \ Sigma \ Sigma ^ {T} U ^ {T} \\ X ^ {T} X & = & (U \ Sigma V ^ {T}) ^ {T} (U \ Sigma V ^ {T}) = (V ^ { T ^ {T}} \ Sigma ^ {T} U ^ {T}) (U \ Sigma V ^ {T}) = V \ Sigma ^ {T} U ^ {T} U \ Sigma V ^ {T} = V \ Sigma ^ {T} \ Sigma V ^ {T} \ end {matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/23ae4e126004b3bc4a402ac03973ee09d7db9a97)
Vzhledem k tomu, že matice a jsou diagonální, U je vyroben z vektorů v , a V je vyrobena z charakteristických vektorů . Oba produkty pak mají stejné nenulové vlastní hodnoty - což odpovídá nenulovým diagonálním koeficientům . Rozklad se pak zapíše:
ΣΣT{\ displaystyle \ Sigma \ Sigma ^ {T}}
ΣTΣ{\ displaystyle \ Sigma ^ {T} \ Sigma}
XXT{\ displaystyle XX ^ {T}}
XTX{\ displaystyle X ^ {T} X}
ΣΣT{\ displaystyle \ Sigma \ Sigma ^ {T}}![{\ displaystyle \ Sigma \ Sigma ^ {T}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/873a65eb3ccd4181801285323886070b8aa58358)
XUΣPROTIT(dj)(d^j)↓↓(tiT)→(X1,1...X1,ne⋮⋱⋮Xm,1...Xm,ne)=(t^iT)→((u1)...(ul))⋅(σ1...0⋮⋱⋮0...σl)⋅((proti1)⋮(protil)){\ displaystyle {\ begin {matrix} & X &&& U && \ Sigma && V ^ {T} \\ & ({\ textbf {d}} _ {j}) &&&&&&&& ({\ hat {\ textbf {d}} } _ {j}) \\ & \ downarrow &&&&&&&& \ downarrow \\ ({\ textbf {t}} _ {i} ^ {T}) \ rightarrow & {\ begin {pmatrix} x_ {1,1} & \ tečky & x_ {1, n} \\\\\ vdots & \ ddots & \ vdots \\\\ x_ {m, 1} & \ dots & x_ {m, n} \\\ end {pmatrix}} & = & ({\ hat {\ textbf {t}}} _ {i} ^ {T}) \ rightarrow & {\ begin {pmatrix} {\ begin {pmatrix} \, \\\, \\ {\ textbf {u }} _ {1} \ \\, \\\, \ end {pmatrix}} \ dots {\ begin {pmatrix} \, \\\, \\ {\ textbf {u}} _ {l} \\\ , \\\, \ end {pmatrix}} \ end {pmatrix}} & \ cdot & {\ begin {pmatrix} \ sigma _ {1} & \ dots & 0 \\\ vdots & \ ddots & \ vdots \\ 0 & \ dots & \ sigma _ {l} \\\ end {pmatrix}} & \ cdot & {\ begin {pmatrix} {\ begin {pmatrix} && {\ textbf {v}} _ {1} && \ end {pmatrix}} \\\ vdots \ \ {\ begin {pmatrix} && {\ textbf {vb}} _ {l} && \ end {pmatrix}} \ end {pmatrix}} \ end {matrix}}}![{\ displaystyle {\ begin {matrix} & X &&& U && \ Sigma && V ^ {T} \\ & ({\ textbf {d}} _ {j}) &&&&&&&& ({\ hat {\ textbf {d}} } _ {j}) \\ & \ downarrow &&&&&&&& \ downarrow \\ ({\ textbf {t}} _ {i} ^ {T}) \ rightarrow & {\ begin {pmatrix} x_ {1,1} & \ tečky & x_ {1, n} \\\\\ vdots & \ ddots & \ vdots \\\\ x_ {m, 1} & \ dots & x_ {m, n} \\\ end {pmatrix}} & = & ({\ hat {\ textbf {t}}} _ {i} ^ {T}) \ rightarrow & {\ begin {pmatrix} {\ begin {pmatrix} \, \\\, \\ {\ textbf {u }} _ {1} \ \\, \\\, \ end {pmatrix}} \ dots {\ begin {pmatrix} \, \\\, \\ {\ textbf {u}} _ {l} \\\ , \\\, \ end {pmatrix}} \ end {pmatrix}} & \ cdot & {\ begin {pmatrix} \ sigma _ {1} & \ dots & 0 \\\ vdots & \ ddots & \ vdots \\ 0 & \ dots & \ sigma _ {l} \\\ end {pmatrix}} & \ cdot & {\ begin {pmatrix} {\ begin {pmatrix} && {\ textbf {v}} _ {1} && \ end {pmatrix}} \\\ vdots \ \ {\ begin {pmatrix} && {\ textbf {vb}} _ {l} && \ end {pmatrix}} \ end {pmatrix}} \ end {matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/081fe8f86ed6ff2f22364dad70713a1312af9085)
Hodnoty jsou singulární hodnoty X . Na druhou stranu, vektory a jsou respektive levý a pravý singulární.
σ1,...,σl{\ displaystyle \ sigma _ {1}, \ tečky, \ sigma _ {l}}
u1,...,ul{\ displaystyle u_ {1}, \ tečky, u_ {l}}
proti1,...,protil{\ displaystyle v_ {1}, \ tečky, v_ {l}}![{\ displaystyle v_ {1}, \ tečky, v_ {l}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/25cbc19575639dc8a1ca74af13f649bbfab357b2)
Všimněte si také, že jedinou částí U, která přispívá, je i- tý řádek. Nyní označujeme tento vektor . Podobně jediná část, ke které přispívá, je j- tý sloupec, který označujeme .
ti{\ displaystyle {\ textbf {t}} _ {i}}
t^i{\ displaystyle {\ hat {\ textrm {t}}} _ {i}}
PROTIT{\ displaystyle V ^ {T}}
dj{\ displaystyle {\ textbf {d}} _ {j}}
d^j{\ displaystyle {\ hat {\ textrm {d}}} _ {j}}![{\ displaystyle {\ hat {\ textrm {d}}} _ {j}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9630ca4f87a5433a2432272b1f9727cfded18fd5)
Koncept prostor
Když vybereme k největší singulární hodnoty, stejně jako odpovídající singulární vektory v U a V , získáme aproximaci hodnosti k matice výskytů.
Důležité je, že touto aproximací se vektory „pojmy“ a „dokumenty“ převedou do prostoru „pojmů“.
Vektor má potom k komponent, z nichž každá dává důležitost termínu i v každém z k různých „konceptů“. Podobně vektor udává intenzitu vztahů mezi dokumentem j a každým konceptem. Tuto aproximaci píšeme v následující podobě:
t^i{\ displaystyle {\ hat {\ textbf {t}}} _ {i}}
d^j{\ displaystyle {\ hat {\ textbf {d}}} _ {j}}![{\ displaystyle {\ hat {\ textbf {d}}} _ {j}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/42f07f6719ab46a8fc830a80a75e9fd057c16fa8)
Xk=UkΣkPROTIkT{\ displaystyle X_ {k} = U_ {k} \ Sigma _ {k} V_ {k} ^ {T}}![{\ displaystyle X_ {k} = U_ {k} \ Sigma _ {k} V_ {k} ^ {T}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/20914b1a63fcc05b9193da91a1901df414104439)
Poté lze provést následující operace:
- porovnejte vektory a, abyste zjistili, do jaké míry jsou dokumenty j a q v koncepčním prostoru příbuzné . Můžeme to udělat vyhodnocením kosinové podobnosti .Σkd^j{\ displaystyle \ Sigma _ {k} {\ hat {\ textbf {d}}} _ {j}}
Σkd^q{\ displaystyle \ Sigma _ {k} {\ hat {\ textbf {d}}} _ {q}}![{\ displaystyle \ Sigma _ {k} {\ hat {\ textbf {d}}} _ {q}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6cef40e8da3395593b3a6002b8eed365728cbb98)
- porovnat pojmy i a p porovnáním vektorů a stejnou metodou;t^i{\ displaystyle {\ hat {\ textbf {t}}} _ {i}}
t^p{\ displaystyle {\ hat {\ textbf {t}}} _ {p}}![{\ displaystyle {\ hat {\ textbf {t}}} _ {p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5825bb1700166eaddfe3c837e09043c72c9809ff)
- zadaný dotaz, můžeme s ním zacházet jako s „mini-dokumentem“ a porovnat jej v konceptuálním prostoru s korpusem, abychom vytvořili seznam nejdůležitějších dokumentů. Chcete-li to provést, musíte již přeložit dotaz do konceptuálního prostoru a transformovat jej stejným způsobem jako dokumenty. Pokud je dotaz q , musíme vypočítat:
q^=Σk-1UkTq{\ displaystyle {\ hat {\ textbf {q}}} = \ Sigma _ {k} ^ {- 1} U_ {k} ^ {T} {\ textbf {q}}}![{\ displaystyle {\ hat {\ textbf {q}}} = \ Sigma _ {k} ^ {- 1} U_ {k} ^ {T} {\ textbf {q}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/977e1482c21a3578a88144d1990a3ddb7434c29f)
před porovnáním tohoto vektoru s korpusem.
Implementace
Rozklad na singulární hodnoty se obvykle počítá metodami optimalizovanými pro velké matice - například na algoritmu lanczos - iteračními programy, nebo dokonce neuronových sítí , druhý přístup nevyžaduje pouze celá matrice se udržuje v paměti.
Omezení
Limity LSA zahrnují:
- ty modelu slovního vaku , na kterém je založen, kde je text reprezentován jako neuspořádaná sada slov;
- nemožnost (v základním modelu) zohlednění polysémie (tj. více významů slova), protože slovo odpovídá pouze jedinému bodu v sémantickém prostoru.
Pravděpodobnostní latentní sémantická analýza (PLSA)
Statistický model latentní sémantické analýzy neodpovídá pozorovaným údajům: předpokládá, že slova a dokumenty společně tvoří Gaussův model (jedná se o ergodickou hypotézu ), zatímco je pozorováno Poissonovo rozdělení .
Novějším přístupem je tedy pravděpodobnostní latentní sémantická analýza neboli PLSA (z angličtiny: Probabilistic latent semantic analysis ) založená na multinomálním modelu .
Poznámky a odkazy
-
(in) Podání patentu Scott Deerwester, Susan Dumais, George Furnas, Richard Harshman, Thomas Landauer, Karen Lochbaum a Lynn Streeter.
-
(in) Scott Deerwester, Susan Dumais, George W. Furnas, Thomas K. Landauer, Richard Harshman, „ Indexing by Latent Semantic Analysis “ , Journal of the Society for Information Science , sv. 41, n O 6,1990, str. 391-407 ( číst online ).
-
(in) Alain Lifshitz, Sandra Jhean-Larose, Guy Denhière, „ Effect of the year we tuned parameters multiple choice question answering LSA model “ , Behavior Research Methods , Behavior Research Methods, vol. 41, n O 4,2009, str. 1201-1209 ( PMID 19897829 , DOI 10,3758 / BRM.41.4.1201 , číst online ).
-
Můžeme dokonce ukázat, že je to nejlepší aproximace ve smyslu Frobeniovy normy. Důkaz je uveden v článku o rozkladu singulární hodnoty .
-
(in) Genevieve Brandyn Gorrell and Webb (2005). „ Zobecněný hebobský algoritmus pro latentní sémantickou analýzu “ Interspeech'2005 . .
Dodatky
Bibliografie
-
(en) Domovská stránka latentního sémantického indexování , University of Colorado;
- (en) Thomas K. Landauer, Peter W. Foltz a Darrell Laham, „ Úvod do latentní sémantické analýzy “ , Discourse Processes , sv. 25,1998, str. 259-284 ( DOI 10.1080 / 01638539809545028 , číst online )
-
(en) Michael W. Berry, Susan T. Dumais, Gavin W. O'Brien, „ Používání lineární algebry pro inteligentní získávání informací “ , SIAM Review , sv. 37, n O 4,Prosince 1995, str. 573-595 ( číst online ) (PDF) .
-
(en) „ Latentní sémantická analýza “ , InfoVis
-
(en) Thomas Hofmann, Pravděpodobnostní latentní sémantická analýza , Nejistota v umělé inteligenci, 1999.
-
(en) Fridolin Wild, „ Open Source LSA Package for R “ , CRAN,2. července 2014(zpřístupněno 2. prosince 2014 )
-
(en) Dimitrios Zeimpekis a E. Gallopoulos, „ Sada nástrojů MATLAB pro generování matic termínových dokumentů z textových sbírek “ ,11. září 2005(zpřístupněno 20. listopadu 2006 )
Související články
Externí odkaz
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">