NLP
Skip-gram-Naive-Softmax
one-hot 缺陷
维度爆炸
不能表达语义关系:计算机,电脑
Word2Vec
- 分为
CBOW
与Skip-gram
,两种都是 predictive 的模型。
将 word 映射成某个空间内的向量之后,我们可以轻松地通过
cos similarity
来计算 word 之间的相似度,并且可以做一些简单的加减运算(可以用这种方式做 推荐)。Word2Vec
一个很重要的意义在于,是无监督方法,不需要花额外的功夫去构建数据集来 teach 模型,只需要给入一个非常大的文本数据集,就可以得到非常好的效果。negative sampling
- 不仅告诉模型什么是有关的,同时告诉它什么是无关的(与
SVM
的hinge loss
很像,也与多模态空间的训练很像,比如:image caption中,text-to-image 中,fine-grained 那篇论文。)
- 不仅告诉模型什么是有关的,同时告诉它什么是无关的(与
在很多代码中,输入并不是 one-hot 形式,也没有所说的 projection 层,而是初始化一个 embedding 矩阵,然后直接训练这个矩阵。这与输入one-hot形式并训练映射层的权重矩阵是一样的。因为输入是one-hot,所以也只是选择了one-hot中 1 所对应的那一行,这与
tf.nn.embedding_lookup()
是一样的操作。论文中是把训练的网络的权重拿过来做
word embedding
,但是实际的训练中都是随机初始化一个 matrix,并把这个 matrix 作为word embedding
,从中 lookup word,然后对这个 matrix 进行训练。两者本质是一样的,可以看做后者是把前者的隐藏层权重拿过来作为一个变量进行训练。参考
GloVe
GloVe
是 count based 的模型,对词-词共现矩阵
进行。(但是效果并不一定一直比Word2Vec
好,要看具体任务。)优势:
- 更容易并行化
参考
FastText
所谓 fasttext,不过是 word2vec 中 cbow + h-softmax 的灵活使用,体现在两个方面:
模型的输出层:word2vec 的输出层,对应的是每一个 term,计算某 term 的概率最大;而 fasttext 的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的 vector 都不会被保留和使用;
模型的输入层:word2vec 的输出层,是 context window 内的term;而 fasttext 对应的整个 sentence 的内容,包括 term,也包括 n-gram 的内容;
两者本质的不同,体现在 h-softmax 的使用。
Wordvec 的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。
fasttext 则充分利用了 h-softmax 的分类功能,遍历分类树的所有叶节点,找到概率最大的 label(一个或者 N 个)。fasttext
优势:
可以给出训练语料库中没有出现的词的
word embedding
(把这个词输入训练得到的网络中计算得到,这点与Word2Vec
不同,后者是使用训练得到的 word membeddings matrix,不会再用网络计算)。(因为是基于字符级的n-gram
来训练网络,所以对于之前没有见过的词,可以通过组合 character 的方式得到。也正因如此,训练的时间长,占用的内存大。)对于出现次数少的词,也能很好的训练得到
word embedding
。(还是因为用的是字符级的n-gram
来训练网络,所以这个词出现的 character 在别的词中也可能会出现,这就增加了训练数据。)
参考
Sentence Vector
Skip Thought Vector
sentence 编码模型,一个 encoder,两个 decoder。
参考
Doc2Vec
Visual Semantic Embedding
参考
参考
Basics
TF-IDF
词袋模型 / 向量空间模型
词袋模型
用来表示的一个句子,把不同句子的词袋模型表示叠加在一起就得到了向量空间模型
。(参考1)词袋模型
中的值可以是TF
(词频),TF-IDF
等。参考