重温Tensorflow2.0框架所做的一个小项目,写下来分享一些。写的可能不是太好,如果有错误还请指正。
利用爬虫技术获取新浪网新闻
利用爬虫技术获取到了新浪网中两类信息。一类是科技方面的,一类是NBA
每一类都获取了1200条左右的信息。做一个二分类任务。
对获取的文本做预处理
1.把获取到的新闻存到excel文档中并读取文档,在读取文档的同时过滤掉停用词,因为获取新闻的时候有些信息是新闻的固定格式对文本分析没有意义,例如:北京时间,新浪网,作者等这些词语每个新闻里面都有所以去掉这些没有用的词语和一些没有实际意义的停用词可以适当的减少文档的大小,在后面卷积操作的时候可以加快卷积的时间(这里不是一个字一个字的读取,而且用到了jieba分词)。
2.把清理后的文档分成两部分,一部分用来做训练,一部分用来做测试。
3.生成标签,生成一个列表,把科技的标签定为 1, NBA的标签定位 0
统一文本长度
首先我们要知道我们获取的新闻的长度肯定是不一样的,但在卷积的时候,输入的Tensor的维度是一丁的,这时候还要对文本进行处理,找到文本中最长的那个文本的长度,然后以他为标准,对所有小于这个长度的文本进行填充,使它们的文本长度一致(这里做的不够细节,如果最大的文本长度是6000,而第二大的文本长度是2000,而大部分的文本长度是几百的话,这样填充就太大了,不利于机器的学习)。
做词向量模型
在统一文本的长度以后文本的维度是(n,seq_len)既n个文本每个文本有seq_len个单词,然后使用gensim这个库中的word2vec做词向量,把每个词影射到32维。就会得到一个(n,seq_len,dim)既n个文本每个文本有seq_len个单词,每个单词用32维向量表示。在做词向量模型的时候顺便就把模型保存下来,不然每次都做一次会很浪费时间。
CNN模型的建立
到此数据处理已经差不多了,我们得到了一个(n,seq_len,dim)输入tensor 和一个(n,)的标签。
下面我们开始建立CNN模型。这里用到了 tf.keras.layers.Conv1D 这个模型。具体用法可以看我的另外一篇博客
在模型建立时,用到了六个卷积层和三个池化层以及三个全连接层。
最后会得到一个维度为(n,2)的数据。
在建立好模型并建立优化器后进行卷积操作,获取模型参数并把它保存下来,每进行一次epoch进行一次测试,查看其准确率。
到此我们的CNN新闻分类就已经完成了。自己可以在找一些这两类的信息,把训练好的模型导入进来,做下测试看是否准确。代码整理好以后我会上传到GitHub上。