Press "Enter" to skip to content

【交易技术前沿】基于深度学习的新闻股票匹配系统

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

本文选自 《交易技术前沿》总第三十二期文章(2018年9月)

 

王佳凯琳,苏宏,张欣欣

 

中泰证券股份有限公司

 

[email protected]

 

摘要:作为证券投资策略的重要类型之一,事件驱动策略,即通过分析重大事件发生前后对投资标的影响不同而进行的套利策略,在现今证券投资市场上被广泛使用着。投资者一般需要估计事件对标的资产价格的影响,并提前介入等待影响的发生,然后择机退出。事件发生后,如果能迅速找到与之相关的投资标的,投资者可以在标的建仓布局中占得先机,从而避开风险、获得收益。快速反应、快速决策,是事件驱动策略的关键。

 

本系统使用深度学习与自然语言处理技术,针对实时的事件给出相关联的股票信息,同时找到历史上的相似事件与当时对应股票的走势为投资者提供辅助工具。

 

在新闻与股票的匹配过程中,为了提高准确性,本系统为股票特征向量特征化提前建立了股票画像。搜集全网股票相关信息例如F10研报等作为分词和语义分析模型的训练文本。

 

本系统前端新闻实时刷新滚动,每两分钟一次,同时每条新闻都会显示匹配到的相似股票相似新闻以及其它辅助信息,确保实时准确的为使用者提供新闻股票匹配服务,有效的抓住热点新闻的冲击点。

 

关键字:自然语言处理,深度学习,分词,相似度,word2vec

 

一、概述

 

目前证券投资市场中的机构投资者,在使用事件驱动策略时,大多采用研究员人工判断的方式。为了覆盖所有行业、所有股票,机构需要雇佣众多研究员。事件发生后,对应行业的研究员估计事件的影响力,并挑选出与之相关的股票,推荐给相关业务人员。这种做法依赖于研究员对新闻的反应速度,和对该行业股票的熟悉程度。考虑到新闻24小时不断地涌现,使用人工的方式运用事件驱动策略,只能在耗费大量人力和不能第一时间对大部分新闻做出反应中平衡妥协。

 

基于深度学习的新闻股票匹配系统(以下简称“本系统”),在主流媒体网站发布新闻信息后,自动获取新闻内容。并与所有上市公司匹配,挑选出与新闻相关的股票,供投资者决策使用。同时为实时的新闻匹配出历史上相似的多条新闻,对历史新闻的相关股票进行相应时间段的回测,一定程度上显示出历史上相似新闻出现时,相关股票的走势与受到影响,为投资者决策起到辅助作用。

 

本系统使用分布式系统的快速计算能力和深度学习的自然语言处理能力,实现新闻与股票的自动匹配,以及股票的历史回测。将事件驱动策略的前期工作所费时间、人力降至最低,辅助各项自营业务的开展。

 

二、设计原理

 

(一)设计思路

 

1.功能模块

 

本系统分为五个主要的功能模块。如下图1所示。

 

1.信息获取模块。利用网络爬虫技术,抓取主要新闻媒体、财经媒体网站新发布的消息;抓取并存储资讯网站中各上市公司新闻、公告、研报内容。

 

2.特征词统计模块。利用自然语言处理技术中的分词算法,将信息获取模块中得到新闻正文分割成一个一个词,去除常用词后,进行词频统计,选取频率最高的N个词作为新闻的特征词。同样,利用分词算法,将上市公司的新闻、公告、研报正文进行分词,统计词频,得到对应股票的特征词。

 

3.语义分析模块。利用深度学习算法,将词表征为向量。向量与向量的余弦相似度即词与词的语义相似度。如此计算出新闻与股票特征词两两之间的语义相似度。进而计算出新闻与股票之间的相关度。

 

4.历史新闻模块。同样利用深度学习算法,计算历史新闻与当前新闻的相似度,找出与当前新闻最相似的多条历史新闻,再通过语义分析得到相似股票,并进行股票涨跌幅统计。

 

5.输出模块。根据业务部门需要,设计合适的输出方式。

 

 

