15.1 Žodžių įterpiniai (word2vec)

Natūralioji kalba yra sudėtinga sistema, naudojama reikšmėms reikšti. Šioje sistemoje žodžiai yra pagrindinis reikšmės vienetas. Kaip rodo pavadinimas, žodžių vektoriai yra vektoriai, naudojami žodžiams vaizduoti, ir juos taip pat galima laikyti žodžių požymių vektoriais arba vaizdavimais. Žodžių atvaizdavimo realiaisiais vektoriais technika vadinama žodžių įterpimu (angl. word embedding). Pastaraisiais metais žodžių įterpimas pamažu tapo natūraliosios kalbos apdorojimo pagrindinėmis žiniomis.

15.1.1 Fiktyvūs vektoriai yra prastas pasirinkimas

9.5 skyrelis žodžiams (simboliai yra žodžiai) vaizduoti naudojome fiktyvius vektorius. Tarkime, kad skirtingų žodžių skaičius žodyne (žodyno dydis) yra NN, o kiekvienas žodis atitinka skirtingą sveikąjį skaičių (indeksą) nuo 00 iki N−1N-1. Kad gautume bet kurio žodžio su indeksu ii fiktyvaus vektoriaus vaizdavimą, sukuriame NN ilgio vektorių, sudarytą iš nulių, ir ii padėties elementą nustatome į 1. Taip kiekvienas žodis vaizduojamas NN ilgio vektoriumi, ir jį galima tiesiogiai naudoti neuroniniuose tinkluose.

Nors fiktyvius žodžių vektorius lengva sukonstruoti, jie paprastai nėra geras pasirinkimas. Pagrindinė priežastis ta, kad fiktyvūs žodžių vektoriai negali tiksliai išreikšti skirtingų žodžių panašumo, pavyzdžiui, kosinuso panašumo, kurį dažnai naudojame. Vektorių x,y∈Rd\mathbf{x}, \mathbf{y} \in \mathbb{R}^d kosinuso panašumas yra kampo tarp jų kosinusas:

x⊤y∥x∥∥y∥∈[−1,1].\frac{\mathbf{x}^\top \mathbf{y}}{\|\mathbf{x}\| \|\mathbf{y}\|} \in [-1, 1].

Kadangi bet kurių dviejų skirtingų žodžių fiktyvių vektorių kosinuso panašumas yra 0, fiktyvūs vektoriai negali užkoduoti žodžių panašumų.

15.1.2 Savaime prižiūrimas word2vec

Įrankis word2vec buvo pasiūlytas aukščiau minėtai problemai spręsti. Jis kiekvieną žodį atvaizduoja fiksuoto ilgio vektoriumi, ir šie vektoriai gali geriau išreikšti skirtingų žodžių panašumą ir analogijos sąryšį. Įrankį word2vec sudaro du modeliai, būtent skip-gram (Mikolov ir kt., 2013) ir nuolatinis žodžių krepšys (angl. continuous bag of words, CBOW) (Mikolov ir kt., 2013). Kad vaizdavimai būtų semantiškai prasmingi, jų apmokymas remiasi sąlyginėmis tikimybėmis, kurias galima laikyti kai kurių žodžių prognozavimu naudojant kai kuriuos jų aplinkinius žodžius tekstynuose. Kadangi priežiūra gaunama iš duomenų be žymenų, ir skip-gram, ir nuolatinis žodžių krepšys yra savaime prižiūrimi modeliai.

Toliau pristatysime šiuos du modelius ir jų apmokymo metodus.

15.1.3 Skip-gram modelis

Skip-gram modelis daro prielaidą, kad žodį galima naudoti jo aplinkiniams žodžiams teksto sekoje generuoti. Paimkime teksto seką „the“, „man“, „loves“, „his“, „son“ kaip pavyzdį. Pasirinkime „loves“ kaip centrinį žodį ir nustatykime konteksto lango dydį 2. Kaip parodyta 15.1.1 pav., turint centrinį žodį „loves“, skip-gram modelis nagrinėja sąlyginę tikimybę generuoti konteksto žodžius: „the“, „man“, „his“ ir „son“, kurie nuo centrinio žodžio nutolę ne daugiau kaip 2 žodžiais:

