Loading

Embedding相关笔记

Word2Vec模型

模型结构:

  • 1个输入层:输入向量为词汇的one-hot编码
  • 1个隐藏层:权值矩阵的形状为[vocab_size, hidden_size]
  • 1个输出层:输出长度为vocab_size的向量,向量中每个元素对应词库中一个词的概率

模型训练:

  • W2V有Skip-Gram和CBOW两种训练模式。从直观上理解:Skip-Gram是给定当前值来预测上下文。而CBOW是给定上下文,来预测当前值

Simple CBOW Model

  • 简单的CBOW 模型仅输入一个词,输出一个词
  • 最终的输出需要经过softmax函数,将输出向量中的每一个元素归一化到0-1之间的概率,概率最大的,就是预测的词

CBOW Multi-Word Context Model

  • 和simple CBOW的不同之处在于,输入由1个词变成了多个词,每个输入 Xik 到达隐藏层都会经过相同的权重矩阵W,隐藏层h的值变成了多个词乘上权重矩阵之后加和求平均值

Skip-gram

  • Skip-gram输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了C个词损失函数的总和(期望输出上下文词汇),权重矩阵W’还是共享的

从效果上看,skip-gram的结果一般会比CBOW好一些,原因可能是CBOW在对多个词进行平均时带来了一些额外的信息损失

Deep Crossing

模型结构:

  • 类别型特征(one-hot向量)先进入Embedding层,再拼入stacking层,数值型特征直接拼入stacking层
    • Embedding层其实就是一个fully connect的隐藏层,起到对one-hot特征进行降维的作用
  • stacking层会把不同的 Embedding 特征和数值型特征拼接在一起,形成新的包含全部特征的特征向量
  • stacking再往上是由数个全连接层组成的MLP结构
  • scoring层输出最后的结果

t-SNE数据降维

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,常用于高维数据可视化

t-SNE的两大优势:

  • 对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。
  • 这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。

四个不足:

  • 主要用于可视化,很难用于其他目的
  • t-SNE倾向于保存局部特征,对于本征维数(intrinsic dimensionality)本身就很高的数据集,基本无法完整的映射到2-3维的空间
  • t-SNE没有唯一最优解,且没有预估部分。如果想要做预估,可以考虑降维之后,再构建一个回归方程之类的模型去做。但是要注意,t-sne中距离本身是没有意义,都是概率分布问题。
  • 训练太慢。有很多基于树的算法在t-sne上做一些改进

Scikit-learn代码Demo

>>> import numpy as np
>>> from sklearn.manifold import TSNE
>>> X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
>>> X_embedded = TSNE(n_components=2, learning_rate='auto',
...                   init='random').fit_transform(X)
>>> X_embedded.shape
(4, 2)
posted @ 2022-05-03 20:19  云野Winfield  阅读(120)  评论(0编辑  收藏  举报