图1.功能模块

 

2.系统整体框架

 

系统整体框架如下图2所示。首先采集全网信息进行数据预处理,然后进行分词,将分得的新闻关键词通过训练好的深度学习模型进行语义分析,得到词向量,并与预先处理好的股票的词向量以及历史新闻的词向量进行相似度计算,得到相关股票与相关历史新闻。

 

 

图2.系统整体框架

 

得到相关股票以及相关历史新闻之后,本系统有一系列的衍生分析模块包括通过历史事件进行相关个股历史收益回测以及通过T日成交量反映相关个股最新量价关系。具体如下图3所示。

 

 

图3.系统分析功能

 

(二)技术原理

 

各步骤所用技术,如下图4所示。

 

 

图4.各步骤技术

 

1.网络爬虫

 

网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件[1]。

 

网络爬虫的基本工作流程如下:

 

1.首先选取一部分精心挑选的种子URL;

 

2.将这些URL放入待抓取URL队列;

 

3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

 

4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

 

 

图5.爬虫步骤

 

一般来说,网络爬虫需要面对的是整个互联网上数以亿计的网页。单个抓取程序不可能完成这样的任务。往往需要多个抓取程序一起来处理。网络爬虫往往是一个分布式的三层结构。如上图5所示。

 

2.分词

 

中文分词指的是将汉字序列切分成词序列。举个例子:

 

原句:国务院总理李克强调研上海外高桥时提出,支持上海积极探索新机制。正确分词结果:国务院/ 总理/ 李克强/ 调研/ 上海/ 外高桥/ 时/ 提出/ ,/ 支持/ 上海/ 积极/ 探索/ 新/ 机制/ 。

 

中文分词算法现在一般分为三类:基于字符串匹配,基于理解,基于统计的分词。

 

基于字符串匹配分词:机械分词算法。将待分的字符串与一个充分大的机器词典中的词条进行匹配。分为正向匹配和逆向匹配;最大长度匹配和最小长度匹配;单纯分词和分词与标注过程相结合的一体化方法。所以常用的有:正向最大匹配,逆向最大匹配,最少切分法……实际应用中,将机械分词作为初分手段,利用语言信息提高切分准确率。优先识别具有明显特征的词,以这些词为断点,将原字符串分为较小字符串再机械匹配,以减少匹配错误率;或将分词与词类标注结合。

 

基于统计:相邻的字同时出现的次数越多,越有可能构成一个词语,对语料中的字组频度进行统计,不需要切词字典,但错误率很高。

 

基于理解分词:分词同时进行句法语义分析等模拟人对句子的理解,包括分词子系统,句法语义系统,总控部分。总控部分协调下,分词字系统可以获得有关词,句子等的句法和语义信息对分词歧义进行判断。需要大量的语言知识信息。实现难度最大,目前处于试验阶段[2]。

 

本系统使用基本词典进行关键词分词,使用统计方法识别新词组、对句子进行精细分词。

 

(1)中文切词

 

中文切词的方法常见有两种:基于字符串匹配和基于统计分词

 

基于字符串匹配即机械分词算法,一般都需要事先建立足够大的分词词典,然后扫描字符串,将待分词文本中的字串与分词词典中的词条注意匹配。如果在词典中可以找到该字符串,则说明匹配成功,那幺就将该字符串当作一个词从待分词文本中切分出来,否则不切分。由于机械匹配的方法需要依靠字典,而字典不可能包含所有的词,这样就会有某些词在词典中无法找到,进而无法匹配,这种词称为未登录词,即词典中未收录的词。主要分为两类,一类是新的普通词汇或专业词汇,如播客等;另一类是专有名词,包括中外人名、地名、机构名、事件名,如中泰等。这些未登录词对分词精度的影响十分重要。

 

基于统计的分词法的基本原理是根据字符串在语料库中出现的统计频率来决定其是否构成词。词是字的组合, 相邻的字同时出现的次数越多, 就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映它们成为词的可信度。这类分词基于人工标注的词性和统计特征,对中文进行建模,即根据观测到的数据(标注好的语料)对模型参数进行估计,即训练。在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。常见的序列标注模型有HMM和CRF

 