P("the","man","his","son"∣"loves").P(\textrm{"the"},\textrm{"man"},\textrm{"his"},\textrm{"son"}\mid\textrm{"loves"}).

Tarkime, kad konteksto žodžiai generuojami nepriklausomai turint centrinį žodį (t. y. sąlyginis nepriklausomumas). Tokiu atveju aukščiau pateiktą sąlyginę tikimybę galima perrašyti kaip

P("the"∣"loves")⋅P("man"∣"loves")⋅P("his"∣"loves")⋅P("son"∣"loves").P(\textrm{"the"}\mid\textrm{"loves"})\cdot P(\textrm{"man"}\mid\textrm{"loves"})\cdot P(\textrm{"his"}\mid\textrm{"loves"})\cdot P(\textrm{"son"}\mid\textrm{"loves"}).

Skip-gram modelis nagrinėja sąlyginę tikimybę generuoti aplinkinius konteksto žodžius turint centrinį žodį.

15.1.1 pav. Skip-gram modelis nagrinėja sąlyginę tikimybę generuoti aplinkinius konteksto žodžius turint centrinį žodį.

Skip-gram modelyje kiekvienas žodis turi du dd dimensijų vektorių vaizdavimus sąlyginėms tikimybėms apskaičiuoti. Konkrečiau, bet kuriam žodžiui su indeksu ii žodyne pažymėkime vi∈Rd\mathbf{v}_i\in\mathbb{R}^d ir ui∈Rd\mathbf{u}_i\in\mathbb{R}^d du jo vektorius, kai jis naudojamas atitinkamai kaip centrinis žodis ir konteksto žodis. Sąlyginę tikimybę generuoti bet kurį konteksto žodį wow_o (su indeksu oo žodyne) turint centrinį žodį wcw_c (su indeksu cc žodyne) galima modeliuoti softmax operacija vektorių skaliarinėms sandaugoms:

P(wo∣wc)=exp⁡(uo⊤vc)∑i∈Vexp⁡(ui⊤vc),(15.1.1)P(w_o \mid w_c) = \frac{\exp(\mathbf{u}_o^\top \mathbf{v}_c)}{ \sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \mathbf{v}_c)}, \tag{15.1.1}

kur žodyno indeksų aibė V={0,1,…,∣V∣−1}\mathcal{V} = \{0, 1, \ldots, |\mathcal{V}|-1\}. Duota TT ilgio teksto seka, kurioje žodis laiko žingsnyje tt žymimas w(t)w^{(t)}. Tarkime, kad konteksto žodžiai generuojami nepriklausomai turint bet kurį centrinį žodį. Kai konteksto lango dydis yra mm, skip-gram modelio tikėtinumo funkcija yra tikimybė generuoti visus konteksto žodžius turint bet kurį centrinį žodį:

∏t=1T∏−m≤j≤m, j≠0P(w(t+j)∣w(t)),\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(w^{(t+j)} \mid w^{(t)}),

kur bet kurį laiko žingsnį, mažesnį už 11 arba didesnį už TT, galima praleisti.

15.1.3.1 Apmokymas

Skip-gram modelio parametrai yra kiekvieno žodyno žodžio centrinio žodžio vektorius ir konteksto žodžio vektorius. Apmokymo metu modelio parametrus išmokstame maksimizuodami tikėtinumo funkciją (t. y. maksimalaus tikėtinumo vertinimas). Tai ekvivalentu minimizuoti šią nuostolių funkciją:

