写点什么

腾讯云自然语言处理的技术架构与应用

  • 2019-10-31
  • 本文字数:5961 字

    阅读完需:约 20 分钟

腾讯云自然语言处理的技术架构与应用

9 月 7 日,云+社区(腾讯云官方开发者社区)主办的技术沙龙——AI 技术原理与实践,在上海成功举行。现场的 5 位腾讯云技术专家,在现场与开发者们面对面交流,并深度讲解了腾讯云云智天枢人工智能服务平台、OCR、NLP、机器学习、智能对话平台等多个技术领域背后架构设计理念与实践方法。NLP 自然语言处理技术想必大家都不陌生,NLP 可以说是 AI 领域内落地实践最广的技术之一。本文内容整理自腾讯云高级研究员许泽柯老师,为大家带来“腾讯云自然语言处理的技术架构与应用”的分享。


今天分享内容大概有四部分:


第一,AI 语义产品矩阵。主要会介绍 AI 语义团队的能力和产品。


第二,从算法原理层面给大家介绍知文 NLP 基础平台,这是我们团队前两个月刚上线的一款产品。


第三,结合 3 个经典的客户案例给大家介绍一下基于知文 NLP 平台大家可以怎么在自己的场景中落地。


第四,Auto NLP 平台。


知文 NLP 更多是通用领域的 SaaS 平台,提供的是通用能力,但对特定领域的用户,像金融领域的用户有自己的语料、模型服务定制的需求,知文 NLP 是没有办法满足需求的,所以我们推出的知文 Auto NLP,可以完成从数据标注、特征选择、模型选择、模型部署上线的所有流程自动化。



什么是自然语言处理?


大家需要先了解两个概念:


(1)自然语言,我理解自然语言是人类之间沟通时所产生的语言。


(2)编程语言,人类为了让计算机执行我们想让它执行的指令而衍生出来的语言。


自然语言处理是在自然语言以及编程语言之间建立沟通桥梁,比如说可以让计算机理解我所说的话,或者让计算机把内部正在运行的数据转化成人类能够理解的自然语言。


自然语言有几方面的内容:认知、理解、生成。认知和理解就是从自然语言转换成编程语言的过程,生成也是目前 NLP 领域比较难的话题,主要是从编程语言转化成自然语言的过程。

AI 语义产品矩阵


在自然语言处理领域 AI 语义团队有多年的能力积累,从团队的配备来看,腾讯云 AI 语义团队作为腾讯内部 NLP 技术对外提供服务的统一出口,背后依托的是腾讯 AI 平台、腾讯 AI Lab、腾讯云知文、腾讯云新闻等团队,在业务中沉淀下来的 NLP 技术会通过腾讯 AI 语义团队对外进行输出。

1.腾讯云 AI 语义团队目前具备几大优点:

(1)海量语料积累,所有的语料都会在千亿级别以上。


(2)日均 10 亿以上的算法调用,线上所有的产品都是高可用、高性能、可扩展。


(3)超大规模算法引擎中心,从基础的 NLP 能力到高阶的问答对话能力都会有所覆盖,当然也会根据前沿的研究和市场的需求不断扩充算法引擎中心。


(4)算法能力覆盖了非常多的内容生态场景,为我们积累了一定的应用落地经验。



上面描述的能力具体到开发者能够触达的产品,大家可以看一下我们的产品矩阵,底层是通用的能力,比如说字词级别、语句级别、篇章级别。再往上是 PaaS 平台,主要是内部降本增效的工具,后续平台也会对外进行开放。

2.AI 语义团队目前对外开放的有三款 SaaS 级产品:

(1)Bot Service 主要是提供原子化的问答对话能力;


(2)知文 NLP 平台,主要给大家提供比较底层的 NLP 原子化能力;


(3)知识图谱,目前是基于图计算、图数据库给大家提供通用领域的图谱查询功能。这些产品下沉到不同行业会形成不一样的解决方案,目前有智能客服、企业图谱等解决方案。

