文章目录
基于深度学习的文本分类2
主要内容是从datawhale的官方学习blog中得到的,网址,主要介绍了相关模型的网络结构和模型的训练过程
分为两部分:
(1)word2vec词嵌入(词向量)
(2)利用神经网络在词向量的基础上实现文本分类(主要是TextCNN,因为TextRNN只用换个网络结构,然后HAN(分层注意力网络)的论文暂时咕咕咕了)希望以后有一天能仔细看看!
相当于利用word2vec模型作为embedding layer。正常的操作是用现有的所有文本(或者可以利用其它大量相似语料)进行word2vec的模型训练,得到词与词之间的联系作为词的特征。
这里的内容是python的实现和一些细节介绍。就简单例子,具体操作(因为的实战代码长且慢就没放上去)
part 1:文本表示方法 3:word2vec
(一) 主要内容
介绍:Word2vec模型为浅而双层的神经网络,网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。
word2vec的主要思路:通过单词和上下文彼此预测,对应的两个算法分别为:
(1)Skip-grams (SG):给定input word来预测上下文
(2)Continuous Bag of Words (CBOW):给定上下文,来预测input word
模型本质上是通过样本计算一个词a的一定范围内(例如前后的词)出现词b的概率。
Word2Vec模型实际上分为了两个部分,第一部分为建立模型(架构模型,训练参数),第二部分是通过模型获取嵌入词向量(input → \rightarrow →output)。
另外提出两种更加高效的训练方法:
(1)Hierarchical softmax(之前fasttext模型的论文中提到过论文地址)
(2)Negative sampling
(二)word2vec例子
在这里我们具体介绍word2vec模型的实现,模型的结构和具体过程参考:
(1)使用gensim库
这里使用gensim库来实现word2vec,anaconda直接pip install gensim。
(2)word2vec API
class gensim.models.word2vec.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000)
参数介绍:
(1)sentences:输入语句:形式为[‘I’,‘am’,‘a’,‘vegetable’,‘dog’]
(2)size:特征向量的维度
(3)alpha: 在随机梯度下降法中的初始学习率(初始步长)
(4)window:描述滑动窗口大小,表示在一个句子中,当前单词和被预测的单词之间的最大距离看这里的图示介绍
一个例子:
window=2时:
对句子:[‘I’,‘am’,‘a’,‘vegetable’,‘dog’]选定包括’a’的前两个词和’a’的后两个词组成的窗口, 滑动窗口进行模型训练:
\quad (a)在Skip-grams时,输入’a’,根据’am’‘vegetable’‘dog’,(一共有100个单词,我们训练这100个词和’a’的相关性)
\quad (b)在CBOW时,输入’am’‘vegetable’‘dog’,根据’a’,训练所有100个单词和’am’‘vegetable’'dog’的相关性
(5)min_count:最小词频,忽略所有总频率低于此频率的单词。
(6)max_vocab_size 用于限制在构建单词表过程使用的内存,如果出现比这个数多的不同单词,就修剪掉频率最小的那些单 词;每100million单词类型需要1GB的RAM,设置为None即没有限制(默认)
(7)sample : 配置高频词被随机下采样的阈值,比较可靠的范围是(0,1e-5)
主要的原因是word2vec模型在训练时会出现’a’,'the’这样的高频词,这样的高频词和其它词之间的联系不能带 来很大的信息,从而对出现高频词的词对(‘the’,‘dog’/‘book’/…)进行抽样训练
保留某个单词的概率: P ( x ) = ( F ( x ) 0.001 + 1 ) × 0.001 F ( x ) P(x)=(\sqrt{\frac{F(x)}{0.001}+1})\times \frac{0.001}{F(x)} P(x)=(0.001F(x)+1