快手、孩子王、华为等专家分享大模型在电商运营、母婴消费、翻译等行业场景的实际应用 了解详情
写点什么

百度语义计算技术及其应用

  • 2019-09-18
  • 本文字数:4212 字

    阅读完需:约 14 分钟

百度语义计算技术及其应用

语义表示


计算机理解语言是一个具有很大挑战的问题。人类在理解语言的过程中,除了语言符号本身的识别,还包含符号背后的语义和知识。举个例子,当人看到“计算机”这个符号时,脑子里能迅速浮现出计算机的画面以及和计算机相关的知识和概念,但是这对于计算机就比较困难。所以如何让计算机能够表示语言是研究的重点,让其既能够蕴含语义信息又可以计算。


当前主要有两类方法,一是基于形式化规则的方法,如通过构建语义关系网络来描述语义的信息;二是基于统计的方法,包括主题模型、Word Embedding 等技术。



2007 年百度便开始语义表示研究,最开始的思路是利用搜索引擎来完成。通过搜索引擎把要表示的句子或者词语检索出来,再根据检索的结果通过 Term 的分析以及网页的分析,把相关的词、信息抽取出来,做成语言符号的表示。但是这个表示实际上停留在原始词汇空间,表示的空间大小依然是词表的维度,只是相对于 One-Hot 的表示来说更精细,这个方法是基于 1954 年 Harris 提出来的“上下文相似的词,其语义也相似”的假设。



此后,百度又研究了 Topic Model 的语义表示技术,这种方法的核心思路是把文档词汇空间降维,将文档映射到浅层主题的分布上,而这种主题空间要比词的分布空间更小一些。通过降维的方法,可以得到每个词到主题的映射,通过这种主题的方法做语义的表示。


当时百度主要解决的问题是怎样做这种新文档的表示,难点是超大规模语料训练、Online EM、MPI 并行化。此外,百度还将自研的主题模型以及一些主流的主题模型整理为工业应用工具,对外开源了百度 NLP 主题模型工具包 FAMILIA。



深度学习技术兴起,基于 Word Embedding 的表示占了主流,此类技术在各种 NLP 任务中也表现出色。从 NNLM 到现在 BERT 的技术,取得了很多进展。2013 年的 Word2vec 成为 NLP 标配性的初始化向量,2018 年有了上下文相关的词向量 ELMo 等。



从 2013 年到 2016 年,百度也大力投入到 Word Embedding 的研究,主要研究工作是在工业界如何用大规模分布式从海量数据中计算词向量。比如,怎么才能高效训练规模为 1T 的语料?如何构建大规模分布式文本计算?此外,算法上我们也有一些研究,比如,如何在一百万超大规模的词表里完成 Softmax 分类?我们通过一些策略和技术,做成启发式 Hierarchical Softmax 的方法,从而有效地提升分类的效率。2016 年,百度把训练的 1T 的网页数据和 100 万词表规模的词向量对业界进行了开放。



BERT 的核心思路还是大力出奇迹,它利用了大规模的无监督数据,同时借助 Transformer 这种高性能的 Encoder 的能力,在 MASK 建模任务上做了一些优化,导致这个效果能够在各个任务上显著提升。


百度实际在 2017 年进行了这方面的探索,当时是研究基于对话的口语理解问题,这个问题的核心是做意图的分类和槽位的标注。难点在于口语理解的问题标注语料非常少。当时想能不能利用海量的搜索语料做 Pre-Training,把这个 Model 作为初始化模型用到下游的 SLU 任务里。


我们采用 20 亿搜索的 Query,通过 LSTM 模型做单向 Language Model 的预训。我们发现在 SLU 任务上,在各个垂类上样本数的增加非常显著,从 10 个样本到 2000 个样本。但遗憾的是,当时研究的是一个超小规模数据上效果,即 2000 的数据,在 2 万甚至是 20 万的数据上的表现并没有研究,同时在其他应用的通用性上的研究也不够充分。



BERT 提出后,我们发现一个问题,它学习的还是基础语言单元的 Language Model,并没有充分利用先验语言知识,这个问题在中文很明显,它的策略是 MASK 字,没有 MASK 知识或者是短语。在用 Transformer 预测每个字的时候,很容易根据词包含字的搭配信息预测出来。比如预测“雪”字,实际上不需要用 Global 的信息去预测,可以通过“冰”字预测。基于这个假设,我们做了一个简单的改进,把它做成一个 MASK 词和实体的方法,学习这个词或者实体在句子里面 Global 的信号。



基于上述思想我们发布了基于知识增强的语义表示 ERNIE(1.0)。



我们在中文上做了 ERNIE(1.0)实验,找了五个典型的中文公开数据集做对比。不管是词法分析 NER、推理、自动问答、情感分析、相似度计算,ERNIE(1.0)都能够显著提升效果。



英文上验证了推广性,实验表明 ERNIE(1.0)在 GLUE 和 SQuAd1.1 上提升也是非常明显的。为了验证假设,我们做了一些定性的分析,找了完形填空的数据集,并通过 ERNIE 和 BERT 去预测,效果如上图。



