在语言模型中(包括word2vec),由于参数空间过大、数据过于稀疏,计算不方便,所以只考虑近邻n个词对其影响,以简化计算。即为N-gram模型,N为超参数。
需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。
但是使用One-Hot Encoder有以下问题。一方面,城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的关联关系。其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成维度灾难。 使用Vector Representations可以有效解决这个问题。Word2Vec可以将One-Hot Encoder转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。
两次训练出来的词向量不一样是很正常的,因为在你给模型指定的任务中,并没有对每个词向量的绝对位置的约束,这也就导致了每次生成的词向量不一样。https://www.zhihu.com/question/57144800/answer/681943645