谷歌「机弦」有何玄机?

时间:2022-05-07
本文章向大家介绍谷歌「机弦」有何玄机?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

11月15日北京开始冬季供暖那天,谷歌科研博客发布了开源软件SLING,又一个号称能让计算机更容易看懂人话的技术。

SLING: A Natural Language Frame Semantic Parser

几天之内就遭到若干中文网站自然语言处理(NLP)内行们的转译转载,一副要火的架势。

那咱也睁开外行眼瞧一瞧SLING吧,至少跟NLP愤青们吃饭时,别把这帮人聊的SLING当成其它Sling。本文企图:

  • 肃清SLING一词的歧义
  • 轻描自然语言理解(NLU)发展阶段
  • 淡写语义解析
  • 鸟瞰SLING在语义解析上的创新

1. SLING的歧义:

首先,Sling这个英文单词算是被彻底玩坏了。咱们先得按自然语言理解(NLU)的路子消除一下歧义。

本来,Sling就是中文的「机弦」或「投石索」,一根绳中间兜着块石头,对折抡起来,突然撒开一头,「嗖」的一声石头就出去了。这东西在冷兵器时代也是黑科技,圣经里的大卫小同学就是抡着这么个绳子乱丢石头,爆了巨人歌利亚的头。

圣经故事:大卫用机弦投石攻击巨人歌利亚。来源:Malcolm Gladwell Says We Got the Story of David and Goliath All Wrong

米开朗基罗的大卫像左手拿的就是这个武器。

米开朗基罗的大卫像,左手持机弦。来源:https://zh.wikipedia.org/wiki/机弦

这段梗还被60后加拿大畅销书作家Gladwell借题发挥写成了一本书。

Gladwell的《大卫和歌利亚》封面。来源:Malcolm Gladwell Says We Got the Story of David and Goliath All Wrong

后来Sling这个词儿被引申成好几个跟吊带有关的意思,什么枪的背带啦,兜婴儿的背兜啦,Borat穿的那种兜裆挂肩的男士三角泳装啦,还有一些少儿不宜的意思不知道最好。图就不贴了。

在高科技行业,美国光是互联网电视公司就有两个叫Sling的,一个是成立于2004年的加州公司Sling Media,一个是成立于2015年的科州公司Sling TV,搞得电视观众逵鬼难辨。为什么撞名,问Dish Network去。

现在谷歌的新技术又来赶场也叫SLING,还全大写,还不说为什么。目测此名跟语义(Semantics)和语言(Linguistics)有关。反正作为谈资,咱知道这个SLING跟前面那一众Sling无关就行了。

2. NLU半世纪发展四阶段:

以上讨论,让咱们体验了一把机器面对模棱两可的人类该有多么抓狂,哪怕只是一个词,更甭提词组、从句、整句、整段、整篇文字了。消除歧义看懂人话,就是自然语言理解(NLU)需要解决的问题。它是整个自然语言处理(NLP)领域的一个分支。

当然,这倒也不是什么新难题。根据福布斯的「人工智能简短史」,机器的自然语言理解从1964年麻省理工博士生Dan Bobrow的毕业论文就开始了。

A Very Short History Of Artificial Intelligence (AI)

有考古癖的知友可以参考这篇50多年前的博士论文原文。

http://dspace.mit.edu/bitstream/handle/1721.1/5922/AIM-066.pdf?sequence=2

