文本处理的Roadmap:
https://zhuanlan.zhihu.com/p/70361361
1.TF-IDF? 特征工程+分类器
2.embedding:word2vec
3.GPT,BERT
4.表征学习(Deep learning is representation learning)
5.RNN(Recurrent Neural Networks)
TF-IDF原理概述
在一份给定的文件里,词频(term frequency, TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)
逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
综上TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF,TF为词频,IDF反文档频率。
词频(TF) = 某个词在文章中的出现次数 / 文章总词数
逆文档频率(IDF) = log(词料库的文档总数/包含该词的文档数+1)
TF-IDF = 词频(TF) * 逆文档频率(IDF)
Word2vec
运用神经网络将V维的词向量 通过权重矩阵Vd转换为 d维词向量。输入为word bag中V个词中的一个词,已经转换为V维 one-hot编码, 通过权重矩阵W, 得到输出1d维的H, 再经过softmax d*V维转换成为V维的词向量。输出含义:条件概率
还可以用训练好的H权重,将V维的one-hot词向量转化为d维的词向量。
CBOW和Skip-Gram
CBOW
Continuous Bag-of-Words
原理介绍:
https://zhuanlan.zhihu.com/p/44599645
http://www.360doc.cn/mip/895906230.html
假设目标词 前后各取k个词,即窗口的大小是k,那么CBOW模型预测的将是
练CBOW模型,该模型的结构如下图:
问题:
输入层到隐藏层以图2为例,输入层是四个词的one-hot向量表示,分别为
(维度都为V x 1,V是模型的训练本文中所有词的个数),记输入层到隐藏层的权重矩阵为 W(维度为V x N,N是认为给定的词向量维度),隐藏层的向量为h (维度为N x 1),那么 其实这里就是一个简单地求和平均。
隐藏层到输出层
记隐藏层到输出层的权重矩阵为W’ (U) (维度为N x V),输出层的向量为 (维度为V x 1),那么
注意,输出层的向量y与输入层的向量为x虽然维度是一样的,但是y并不是one-hot向量,并且向量 y中的每个元素都是有意义的。后将1V的向量softmax归一化处理得到新的1V向量,在V个取值中概率值最大的数字对应的位置所表示的词就是预测结果。
负采样
负采样实际上是采样负例来帮助训练的手段,其目的与层次softmax一样,是用来提升模型的训练速度。我们知道,模型对正例的预测概率是越大越好,模型对负例的预测概率是越小越好。由于正例的数量少,很容易保证每个正例的预测概率尽可能大,而负例的数量特别多,所以负采样的思路就是根据某种负采样的策略随机挑选一些负例,然后保证挑选的这部分负例的预测概率尽可能小。所以,负采样策略是对模型的效果影响很大,word2vec常用的负采样策略有均匀负采样、按词频率采样等等。
代码实现:
https://blog.csdn.net/qq_34862636/article/details/103834058
training输入输出是什么
CBOW是用某一个词的上下文(前面几个和后面几个)去预测它本身。
右边:
第一个input层, 假设window设置为5,那么就是用前5个词和后5个词去预测当前词,所以模型的输入是上下文,也就是10个词。
第一个Embedding层表示将要映射的词向量维度为128,那就成了10*128的张量。
第一个lambda层,其做的是加法,将10个128维的词向量同一维度直接加在一起形成了一个128维的张量。
左边:
第二个输入层输入的就是当前词,也就是1个词。
第二个lambda层做的是抽样,随机构造15个跟当前词不一样的词作为负样本。
第三个lambda层将输入的当前词和负样本拼接到一起。嵌入2次,分别得到W和b,也就是softmax_weights和softmax_bias
在第四个lambda层将右边第一个lambda输出的input_vecs_sum的向量推展一维,才能和softmax_weights进行dot,完成Dense(Wx+b)和Softmax的操作。
最后整个模型的输出的是softmax的值,其有16维实际上是模型预测当前词是正例(1个)和负例(抽样的15个)的概率值