本系统的切词模块使用的就是基于统计的分词法-jieba分词。

 

jieba分词主要是基于统计词典,构造一个前缀词典;然后利用前缀词典对输入句子进行切分,得到所有的切分可能,根据切分位置,构造一个有向无环图;通过动态规划算法,计算得到最大概率路径,也就得到了最终的切分形式。

 

a.前缀词典构建:如统计词典中的词“北京大学”的前缀分别是“北”、“北京”、“北京大”;词“大学”的前缀是“大”。

 

b.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)

 

Trie 树:又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构。用于针对词表进行存储,以进行高效的词图扫描包括词(word)+词频(Freq),结构如从下图6所示。

 

 

图6.Trie树

 

根节点为空,叶节点表示词表里的所有词,叶节点同时包含了该词所对应的词频。

 

有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,是指:任意一条边有方向,且不存在环路的图。下图7就是一个有向无环图

 

 

图7.有向无环图

 

c.采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

 

(2)词频统计

 

方法:

 

1.词频(Term Frequency): 统计每个单词出现的次数

 

2.去掉停用词(stop-word): 的地得

 

3.去掉超高频词:比如中国,这样的词没有特殊性

 

4.去掉超低频词:比如“中世纪”,这样的词没有普适性

 

TD-IDF计算权重(weight):如果某个词比较少见,但是它在这篇文章中多次出现,那幺它很可能就反映了这篇文章的特性,正是我们所需要的关键词

 