知文 NLP 基础平台


大家可以看一下知文 NLP 到底是什么东西,具体可以分为两个板块:基础版、高级版。基础版主要提供词法分析、句法分析、篇章分析以及向量技术。高级版目前提供文本信息抽取和文本审核。


首先是大家都耳熟能详的分词器,这也是腾讯内部主流分词器 QQSeg 首次上云对外提供服务,QQSeg 是腾讯 AI 平台和腾讯知文联合推出的分词器,目前可以支持不同的分词粒度,这也是很多开发者比较关心的功能。目前内部使用人数可以达到 900 多人,累计的调用次数有 4000 多亿,也在 100 多个场景里进行应用,处理文本的数量可以达到十几万 GB 的级别。QQSeg 除了提供简单的智能分词功能,还会提供词性标注和实体识别。



大家看一下左下角的案例,比如说:“王小强喜欢悉尼的牛排和中餐”词性标注会为每个词标上动词、名词等,最后实体识别会将其中的实体词拎出来,比如说王小强属于人名,悉尼属于地名。虽然 QQSeg 效果在各个业务场景里受到了大家的认可,但其背后的算法并不复杂。


我们采用的是简单模型+大规模词典的解决方案解决分词的问题,大家可以理解分词器是非常原始化、底层的能力,在搜索场景更多的是被集成,所以工业界对它的性能要求非常高,这里不太适合用复杂模型来做。


我们采用的是简单模型的思路,大概可以分为三步骤:


(1)构图;


(2)最短路径计算;


(3)语义规则。



大家可以看一下案例“他说的确实在理”,会通过切分构成有向无环图,可以看到 0 到 7 有不同的路径,比如说“他说的 确实 在理”或者“他说 的确 实在 理”等不同的路径。接着会基于动态规划的思路算出最短的路径。像上面图计算出来的最短路径应该是“他说的 确实 在理”。


当我们给它做了分词后可能会根据语义的完整性、业务的规则对它进行合并或者进一步的拆分,保证分词出来的结果是满足客户需求的。



前面讲到的主要是简单模型的思路,其实简单模型和其他业界主流方法做对比的话,大家会发现效果并没有特别好。我们怎么保证效果呢?方案里并不是只用简单模型,也会用复杂模型,但复杂模型并不会在线上用,更多是拿复杂模型更新核心词典,由此保证核心词典的新鲜度,目前核心词典可以覆盖 300 万。简单模型+大规模词典的思路可以保证效果是比较好的,同时还能兼顾性能问题,这样的分词器比较适合于生产环境。


不像分词对性能要求比较高一点,命名实体识别更多对切分精度要求高,这里采用的是目前业界比较主流的深度网络模型。如左边图网络模型大概拆分成三个层次的结构。


第一层是 Embedding Layer,会把每个字通过用固定维度的向量表示,整句话就变成了矩阵向量,如果有了解过计算视觉的话会发现这样的向量矩阵有点类似于图像里的像素矩阵,自然而然想到的方法是用 Multi-Cnn 来解决,Multi-Cnn 是图像领域比较常见的特征提取思路,可以获取图像里局部感受野信息,从而获得图像的高层信息。但用在 NLP 主要是为了获取上下文的信息。第三层是 Softmax 和 CRF Layer 的网络结构,像“北京”是地名的实体,在标注的时候会有 LOC-B、LOC-E 标注的结果。所以目前常用的是通过 CRF 网络结构解决标注问题,但实际上标注任务也是分类任务,用 Softmax 解决问题也没有太大问题。


为了提供整体的模型效果,我们会引入字 N-gram 特征,主要是解决单字歧义性的问题。在 Multi-Cnn 会引入 MLM 预训练语言模型。Bert 主要是基于多层的 transformer encoder 做 pretrain,但我们是通过对多层的 cnn 做 pretrain,在整体的训练过程中我们也引入了 Pu-Learning 补充训练集,适用于少量的正样本以及大量没有标注的样本。


