计算机如何“看”我们的世界

计算机如何“看”我们的世界

计算机虽然有了人工智能的程序支持,但事实上也不能将其机器学习的功能等同于像人类那样。至少,到目前还不是这样。那么,向Google的图片识别或者Facebook的M应用等一类系统,它们是怎么能够理解自然语言或视觉的呢?

下面,是人工智能系统Josh的自我独白:

简而言之,我们将单词和短语的含义以数字的形式储存在计算机上。目前,市场上有许多这类产品,比如将单词转换成向量形式的工具word2vec,该工具使用浅人工神经网络来计算文字嵌入。此外也有一些诸如记忆网络的技术,能够自主学习文本,进行一些简单有限的问答。

在过去的几年中,由于先进的人工神经网络算法有了许多惊人的成果,图像识别和数字信号处理技术异常火爆。但是相比较之下,同是人工智能领域的理解自然语言方面似乎显得困难得多,为什么呢?

自然语言处理本质上是另一种约束关系的问题

研究自然语言是困难的,很多时候甚至超过了我们的想象——因为语言永远不变的是改变,因为全世界有千万种语言……无论你的观点是什么,自然语言难以为算法所处理的最大原因是——我们没有足够多的样本。

确实,我们拥有大量的文本资源,包括书籍、博客、社交媒体等。但即便如此,我们得到的用以分析的文本相对来说还显得不足。看一看以下图片:

当我们分析音频数据,或者图像数据时,事实上我们得到的数据信息比人类意识中的要多。以佳能5D Mark III相机为例,摄影领域的人通常会说这是一个令人尊敬的相机,因为它有着5760 x 3840的分辨率。因为每个颜色像数都分别由红、蓝、绿、α值(RGBA)来表示,所以每个像素拥有4个标准数值。在其原始格式当中,一张这种像素的图片大约含有 88.47 MB数据。相比较之下,莎士比亚的所有作品也只有4.4 MB。一个像数等于4个字节,一个字符则占一个字节。

这意味着:

1、解析文本的时候,每一个令牌(字词的NLP术语)更多的是影响文本的整体分析。

2、生成文本的时候,每一个被选出来的令牌才能影响结果。

换句话说,在文本当中,字符和令牌才是占据主要成分的元素,和像素不同。

好了,那我们是如何处理文本的呢?

在一个严格的解析系统中,我们需要用数值格式来表示文本,提示为向量形式。现在我们还是要继续理解很简单的向量表示,而未来则可以处理更为复杂的表达了。

我们来以几个词组为例:

1. Turn on the lights(开灯)

2. Power on the lights(打开灯的电源)

3. What time is it?(现在几点?)

4. What is the current time?(当前时间是几点?)

我们需要做的是创建一个叫词典的东西。换句话说,我们想要将现有的词组用特有的令牌技术来创建一个词汇表。然后,我们需要对信息做一些隐式预处理,去掉标点符号等。最后,我们给每一个唯一码赋予其各自的索引,从而生成自己的词汇向量:

0 turn

1 on

2 the

3 lights

4 power

5 what

6 time

7 is

8 it

9 current

由于每一个字代表一个索引,因此我们可以使用反向散列数据结构来得到每个单词的索引,然后无论是否每一个字都是给定文本,我们都可以将这些字表示为一系列的布尔值(布尔值:是“真”True或“假”False中的一个)。比如,上述例句就可以表示为:

1. { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }

2. { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0 }

3. { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 }

4. { 0, 0, 1, 0, 0, 1, 1, 1, 0, 1}

有了这些向量,我们可以使用向量点积得到一个粗略的相似度计算。所谓点积,就是接受在实数R上的两个向量并返回一个实数值标量的二元运算。

所以,上述前两个例句的点积就是:

1 * 0 = 0

1 * 1 = 1

1 * 1 = 1

1 * 1 = 1

0 * 0 = 0

0 * 0 = 0

0 * 0 = 0

0 * 0 = 0

0 * 0 = 0

0 * 0 = 0

这些数值加起来和是3。而如果将第一个和第三个句子做同样的处理:

1 * 0 = 0

1 * 0 = 0

1 * 0 = 0

1 * 0 = 0

0 * 0 = 0

0 * 1 = 0

0 * 1 = 0

0 * 1 = 0

0 * 1 = 0

0 * 0 = 0

那么和为0。这就是说,“Turn on the lights”和“What time is it”没有丝毫的相似。

你也许会发现,我们目前的词汇处理规模小到只有10个词。不过,未来当我们探索更多语义词嵌入时,我们还可以压缩向量,获得更准确的上下文理解和表达。

日日啪 http://www.riripa.cn

时间: 2024-10-06 04:51:32

计算机如何“看”我们的世界的相关文章

海外优秀资讯抢先看12:世界上最薄的硅材料将为您带来引爆眼球的更快,更小,更高效的计算机芯片

One-atom-thin 'silicene' silicon transistors invented 原子大小数量级的硅烯晶体管宣告诞生 World's thinnest silicon material promises dramatically faster, smaller, more efficient computer chips 世界上最薄的硅材料将有望带来引人注目的更快,更小,更高效的计算机芯片 February 5, 2015 2015年2月5号 The first tra

计算机怎么看懂英语和汉语等非二进制语言?