据斯坦福大学计算机系教授Bill MacCartney总结,自然语言理解(NLU)从那时起经历了四个阶段,此处手工加注四个标签:纯真、发展、寒冬、复苏。(参考:https://web.stanford.edu/class/cs224u/

  • 纯真期:上世纪60年代:主要是用比较小的规则集合来做模式匹配
  • 发展期:上世纪70到80年代:更丰富的语言学,逻辑驱动,更接地气;有了局限的实际应用
  • 寒冬期:上世纪90年代:自然语言处理(NLP)进入所谓的「统计革命」,依赖机器学习,盲读大量文章(比如啃掉十年厚的《人民日报》)总结统计规律来推断语义。因此,严谨的NLU科研工作暂时消退。
  • 复苏期:本世纪10年代以来:NLU重新受到关注,整合前面好几十年的相关技术,进行新突破。

3. 语义解析:

在自然语言理解中的一个重要问题是语义解析(Semantic Parsing):就是「怎么把文艺男婉约含糊的文风变成IT男喂给计算机的编程语言」。(以男性为例。另外两种性别同理。)

一定要编程语言吗?对,一定要。语义解析特指把人能读懂的自然语言输入转换成机器朋友能读懂的严谨格式,以便后续机器分析处理。

用机器把一种人类能读懂的翻译成另一种人类能读懂的语言,术语叫机器翻译,不叫语义解析。

举一个机器翻译的例子:把中国文艺男翻译成美国文艺男(大致)能读懂的文字。

来源:translate.google.com

回来说语义解析,机器喜欢哪种严谨格式呢?

这个不一定,得看让什么样的机器后面干什么活。请参考

CS224U: Natural Language Understanding

文青知友是否跳过代码块请自便。

如果喂给数据库,得解析成数据库的查询语言:

which country had the highest carbon emissions last year?
SELECT country.name
FROM country, co2_emissions
WHERE Country ID = co2_emissions.country_id AND co2_emissions.year = 2014
ORDER BY co2_emissions.volume DESC
LIMIT 1;

如果喂给机器人,得解析成机器人控制指令:

Go to the third junction and take a left.
(do-sequentially
  (do-n-times 3
    (do-sequentially
      (move-to forward-loc)
      (do-until
        (junction current-loc)
        (move-to forward-loc))))
  (turn-left))

如果喂给Siri,得解析成意图和参数。比如导航:

directions to SF by train
(TravelQuery
  (Destination /m/0d6lp)
  (Mode TRANSIT))

比如查天气:

weather friday austin tx
(WeatherQuery
  (Location /m/0vzm)
  (Date 2013-12-13))

还有很多应用需要解析成这样的依存树。比如肯尼迪就职演说中那句「Ask not…」名言会被变成这样:

肯尼迪名言的依存树。来源:https://cloud.google.com/natural-language/docs/morphology

4. SLING的创新:

那都有这么多五花八门的语义解析器了,谷歌还搞SLING干什么?

因为SLING的创造者嫌传统的解析器太慢、太悬。

主流的实用型解析器使用的是串行流程。系统按部就班地进行词性标注、依存句法分析、指代消解等。这样做造成了等候与担忧。

等候来自于串行流程前后次序,前一步未完成后一步无法进行。但是解析器等后续软件并不一定需要那些中间结果,比如词性、依存树等。那也得等着。

担忧来自于串行流程前后关联,上一步如果发生错误会被携带到后续步骤中并被放大。

主流语义解析有点像上学时写实验报告,前面没算出来后面没法写,而老师要的是最终报告,中间草稿都算没完成。

但是在实际自然语言处理中,解析器和后续软件的关系有时更像咨询师和客户。首先故事线要逻辑清晰,在此基础上,细节逐步添加,半成品随时可以看,客户也能懂。

为了搞出这种咨询范儿的解析器,SLING的研究者想了几个办法:

  • 解析输出不用静态的依存树,而是用过渡态的语义框架
  • 用两个长短期记忆(LSTM)网络做编码
  • 用带回路的递归神经网络做解码

语义框架图是表达语义的严谨格式中的一种。它把自然语言文本表达成一系列含义和它们之间的关系。每一个含义称作一个「框架」(Frame)。每个框架上有若干个称为「插槽」(Slot)的接口,包括这个插槽名称和插槽参数。使用不同参数,插槽可以指向一个常量或指向其他框架。有了这些插槽,就可以严谨地表达框架之间的关系。

这有点像编程时子程序们利用调用参数跟其它子程序发生关系。

谷歌博客上的英文例句是:

「Many people now claim to have predicted Black Monday.」

这里,单词predicted被标注为 PREDICT-01框架。编号01表示多义词的首要意思,其它意思依次编号。这个框架有两个插槽:「谁」预测的,插槽名定义为ARG0,指向PERSON,即由People生成的框架;另外,预测了「什么」,插槽名定义为ARG1,指向EVENT,即由Black Monday生成的框架。

框架、插槽和关系。来源:谷歌博客原文

有了这套延展性很强的表达方法,SLING就可以在不断读取新输入的过程中,随时维护一个过渡状态,表达当前识别出来的语义框架图。

同时,SLING随时调整当前的解析注意力,兼顾结合前几次迭代关注的内容。

  • 当SLING读取新词时,新词自动排到注意力队列的排头,老词依次往后挪;
  • 然后SLING会试图在新词和老词之间通过插槽建立框架间的联系。
  • 当发现新词框架其实是某个老词框架中插槽的从属参数,SLING会自动把这个调用新词的老词挤到注意力排头。

谷歌博客上的GIF动图形象地表达了这一过程,这里截取后半段展示如下

动图中,屏幕上方的桔黄色椭圆标号表示注意力缓冲区,数字越小越靠近当前注意力【0】。这个片段截取于系统已经读到Predict,Predict被自动排到当前注意力【0】号位,但是发现这个Predict其实只是前面Claim框架的「小弟」,属于Claim的插槽调用的参数,因此不好意思,Claim被排到当前注意力【0】编号,Predict跟其它框架被挤向后排。这时候Black Friday跑进来了,占位【0】号注意力,屁股还没坐热,被发现是Predict的对象,结果Predict时来运转又被挪到前排,占用当前注意力。

完整动图请参考:https://2.bp.blogspot.com/-Kj609v1D4sI/WgtDnEuERgI/AAAAAAAACNQ/g0F50KXT6NEcXAztFKws3jdhm3JZF1YPACLcBGAs/s640/image1.gif

有了这套方法,机器可以在读取文本输入的任意时刻展现一个当前认为最靠谱的语义框架图。

就好像我们去参加鸡尾酒会,不需要等到在活动结束后整理笔记(如果喝酒聊天还要记笔记的话),标注我们遇见的每一位客人的性别、年龄、碰杯时间、谈话内容,才能分析出客人之间的社会关系。

我们会举着酒杯穿梭于客人之间,脑中随时有一张人物关系图,谁是谁请来的,谁是谁带来的,谁是谁老婆,谁是谁老同学。我们还会不断根据新的信息来完善这张图。同时,我们脑力有限,很可能只能记住一部分谈话。

这些客人就是语义框架,他们之间的关系就是由插槽定义的连线。

能做成这么好玩的动画的SLING到底在实用上能有多强?目前不明朗。

据I Programmer的Alex Armstrong判断,既然谷歌研究中反复强调这是一套试验技术,估计想玩的人得自己下不少功夫才能转起来,而且还不一定能有什么大用。(参考:http://i-programmer.info/news/105-artificial-intelligence/11311-google-sling-an-open-source-natural-language-parser.html

另外根据论智点评:(参考:谷歌推出自然语言框架语义解析器SLING,但没说有没有用 - 人工智能 - 掘金

这个新工具SLING基于框架语义学,提出了一些令人振奋的思路,但谷歌“说话只说一半”,没有论文介绍,没有案例支撑,更没有模型准确率佐证,因此我们无法得知它在框架搭建上的具体突破。 就目前框架语义学的资料来看,SLING拥有一个成熟框架的可能性微乎其微,当然,如果它有,那首先谷歌翻译就远不止现在的水平了。

看到这儿还有兴趣下载这个开源软件的,这边请:google/sling

想看PDF技术报告全文的,链接在这:https://arxiv.org/pdf/1710.07032.pdf

至少,我们知道谷歌SLING试图解决什么问题,解决思路是什么。希望有一天它真能像大卫的机弦一样出奇制胜。