在模型上线过程中做了工程优化,前面讲到 Multi-Cnn 本质上是为了获取上下文的信息,在 Embedding Layer 中字 N-gram 也是为了获取上下文信息,起到的作用等价的。但在上线过程中卷积操作比较耗时,所以需要把参数压缩到字 n-gram 来做。 其次也做了矩阵优化的操作。



下面给大家介绍一下文本纠错的能力,根据调研我们的文本纠错应该算是业界首款可以支持长文本纠错,其他的厂商更多会把纠错的长度限制在 500 个字节(400、500 字),而我们的可以支持 2000 多字,当然想支持更多的字也可以,只是目前公有云上为了整体性能的保障,所以会限制在 2000 字,后面也会讲一下为什么我们能支持这么长的文本。另外,目前文本纠错的方法在公开数据集上也达到了业界领先的效果。


传统的方法会把纠错分为两段式的纠错,首先会有检错,比如说“不同凡想的成就”,会定位你的错误字在哪里,“想”就是错别字,纠错阶段要把“想”纠成“响”。


首先在检错过程中会先做分词,分词之后会有一个先验,“错别字一般只会出现在单字上”,既然分词能分成一个词,那里面不应该有错别字,假设有错别字那就不是一个词,所以可以简单理解为单字更容易出错。出错的单字会用序列标注的方法或者 N-Gram 的简单方法算出来哪个错别字的概率更高一点。在纠错阶段会用 N-gram 和困惑集来解决。比如说“响”有这些困惑集,会把困惑集的字依次代入原字里算出 N-Gram 的概率。


因为是两段式的纠错,所以会非常依赖于中文分词,前面已经看到把它分成一个词,所以认为里面没有错别字,万一分词效果并没有百分百好,那就会有误检问题。除此之外,检错阶段误检出正确的字,纠错阶段有可能会把正确的字也给纠错了,两段式的方法会放大误纠率。


而我们的方法是端到端的文本纠错,这也是我们团队发表在 ACL 的文章。



网络是非常经典的 seq2seq 结构,主要讲的是两个问题,首先是端到端的,不再像两段式那样子先检错再纠错,如果大家了解 NLP 的话会知道 attention 是现在基本上都会用的,主要为了获取长文本的依赖关系。重点介绍一下 Copy Mechnism,不同于翻译,输出和输入差别非常大,纠错不一样,纠错的输入输出差别不大,怎么保证正确的字不要被误纠到?就是通过 Copy Mechnism。Copy Mechnism 的好处是判断哪些字需要纠正,哪些字不需要纠正,通过这种端到端的结果,方法可以在公开数据集上达到业界领先的方法,具体的数据描述大家可以参考一下这篇论文。



我们再来介绍一下文本分类的能力,文本分类主要是提供两个领域的分类模型:


(1)通用领域;


(2)新闻领域。


新闻领域分类模型可以说是国内最大最全的文本分类模型,大概分有 37 个一级类目以及 285 个二级类目,这也是目前腾讯新闻现网正在跑的模型。


了解的同学可能会发现这是非常经典的 TextCNN 的网络结构,因为通用领域分类只有十几类,用这样的网络结构在语料通过训练之下已经可以达到比较好的准确率了。


首先这个网络大概有几层:


(1)Embedding,把字转成向量。


(2)卷积层,获取上下文依赖信息。


(3)Pooling,降低模型复杂度,提升模型泛化能力。


重点介绍一下腾讯新闻的分类,大家可以看到腾讯新闻有 300 多个类,如果单单只是用 TextCNN 来做的话,对特征的描述、刻划力度不足以区分这么多类别,所以会用不同层次的网络结构来做。通过不同的网络结构做 bagging 操作可以取得 80%90%的效果。浅层网络和深层网络的结合主要是为了充分利用高层的语义语法信息。



