Deux approches possibles sont "CBOW" et "skipgram", qui sont deux versions d'une approche très similaire.
skipgram
On fait exactement l'inverse de CBOW : on connait le mot du milieu, et on devine les mots qui entourrent typiquement ce mot.
sleeping
On introduit $P(+|t,c)$ la probabilité que le mot $t$ soit associé au contexte $c$, ainsi que $P(-|t,c) = 1-P(+|t,c)$ qui est la proba qu'ils ne soient pas associés.
On aimerait une représentation vectoriels des mots telle que l'association se fait par "l'angle" : les mots $w$ et $u$ s'associent bien si $⟨w|u⟩$ aussi grand que possible (à noter l'abus de langage sur mot VS représentation vectorielle).
Pour en faire qqch qui ressemble plus à une probabilité, on passe ce produit scalaire dans une fonction qui s'éclaffe à $0$ quand le produit est négatif, et s'éclaffe à $1$ quand il est très positif, et au milieu on aimerait que ça croisse. On pourrait se permettre plein de choses ici, comme par exemple une sigmoid que nous notons $$σ(x)=\frac{1}{1+\exp(-x)}$$
Ce qui donne $$P(+|t,c)=σ(⟨t|c⟩)=\frac{1}{1+\exp(-⟨t|c⟩)}$$ ainsi que $$P(-|t,c)=1-σ(⟨t|c⟩)=\frac{\exp(-⟨t|c⟩)}{1+\exp(-⟨t|c⟩)}$$
En plus, avec skip-gram on fait l'assoption que l'ordre des mots du contexte n'a pas d'importance. Donc
$$ P(+|t,c_1,...,c_k) = ∏_i P(+|t,c_i)$$
$$ \log(P(+|t,c_1,...,c_k)) = ∑_i \log(P(+|t,c_i))$$
Alors le problème d'optimisation est formulé ainsi : on cherche les vecteurs pour chaque mots tels que
$$ J = ∑_{(t,c)∈+}\log(P(+|t,c)) + ∑_{(t,c)∈-}\log(P(-|t,c)) $$
où on a des paires $(t,c)∈+$ qui sont associées, et des paires générées aléatoirement $(t,c)∈-$ qui on espère pas associés. Ainsi on force qu'il soit à la fois les mots proches soient proche, et que les mots éloignés s'éloignent.
Il est empiriquement constaté que de prendre les mots aléatoirement selon $$P(w)=\frac{count(W)^α}{∑_acount(a)^α}, \; α=3/4$$ car la sélections de mots rares est amplifié