内容简介:NLP (Natural Language Processing)是人工智能(AI)的一个子领域,它致力于使用计算机理解人类语言中的句子或词语。NLP 以降低用户工作量并满足使用自然语言进行人机交互的愿望为目的。因为用户可能不熟悉机器语言,所以NLP 就能帮助这样的用户使用自然语言和机器交流。NLP在金融领域目前已经有广泛的使用场景,比如:自动文摘--通过NLP技术对金融领域的新闻、研究报告、上市公司的公告进行分析,生成自动文摘和机器自动写作;
1 背景介绍
1.1 NLP介绍
NLP (Natural Language Processing)是人工智能(AI)的一个子领域,它致力于使用计算机理解人类语言中的句子或词语。NLP 以降低用户工作量并满足使用自然语言进行人机交互的愿望为目的。因为用户可能不熟悉机器语言,所以NLP 就能帮助这样的用户使用自然语言和机器交流。
NLP在金融领域目前已经有广泛的使用场景,比如:
自动文摘--通过NLP技术对金融领域的新闻、研究报告、上市公司的公告进行分析,生成自动文摘和机器自动写作;
情感分析--对新闻、评论等文本中的主观性信息进行分析,来挖掘其态度和情绪,实现情感倾向性分析和观点挖掘;
事件分析--基于热点事件,然后结合行业产业链、知识图谱和推理决策系统的推理体系,针对个股和行业,生成研究报告和及时报告;
热点挖掘--基于最新的新闻资讯,聚类出当前的热点资讯,提取摘要;
智能客服--通过NLP的意图识别,问答相似度分析,语义理解等,可以用机器代替人工客服.
1.2 意图识别
意图识别是通过分类的办法将句子或者我们常说的query分到相应的意图种类,这在搜索引擎以及智能问答中都起很重要的作用。简单来说,就是当用户输入一句话或者一段文本时,意图识别可以准确识别出它是哪个领域的问题,然后分配给相应的领域机器人进行二次处理,这在问题分类很多的情况,可以明显提升问题匹配的准确度。
举个例子说明一下:假设目前我们的客服机器人后端接有投资建议(advice)、投资教育(edu)、FAQ领域机器人(faq),它们对应的语料分别为:
那么当用户提问后,通过意图识别模块后,就可以将当前问题交由相应后续的领域机器人处理,比如投资建议类会进一步进行语义分析,然后调用API接口返回结果,投资教育类的会调用百科类的API返回结果,FAQ类的问题可能直接转到人工客服的接口。
目前常用的意图识别的基本方法,有如下几种:
Ø 基于词典以及模版的规则方法
不同的意图会有的不同的领域词典,比如书名、歌曲名、商品名等等。我们根据用户的意图和词典的匹配程度或者重合程度来进行判断,最简单的一个规则是将该query判别给与词典重合程度高的domain。这个工作的重点便是领域词典必须得做地足够好。
Ø 基于机器学习模型来对用户的意图进行判别
这种主要是通过机器学习及深度学习的方式,对已标注好的领域的语料进行训练学习,得到一个意图识别的模型。利用该模型,当再输入一个测试集时,它能快速地预测出该语料对应的分类,并提供对应的置信度。使用这种方式的一个好处就是,在语料不断丰富后,模型的准确度会不断提升。 本文主要介绍的就是采用这种方式进行意图识别。
1.3 fastText介绍
fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在学术上并没有太大创新。但是它的优点也非常明显,在文本分类任务中,fastText(浅层网络)往往能取得和深度网络相媲美的精度,却在训练时间上比深度网络快许多数量级。在标准的多核CPU上, 能够在10分钟之内训练10亿词级别语料库的词向量,在1分钟之内分类有着30万多类别的50多万句子。
fastText模型架构如下图所示。fastText模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。fastText在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。
fastText模型架构和Word2Vec中的CBOW模型很类似。不同之处在于,fastText预测标签,而CBOW模型预测中间词。fastText使用到两个tricks,一是通过构建一个霍夫曼编码树来加速softmax layer的计算,从而降低算法的时间复杂度,所以它在分类特别多的时候效果会更加明显。二是通过加入N-gram features进行补充,然后用hashing来减少N-gram的存储。
2 意图识别框架
2.1 整体说明
为了更好地把fastText应用到意图识别中,所以对官方的fastText进行了工程化的封装,提供意图识别的一体化训练与预测的工具,可支持后续新项目的快速上线使用,每个项目只需要关注本项目的问答语料以及参数的调整与优化,关于模型的上线发布与训练,由该框架统一处理。
目前该框架目前主要支持以下特性:
Ø 快速新增以及调整语料的分类,不需要修改代码
Ø 模型参数调优,可自由调整,不需要修改代码
Ø 可以输出不同类别的分类性能,进行针对性调优
Ø 依赖包集成化,解决包依赖问题,可以快速客户现场部署而不需要提供原代码
Ø 提供验证集入口,可以快速评估模型的性能
2.2 架构原理介绍
项目中的配置文件,训练语料以及验证语料都是在整个意图识别的框架之外,通过适配层进行加载进入框架中。这样的好处就是进行了资源的隔离,同时增加了配置的灵活性,不同的项目只要准备好本项目相关的训练资源就可以快速启动。
开启模型训练时,会进行语料的处理,包含了语料的合并、语料去重、转成fastText格式、拼写纠错与统一、分词、划分数据集等操作,并将生成的清洗后的语料存在本地磁盘,供验证预处理结果是否准确。由于每次训练前都会经过预处理的操作,所以调整了训练语料都会及时处理,提高实时性。
模型训练过程中,会加载预置的模型参数,以及清洗后的语料,生成模型,并持久化到磁盘中,使用其在测试集上得出相应的f1值作为模型文件名。持久化后的模型可以直接加载,减少训练过程,提高效率。
为了更好评估模型的性能,可以直接准备验证集(未参与过训练的语料),然后调过模型的验证接口得到预测的结果集,如果不满足要求,可以重新调整参数与语料进一步优化模型。
2.3 项目演示
这里以某智能客服的案例进行演示,说明如何使用该框架:
2.3.1 语料的准备
每一个分类存储一个csv文件,文件名为该分类的英文名,这些原始语料不需要进行额外的预处理,框架启动训练时,会自动完成语料的合并,去重,以及分词等操作,并生成一个完整的训练语料。同时支持新的分类语料直接加入,可以同步增加新分类的意图识别,无须修改代码,提高框架可扩展性。
以下是advice分类样本的原始语料的示例说明:
以下是将advice,faq,edu三个类别的语料进行预处理,合并后的训练语料的示例说明:
2.3.2 配置文件说明
其中fasttext_ fasttext_train_model_conf_conf包含了fastText模型的一些模型参数配置。
主要参数说明及建议:
lr:学习率,调小时,训练时间会变长,效果会有提升
dim:词向量的维度
wordNgrams:n-gram语言模型(几元语法)
bucket:桶数量,如果词数不是很多,可以把bucket设置的小一点,否则预留会预留太多bucket使模型太大
epoch:训练次数,根据需要调整
loss:损失函数,推荐选用hs(hierarchical softmax)要比ns(negative sampling)训练速度要快很多倍,并且准确率也更高
thread:并行的线程数,根据机器配置,可以调大该数值
2.3.3 模型训练
训练前项目路径:
其中fasttext_train即为本文提及的意图识别的框架,当把语料与配置文件按约定的路径放好后,执行./fasttext_train即可开启训练;调用./fasttext_pred即可执行验证集的预测。
执行训练后的项目路径如下:
其中cleaned_dataset存放预处理后的语料,同时包含了训练集和测试集。由于该文件夹每次训练都会重新生成新的,可以保证语料的同步更新。
其中models存放着每次训练生成的模型文件,以供下次可以直接加载,不需要重新训练生成。
2.3.4 模型评估
本次一共采用了124450条样本,然后按1:3的比例划分测试集与训练集,因为采用的是分层采样,基本上每个分类也满足该比例,具体分布如下图所示:
在训练集上跑出模型在测试集上的效果如下:
另外提供了317条的验证集,该模型在验证集上的效果,如下的混淆矩阵:
除了在advice标签上的召回率和f1值相对低了一些,其它的标签测试效果都比较理想,基本都在95%以上,能满足初步预期的结果。
3 经验总结
3.1 关于语料标注
当前意图识别工作的难点有很多,最大的难点在于标注数据的获取。可采用的方式:
Ø 专门的数据标注团队对数据进行标注
Ø 通过对语料进行泛化,手动造出更多相似的语料
Ø 通过半监督的方式自动生成标注数据,然后再人工审核
3.2 关于模型调优
模型的调优主要可以从以下几个方面入手:
Ø 如果清洗完的训练语料有分词不准的情况,需要增加相应的词林
Ø 对于分不准的类别,重着观察这一块的语料是否在训练语料中被分错了类别
Ø 模型的训练参数的调整
Ø 考虑增加其它模型进行模型的融合,保障最后的意图识别的性能
4 参考文献
1) 《超快的fastText》 http://www.algorithmdog.com/fast-fasttext
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 基于语义意图的车辆行为预测
- 根据意图而不是架构构建程序 - Janos Pasztor
- Google 意图让 AMP 网页快速载入技术成为标准
- Gentoo Linux 的 GitHub 仓库被入侵,意图删除所有文件
- Databricks打造“Delta Lake”意图取代凌乱的传统数据湖
- NLP聊天机器人so easy?要是多轮、闲聊 、意图识别呐?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。