Можно ли - на элементарном уровне - пояснить, как выбирается совокупность параметров, служащая базисом?
Базис стандартный:) Вы, видимо, хотите спросить, как строятся вектора.
Совсем на пальцах - они строятся так, чтобы вектора слов, которые часто встречаются рядом, были похожи.
Вектора строятся градиентным спуском без явной целевой функции. На самом деле для каждого слова строится два вектора - левый
![$w$ $w$](https://dxdy-04.korotkov.co.uk/f/3/1/f/31fae8b8b78ebe01cbfbe2fe5383262482.png)
и правый
![$c$ $c$](https://dxdy-04.korotkov.co.uk/f/3/e/1/3e18a4a28fdee1744e5e3f79d13b9ff682.png)
. Мы берем два слова
![$i$ $i$](https://dxdy-04.korotkov.co.uk/f/7/7/a/77a3b857d53fb44e33b53e4c8b68351a82.png)
и
![$j$ $j$](https://dxdy-04.korotkov.co.uk/f/3/6/b/36b5afebdba34564d884d347484ac0c782.png)
, которые расположены в тексте рядом, и градиентным спуском увеличиваем скалярное произведение
![$(w_i, c_j)$ $(w_i, c_j)$](https://dxdy-04.korotkov.co.uk/f/3/1/f/31fa155da14de01bbf4ee0b66ad320b282.png)
. А еще мы берем случайное слово
![$k$ $k$](https://dxdy-03.korotkov.co.uk/f/6/3/b/63bb9849783d01d91403bc9a5fea12a282.png)
, и уменьшаем скалярное произведение
![$(w_i, c_k)$ $(w_i, c_k)$](https://dxdy-03.korotkov.co.uk/f/a/3/8/a38198fbaa4c7d78167645b8519f30c582.png)
. После чего выкидываем матрицу
![$C$ $C$](https://dxdy-02.korotkov.co.uk/f/9/b/3/9b325b9e31e85137d1de765f43c0f8bc82.png)
, оставляя только матрицу
![$W$ $W$](https://dxdy-01.korotkov.co.uk/f/8/4/c/84c95f91a742c9ceb460a83f9b5090bf82.png)
.
Леви и Голдберг показали, что в некоторым варианте это эквивалентно оптимизации
![$(w_i, c_j) \approx \log \frac{P(i, j)}{P(i)P(j)} - \log k$ $(w_i, c_j) \approx \log \frac{P(i, j)}{P(i)P(j)} - \log k$](https://dxdy-04.korotkov.co.uk/f/7/7/e/77e4678132c1c14ec9dc26afc01a7a6382.png)
, где
![$P(i, j)$ $P(i, j)$](https://dxdy-01.korotkov.co.uk/f/8/1/d/81d15b384e17b07f2a6707770316dc3a82.png)
- вероятность того, что случайная пара слов окажется парой
![$i, j$ $i, j$](https://dxdy-04.korotkov.co.uk/f/3/e/3/3e384b223dce750e6c98aa501355f00b82.png)
,
![$P(i)$ $P(i)$](https://dxdy-01.korotkov.co.uk/f/0/2/e/02e5e81fd8ab521241a88f4d502b53e682.png)
и
![$P(j)$ $P(j)$](https://dxdy-02.korotkov.co.uk/f/1/a/a/1aadac9df964729662a76d442fca219082.png)
- частоты слов
![$i$ $i$](https://dxdy-04.korotkov.co.uk/f/7/7/a/77a3b857d53fb44e33b53e4c8b68351a82.png)
и
![$j$ $j$](https://dxdy-04.korotkov.co.uk/f/3/6/b/36b5afebdba34564d884d347484ac0c782.png)
соответственно,
![$k$ $k$](https://dxdy-03.korotkov.co.uk/f/6/3/b/63bb9849783d01d91403bc9a5fea12a282.png)
- параметр алгоритма.
Тут есть хитрый момент - мы по сути оптимизируем некоторую функциюю от
![$W C^T$ $W C^T$](https://dxdy-02.korotkov.co.uk/f/d/5/7/d57078efde8b2e11c3f9e731b0f0acab82.png)
, а используем только
![$W$ $W$](https://dxdy-01.korotkov.co.uk/f/8/4/c/84c95f91a742c9ceb460a83f9b5090bf82.png)
. Но очевидно, что если мы возьмем
![$W' = WA$ $W' = WA$](https://dxdy-02.korotkov.co.uk/f/9/0/2/902cd5fc0560e797a80054a0b3be2c1782.png)
,
![$C' = C(A^{-1})^T$ $C' = C(A^{-1})^T$](https://dxdy-01.korotkov.co.uk/f/0/f/a/0fae31442dbcea029c8a28f88e63a9cd82.png)
для произвольной обратимой матрицы
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
, то целевая функция не изменится, а вот наши скалярные произведения между строками матрицы
![$W$ $W$](https://dxdy-01.korotkov.co.uk/f/8/4/c/84c95f91a742c9ceb460a83f9b5090bf82.png)
поменяются неизвестно как. Так что просто условия оптимальности относительно целевой функции недостаточно для получения хороших эмбеддингов, важно еще что-то. Что именно - я не знаю (и, видимо, никто не знает).
Но подход word embeddings, хотя и интересный, сейчас устарел. Современные подходы смотрят сразу на много слов.