−∑t=1T∑−m≤j≤m, j≠0log P(w(t+j)∣w(t)).- \sum_{t=1}^{T} \sum_{-m \leq j \leq m,\ j \neq 0} \textrm{log}\, P(w^{(t+j)} \mid w^{(t)}).

Naudodami stochastinį gradientinį nusileidimą nuostoliui minimizuoti, kiekvienoje iteracijoje galime atsitiktinai atrinkti trumpesnę posekį ir apskaičiuoti šio posekio (stochastinį) gradientą modelio parametrams atnaujinti. Kad apskaičiuotume šį (stochastinį) gradientą, turime gauti logaritminės sąlyginės tikimybės gradientus centrinio žodžio vektoriaus ir konteksto žodžio vektoriaus atžvilgiu. Apskritai pagal (15.1.1) logaritminė sąlyginė tikimybė, apimanti bet kurią centrinio žodžio wcw_c ir konteksto žodžio wow_o porą, yra

log⁡P(wo∣wc)=uo⊤vc−log⁡(∑i∈Vexp⁡(ui⊤vc)).(15.1.2)\log P(w_o \mid w_c) =\mathbf{u}_o^\top \mathbf{v}_c - \log\left(\sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \mathbf{v}_c)\right). \tag{15.1.2}

Diferencijuodami galime gauti jos gradientą centrinio žodžio vektoriaus vc\mathbf{v}_c atžvilgiu:

∂log P(wo∣wc)∂vc=uo−∑j∈Vexp⁡(uj⊤vc)uj∑i∈Vexp⁡(ui⊤vc)=uo−∑j∈V(exp⁡(uj⊤vc)∑i∈Vexp⁡(ui⊤vc))uj=uo−∑j∈VP(wj∣wc)uj.(15.1.3)\begin{aligned}\frac{\partial \textrm{log}\, P(w_o \mid w_c)}{\partial \mathbf{v}_c}&= \mathbf{u}_o - \frac{\sum_{j \in \mathcal{V}} \exp(\mathbf{u}_j^\top \mathbf{v}_c)\mathbf{u}_j}{\sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \mathbf{v}_c)}\\&= \mathbf{u}_o - \sum_{j \in \mathcal{V}} \left(\frac{\exp(\mathbf{u}_j^\top \mathbf{v}_c)}{ \sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \mathbf{v}_c)}\right) \mathbf{u}_j\\&= \mathbf{u}_o - \sum_{j \in \mathcal{V}} P(w_j \mid w_c) \mathbf{u}_j.\end{aligned} \tag{15.1.3}

Atkreipkite dėmesį, kad skaičiavimui (15.1.3) reikia visų žodyno žodžių sąlyginių tikimybių, kai centrinis žodis yra wcw_c. Kitų žodžių vektorių gradientus galima gauti tokiu pačiu būdu.

Po apmokymo bet kuriam žodžiui su indeksu ii žodyne gauname abu žodžio vektorius vi\mathbf{v}_i (kaip centrinio žodžio) ir ui\mathbf{u}_i (kaip konteksto žodžio). Natūraliosios kalbos apdorojimo taikymuose skip-gram modelio centrinių žodžių vektoriai paprastai naudojami kaip žodžių vaizdavimai.

15.1.4 Nuolatinio žodžių krepšio (CBOW) modelis

Nuolatinio žodžių krepšio (CBOW) modelis panašus į skip-gram modelį. Pagrindinis skirtumas nuo skip-gram modelio yra tas, kad nuolatinio žodžių krepšio modelis daro prielaidą, kad centrinis žodis generuojamas remiantis jo aplinkiniais konteksto žodžiais teksto sekoje. Pavyzdžiui, toje pačioje teksto sekoje „the“, „man“, „loves“, „his“ ir „son“, kai „loves“ yra centrinis žodis, o konteksto lango dydis yra 2, nuolatinio žodžių krepšio modelis nagrinėja sąlyginę tikimybę generuoti centrinį žodį „loves“ remiantis konteksto žodžiais „the“, „man“, „his“ ir „son“ (kaip parodyta 15.1.2 pav.), kuri yra