计算机只识别二进制,它是怎么去识别英语,汉语等人类可以通信的语言呢?想知道这个问题就要先说二进制.... 讲1个有趣的故事学习二进制的由来 古时候,2个远距离通信,通过马和飞鸽,还有狼烟...... 北京到昌平之间 10公里,需要狼烟传信. 如果来了2个敌人,友军来了500人,浪费资源. 如何能资源合理利用,传得信息刚好? 怎么办? 1-100人------------------1根狼烟 101-200------------------2根狼烟 200-300----------------

福克斯:悲观?乐观?就看你与世界怎么互动

心理学证明了一个朴素的真理:我们对待世界的方式,与世界互动的方式将会改变世界回应我们的方式.这事实引人注目,但却太easy被人遗忘.我们的存在方式.看待事情的角度.对生活的态度.心态决定了我们的世界是什么颜色,影响着我们的健康.財富和整体幸福感.这里的心态是指悲观还是乐观,即偏向光明的一面还是阴暗的一面.心理学家开发过非常多方法来測量一个人的悲观度或乐观度,这点也说明心态的差异在眼下是能够被量化的.最引人注目的是,心态的差异能够追溯到大脑活动模式的差异.大脑的某些现代区域(控制着思维)与某些古老

Android好奇宝宝_番外篇_看脸的世界_02

一个有吃豆人删除动画的ListView 这是一个无聊的效果,由一个无聊的程序猿,在无聊的情况下写的. 虽然这效果不中看中用,不过就当学习了. 先上图 效果一目了然,主要是: (1)移除item时执行吃豆人动画 (2)滚动时吃豆人也相应移动 (3)应对可见与不可见状态间的切换 简单原理分析: (1)吃豆人.豆.和左边的白色矩形(当然所有颜色都是可以改的,你想换成图片也行)都是用canvas画出来的. (2)问:canvas那里来的?答:ListView的canvas.具体是重写ListView的这

强人工智能,暨看《西部世界》有感

如果出现了强人工智能,并且与人类对抗的话,一定是人类失败.在<西部世界>中,代码仅仅被注入一个模仿人类肉体的容器中,但是如果真的有了强人工智能,那么有代码的地方他都能出现,譬如各种机器--从挖掘机到战斗机,从交通信号灯到核弹控制程序,<择天记>里面就出现了这样的场景.另外,我感觉这个问题 为什么有很多名人让人们警惕人工智能?有这样一种观点 人工智能会毁灭人类,所以我们不要去研究他. 但是我觉得人工智能就如军备竞赛,哪个国家先研究出来,就能改变全球局势. 试想一下:人工智能攻破并控制

Android好奇宝宝_番外篇_看脸的世界_06

简单实现波纹效果 其实这一篇的效果实现很简单,写这篇博客重点是为了说另一件事,剧透一下:有关内存泄露的. 先说下效果的实现: 原理: 原理只有一个,就是Shader的使用.Shader我看别人翻译成着色器,其实它的作用就是为画笔增加颜色的渐变,画笔默认是一个颜色画到底,但是使用Shader可以实现从一个颜色渐变到另一个颜色. 想了解更多关于Shader的姿势,推荐博客:传送门 有了Shader,就能很简单的画出波纹的效果了,至于动画效果,只是动态改变画的大小而已. 高清源码: (1)初始化 重写

Android好奇宝宝_番外篇_看脸的世界_05

上一篇番外篇讲了一个炒鸡炒鸡简单的自定义ProgressBar,这一篇基于上一篇的基础扩展为SeekBar,没看过上一篇的,请先看一遍:传送门 先上效果图(2G内存的机子运行模拟器,所以有点卡): 这个效果之前不知道在哪里看到过,我也忘了. 下面进入正题: 测量大小和绘制部分沿用上一篇ProgressBar的,不清楚的请走上面的传送门. 对比上一篇的扩展: (1)SeekBar能通过触摸改变刻度 (2)SeekBar上方添加一个显示当前刻度的浮动View(后面用FloatView表示) (1)通

Android好奇宝宝_番外篇_看脸的世界_03

无聊刷帖看到一个求助,试着写了一下. 一个自定义Switch控件,附带动画效果. 说是控件,其实是一个布局容器,先上效果图: 先讲原理,再看高清源码. 原理: 好像没啥原理,汗... 跟其它自定义容器控件一样,一般要注意: (1)计算好大小,宽度和高度 (2)计算好子View的布局位置 不是一般要注意的: (3)动画是用的nineoldandroids (4)遮挡效果是通过控制子View的绘制顺序 高清源码: (1)计算大小: protected void onMeasure(int width

Android好奇宝宝_番外篇_看脸的世界_04

这一篇是记录一下本猿自定义View的一般思路,通过一个炒鸡简单的自定义ProgressBar讲解一些自定义View的基础知识.适合新手,高手勿喷,有好的指点和想法的欢迎评论. (1)确认需求 写一个自定义View,首先你要确定需求是什么.一般包括外观,事件处理,动画效果. 外观需求:ProgressBar的外观需求非常简单,就是两个矩形(当然也可以是其它形状,这里我们只实现基础的矩形)重叠显示.其中一个固定大小的当背景,一个可变宽度的来显示刻度. 事件处理:ProgressBar不是SeekBa