而情感分析本质上也是属于分类问题,像这句话会有正面或者负面的 label,我们的做法是用最近比较火的 Bert 模型来解决,这目前我们的解决方言,首先是训练语料区别,Google 印象中有 2G 语料训练,而我们是 200G 的新闻语料训练,所以能够获取到的语料信息或者更深层次的内容信息会更加丰富。Google 原生的 model 是支持字级层面,但中文不一样,中文又有字又有词,获得更多的词汇信息,作用会体现在训练时,可能会更快更容易地获得你想要的信息。



有了 model 以后会做情感分析模型,但会用不同领域的情感分析的数据,比如说内部产品评论数据、外部网页数据。大家都会听说 Bert 的性能不足以到线上提供服务的说法,但其实前阵子 nvidia 提出了 Faster Transformer,目前我们也在做这样的尝试。



其次介绍一下向量服务,如果大家是开发者、新手的话了解 NLP 首先会接触到的是分层,其次是向量,在 Word2Vec 被提出来之前大家表示一个词更多会用 onehot,但会有问题非常不利于训练的优化,会带来学习成本。其实是字符级别的向量化,很难获得单个词、单个句内部的语义信息。但 Word2Vec 会把你的词嵌入到连续的向量空间,从而获取信息。


我们和 AI Lab 打造的是基于更加丰富的语料库,比如说腾讯内部新闻语料、天天快报语料、外部爬虫数据等。目前训练得到的词库大概可以覆盖 800 多万中文词,了解过的同学们会知道 800 多万的词库已经对外开源了,我们会持续做迭代,保证词库的新鲜度以及覆盖度。


左边是一个非常经典的 Word2Vec 的概念,提出 Directional 会保证语义准确性,大家有兴趣的话可以看一下发表在 2018 年 NAACL 的论文。



最后看一下文本审核,目前文本审核会提供六大内容的检测:包括政治、色情、低俗、恐暴、迷信、广告。


腾讯多年来积累的敏感词词库有很大的覆盖性、服务框架比较稳定。大家可以看一下右边的 case,“色情片”等特殊符号都无处可逃。



最后介绍一下服务框架,用户层后面是 API3.0 接入层,为了保证所有外提供给客户体验的规范性,降低用户使用的成本。其次是负载均衡和服务路由。重点介绍一下算法服务层,每个算法都是以微服务的形式存在的,比如说要做分类,可以根据你的诉求或者配置路由到你想要的服务。


目前算法引擎是比较符合大家需求的产品。所有使用的微服务都是以 Docker 部署的,背后是腾讯云的资源,大家不用担心服务稳定性的问题。


讲完了产品,如果大家想体验的话很简单,进入网址,首先输入密钥,再选择想要体验的接口,输入接口的相关参数,就可以通过发请求得到想的结果。比如说输入刘德华会返回关键词,像刘天王等。

3 个经典的客户案例场景中落地

下面简单说一下目前三个比较经典的案例。



第一个是全文检索系统,其实是索引和检索两个步骤是,比如说你做 Query 搜索的时候可能会涉及到 Query 扩展,会有敏感词屏蔽、自动纠错。检索的话可能涉及到分词和用户索引的操作。



第二个是银行的投诉分类,主要是以电话语音转文本,再做结构化抽取和分类。



第三个是智能核保案例,主要会做 OCR 提出文本信息,可能会纠错、结构化抽取。


简单提一下 Auto NLP,Auto NLP 的概念来自于 AutoML,我理解其实就是为了方便做机器学习、数据挖掘可以从特征选择、数据标注、模型训练、模型上线过程做自动化。Auto NLP 针对的就是 NLP 领域,目前 NLP 很多任务都是以 Bert 为主导。只要你导入数据,选择你想要模板就可以一键部署,通过简单的测试体验效果。

Auto NLP 平台