P("loves"∣"the","man","his","son").P(\textrm{"loves"}\mid\textrm{"the"},\textrm{"man"},\textrm{"his"},\textrm{"son"}).

Nuolatinio žodžių krepšio modelis nagrinėja sąlyginę tikimybę generuoti centrinį žodį turint jo aplinkinius konteksto žodžius.

15.1.2 pav. Nuolatinio žodžių krepšio modelis nagrinėja sąlyginę tikimybę generuoti centrinį žodį turint jo aplinkinius konteksto žodžius.

Kadangi nuolatinio žodžių krepšio modelyje yra keli konteksto žodžiai, šių konteksto žodžių vektoriai vidurkinami skaičiuojant sąlyginę tikimybę. Konkrečiau, bet kuriam žodžiui su indeksu ii žodyne pažymėkime vi∈Rd\mathbf{v}_i\in\mathbb{R}^d ir ui∈Rd\mathbf{u}_i\in\mathbb{R}^d du jo vektorius, kai jis naudojamas atitinkamai kaip konteksto žodis ir centrinis žodis (reikšmės sukeistos, palyginti su skip-gram modeliu). Sąlyginę tikimybę generuoti bet kurį centrinį žodį wcw_c (su indeksu cc žodyne) turint jo aplinkinius konteksto žodžius wo1,…,wo2mw_{o_1}, \ldots, w_{o_{2m}} (su indeksais o1,…,o2mo_1, \ldots, o_{2m} žodyne) galima modeliuoti kaip

P(wc∣wo1,…,wo2m)=exp⁡(12muc⊤(vo1+…+vo2m))∑i∈Vexp⁡(12mui⊤(vo1+…+vo2m)).(15.1.4)P(w_c \mid w_{o_1}, \ldots, w_{o_{2m}}) = \frac{\exp\left(\frac{1}{2m}\mathbf{u}_c^\top (\mathbf{v}_{o_1} + \ldots + \mathbf{v}_{o_{2m}}) \right)}{ \sum_{i \in \mathcal{V}} \exp\left(\frac{1}{2m}\mathbf{u}_i^\top (\mathbf{v}_{o_1} + \ldots + \mathbf{v}_{o_{2m}}) \right)}. \tag{15.1.4}

Trumpumo dėlei tegul Wo={wo1,…,wo2m}\mathcal{W}_o= \{w_{o_1}, \ldots, w_{o_{2m}}\} ir vˉo=(vo1+…+vo2m)/(2m)\bar{\mathbf{v}}_o = \left(\mathbf{v}_{o_1} + \ldots + \mathbf{v}_{o_{2m}} \right)/(2m). Tada (15.1.4) galima supaprastinti iki

P(wc∣Wo)=exp⁡(uc⊤vˉo)∑i∈Vexp⁡(ui⊤vˉo).P(w_c \mid \mathcal{W}_o) = \frac{\exp\left(\mathbf{u}_c^\top \bar{\mathbf{v}}_o\right)}{\sum_{i \in \mathcal{V}} \exp\left(\mathbf{u}_i^\top \bar{\mathbf{v}}_o\right)}.

Duota TT ilgio teksto seka, kurioje žodis laiko žingsnyje tt žymimas w(t)w^{(t)}. Kai konteksto lango dydis yra mm, nuolatinio žodžių krepšio modelio tikėtinumo funkcija yra tikimybė generuoti visus centrinius žodžius turint jų konteksto žodžius:

∏t=1TP(w(t)∣w(t−m),…,w(t−1),w(t+1),…,w(t+m)).\prod_{t=1}^{T} P(w^{(t)} \mid w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}).

15.1.4.1 Apmokymas

