从互联网爬虫、自动驾驶到对话机器人,什么是Semantic(语义)?

2020 年 1 月 6 日 AINLP

作者:段清华(金证优智技术总监)

知乎专栏:AI工程

原文链接:

https://zhuanlan.zhihu.com/p/99904529




语义在哪都有

  • Sir Tim Berners-Lee 的语义网(Semantic Web),HTML的article/header标签,爬虫

  • Semantic Mediawiki

  • 用于视频监控、自动驾驶的语义分割(Semantic Segmentation)

  • 对话机器人/聊天机器人的对话管理中的语义帧(Semantic Frame)

  • 前端框架Semantic UI

它们的共同点是什么?是有语义(Semantic)!这个词在

那么什么是语义?

Wiki对语义的一段介绍是这样的:

en.wikipedia.org/wiki/S

Semantics (from Ancient Greek: σημαντικός sēmantikós, "significant")[1][a] is the linguistic and philosophical study of meaning in language, programming languages, formal logics, and semiotics. It is concerned with the relationship between signifiers—like words, phrases, signs, and symbols—and what they stand for in reality, their denotation.

我觉得这个描述还是太形式化了,是无法让人简单理解的,或者这个词汇本身就不好,太泛泛。那么我们分别说上面指的所有语义存在的地方,它们各自的“语义”是什么。

语义网

语义网的语义,最简单的对应就是HTML5新加入的的语义标签:

<article>、<aside>、<details>、<figcaption>、<figure>、<footer>、<header>、<main>、<mark>、<nav>、<section>、<summary>、<time>

从名字可以看出有些是侧边(aside),有些是图表(figure),有些是页脚(footer)。首先,这些标签在浏览器渲染的时候,除了部分标签有特殊方法渲染,基本上都是一视同仁的,或者说人看起来与<div>一致。


那么,它们其实是给机器看的。如果只看文字,机器看不懂你这一段文字是标题还是正文,是时间、还是侧边栏,而人通过写给机器一个标签,也就是你需要把你这段文字的“语义信息”告诉机器,告诉机器这段文字到底是图、标题、正文、摘要还什么其他的东西。你告诉机器了,机器才能更精确的分辨出具体是什么,并且也能更方便的让这些数据信息在不同的机器之间流转(不同站点、不同服务、不同应用),为以后人类知识的流动加速创造条件。

Semantic Mediawiki

Mediawiki就是Wikipedia所使用的wiki程序的名字。由PHP开发,2002年启动,2003年命名。

Semantic MW是Mediawiki的一个插件,也就是给MW增加了语义。

那么它做了什么呢,维基百科的一个作用其实是总结知识,而总结来的知识更好的用途是可以查询。例如你可以维基百科查询中国有多少人口,美国有多少人口,只要分别在中国、美国的页面看就有。那么如果你想知道人口超过1000万的国家都有哪些?只下的呢?2000万呢?

当然你也可以自己或者请人专门去收集、总结这些内容,但是一个明显更好的做法是,假设维基百科是可查询的,我只需要像SQL语句一样“SELECT NAME FROM WIKI WHERE POPULATION > 10,000,000”就可以得到结果,不是更好吗。

怎么做呢,百科本身是有文字的,但是文字没有语义,机器不知道这个数字是什么具体的意思,是人口、面积还是成立时间?。所以我们可以通过加入语义来解决这个问题,假设你正在看“中国”这个页面,假设里面有一句话要得到这些结果其实机器是无法直接解析的,就算解析也需要其他程序、算法辅助(例如使用NLP中的Open Information Extraction技术),但是这些算法本身就收到准确率、后验等影响,那么如果我们在编辑文本的时候,就使用一些成本加入一些语义信息呢?

SMW的写法如下:

中国是一个发展中[[is a::国家]],它的首都是[[has Capital::北京]]。

上面这句话在显示的时候,和之前的自然语言句子是一样的。但是机器通过解析里面的符号,可以得到更多的知识。因为这个页面是在“中国”这个词条下的,所以我们可以得到三元组:

(中国,is a,国家)

