《人工智能原理》课程技术报告
——基于深度神经网络的标题分类研究
班级:XX
学号:XX
姓名:XX
2020年10月25号
基于深度神经网络的标题分类研究
XX
摘要:新闻是人们对时事、最新行业相关消息了解的重要途径,本文将新闻标题作为新闻分类的切入点,由于新闻标题属于文本中的短文本类别,所以本文主要通过利用深度学习相关方法对新闻标题短文本进行分类,针对前期分类出现过的问题,结合深度学习网络并引入的SVM 模型,解决新闻分类以及短文本分类过程中的常见困难问题。
关键词:深度学习;SVM;标题分类
1 引言
随着大数据时代的来临,我们日常的信息规模呈现出爆炸式增长的趋势。数据挖掘和人工智能逐渐成为时代的主题。缩小信息规模的方法有很多种,而分类就是其中一种极其有效的方式,所以它当前仍是吸引国内外学者研究的重点问题和热点问题。文本分类是在自然语言处理领域广泛研究的问题,在工业领域内,现在已经有着较为成熟的应用,无论是朴素贝叶斯还是决策树又或是最大熵以及神经网络都在工业领域有着相关应用。而文本分类技术在新闻分类领域的应用仍然有限,当前的文本分类系统大多基于统计学原理再结合相关机器学习方法训练相关数据集,从而得到所需的分类器并使用其达成对无标签数据进行分类的目的。在2017 年自然语言处理及中文计算会(NLPCC)也曾对新闻分类相关问题设立相关课题,这也间接表现出了其可能为文本分类领域的发展研究做出较大的贡献。
由于中文新闻文本分类起步较晚,再加以复杂精深的汉语语法的影响,使得之前关于中文新闻文本分类的研究相比于英文显得稍微落后,但现在伴随各种中文新闻语料库的出现和完善,中文新闻文本分类渐渐走上正轨。以往对新闻进行分类时通常是解析新闻的正文,由于部分新闻的篇幅较长,往往导致了新闻分类时的效率低下。而通过中文新闻标题对中文新闻文本进行分类,相比与传统的新闻分类来说在分类效率上可以得到很大的优化。除此之外,新闻标题往往是对新闻主题的高度概括,以有限的字数对全文内容进行凝炼,所以这属于一个短文本分类领域的相关问题。通过对中文新闻标题分类的研究,对短文本分类领域的部分问题有着借鉴意义。
2 算法原理与系统设计
2.1 算法原理
支持向量机(Support Vector Machine ,SVM)的主要思想是:建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力。对于一个多维的样本集,系统随机产生一个超平面并不断移动,对样本进行分类,直到训练样本中属于不同类别的样本点正好位于该超平面的两侧,满足该条件的超平面可能有很多个,SVM正式在保证分类精度的同时,寻找到这样一个超平面,使得超平面两侧的空白区域最大化,从而实现对线性可分样本的最优分类。支持向量机中的支持向量(Support Vector)是指训练样本集中的某些训练点,这些点最靠近分类决策面,是最难分类的数据点。SVM中最优分类标准就是这些点距离分类超平面的距离达到最大值;“机”(Machine)是机器学习领域对一些算法的统称,常把算法看做一个机器,或者学习函数。SVM是一种有监督的学习方法,主要针对小样本数据进行学习、分类和预测,类似的根据样本进行学习的方法还有决策树归纳算法等。
2.2 详细设计
简单的Python机器学习实现新闻标题自动分类,爬虫获取的新浪新闻的分类,先对新闻进行分词,手动分类一些分词后的标题,然后以它为输入做SVM模型训练,然后用训练好的SVM模型对其他标题做预测。
3 系统实现
#news_classify.py
import xlrd
import xlwt
import jieba
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.svm import SVC
def read_data(file, sheet_index=0):
"""读取文件内容"""
workbook = xlrd.open_workbook(file)
sheet = workbook.sheet_by_index(sheet_index)
data = []
for i in range(0, sheet.nrows):
data.append([x for x in sheet.row_values(i) if x.strip()])
return data
def get_classified_sample():
"""返回手动分类的新闻"""
data = read_data('test.xls')
return {
'经济': data[1] + data[14] + data[20],
'社会': data[2] + data[3] + data[4] + data[9] + data[17] + data[18],
'政法': data[5] + data[6] + data[7] + data[8] + data[11] + data[13] + data[15] + data[16] + data[19],
'军事': data[10],
'娱乐': data[12],
}
def classify():
"""进行分类"""
# 一共分成5类,并且类别的标识定为0,1,2,3,4
category_ids = range(0, 5)
category = {}
category[0] = '经济'
category[1] = '社会'
category[2] = '政法'
category[3] = '军事'
category[4] = '娱乐'
corpus = []# 语料库
classified_sample = get_classified_sample()
for k, v in classified_sample.items():
line = ' '.join(classified_sample[k])
corpus.append(line)
data = read_data('test.xls')
# 把未分类的文章追加到语料库末尾行
# 21开始是因为我手动分类了前20条
for lst in data[21:]:
line = ' '.join(lst)
corpus.append(line)
# 计算tf-idf
vectorizer = CountVectorizer()
csr_mat = vectorizer.fit_transform(corpus)
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(csr_mat)
y = np.array(category_ids)
# 用前5行已标分类的数据做模型训练
model = SVC()
model.fit(tfidf[0:5], y)
# 对5行以后未标注分类的数据做分类预测
predicted = model.predict(tfidf[5:])
# 结果
# print(len(predicted))
for i in range(len(predicted) - 1):
print(corpus[i + 5], '============》', category[predicted[i]])
if __name__ == '__main__':
classify()
4 实验或测试结果
程序运行后出现如下界面(一部分):
中巴经济走廊“围堵”印度?新华社: 印度想太多了============》娱乐
央行报告:上海已经基本确立国内金融中心地位============》社会
国网北京电力: 北京地区煤改电今年累计破100 万户============》娱乐
湖南沅江原市长肖胜利犯三罪判5 年: 为升迁送13 万============》娱乐
颜宁为何从清华跳槽去普林斯顿?她终于说出原因============》娱乐
国家文物局公布346 万件全国馆藏文物信息供监督============》娱乐
里皮首次对续约中国男足表态:我说了我愿意( 图) ============》经济
5 结论
本项目实现的是以标题分类为核心的Python程序的一个简单尝试,本项目采用爬虫获取的新浪新闻的分类,利用机器学习,深度学习的方法完成了标题分类任务,但模型还有待改进。
参考文献
[1]杨崧. 基于LSTM-Attention的中文新闻标题分类研究[D].中南财经政法大学,2019.
[1]王渤茹,范菁,张王策,李晨光,倪旻.基于深度神经决策森林的新闻标题分类[J].云南民族大学学报(自然科学版),2020,29(05):472-479.
[1]王慧亮.简析新闻标题分类[J].传播与版权,2014(07):31.