计算机系统中,没有文字、图像、音频、视频,只有一种东西,就是数字。而且,底层全部都是二进制数字。
任何现实当中的问题,在进入计算机领域时,都需要考虑,如何将这个问题中的物理世界数字化,因为之后数字化之后,才能进入计算机领域。这个数字化的过程,就是编码。编码过的内容,经过计算机处理后,将会变成另外一串数字,这些数字如果要被人看到,就需要用计算机解析出来,再投影到屏幕上,用喇叭播放出来等方式,这个解析的过程,就是解码。
在人工智能领域,所有的人工智能算法,也都无法直接处理现实中的信息,也需要将需要处理的内容数字化,这个数字化,被成为特征提取。数字化之后得到的东西,叫做特征(Feature)。
特征其实可以认为是人工智能领域一类特殊的编码方法。之所以叫特征,是因为这类编码方法,和通常意义上的编码方法不同。常规的编码方法,是如何能够尽可能的不损失信息,最大可能保留所有的信息,比如对汉字来说,编码时要考虑的是,如何编码才能让所有的汉字都有所表示,编码颜色的时候,需要考虑的是如何编码才能尽可能多的保留足够的颜色,因为只有编码足够丰富,所能描述的客观世界也才越逼真。
而特征提取,则是在原始的文件数据中,找出一些最能代表这些数据的,更加简单的数字,组成特征。特征的一个特点是,并不是越长越好,因为特征越长,一般也就意味着越大的计算量。和单一的文件不同,人工智能基本上都是在成千上万的数据中找规律,所以,计算量将随着特征的增加呈指数级上升,所以,如何尽可能找到更短的特征来表示原有的数据,成为特征提取的一个重要指标。
编码
编码是不是描述的一个文件的特征?当然是,而且是很丰富的特征。计算机中表示任何东西,都需要用到编码和解码。例如一张照片,在使用摄像机采集时,会将这张照片分成不同的像素点,横向和纵向各有多少个像素点,就是照片的分辨率,例如1024x768,指的是横向有1024个点,纵向有768个点,这样,一张照片就包含了1024x768=786,432个点。每一个点,都用RGB三种颜色值来记录它当前点的颜色,把所有点的颜色按照顺序,写入一个文件中,就得到了一张照片的数据。
在解析这张照片时,读取这个照片文件,然后顺序读出每一个颜色值,再通过屏幕发光,打印到屏幕上,就看到了这张照片。
文字、声音,全都是同样的道理。
那么编码的数据,能不能直接拿出来当成是特征,进入人工智能领域进行计算呢?一般情况下是不行的。比较重要的原因大概有:
- 数据量太大。以图片为例,一张1024x768的图片,包含786,432个点,每个点都有一个颜色与之对应,这个数据量是很大的,而人工智能从大量数据中提取规律,动则就是上万的数据,一般的计算机内存,无法装载这么大的数据量。
- 长短不一的问题。例如一个文本处理算法,通过新闻的标题来判断该新闻属于哪一个分类,一个新闻标题是:"姚明女儿近照曝光,12岁身高接近190,因脾气差被姚明当场说教",另外一个新闻标题是:“拜登就任美国总统”。很明显,这两个标题在同样的编码下,长度是不一致的,必须找一个办法,让他们长度保持一致,否则将很难进入人工智能算法进行处理。
- 通常来说,编码是不包含意义的。例如图片中的一个颜色,绿色,在计算机中就是一串数字,假设是00FF00。这个数字,在通过显示器打印出来之前,是没有任何含义的。之所以我们能看到绿色,完全是解码之后的投影问题。可是,如果我们在提取特征时,统计一下00FF00这个颜色在一张图像中出现的次数,那么绿色多的,很可能就是叶子、青草,那么这个特征就有了一定的含义。
基于上述种种原因,我们还需要从已有的数据中,提取尽可能短,但是又尽可能保留含义的特征,才能用于人工智能算法。
特征选择
有一些问题,所处理的数据,是天然带有特征的,不需要提取。例如:我想通过一些数据,来分析房价和哪些因素有关,那么有关的这些因素,已经天然的组成了这些数据的特征,比如,房间大小、有几个房间、位置、楼层、年代等等。也就是说,你需要确定的这些因素,其实本身就已经是这个客观事物的属性了,那么这种情况,就不需要提取特征了,这种情况,叫做特征选择。也就是说,房子有很多属性,上面说的只是其中一些,可能还有一些,比如它的主人是谁。可是,它的主人是谁这个特征,通常来说不会影响它的价格,因此,在考虑和价格相关的特征时,它的主人是谁这个特征,就可以被忽略了,也就是不用选择。
那么特征到底该如何选择呢?通常有两个方法:第一根据经验,也就是生活中的常识;第二是通过实验,也就是说挑选不同的特征,进行不断的尝试。
特征提取
其实在大多数情况下,特征是需要被提取的。比如,人脸识别的时候,我们拿到的通常是一个人的头像图片,这个图像当然有它的一些客观属性,比如大小、文件类型等。可是这些属性,并不能成为分析图像里面内容的特征,所以就需要从图像文件中,获取一些特征。
至于如何提取特征,不同的领域将有不同的方法,后续的文章中,将针对自然语言展开说明。