参考资料:https://www.bilibili.com/video/av61620135/?p=2&t=2024
word2vec的核心思想在于,定义一个词的意思,取决于这个词的邻居。这是word2vec的核心思想。
基于这个概念,提出两个模型,其中一个skip模型,其核心思想在于,由中心词推断中心词附近
个单位词
。
在给定的所有样本文本中,文本单词长度为,总文本数为
。按文本中顺序每一个词逐一将作为中心词,进行附近词的推断,则进行
词中心词推断。
对每一个中心词而言,衡量其与另一个词作为邻居关系的公式为。作为备选附近词的
,共有W个,为了比较备选词成为附近的可能性,用softmax公式,来表示最终的每个候选词成为
附近词的可能性。
对一个备选词而言的计算公式:
对一个中心词而言,只需要其实际的附近词计算的,尽可能大即可。
以上为word2vec核心总结。
1,训练采用mini batch采用32或者64 计算更快,因为GPU更偏爱整个
2,训练采用随机梯度下降 stochastic gradients with word vectors
讲完完整的word2vec skip,模型后,需要解决训练速度问题,故引出下一个概念——负采样。
目标是中心词实际附近词对应的概率越高越好,但在计算时,我们计算了所有词共计
和中心词的距离。计算量大,为了减小计算量,加快速度。采用了负采样的方法,不计算
个词,而是从非实际腹肌词中随机采样
-
个词进行计算。将
换为
。
提出的采样方法,根据频率去采样,将频率去3/4对数,减小高频词的采样,增加低频词的采样。
补充对采样的理解:
在python中的实现采样的代码为
df.sample(n=None, frac=None, replace=False, weights=None, random_state=None,axis=None)
n:指定抽取的样本量,(这里我设定的是小类数据的1.05,即 n = N*(1+0.05))
frac:指定抽取的样本比例;
replace:是否有放回抽样,默认无放回。(对于不平衡数据欠抽样时,将replace=False)
weights:指定样本抽中的概率,默认等概论抽样;
random_state:指定抽样的随机种子,可以使得每次抽样的种子一样,每次抽样结果一样
axis:是选择抽取数据的行还是列。axis=0的时是抽取行,axis=1时是抽取列