Nuolatinio žodžių krepšio modelių apmokymas beveik toks pat kaip skip-gram modelių apmokymas. Nuolatinio žodžių krepšio modelio maksimalaus tikėtinumo vertinimas ekvivalentus šios nuostolių funkcijos minimizavimui:

−∑t=1Tlog P(w(t)∣w(t−m),…,w(t−1),w(t+1),…,w(t+m)).-\sum_{t=1}^T \textrm{log}\, P(w^{(t)} \mid w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}).

Atkreipkite dėmesį, kad

log⁡ P(wc∣Wo)=uc⊤vˉo−log⁡ (∑i∈Vexp⁡(ui⊤vˉo)).\log\,P(w_c \mid \mathcal{W}_o) = \mathbf{u}_c^\top \bar{\mathbf{v}}_o - \log\,\left(\sum_{i \in \mathcal{V}} \exp\left(\mathbf{u}_i^\top \bar{\mathbf{v}}_o\right)\right).

Diferencijuodami galime gauti jos gradientą bet kurio konteksto žodžio vektoriaus voi\mathbf{v}_{o_i} (i=1,…,2mi = 1, \ldots, 2m) atžvilgiu:

∂log⁡ P(wc∣Wo)∂voi=12m(uc−∑j∈Vexp⁡(uj⊤vˉo)uj∑i∈Vexp⁡(ui⊤vˉo))=12m(uc−∑j∈VP(wj∣Wo)uj).(15.1.5)\frac{\partial \log\, P(w_c \mid \mathcal{W}_o)}{\partial \mathbf{v}_{o_i}} = \frac{1}{2m} \left(\mathbf{u}_c - \sum_{j \in \mathcal{V}} \frac{\exp(\mathbf{u}_j^\top \bar{\mathbf{v}}_o)\mathbf{u}_j}{ \sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \bar{\mathbf{v}}_o)} \right) = \frac{1}{2m}\left(\mathbf{u}_c - \sum_{j \in \mathcal{V}} P(w_j \mid \mathcal{W}_o) \mathbf{u}_j \right). \tag{15.1.5}

Kitų žodžių vektorių gradientus galima gauti tokiu pačiu būdu. Skirtingai nei skip-gram modelis, nuolatinio žodžių krepšio modelis paprastai kaip žodžių vaizdavimus naudoja konteksto žodžių vektorius.

15.1.5 Santrauka

  • Žodžių vektoriai yra vektoriai, naudojami žodžiams vaizduoti, ir juos taip pat galima laikyti žodžių požymių vektoriais arba vaizdavimais. Žodžių atvaizdavimo realiaisiais vektoriais technika vadinama žodžių įterpimu.
  • Įrankį word2vec sudaro ir skip-gram, ir nuolatinio žodžių krepšio modeliai.
  • Skip-gram modelis daro prielaidą, kad žodį galima naudoti jo aplinkiniams žodžiams teksto sekoje generuoti; o nuolatinio žodžių krepšio modelis daro prielaidą, kad centrinis žodis generuojamas remiantis jo aplinkiniais konteksto žodžiais.

15.1.6 Pratimai

  1. Koks yra kiekvieno gradiento apskaičiavimo skaičiavimo sudėtingumas? Kokia gali būti problema, jei žodyno dydis yra milžiniškas?
  2. Kai kurios fiksuotos anglų kalbos frazės sudarytos iš kelių žodžių, pavyzdžiui, „new york“. Kaip apmokyti jų žodžių vektorius? Užuomina: žr. word2vec straipsnio 4 skyrių (Mikolov ir kt., 2013).
  3. Apmąstykime word2vec dizainą imdami skip-gram modelį kaip pavyzdį. Koks yra sąryšis tarp dviejų žodžių vektorių skaliarinės sandaugos skip-gram modelyje ir kosinuso panašumo? Kodėl panašios semantikos žodžių porai jų žodžių vektorių (apmokytų skip-gram modeliu) kosinuso panašumas gali būti didelis?

Diskusijos