这是 Auto NLP 的元素架构图,底层是 IaaS,会提供 GPU 到 CPU 的资源供开发者用。往上是 Data,有 Data Market,不仅仅会有客户自己的语料,也会内嵌腾讯的语料。Data Factory,会提供可视化数据以及数据预处理。


往这边是 Framework,会内嵌一些大家比较通用的 Bert 模型,NLP Task Pipeline 可以让你自动搜索最优参数。最终的服务上线会提供 Prdict Serving,Auto NLP 是以 Docker 的形式部署在开发上,所以容灾、扩容、服务稳定性都不是问题。


刚刚讲了 NLP 的产品,目前产品是属于内测阶段,完全免费,如果大家有需求想体验的话都可以扫二维码,也可以联系客服进一步进行了解,有定制化需求的话欢迎随时交流。


作者介绍:


许泽柯,目前主要在腾讯大数据人工智能产品中心负责自然语言处理的公有云产品架构以及标准化产品的交付,在此之前主要负责手游内容分发的个性化推荐,在自然语言处理、推荐系统、数据挖掘等方面有比较多的项目经历。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/txjlDMpwtV01vlX0xBvGpQ


2019-10-31 11:503078

评论

发布
暂无评论
发现更多内容

【Java每日面试题】大厂是如何设计秒杀系统的?

Java 程序员 后端

公有云是什么意思?其存在的意义是什么?

行云管家

云计算 公有云 私有云 混合云

ZK(ZooKeeper)分布式锁实现

Java 程序员 后端

Zookeeper(从7个方面来了解Zookeeper基础概念)

Java 程序员 后端

WPF学习——依赖项属性(2)(1)

Java 程序员 后端

“抽象类”到底抽不抽象?实例对比一看便知!

Java 程序员 后端

《菜菜的机器学习sklearn课堂》降维算法PCA和SVD

Java 程序员 后端

「并发原理专题」AQS的技术体系之CLH、MCS锁的原理及实现

Java 程序员 后端

【Java 集合框架】Stack、Queue 和 Deque 的使用

Java 程序员 后端

【Java从0到架构师】SQL 多表查询

Java 程序员 后端

【Java知识点详解 7】装箱和拆箱

Java 程序员 后端

ZooKeeper分布式配置——看这篇就够了

Java 程序员 后端

全面通透深入剖析工厂方法模式

Tom弹架构

Java 架构 设计模式

架构实战营-模块三作业

随风King

「架构实战营」

《代码重构》之方法到底多长算“长”

Java 程序员 后端

《吃透MQ系列》核心基础全在这里了,一文啃透!

Java 程序员 后端

【C 语言小游戏】手打贪吃蛇1

Java 程序员 后端

【Java核心面试宝典】Day3、图解HashMap高频面试及底层实现架构!

Java 程序员 后端

营口市广东商会成立

江湖老铁

WPF学习——依赖项属性(2)

Java 程序员 后端

《Spring实战》读书笔记-第4章 面向切面的Spring

Java 程序员 后端

《JVM系列》 第六章 -- 对象的实例化与内存布局

Java 程序员 后端

《Spring实战》读书笔记-第4章 面向切面的Spring(1)

Java 程序员 后端

《JVM系列》 第六章 -- 对象的实例化与内存布局(1)

Java 程序员 后端

《重学Java高并发》Disruptor使用实战

Java 程序员 后端

【Java 多线程 1】CountDownLatch

Java 程序员 后端

【Java从0到架构师】Maven

Java 程序员 后端

过等保选择云堡垒机还是硬件堡垒机比较好?

行云管家

网络安全 云服务 堡垒机 等级保护

[译] 微服务的设计模式

Java 程序员 后端

【Java 基础语法】万字解析 Java 的多态、抽象类和接口

Java 程序员 后端

YGC问题排查,又让我涨姿势了!

Java 程序员 后端

腾讯云自然语言处理的技术架构与应用_服务革新_许泽柯_InfoQ精选文章