我们对比了 ERNIE、BERT、CoVe、GPT、ELMo 模型,结果如上图所示。ELMo 是早期做上下文相关表示模型的工作,但它没有用 Transformer,用的是 LSTM,通过单向语言模型学习。百度的 ERNIE 与 BERT、GPT 一样,都是做网络上的 Transformer,但是 ERNIE 在建模 Task 的时候做了一些改进,取得了很不错的效果。



在应用上,ERNIE 在百度发布的面向工业应用的中文 NLP 开源工具集进行了验证,包括 ERNIE 与 BERT 在词法分析、情感分类这些百度内部的任务上做了对比分析。同时也有一些产品已经落地,在广告相关性的计算、推荐广告的触发、新闻推荐上都有实际应用。目前模型已经开源:


http://github.com/PaddlePaddle/ERNIE


欢迎大家去下载。


7 月 31 日,百度艾尼 ( ERNIE ) 再升级,发布了持续学习语义理解框架 ERNIE 2.0,同时借助飞桨 ( PaddlePaddle ) 多机多卡高效训练优势发布了基于此框架的 ERNIE 2.0 预训练模型。该模型在共计 16 个中英文任务上超越了 BERT 和 XLNet,取得了 SOTA 效果。

语义匹配

1. 文本语义匹配及挑战



语义匹配在工业界具有非常大的技术价值,它是一个很基础的问题,很多产品、应用场景都会用到它。很多问题也可以抽象为语义匹配问题,比如,搜索解决的是 Query 和 Document 相关性的问题,推荐解决的是 User 和 Item 关联度、兴趣匹配度的问题,检索式问答解决的是问题与答案匹配度,以及检索对话 Query 和 Response 的匹配问题。由于语言比较复杂,匹配靠传统的方法是比较难的。



百度搜索在匹配相似度计算方面做了较多工作,包括挖掘同义词、词级别泛化、语义紧密度、对齐资源挖掘、共线关联计算等。



2. 神经网络语义匹配模型:SimNet


2013 年百度提出 SimNet 技术,用于解决语义匹配的问题。这个技术基于 DNN 框架,沿袭 Word Embedding 的输入,基于 End-to-End 的训练做表示和匹配,并结合 Pairwise 训练。当时,微软也提出了 DSSM,中科院、CMU 等研究机构也做了很多语义匹配研究工作。



这几年,百度整体上从语义匹配的框架上做了升级,抽象了三个层次,改进了基础算法,包括扩展针对不同场景的模型,比如字和语义的匹配模型;在不同的应用场景,针对问题网页和问题答案的匹配情况分别做了针对性地优化,集成到了匹配框架里。



匹配算法主要有两种范式,一种是基于表示的匹配,首先把自然语言表示成向量,然后再进行相似度计算,这方面也有一些改进,主要是做一些 Attention;另一种新匹配范式 Interaction-based Model,强调更细的匹配,即一个句子的表示不再是一个向量,而是原来的 Term,并把原来的位置信息保留,最后以 Attention 的方式表示,让匹配更加充分和精细。



关于 SimNet 技术前瞻性工作,2019 年百度在 IJCAI 上发表了一篇论文“RLTM:An Efficient Neural IR Framework for Long Documents”,其中长文本匹配有一个很大的挑战,就是让 Document 直接做表示,如果文本太长,很多信息会丢失,计算效率也非常低。但如果我们先做一个粗匹配,选择好相关的句子以后再做精细化的匹配,效果就比较不错。



3. SimNet 的应用



SimNet 技术在百度应用非常广泛,包括搜索、资讯推荐、广告、对话平台都在使用。



搜索是百度非常重要的产品,搜索有两个核心功能,下图的左侧上方是搜索的精准问答,通过问答技术把精准答案直接呈现出来;下方是自然排序,主要采用 LTR 框架和相关性、权威性、时效性等 Features。


SimNet 在百度搜索的发展可以分为三个时期。萌芽期,上线了 BOW Model,这是业界第一次在搜索引擎上线 DNN 模型;发展期,做了 CNN、RNN,并把知识融合进 RNN,在语义相关性计算中,除了标题很多其他文本域在相关性建模中也很重要,所以,我们还做多文本域融合匹配的 Model;拓展期,除了相关性,在权威性、点击模型和搜索问答上都有推广和使用。



在搜索中,SimNet 使用超大规模用户反馈数据训练。那么如何依靠海量数据来提升效果?频次如何选?我们发现模型应用效果并不是静态的,而是动态变化的,特别是搜索反馈的数据,随着时间的推移,网民在搜索的时候,Term 的分布、主题的分布会发生变化,所以数据的时效性影响还是非常大的。



除了模型上的融合,我们把 Bigram 知识也融入了进去。尽管 RNN 已经很厉害了,但加入知识、模型还是会有很大的提升。


4. 新模型:SimNet-QC-MM