(中国,has Capital,北京

这些主谓宾或者主语、属性名、属性值组成的三元组,是更丰富的,机器可读的语义信息,语义知识,可以更方便的搜索。例如我可以简单的查询,国家都有哪些,只要知道有谁 is a 国家就好了。

用于自动驾驶的语义分割(Semantic Segmentation)

语义分割首先是属于计算机视觉(Computer Vision)的一项技术/算法,它的目的是分解图片或视频,给每个部分打上语义标签,例如:




对话机器人/聊天机器人的对话管理中的语义帧(Semantic Frame)

对话系统的语义帧(Semantic Frame)其实有很多叫法,例如Belief,例如Dialog State等等。

它保存的其实是对话的上下文信息,或者说上下文的语义信息。

我们可以假设我们是一个机器人,或者说我们所做的每一步行为必须有推理,那么我们要对话、通过对话完成任务的时候,应该怎么做?

首先我们看我们在对话过程中有什么上下文吧(简单版本,复杂的可能还包括更多轮次的信息、槽值实体等):

  • 上一句机器人(我,即假设我是机器人)表达了什么意图(第一轮可以为空)

  • 当前用户表达了什么意图(第一轮可以为空)

例如总是机器人先发起对话:

机器人:你好(问候时的语义意图,自然语言可能是:你好、hi、hello、吃了没)

用户:我要买票(表达买票的语义意图,自然语言可能是:买票,卖票吗,我要买啦)

机器人:买票需要10元,确认吗?(表达需要用户确认的语义意图)

用户:没问题(表达肯定的语义意图,自然语言可能是:yes/是的/好的/ok啦)


那么我们站在最后一轮,当前的语义信息是:

  • 上一轮机器人表达了:需要用户确认的语义意图

  • 当前用户表达了:肯定的语义意图


如果需要一个逻辑推理,或者计算机程序,那么我们就可以写如下的推理步骤:

如果 (上一轮机器人表达了:需要用户确认的语义意图) 并且 (当前用户表达了:肯定语义意图) {

做什么

}

如果 (上一轮机器人表达了:需要用户确认的语义意图) 并且 (当前用户表达了:否定语义意图) {

做什么

}


也就是自然语言被解析为了意图,意图被记录为了语义上下文,然后最后机器人根据这些语义来决定之后的行为(即进行推理)。


前端框架Semantic UI

在开发Web的过程中,有时候我们需要精确的描述一个东西,比如这个按钮需要20个像素,不能多一个也不能少一个。但是很多时候,我们其实需要的是一个模糊的,语义特征化的描述,例如:这里我需要一个大按钮,那里我需要一个小按钮。

至于这个“大按钮”和“小按钮”其实在不同的浏览器软件、不同浏览器宽度、不同平台(手机、电脑、平板)、不同设备(例如设备分辨率不同),可能所代表的像素大小(实际大小)其实是可以不一样的。

如果要每个程序员必须针对所有可能的组合都要重新定义一遍所谓“大按钮”的不同像素宽高,是成本非常高的。那么如果我们实现把一些常用的信息语义化,让你告诉程序这里需要一个“大按钮”,至于到底多大由程序库按照普遍的开发经验(即/或社区经验)自动调整,是不是更好?

这就是一个将实际精确的东西模糊化、语义化的过程,它的目的是带来更好的通用性、广泛性。

总结

以上我们描述了不同环境下“语义”的作用和用法,但是我依然无法用精炼且简要的文字给语义做一个定义,我们可以认为它就是一个符号,这个符号是用一个稍微模糊的词汇,去代表太多太具体的事物。

  • 例如在对话机器人,我们用“问候语义意图”来代表“你好、hi、你好吗”等多种自然语言语言;

  • 在自动驾驶中,我们用“树”这个语义代表街道路边可能出现的“杨树、柳树、松树”等等不同的树;

  • 在Web编程中,我们用“大按钮”这个语义,来代表不同平台、分辨率、PPI下的足够符合人类感知的不同的大的宽高像素数。




推荐阅读

最简单的BERT模型调用方法

Rasa介绍:对话系统、产品与技术

AINLP年度阅读收藏清单

AINLP-DBC GPU 云服务器租用平台建立,价格足够便宜

AINLP-DBC GPU 使用体验指南

征稿启示| 让更多的NLPer看到你的文章

我们建了一个免费的知识星球:AINLP芝麻街,欢迎来玩,期待一个高质量的NLP问答社区

关于AINLP


AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。


登录查看更多
0

相关内容

清华大学《人工智能》书籍教学课件开放下载
专知会员服务
137+阅读 · 2020年7月27日
【干货书】Python语音计算导论,408页pdf
专知会员服务
98+阅读 · 2020年7月12日
【CVPR2020-Facebook AI】前置不变表示的自监督学习
专知会员服务
46+阅读 · 2020年4月19日
【中科大徐童】多模态语义理解与关联
专知会员服务
81+阅读 · 2019年12月7日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
医疗知识图谱构建与应用
专知会员服务
375+阅读 · 2019年9月25日
知识图谱简史:从1950到2019
专知
24+阅读 · 2019年12月2日
什么是自然语言理解(NLU)?及2019最新进展
产品100干货速递
17+阅读 · 2019年7月18日
什么是语义角色标注?
人工智能头条
18+阅读 · 2019年4月28日
语义信息与SLAM有哪些结合点?
计算机视觉life
5+阅读 · 2019年4月23日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
知识图谱的系统工程观
中国计算机学会
18+阅读 · 2018年11月13日
刘升平 | 基于知识图谱的人机对话系统
开放知识图谱
11+阅读 · 2018年10月24日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
专栏|语义SLAM的重要性,你造吗?
智东西
7+阅读 · 2017年9月5日
知识图谱之语义网络篇
炼数成金订阅号
7+阅读 · 2017年8月16日
OD-GCN: Object Detection by Knowledge Graph with GCN
Arxiv
4+阅读 · 2019年9月30日
Arxiv
4+阅读 · 2019年9月5日
Arxiv
8+阅读 · 2018年5月15日
VIP会员
相关资讯
知识图谱简史:从1950到2019
专知
24+阅读 · 2019年12月2日
什么是自然语言理解(NLU)?及2019最新进展
产品100干货速递
17+阅读 · 2019年7月18日
什么是语义角色标注?
人工智能头条
18+阅读 · 2019年4月28日
语义信息与SLAM有哪些结合点?
计算机视觉life
5+阅读 · 2019年4月23日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
知识图谱的系统工程观
中国计算机学会
18+阅读 · 2018年11月13日
刘升平 | 基于知识图谱的人机对话系统
开放知识图谱
11+阅读 · 2018年10月24日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
专栏|语义SLAM的重要性,你造吗?
智东西
7+阅读 · 2017年9月5日
知识图谱之语义网络篇
炼数成金订阅号
7+阅读 · 2017年8月16日
Top
微信扫码咨询专知VIP会员