在词频的基础上,要对每个词分配一个“重要性”。最常见的词(“的”、“是”)给予最小的权重,较常见的词(“中国”)给予较小的权重,较少见的词(“蜜蜂”、“养殖”)给予较大的权重。这个权重叫做“逆文档频率”(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比[3]。

 

词频(TF) = $\frac{某个词在文章中的出现次数}{文章的总词数}\ $

 

逆文档频率(IDF) = log($\frac{语料库的文档总数}{包含该词的文档数+1}\ )$

 

TF-IDF = 词频(TF)×逆文档频率(IDF)

 

3.词组向量化

 

(1)词向量

 

我们在自然语言处理相关任务中的第一步往往就是将词转换为词向量,最常见的词表示法有One-Hot Representation和Distributed Representation。One-Hot Representation是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个1,其他全为 0,将词库中的每一个词的位置编号,1的位置就对应该词在词典中的位置。但是这种方法没有办法判断词与词之间的相似度,哪怕是两个意思相近的词也无法从词向量中找出关联关系,另外这种词表示法在深度学习中使用,容易引发维数灾难。

 

另外一种词表示法是Distributed Representation,它是通过训练将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。具体的词向量维度大小由训练的参数来指定。我们使用的就是这种词表示法。 (2)模型

 

Word2vec是2013年Google开发的一款用来将词语转化为向量的开源工具, 外界一般认为这是一款深度学习(DeepLearning)的模型,简单来讲就是通过训练,把对文本内容的处理简化为用实数值表征的K 维向量空间中的向量运算,后续可以使用文本的向量进行相似度计算寻找相似文本,或者进行其它比如分类回归等处理[4]。

 

 

图8.word2vec

 

word2vec使用了CBOW与Skip-Gram来训练模型与得到词向量,用霍夫曼树作为隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。而内部节点则起到隐藏层神经元的作用,如下图9所示。

 

 

图9. 霍夫曼树

 

三、系统效果

 

我们举一个例子来展示基于深度学习的新闻驱动股票自动选取系统是如何工作的。

 

2015年8月12日深夜,天津滨海新区一码头仓库发生剧烈爆炸,附近居民多人死伤。几个小时后,13日凌晨,该爆炸事件新闻已登上各新闻网站头条。下图为新京报网站当夜新闻稿部分截图。

 

 

图10.新闻截图

 

我们设定网络爬虫抓取系统每日不停扫描主要新闻网站。上述新闻被发布时,其文字内容被迅速下载至我司本地服务器,保存为news.txt文件。分词系统自动将news.txt文件中的句子分解为词,进行词频统计,逆文档词频处理,得到新闻的关键词列表。上述新闻关键词列表如下:

 

 

图11.新闻分词结果

 

同样地,我们利用抓取系统从资讯网站获取各支股票过去一段时间的研报,公告,新闻。并对获取到的这些文本信息进行分词统计,得到各股票近期关键字。下图以天广消防(002509),东方明珠(600637)的关键词统计结果为例:

 

 

图12.股票分词结果

 

通过计算新闻与股票的关键词之间的语义相似度,进而得到新闻与股票的相关性。以下是新闻与部分股票相关性计算结果:

 

 

图13.相似度计算结果

 

在这个例子里,我们看到天广消防与红宝丽与天津港爆炸新闻有明显的相关性,而其他股票没有表现出相关性。

 

而事实上,这两支股票价格的后续走势也一定程度上体现了新闻对股价的影响,如下图14所示。

 

 

图14.股价涨幅

 

四、系统页面展示

 

系统页面总体展示如下:

 

 

图15.总体页面展示

 

(一)实时新闻匹配个股

 

前端实时展示最新新闻,并匹配出最相似的几只个股以及对应的新闻个股之间的相似度,同时实时显示这些个股的当前行情,如图16所示。

 

 

图16.实时新闻匹配个股

 

(二)历史新闻

 

根据实时新闻,匹配出与之相似度最高的几条历史新闻。后面的回测模块也是基于历史新闻的发生时间进行的,除了默认的基于五条历史新闻日期的回测之外,通过勾选可以选择特定的历史新闻进行回测,如下图17所示。

 

 

图17.相似历史新闻

 

(三)历史行情回测

 

将实时新闻匹配到的个股基于实时新闻匹配到的历史新闻的日期进行回测(默认为5个日期的平均值)

 

 

图18.历史回测

 

(四)成交量计算

 

如果实时出现的新闻对市场产生冲击,则于该新闻相关的股票的成交量会成为一个重要的评价量价关系的因素。因此本系统计算l相关个股的资金面情况,主要包括开盘涨跌幅,成交量变化等,如下图所示。

 

成交量当前涨幅(%)指当前涨幅为当前时间(分钟)的成交量与上一工作日同时间成交量的比值,成交量累积涨幅(%)指今日开盘至当前时间(分钟)成交量增长与上一工作日同时段成交量增长的比值

 

 

图19.成交量计算

 

五、总结

 

本系统使用自然语言处理技术与深度学习技术,对新闻语义进行分析,并匹配出新闻的相关股票信息与相似历史新闻。在此基础上,针对投资者对历史事件发生时的股价走势这一功能的需求,对历史新闻也做了股票匹配处理,并对这几只股票的历史新闻发生时间段的涨幅进行了计算。

 

实时新闻匹配的股票信息包括股票最新行情,成交量当前涨幅以及成交量累积涨幅,具体计算方法成交量计算部分有详细说明。

 

本系统每两分钟刷新一次新闻以及匹配到的信息,可以快速准确的将当前热点事件以及事件冲击力度历史情况等分析信息提供给客户,为他们的投资决策提供参考节省时间,有力有效的把握住实时热点以及投资机会。

 

六、参考文献

 

[1]李学勇等,网络蜘蛛搜索策略比较研究[A],计算机工程与应用,2004(04):P131.

 

[2]邓知龙,基于感知器算法的高效中文分词与词性标注系统设计与实现[D],哈尔滨工业大学,2013

 

[3]Collobert R, Weston J, Bottou L, et al. Natural language processing (almost) from scratch[J]. Journal of Machine Learning Research, 2011, 12(Aug): 2493-2537.

 

[4]Lample G, Ballesteros M, Subramanian S, et al. Neural Architectures for Named Entity Recognition[J]. Proceedings of NAACL-HLT. 2016: 260-270.

 

[5]Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.

 

[6]Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and t heir compositionality[C]. Advances in Neural Information Processing Systems. 2013: 3111-3119.

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注