另外,我们还做了 Query 和网页正文的建模,由于 Query 中每个词都有一定的用户意图,所以在模型建模时,会考虑 Query 中每个词被 Title 和正文覆盖的情况,并基于 Matching Matrix 匹配方法计算。此外,搜索架构也做了配合改进,搜索也上线了基于 GPU 和 CPU 的异构计算架构。



上图是一个案例,“芈姝出嫁途中遇到危险”,我们后来做了一些分析,发现“危险”和“投毒”有很强的语义关联,就把这个结果排了上去。


5. 语义模型压缩技术



在模型裁减压缩上,我们也做了很多工作,包括量化的压缩和哈希技术的压缩。整个语义的模型基本上已经从依靠一个 Embedding 32bits 来存,到现在达到 Embedding 一维仅需 4bits,节省线上 DNN 匹配模型 87.5%的内存消耗。这项技术,除了搜索的使用,移动端的使用也有非常大的价值。



SimNet 技术除了百度搜索,包括 Q&A,Query 和 Answer 的匹配等方面都有一些尝试。

未来重点工作

接下来我们会在通用语义表示方面进一步研究与突破,除了如何充分的利用先验知识、多语言表示,面向生成、匹配等任务的表示,面向医疗、法律等领域的表示,多模态表示等都是我们的一些重点方向。


RLTM 论文地址


https://arxiv.org/abs/1906.09404


至此,“2019 自然语言处理前沿论坛”语义计算主题《百度语义计算技术及其应用》的分享结束。


作者介绍


孙宇,百度 NLP 主任研发架构师、语义计算技术负责人。本文根据作者在“2019 自然语言处理前沿论坛”语义理解主题的特邀报告整理而成。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247493550&idx=2&sn=ae9f580f4aa700fea774eecea90aef3e&chksm=fbd755c2cca0dcd434585cc5c19b6f2a6e6c883ebdc352ac1a5a3113ff062b5a7ee54462fbf3&scene=27#wechat_redirect


2019-09-18 08:001912

评论

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

一文搞懂Go整合captcha实现验证码功能

闫同学

Go Web 安全 10月月更

Linux下编写ENC28J60网卡驱动,完善网络设备框架

DS小龙哥

10月月更

Apache RocketMQ 在阿里云大规模商业化实践之路

阿里巴巴云原生

Apache 阿里云 云原生 消息队列 商业化

「趣学前端」box-shadow的多重用法

叶一一

CSS 前端 10月月更

Kafka的客户端NetworkClient如何发起的请求

石臻臻的杂货铺

Kafk 10月月更

行业实践:RocketMQ 业务集成典型行业应用和实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

super关键字的作用

魏铁锤

10月月更

Spring Boot「06」Loading initial data

Samson

Java spring 学习笔记 spring-boot 10月月更

「趣学前端」容器上的折角边框是图形吗?

叶一一

CSS 前端 10月月更

ReentrantLock可重入、可打断、锁超时实现原理

JAVA旭阳

Java 并发 10月月更

用Java实现计算器功能

魏铁锤

10月月更

JWT详解

Java学术趴

10月月更

Vue组件入门(六)派发事件的参数传递

Augus

Vue 3 10月月更

一文搞懂常见的网络I/O模型

闫同学

网络 网络io 10月月更

搭建Linux下QT开发环境与Android开发环境(嵌入式与PC机)

DS小龙哥

10月月更

JavaSE 抽象类和接口

whispar

接口 Java应用 10月月更

【愚公系列】2022年10月 Go教学课程 029-面向对象简介

愚公搬代码

10月月更

百度面试题——迷宫问题(超详细解析)

lovevivi

c 数据结构 10月月更

前端开发提效小技巧之业务功能篇

叶一一

前端 提高效率 10月月更

Go语言开发小技巧&易错点100例(一)

闫同学

10月月更

常见大数据应用场景

穿过生命散发芬芳

大数据 10月月更

WeChat Moments Performance Analysis

David

架构实战营

Serverless的应用场景

阿泽🧸

Serverless 10月月更

如何在 Linux 上重新启动网络接口?

wljslmz

Linux 网络 网络接口 10月月更

协同开发时,如何科学的使用Git紧急修复线上bug?

王中阳Go

git 敏捷开发 团队协作 10月月更 git使用规范

Go-Excelize API源码阅读(二十二)——SetAppProps(appProperties *AppProperties)

Regan Yue

Go 开源 源码分析 Excelize 10月月更

「趣学前端」页面上吸顶的效果是怎么做到的

叶一一

CSS 前端 10月月更

Go-Excelize API源码阅读(二十三)——SetDocProps、GetDocProps

Regan Yue

Go 开源 源码刨析 10月月更

浅谈etcd服务注册与发现

闫同学

Go 微服务 etcd 10月月更

图解ReentrantLock的条件变量Condition机制

JAVA旭阳

Java 并发 10月月更

用栈操作构建数组

掘金安东尼

算法 10月月更

百度语义计算技术及其应用_文化 & 方法_DataFunTalk_InfoQ精选文章