知识图谱教程:从海量文本中挖掘和构建异构信息网络

第 25 届 ACM SIGKDD 知识发现与数据挖掘大会于  2019 年 8 月 4 日- 8 日在美国阿拉斯加州安克雷奇市举行。一年一度的 KDD 大会是最重要的跨学科会议,汇聚了数据科学、数据挖掘、知识发现、大规模数据分析和大数据等领域的研究人员和实践者。

今天整理了关于数据挖掘方面的内容:从文本中构建和挖掘异构信息网络,本文提供了一个全面的综述,总结了在这个方向最近的研究和发展。

第 25 届 ACM SIGKDD

摘要:

现实世界中的数据主要以非结构化文本的形式存在。数据挖掘研究的一个重大挑战是开发有效的、可伸缩的方法,将非结构化文本转换为结构化知识。基于我们的愿景,将这些文本转换为结构化的异构信息网络是非常有益的,可以根据用户的需求生成可操作的知识。

在本教程中,我们将全面概述这方面的最新研究和发展。首先,我们介绍了一系列从大规模、领域特定的文本语料库构建异构信息网络的有效方法。然后,我们讨论了基于用户需求挖掘这种文本丰富网络的方法。具体来说,我们关注的是可伸缩的、有效的、弱监督的、与语言无关的方法,这些方法可以处理各种文本。我们还将在实际数据集(包括新闻文章、科学出版物和产品评论)上进一步演示如何构建信息网络,以及如何帮助进一步的探索性分析。大纲:

一 .介绍

1. 动机:为什么要从大量文本中构建和挖掘异构信息网络?
2. 大量文本网络构建的综述
3. 关于构建网络应用探索的综述

二. 短语挖掘

1. 为什么短语挖掘以及如何定义高质量的短语?
2. 监督方法
2.1. 名词短语分块方法
2.2. 基于解析的方法
2.3. 如何在语料库级别对实体进行排序?

3. 无监督方法
3.1. 基于原始频率的方法
3.2. 基于协调的方法
3.3. 基于主题模型的方法
3.4. 对比方法

4. 弱/远程监督方法
4.1. 短语分词及其变体
4.2. 如何利用远程监督?

5. 系统演示和软件介绍
5.1. 一种多语言短语挖掘系统,它将 AutoPhrase,SegPhrase 和 TopMine 集成在一起,支持多种语言的短语挖掘(例如,英语,西班牙语,中文,阿拉伯语和日语)。

三. 信息抽取:实体,属性和关系

1. 什么是命名实体识别(NER)?

2. 传统的监督方法
2.1. CorNLL03 共享任务
2.2. 序列标注框架
2.3. 条件随机场
2.4 手工制作的特征

3. 现代端到端神经模型
3.1. 双向 LSTM 模型
3.2. 语言模型和语境化表示
3.3. Raw-to-end 模型

4. 远程监督的模型
4.1. 实体输入的数据编程
4.2. 学习特定领域的词典

5. 基于元模式的信息提取
5.1. 元模式挖掘
5.2. 元模式增强的 NER

6. 系统演示和软件
6.1 命名实体识别推理 Python 包:LightNER 。该模块可帮助用户以高效便捷的方式轻松地将预训练的NER 模型应用于他们自己的语料库。

四. 分类构建

1. 分类学基础
1.1. 分类法定义
1.2. 分类应用
1.3. 分类构建方法

2. 基于实例的分类构建
2.1. 使用的方法综述
2.2. 基于模式的方法
2.3. 监督方法
2.4. 弱监督方法

3. 基于聚类的分类构建
3.1. 分层主题建模
3.2. 一般图模型方法
3.3. 分层聚类

五. 挖掘异构信息网络(结构化分析)

1. 基本分析系统演示
1.1.  AutoNet 系统:它从 PubMed 论文(标题和摘要)构建了一个巨大的结构化网络,并支持在线构建(新文档)和智能探索(搜索)。

2. 概要
2.1. 基于图的总结
2.2. 聚类和排序的总结

3. 元路径引导探索
3.1. 基于元路径的相似性
3.2. 元路径引导节点嵌入

4. 链接预测
4.1. 任务引导节点嵌入
4.2. 构建网络中的链接增强

六. 总结和未来的方向

1. 摘要
1.1. 原理与技术
1.2. 优势和局限

2. 挑战和未来的研究方向

3. 与观众的互动
3.1 如何根据您的文本数据和应用需求构建和挖掘异构信息网络?

原文链接:https://shangjingbo1226.github.io/2019-04-22-kdd-tutorial/

如何阅读一份深度学习项目代码?

搞深度学习的人,两大必备日常除了读论文之外就是读代码。读论文笔者在第 4 问的时候讲了阅读路线,但如何读用什么技巧读每个人都有不同的见解,这里不多说。读代码跟读论文、读书多少有相似的地方,毕竟都是读的性质。但话又说回来,读代码又跟读 paper 读书大有不同,代码是一种将论文中的模型和算法进行实现的过程,是一种需要你思维时刻在线的过程。又因为我们读的是深度学习项目代码,不是像 Linux 内核代码那样的鸿篇巨制,所以在代码性质上多少又有些不同。

笔者这里说的一份深度学习项目代码,小到几百行的测试 demo ,大到成千万行的开源项目,读起来方法肯定各有不同。如下图 Mask R-CNN 项目代码和 PyTorch 源码的对比:

Mask R-CNN
Mask R-CNN
PyTorch
PyTorch

可以看到,Mask R-CNN 作为一个经典的实例分割框架,其代码量可以说是中规中矩,3k 的代码量在我们读完论文后集中花几天时间差不多可以过一遍。但 PyTorch 的源码对大多数人而言就不那么友善了,750k 的代码量,而且底层的 C++代码占到整个项目中的一半之多,作为深度学习研究而言,堪称巨无霸级别了。这样的代码量,就像初学者拿到一本 PRML ,往往投入巨大精力后不了了之。所以,对于这两种类型的项目代码,阅读方法肯定会有所区别。

因为我们读代码的目的、场景和对象不尽相同,下面笔者从三个方面来和大家探讨如何阅读一份深度学习项目代码。

首先读代码的一些通用方法。这一点而言不局限于深度学习项目代码,任何项目、任何语言的代码阅读都适用。我们日常读代码无非是两个工具,一是将代码下载到本地,打开 IDLE ,在 IDLE 里安静的阅读:

IDLE
IDLE

第二个就是直接在 GitHub 的 web 端直接阅读,但 GitHub 没有像编辑器那样在左侧设置阅读目录,每次进入一个代码文件就必须退出来才能进入另一个文件,用户体验极差。当然了,这都不是事。chrome 给我们提供了 Octotree 这样的辅助阅读插件,直接在 chrome 扩展程序里搜索安装即可。

Octotree
Octotree

安装后我们就可以直接在 web 端就有 IDLE 读代码的体验:

IDLE读代码的体验
IDLE读代码的体验

可以看到在页面左侧有一个类似 IDLE 的目录栏,大大方便了我们查看和阅读项目代码。这是通用方法中的工具层面,我们再来看一些基本的阅读规矩。有了 IDLE 和 Octotree 工具,我们第一点一定是仔细看代码目录,对整个项目代码结构和分布有一个整体的认识,对于深度学习而言通常目录中各个模块相对比较固定,比如是 models 目录下放着模型搭建和训练的代码,conifg 目录下放着模型的一些配置文件,data   目录下放着项目所使用的数据信息等等。如下面语义分割项目的目录结构:

IDLE的目录栏
IDLE的目录栏

对深度学习项目代码的结构熟络之后,读的多了自然就会轻车熟路起来,后面阅读效率也就提高了。

通用方法的第二个是快速找到 readme 文档。通常来说,根目录下的 readme 文档包含了这份代码的使用方法,里面有可以让你快速了解这个项目的关键信息。一般来说,开源项目的 readme 里作者都会写明如何使用代码和进行部署。下图是 DenseNet 的 readme 文档:

DenseNet的readme文档
DenseNet的readme文档

对于大型项目,可能每一个子目录下都有 readme 文档,这都是我们需要仔细阅读的部分,作者把关键信息都放里面了。所以不管这样,第一时间读找到 readme 进行阅读是你了解该项目的必备步骤和通用方法。

第三个通用方法就是具体如何读的问题。就是我们得确定一个阅读主线。这一点是针对于深度学习项目代码的通用方法,对于一个深度学习项目,我们一般想要了解的最关键点无非就是数据、模型和如何训练等几个方面。如果你想快速看看这个开源项目的测试效果,直接读 readme 看使用方法即可。如果这个项目作者提出了一个新的模型框架,比如说 bert,你想了解它的模型框架细节,直接定位到 models 目录下的带有 model 字眼的.py 文件开始读。或者是你想看这个项目是如何训练的,都用了哪些训练的 tricks ,它的参数初始化是如何做的,batchsize 用的多大,训练过程中学习率如何调整的等等,那么话不多说,直接定位到带 train 的.py 文件即可。如下图 faster-rcnn 的 3 个训练文件。

faster-rcnn的3个训练文件
faster-rcnn的3个训练文件

根据目的不管是 model 还是 train 的主线,在阅读过程中一定会涉及到其他分支,比如说数据和配置等其他分支线。在主线阅读过程中不断完善对分支的理解,久而久之,一个完整的项目就会被你消化了。

以上说的是深度学习项目代码阅读的一些通用方法。下面再具体讲两个场景的代码阅读。毕竟大家做事讲究目的性,往往带有较强的目的性去做某事效率一般会特别高。

第一个场景是在大家做研究做项目时遇到问题时。不知道这个问题如何解决,直接谷歌又找不到好合适的方法的时候。这时候我们可能会寄希望于在 GitHub 上搜罗一番。比如说我们想要知道对于极度数据不平衡时如何给损失函数加权重的方法,再比如对于多标签问题进行模型预测时如何找到最佳分类阈值等等。这些问题都是我们在做实际项目时都可能会碰上的,在这种情况下若是能在 GitHub 上找到类似场景的处理方法,相信你会瞬间来了精神。

下述基于 keras 的 CNN 多标签分类项目对于多标签分类阈值寻优使用了 matthews_corrcoef 来确定最佳分类预测阈值。至于什么是 matthews_corrcoef ,这些都是你在解决问题过程中需要学习和吸收的地方。总之,带有目的性的读某个项目的代码往往是只读某个 block 甚至是某几个关键行,数量不在多,在于能够解决你的问题。

matthews_corrcoef
matthews_corrcoef

第二个场景就是为了自我个人精进的读代码。所谓个人精进,就是有大量可支配的个人学习和研究时间,高度的自律性和超强的学习力的人进行能力跃迁的关键所在。笔者虽然平时偶尔会有去 GitHub 读一些代码,但说要达到个人精进的 level ,还远远不够。比如说前面的 PyTorch 750k 的源码,这么大的代码量,阅读策略一定是分治思想,分散包围和各个击破。把项目进行分解,设定阅读计划和目标,在超强的执行力下还是有可能完成的。这不是普通人干的事,但我相信能在深度学习领域精进的人都不会是普通人。

自我个人精进的读代码
自我个人精进的读代码

诚然,无论是读教材、读论文还是本篇所说的读代码,这些本身都是一个个人学习能力提升和知识汲取的过程。对于从事深度学习工作的我们而言,arxiv 上的论文和 GitHub 上的代码都无穷尽,关键在于保持学习的劲头,做一名终身学习者。

GitHub地址项目 GitHub 地址

特征工程系列:特征筛选的原理与实现(下)

0x00 前言

我们在《特征工程系列:特征筛选的原理与实现(上)》中介绍了特征选择的分类,并详细介绍了过滤式特征筛选的原理与实现。本篇继续介绍封装式和嵌入式特征筛选的原理与实现。

0x01 特征选择实现方法三:线性模型与正则化

1 .主要思想

当所有特征在相同尺度上时,最重要的特征应该在模型中具有最高系数,而与输出变量不相关的特征应该具有接近零的系数值。即使使用简单的线性回归模型,当数据不是很嘈杂(或者有大量数据与特征数量相比)并且特征(相对)独立时,这种方法也能很好地工作。

2 .正则化模型

正则化就是把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。损失函数由原来的 E(X,Y)变为E(X,Y)+alpha||w||,w 是模型系数组成的向量(有些地方也叫参数parameter,coefficients),||·||一般是 L1 或者 L2 范数,alpha 是一个可调的参数,控制着正则化的强度。当用在线性模型上时,L1 正则化和 L2 正则化也称为 Lasso 和 Ridge。

1)L1 正则化/Lasso regression

L1 正则化将系数w的l1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成 0。因此 L1 正则化往往会使学到的模型很稀疏(系数 w 经常为 0 ),这个特性使得 L1 正则化成为一种很好的特征选择方法。

Lasso 能够挑出一些优质特征,同时让其他特征的系数趋于 0。当如需要减少特征数的时候它很有用,但是对于数据理解来说不是很好用。

2)L2 正则化/Ridge regression

L2 正则化将系数向量的 L2 范数添加到了损失函数中。

  • 由于 L2 惩罚项中系数是二次方的,这使得 L2 和 L1 有着诸多差异,最明显的一点就是,L2 正则化会让系数的取值变得平均。
  • 对于关联特征,这意味着他们能够获得更相近的对应系数。
  • Ridge 将回归系数均匀的分摊到各个关联变量上。

L2 正则化对于特征选择来说一种稳定的模型,不像 L1 正则化那样,系数会因为细微的数据变化而波动。所以 L2 正则化和 L1 正则化提供的价值是不同的,L2 正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。

3 .原理介绍

多元线性回归,具有 n 个特征值,

多元线性回归方程演变成求θ。

每个特征都有对应的权重系数coef,特征的权重系数的正负值代表特征与目标值是正相关还是负相关,特征的权重系数的绝对值代表重要性。

sklearn中 中LinearRegression的fit()方法就是通过训练集求出θ,LinearRegression的两个属性intercept和coef分别对应θ0和θ1-θn。
<h3>4 .代码实现</h3>
<h4>1)普通线性模型</h4>
#获取boston数据
boston=datasets.load_boston()
x=boston.data
y=boston.target
#过滤掉异常值
x=x[y&lt;50]
y=y[y&lt;50]
reg=LinearRegression()
reg.fit(x,y)
#求排序后的coef
coefSort=reg.coef_.argsort()
#featureNameSort: 按对标记值的影响,从小到大的各特征值名称
#featureCoefSore:按对标记值的影响,从小到大的coef_
featureNameSort=boston.feature_names[coefSort]
featureCoefSore=reg.coef_[coefSort]
print("featureNameSort:", featureNameSort)
print("featureCoefSore:", featureCoefSore)
# 输出:featureNameSort: ['NOX' 'DIS' 'PTRATIO' 'LSTAT' 'CRIM' 'INDUS' 'AGE' 'TAX' 'B' 'ZN' 'RAD' 'CHAS' 'RM']
featureCoefSore: [-1.24268073e+01 -1.21088069e+00 -8.38888137e-01 -3.50952134e-01
-1.05574295e-01 -4.35179251e-02 -2.36116881e-02 -1.37702943e-02 7.93577159e-03
3.52748549e-02 2.50740082e-01 4.55405227e-01 3.75411229e+00]

结果分析:

  • 正相关影响系数最大的特征值是 ”RM”:房间的平均数量,系数值为 3.75。
  • 负相关影响系数最大的特征值是 ”NOX”:一氧化氮浓度,系数值为 -1.24。

2)L1 正则化线性模型

#A helper method for pretty-printing linear models
def pretty_print_linear(coefs, names = None, sort = False):
if names == None:
names = ["X%s" % x for x in range(len(coefs))]
lst = zip(coefs, names)
if sort:
lst = sorted(lst, key = lambda x:-np.abs(x[0]))
return " + ".join("%s * %s" % (round(coef, 3), name)
for coef, name in lst)

from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_boston

boston = load_boston()
scaler = StandardScaler()
X = scaler.fit_transform(boston["data"])
Y = boston["target"]
names = boston["feature_names"]

lasso = Lasso(alpha=.3)
lasso.fit(X, Y)

print("Lasso model: {}".format(
pretty_print_linear(lasso.coef_, names, sort = True)))
# 输出:Lasso model: -3.707 * LSTAT + 2.992 * RM + -1.757 * PTRATIO
+ -1.081 * DIS + -0.7 * NOX + 0.631 * B + 0.54 * CHAS + -0.236 * CRIM
+ 0.081 * ZN + -0.0 * INDUS + -0.0 * AGE + 0.0 * RAD + -0.0 * TAX

许多特征具有系数 0。L1 正则化回归的稳定性与非正则化线性模型类似,这意味着当数据中存在相关特征时,系数(以及特征等级)即使在小数据变化时也会发生显着变化。

3)L2正则化线性模型

from sklearn.linear_model import Ridge
from sklearn.metrics import r2_score
size = 100

#We run the method 10 times with different random seeds
for i in range(10):
print("Random seed {}".format(i))
np.random.seed(seed=i)
X_seed = np.random.normal(0, 1, size)
X1 = X_seed + np.random.normal(0, .1, size)
X2 = X_seed + np.random.normal(0, .1, size)
X3 = X_seed + np.random.normal(0, .1, size)
Y = X1 + X2 + X3 + np.random.normal(0, 1, size)
X = np.array([X1, X2, X3]).T

lr = LinearRegression()
lr.fit(X,Y)
print("Linear model: {}".format(pretty_print_linear(lr.coef_)))

ridge = Ridge(alpha=10)
ridge.fit(X,Y)
print("Ridge model: {}".format(pretty_print_linear(ridge.coef_)))

# 输出
Random seed 0
Linear model: 0.728 * X0 + 2.309 * X1 + -0.082 * X2
Ridge model: 0.938 * X0 + 1.059 * X1 + 0.877 * X2

Random seed 1
Linear model: 1.152 * X0 + 2.366 * X1 + -0.599 * X2
Ridge model: 0.984 * X0 + 1.068 * X1 + 0.759 * X2

Random seed 2
Linear model: 0.697 * X0 + 0.322 * X1 + 2.086 * X2
Ridge model: 0.972 * X0 + 0.943 * X1 + 1.085 * X2

Random seed 3
Linear model: 0.287 * X0 + 1.254 * X1 + 1.491 * X2
Ridge model: 0.919 * X0 + 1.005 * X1 + 1.033 * X2

Random seed 4
Linear model: 0.187 * X0 + 0.772 * X1 + 2.189 * X2
Ridge model: 0.964 * X0 + 0.982 * X1 + 1.098 * X2

Random seed 5
Linear model: -1.291 * X0 + 1.591 * X1 + 2.747 * X2
Ridge model: 0.758 * X0 + 1.011 * X1 + 1.139 * X2

Random seed 6
Linear model: 1.199 * X0 + -0.031 * X1 + 1.915 * X2
Ridge model: 1.016 * X0 + 0.89 * X1 + 1.091 * X2

Random seed 7
Linear model: 1.474 * X0 + 1.762 * X1 + -0.151 * X2
Ridge model: 1.018 * X0 + 1.039 * X1 + 0.901 * X2

Random seed 8
Linear model: 0.084 * X0 + 1.88 * X1 + 1.107 * X2
Ridge model: 0.907 * X0 + 1.071 * X1 + 1.008 * X2

Random seed 9
Linear model: 0.714 * X0 + 0.776 * X1 + 1.364 * X2
Ridge model: 0.896 * X0 + 0.903 * X1 + 0.98 * X2

从示例中可以看出,线性回归的系数变化很大,具体取决于生成的数据。然而,对于 L2 正则化模型,系数非常稳定并且密切反映数据的生成方式(所有系数接近 1 )。

0x02 特征选择实现方法四:随机森林选择

随机森林具有准确率高、鲁棒性好、易于使用等优点,这使得它成为了目前最流行的机器学习算法之一。随机森林提供了两种特征选择的方法:mean decrease impurity和mean decrease accuracy。

1.平均不纯度减少(mean decrease impurity)

1)原理介绍

随机森林由多颗 CART 决策树构成,决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二。
CART 利用不纯度可以确定节点(最优条件),对于分类问题,通常采用基尼不纯度,对于回归问题,通常采用的是方差或者最小二乘拟合。
当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的标准。
随机森林基于不纯度的排序结果非常鲜明,在得分最高的几个特征之后的特征,得分急剧的下降。
2)代码实现

from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import numpy as np

#Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]
# 训练随机森林模型,并通过feature_importances_属性获取每个特征的重要性分数。rf = RandomForestRegressor()
rf.fit(X, Y)
print("Features sorted by their score:")
print(sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names),
reverse=True))

2.平均精确度减少(mean decrease accuracy)

1)原理介绍

  • 通过直接度量每个特征对模型精确率的影响来进行特征选择。
  • 主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。
  • 对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大。
  • 对于重要的变量来说,打乱顺序就会降低模型的精确率。

2)代码实现

from sklearn.cross_validation import ShuffleSplit
from sklearn.metrics import r2_score
from collections import defaultdict
X = boston["data"]
Y = boston["target"]
rf = RandomForestRegressor()
scores = defaultdict(list)
#crossvalidate the scores on a number of different random splits of the data
for train_idx, test_idx in ShuffleSplit(len(X), 100, .3):
X_train, X_test = X[train_idx], X[test_idx]
Y_train, Y_test = Y[train_idx], Y[test_idx]
# 使用修改前的原始特征训练模型,其acc作为后续混洗特征值后的对比标准。r = rf.fit(X_train, Y_train)
acc = r2_score(Y_test, rf.predict(X_test))
# 遍历每一列特征
for i in range(X.shape[1]):
X_t = X_test.copy()
# 对这一列特征进行混洗,交互了一列特征内部的值的顺序
np.random.shuffle(X_t[:, i])
shuff_acc = r2_score(Y_test, rf.predict(X_t))
# 混洗某个特征值后,计算平均精确度减少程度。scores[names[i]].append((acc-shuff_acc)/acc)
print("Features sorted by their score:")
print(sorted([(round(np.mean(score), 4), feat) for feat, score in scores.items()], reverse=True))

0x03 特征选择实现方法五:顶层特征选择

顶层特征选择发建立在基于模型的特征选择方法基础之上的,例如线性回归和SVM等,在不同的子集上建立模型,然后汇总最终确定特征得分。

1.稳定性选择(Stability selection)

稳定性选择常常是一种既能够有助于理解数据又能够挑出优质特征的这种选择。

1)原理介绍

  • 稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM 或其他类似的方法。
  • 它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果。比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。
  • 理想情况下,重要特征的得分会接近 100%。稍微弱一点的特征得分会是非 0 的数,而最无用的特征得分将会接近于 0。

2)代码实现

from sklearn.linear_model import RandomizedLasso
from sklearn.datasets import load_boston
boston = load_boston()
#using the Boston housing data.
#Data gets scaled automatically by sklearn's implementation
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]
rlasso = RandomizedLasso(alpha=0.025)
rlasso.fit(X, Y)
print("Features sorted by their score:")
print(sorted(zip(map(lambda x: round(x, 4), rlasso.scores_), names),
reverse=True))

2.递归特征消除(Recursive feature elimination,RFE)

1)原理介绍

递归特征消除的主要思想是反复的构建模型(如 SVM 或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一遍,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。
这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
RFE 的稳定性很大程度上取决于在迭代的时候底层用哪种模型。
假如 RFE 采用的普通的回归,没有经过正则化的回归是不稳定的,那么 RFE 就是不稳定的。
假如 RFE 采用的是 Ridge,而用 Ridge 正则化的回归是稳定的,那么RFE 就是稳定的。

2)代码实现

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]
#use linear regression as the model
lr = LinearRegression()
#rank all features, i.e continue the elimination until the last one
rfe = RFE(lr, n_features_to_select=1)
rfe.fit(X,Y)
print("Features sorted by their rank:")
print(sorted(zip(map(lambda x: round(x, 4), rfe.ranking_), names)))
结果输出
Features sorted by their rank:
[(1, 'NOX'), (2, 'RM'), (3, 'CHAS'), (4, 'PTRATIO'), (5, 'DIS'),
(6, 'LSTAT'), (7, 'RAD'), (8, 'CRIM'), (9, 'INDUS'), (10, 'ZN'),
(11, 'TAX'), (12, 'B'), (13, 'AGE')]

0xFF 总结

1.单变量特征选择可以用于理解数据、数据的结构、特点,也可以用于排除不相关特征,但是它不能发现冗余特征。

2.正则化的线性模型可用于特征理解和特征选择。相比起 L1 正则化,L2 正则化的表现更加稳定,L2 正则化对于数据的理解来说很合适。由于响应变量和特征之间往往是非线性关系,可以采用 basis expansion 的方式将特征转换到一个更加合适的空间当中,在此基础上再考虑运用简单的线性模型。

3.随机森林是一种非常流行的特征选择方法,它易于使用。但它有两个主要问题:

  • 重要的特征有可能得分很低(关联特征问题)
  • 这种方法对特征变量类别多的特征越有利(偏向问题)

4.特征选择在很多机器学习和数据挖掘场景中都是非常有用的。在使用的时候要弄清楚自己的目标是什么,然后找到哪种方法适用于自己的任务。

  • 当选择最优特征以提升模型性能的时候,可以采用交叉验证的方法来验证某种方法是否比其他方法要好。
  • 当用特征选择的方法来理解数据的时候要留心,特征选择模型的稳定性非常重要,稳定性差的模型很容易就会导致错误的结论。
  • 对数据进行二次采样然后在子集上运行特征选择算法能够有所帮助,如果在各个子集上的结果是一致的,那就可以说在这个数据集上得出来的结论是可信的,可以用这种特征选择模型的结果来理解数据。

5.关于训练模型的特征筛选,个人建议的实施流程 :

i. 数据预处理后,先排除取值变化很小的特征。如果机器资源充足,并且希望尽量保留所有信息,可以把阈值设置得比较高,或者只过滤离散型特征只有一个取值的特征。
ii. 如果数据量过大,计算资源不足(内存不足以使用所有数据进行训练、计算速度过慢),可以使用单特征选择法排除部分特征。这些被排除的特征并不一定完全被排除不再使用,在后续的特征构造时也可以作为原始特征使用。
iii. 如果此时特征量依然非常大,或者是如果特征比较稀疏时,可以使用PCA(主成分分析)和 LDA(线性判别)等方法进行特征降维。
iv. 经过样本采样和特征预筛选后,训练样本可以用于训练模型。但是可能由于特征数量比较大而导致训练速度慢,或者想进一步筛选有效特征或排除无效特征(或噪音),我们可以使用正则化线性模型选择法、随机森林选择法或者顶层特征选择法进一步进行特征筛选。

最后,特征筛选是为了理解数据或更好地训练模型,我们应该根据自己的目标来选择适合的方法。为了更好/更容易地训练模型而进行的特征筛选,如果计算资源充足,应尽量避免过度筛选特征,因为特征筛选很容易丢失有用的信息。如果只是为了减少无效特征的影响,为了避免过拟合,可以选择随机森林和 XGBoost 等集成模型来避免对特征过拟合。

最新《机器学习优化》教程

一、资源简介

普林斯顿大学在 19 年开设了 COS 598D《机器学习优化》课程的讲义,这个课程主要介绍机器学习中出现的优化问题,以及解决这些问题的有效算法。这份讲义内容详实循序渐进,非常适合想要入门机器学习优化的同学阅读。

官网:
https://sites.google.com/view/optimization4machinelearning/home

作者简介:
Elad Hazan :普林斯顿大学计算机系的教授,重点研究机器学习和优化的基本问题。曾获得贝尔实验室奖、2012 年和 2008 年 IBM 哥德堡最佳论文奖、欧洲研究理事会奖、居里夫人奖和谷歌研究奖。曾担任计算学习协会指导委员会委员,并担任 COLT 2015 项目主席。2017 年,创立了专注于高效优化与控制的In8 inc,并于 2018 年被谷歌收购。普林斯顿大学商学院的联合创始人和联合董事。

二、主要内容

下面是这份讲义的主要目录:

  1. 介绍
  2. 优化和分析的基本概念
  3. 随机梯度下降法
  4. 泛化和非光滑优化
  5. 正则化
  6. 自适应正则化
  7. 方差减少
  8. Nesterov加速度(Nesterov Acceleration)
  9. 条件梯度法
  10. 机器学习的二阶方法
  11. Hyperparameter优化(Hyperparameter Optimization)

GAN 图像转换

一、资源简介

来自 MIT 的 Phillip Isola 在 2019 CVPR 上分享的图像转换(Image translation)的关键知识点和算法分析,包括配对的转换(Paired translation)和非配对的转换(Unpaired translation)相关的算法,如 pix2pix,CycleGAN 等。

图像转换
图像转换

官网:https://phillipi.github.io/talks/im2im_tutorial_cvpr2019.pdf

作者介绍:Phillip Isola:麻省理工学院 EECS 的助理教授,研究计算机视觉、机器学习和人工智能。在 OpenAI 做了一年的访问研究科学家,加州大学伯克利分校 EECS 系的 Alyosha Efros 的博士后学者,在麻省理工学院 (MIT) 完成了大脑与认知科学的博士学位,导师是特德•埃德森 (Ted Adelson) ,在耶鲁大学获得了计算机科学的本科学位。

二、主要内容

这份资料主要讲述的是 GAN 模型在图像风格迁移上面的应用,具体来说:
生成对抗网络(Generative Adversarial Network,简称 GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习。于 2014 年提出,生成对抗网络由一个生成网络与一个判别网络组成。生成网络从潜在空间(latent space)中随机取样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别网络的输入则为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实

图像到图像的转换(image-to-image translation)是一类视觉和图形问题,其中的目标是使用一组对齐的图像对来学习输入图像和输出图像之间的映射。随着 GAN 技术的发展,GAN 在图像转换任务上的方法越来越多。

image-to-image translation
image-to-image translation
BW -Color
BW – Color

特征工程系列:特征筛选的原理与实现(上)

前言

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。

那特征工程是什么?

特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。

特征工程又包含了Feature Selection(特征选择)、Feature Extraction(特征提取)和 Feature construction(特征构造)等子问题,本章内容主要讨论特征选择相关的方法及实现。

在实际项目中,我们可能会有大量的特征可使用,有的特征携带的信息丰富,有的特征携带的信息有重叠,有的特征则属于无关特征,如果所有特征不经筛选地全部作为训练特征,经常会出现维度灾难问题,甚至会降低模型的准确性。因此,我们需要进行特征筛选,排除无效/冗余的特征,把有用的特征挑选出来作为模型的训练数据。

特征选择介绍

1 .特征按重要性分类

  • 相关特征:对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;
  • 无关特征:对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;
  • 冗余特征:不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出;

2 .特征选择的目的

对于一个特定的学习算法来说,哪一个特征是有效的是未知的。因此,需要从所有特征中选择出对于学习算法有益的相关特征。而且在实际应用中,经常会出现维度灾难问题。如果只选择所有特征中的部分特征构建模型,那么可以大大减少学习算法的运行时间,也可以增加模型的可解释性。

3 .特征选择的原则

获取尽可能小的特征子集,不显著降低分类精度、不影响分类分布以及特征子集应具有稳定、适应性强等特点。

特征选择的方法

1 .Filter 方法(过滤式)

先进行特征选择,然后去训练学习器,所以特征选择的过程与学习器无关。相当于先对特征进行过滤操作,然后用特征子集来训练分类器。

主要思想:对每一维特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该特征的重要性,然后依据权重排序。

主要方法

  • Chi-squared test(卡方检验)
  • Information gain(信息增益)
  • Correlation coefficient scores(相关系数)

优点:运行速度快,是一种非常流行的特征选择方法。

缺点:无法提供反馈,特征选择的标准/规范的制定是在特征搜索算法中完成,学习算法无法向特征搜索算法传递对特征的需求。另外,可能处理某个特征时由于任意原因表示该特征不重要,但是该特征与其他特征结合起来则可能变得很重要。

2 .Wrapper 方法(封装式)

直接把最后要使用的分类器作为特征选择的评价函数,对于特定的分类器选择最优的特征子集。

主要思想:将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如 GA、PSO(如:优化算法-粒子群算法)、DE、ABC(如:优化算法-人工蜂群算法)等。

主要方法:递归特征消除算法。

优点:对特征进行搜索时围绕学习算法展开的,对特征选择的标准/规范是在学习算法的需求中展开的,能够考虑学习算法所属的任意学习偏差,从而确定最佳子特征,真正关注的是学习问题本身。由于每次尝试针对特定子集时必须运行学习算法,所以能够关注到学习算法的学习偏差/归纳偏差,因此封装能够发挥巨大的作用。

缺点:运行速度远慢于过滤算法,实际应用用封装方法没有过滤方法流行。

3 .Embedded 方法(嵌入式)

将特征选择嵌入到模型训练当中,其训练可能是相同的模型,但是特征选择完成后,还能给予特征选择完成的特征和模型训练出的超参数,再次训练优化。

主要思想:在模型既定的情况下学习出对提高模型准确性最好的特征。也就是在确定模型的过程中,挑选出那些对模型的训练有重要意义的特征。

主要方法:用带有L1正则化的项完成特征选择(也可以结合 L2 惩罚项来优化)、随机森林平均不纯度减少法/平均精确度减少法。

优点:对特征进行搜索时围绕学习算法展开的,能够考虑学习算法所属的任意学习偏差。训练模型的次数小于 Wrapper 方法,比较节省时间。

缺点:运行速度慢。

特征选择实现方法一:去掉取值变化小的特征 (Removing features with low variance)

该方法一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他特征选择方法选择特征。

考察某个特征下,样本的方差值,可以认为给定一个阈值,抛弃哪些小于某个阈值的特征。

1. 实现原理

  • 离散型变量:假设某特征的特征值只有 0 和 1,并且在所有输入样本中,95% 的实例的该特征取值都是 1,那就可以认为这个特征作用不大。
    如果 100% 都是 1 ,那这个特征就没意义了。
  • 连续型变量:需要将连续变量离散化之后才能用。
    而且实际当中,一般不太会有 95% 以上都取某个值的特征存在,所以这种方法虽然简单但是不太好用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。

2.实现代码

from sklearn.feature_selection import VarianceThreshold
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
sel.fit_transform(X)
array([[0, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 0],
[1, 1]])

0x04 特征选择实现方法二:单变量特征选择

单变量特征选择方法独立的衡量每个特征与响应变量之间的关系,单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。该方法简单,易于运行,易于理解,通常对于理解数据有较好的效果(但对特征优化、提高泛化能力来说不一定有效);这种方法有许多改进的版本、变种。

1. Pearson相关系数(Pearson Correlation)

皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性。

1)原理介绍

  • 就是用 x_i、x_j 的协方差除以 x_i 的标准差和 x_j 的标准差,可以看成一种剔除了两个变量量纲影响、标准化后的特殊协方差。
  • 协方差是度量各个维度偏离其均值的程度,协方差的值为正值时说明两者是正相关,否则是负相关的。
    结果的取值区间为[-1,1],-1 表示完全的负相关,+1 表示完全的正相关,0 表示没有线性相关,绝对值表示相关性的强度。
  • 标准差也称均方差,是方差的算术平方根,能反映一个数据集的离散程度。

2)主要用于连续型特征的筛选,不适用于离散型特征的筛选。

3)优缺点

优点:
相关系数计算速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Pearson 相关系数能够表征丰富的关系,符合表示关系的正负,绝对值能够表示强度。

缺点:
相关系数作为特征排序机制,它只对线性关系敏感,如果关系是非线性的,即便两个变量具有一一对应的关系,相关系数系数也可能会接近 0。
4)代码实现

import numpy as np
from scipy.stats import pearsonr

np.random.seed(2019)
size=1000
x = np.random.normal(0, 1, size)
# 计算两变量间的相关系数
print("Lower noise {}".format(pearsonr(x, x + np.random.normal(0, 1, size))))
print("Higher noise {}".format(pearsonr(x, x + np.random.normal(0, 10, size))))

2. 互信息和最大信息系数(Mutual information and maximal information coefficient)

如果变量不是独立的,那么我们可以通过考察联合概率分布与边缘概率分布乘积之间的 Kullback-Leibler 散度来判断它们是否“接近”于相互独立。

1)互信息方法

熵 H(Y)与条件熵H(Y|X) 之间的差称为互信息,互信息与条件熵之间的关系:

其实,这就是 ID3 决策树的特征选择规则。

互信息法也是评价定性自变量对定性因变量的相关性的,但是并不方便直接用于特征选择:

  • 它不属于度量方式,也没有办法进行归一化,在不同的数据上的结果无法做比较。
  • 只能用于离散型特征的选择,连续型特征需要先进行离散化才能用互信息进行特征选择,而互信息的结果对离散化的方式很敏感。

2)最大信息系数方法

由于互信息法并不方便直接用于特征选择,因此引入了最大信息系数。最大信息数据首先寻找一种最优的离散方式,然后把互信息取值转换成一种度量方式,取值区间为[0,1]。

3)最大信息系数方法代码实现

x = np.random.normal(0,10,300)
z = x *x
pearsonr(x,z)
# 输出-0.1
from minepy import MINE
m = MINE()
m.compute_score(x, z)
print(m.mic())
# 输出1.0

3. 距离相关系数(Distance correlation)

距离相关系数是为了克服 Pearson 相关系数的弱点而生的。

1)原理介绍

Pearson相关系数是 0,我们也不能断定这两个变量是独立的(有可能是非线性相关)。
例如 x 和 x^2 之间的 Pearson 相关系数是 0,但是两个变量并不是独立的。

2)代码实现

from scipy.spatial.distance import pdist, squareform
import numpy as np

from numbapro import jit, float32

def distcorr(X, Y):
""" Compute the distance correlation function

&gt;&gt;&gt; a = [1,2,3,4,5]
&gt;&gt;&gt; b = np.array([1,2,9,4,4])
&gt;&gt;&gt; distcorr(a, b)
0.762676242417
"""

X = np.atleast_1d(X)
Y = np.atleast_1d(Y)
if np.prod(X.shape) == len(X):
X = X[:, None]
if np.prod(Y.shape) == len(Y):
Y = Y[:, None]
X = np.atleast_2d(X)
Y = np.atleast_2d(Y)
n = X.shape[0]
if Y.shape[0] != X.shape[0]:
raise ValueError('Number of samples must match')
a = squareform(pdist(X))
b = squareform(pdist(Y))
A = a - a.mean(axis=0)[None, :] - a.mean(axis=1)[:, None] + a.mean()
B = b - b.mean(axis=0)[None, :] - b.mean(axis=1)[:, None] + b.mean()

dcov2_xy = (A * B).sum()/float(n * n)
dcov2_xx = (A * A).sum()/float(n * n)
dcov2_yy = (B * B).sum()/float(n * n)
dcor = np.sqrt(dcov2_xy)/np.sqrt(np.sqrt(dcov2_xx) * np.sqrt(dcov2_yy))
return dcor

4. 基于学习模型的特征排序(Model based ranking)

这种方法的思路是直接使用你要用的机器学习算法,针对每个单独的特征和响应变量建立预测模型。如果特征与响应变量之间的关系是非线性的,则有许多替代方案,例如基于树的方法(决策树,随机森林)、或者扩展的线性模型等。基于树的方法是最简单的方法之一,因为他们可以很好地模拟非线性关系,不需要太多的调整。但是要避免的主要是过度拟合,因此树的深度应该相对较小,并且应该应用交叉验证。

代码实现

from sklearn.cross_validation import cross_val_score, ShuffleSplit
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor

#Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]

rf = RandomForestRegressor(n_estimators=20, max_depth=4)
scores = []
# 使用每个特征单独训练模型,并获取每个模型的评分来作为特征选择的依据。for i in range(X.shape[1]):
score = cross_val_score(rf, X[:, i:i+1], Y, scoring="r2",
cv=ShuffleSplit(len(X), 3, .3))
scores.append((round(np.mean(score), 3), names[i]))
print(sorted(scores, reverse=True))

# 输出:[(0.636, 'LSTAT'), (0.59, 'RM'), (0.472, 'NOX'), (0.369, 'INDUS'),
(0.311, 'PTRATIO'), (0.24, 'TAX'), (0.24, 'CRIM'), (0.185, 'RAD'),
(0.16, 'ZN'), (0.087, 'B'), (0.062, 'DIS'), (0.036, 'CHAS'), (0.027, 'AGE')]

5.卡方检验

卡方检验是一种用途很广的计数资料的假设检验方法,由卡尔•皮尔逊提出。卡方值描述两个事件的独立性或者描述实际观察值与期望值的偏离程度。卡方值越大,表名实际观察值与期望值偏离越大,也说明两个事件的相互独立性越弱。

1)原理介绍

CHI 值(卡方值)用于衡量实际值与理论值的差异程度,除以 T 是为了避免不同观察值与不同期望之间产生的偏差因 T 的不同而差别太大,所以除以 E 以消除这种弊端。

  • 实际值与理论值偏差的绝对大小(由于平方的存在,差异被放大)
  • 差异值与理论值的相对大小

2)实现流程

CHI值越大,说明两个变量越不可能是独立无关的,也就是说CHI值越大,两个变量的相关程度也越高。
a. 对于特征变量x1,x2,…,xn,以及分类变量y。只需要计算CHI(x1,y)、CHI(x2,y)、…、CHI(xn,y),并按照CHI的值从大到小将特征排序。
b. 选择合适的阈值,大于阈值的特征留下,小于阈值的特征删除。这样筛选出一组特征子集就是输入模型训练的特征。

3)只适用于分类问题中离散型特征筛选,不能用于分类问题中连续型特征的筛选,也不能用于回归问题的特征筛选。

4)代码实现

现实方法:

  • sklearn.feature_selection.SelectKBest:
    返回k个最佳特征
  • sklearn.feature_selection.SelectPercentile:
    返回表现最佳的前r%个特征

#导入sklearn库中的SelectKBest和chi2
from sklearn.feature_selection import SelectKBest ,chi2
#选择相关性最高的前5个特征
X_chi2 = SelectKBest(chi2, k=5).fit_transform(X, y)
X_chi2.shape
输出:(27, 5)

0xFF 总结

1.去掉取值变化小的特征方法一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他特征选择方法选择特征。如果机器资源充足,并且希望尽量保留所有信息,可以把阈值设置得比较高,或者只过滤离散型特征只有一个取值的特征。

2.单变量特征选择可以用于理解数据、数据的结构、特点,也可以用于排除不相关特征,但是它不能发现冗余特征。

去掉取值变化小的特征方法和单变量特征选择方法都属于过滤式类特征筛选方法,但是学习算法无法向特征搜索算法传递对特征的需求。为了真正关注的是学习问题本身,我们将在《特征工程系列:特征筛选的原理与实现(下)》中继续介绍 Wrapper 方法和 Embedded 方法的原理与实现。

参考文献:

[1] Feature selection – Part I: univariate selection.
[2] Selecting good features – Part II: linear models and regularization.
[3] Feature selection.

IBM 开源三个抗癌 AI 项目

项目地址:

https://www.techzine.be/nieuws/41092/ibm-maakt-drie-ai-projecten-gericht-op-kankeronderzoek-opensource.html

近日,IBM 向开源社区发布了三个旨在克服治愈癌症的 AI 项目。在本月晚些时候将在瑞士举行的第 18 届欧洲计算生物学大会(ECCB)和第 27 届分子生物学智能系统大会(ISMB)上,将会深入介绍PaccMann 项目。

2018 年,癌症导致全球 960 万人死亡,此外,同年增加了 1800 多万新的癌症病例。IBM 计算系统生物学小组的研究人员已经开始研究基于 AI 和机器学习的方法,通过它们帮助我们快速了解这些诱导这些癌症的主要因素和分子机制,除此之外,重点还在于提高对肿瘤的构成认知。

通过遗传,污染,吸烟和饮食方面的倾向都被认为是引发癌症的可能性因素,但仍然还有许多需要去探索的因素,IBM 表示:我们的目标是加深对癌症的理解,以便有朝一日我们能够为行业和学术界提供新的治疗方向或知识。

此次 IBM 开源的三个项目如下:

1、PaccMann

PaccMann 项目旨在利用基于注意力的多模式神经网络来预测抗癌化合物的敏感性,ML 算法自动分析化合物并预测最有可能对抗癌症菌株的化合物。

PaccMann
PaccMann

该算法使用基因表达数据和化合物的分子结构。IBM 表示,早期识别潜在的抗癌化合物可能会降低药物开发的成本。目前开发单一药物治疗癌症就需花费数百万美元,正是因为这高昂的研发成本阻碍了我们开发新药物和疗法的步伐。(地址:https://www.zurich.ibm.com/paccmann/

2、INtERAcT

INtERAcT
INtERAcT

INtERAcT 能够帮助研究人员从大量的科学文献中自动提取有价值的数据。每年在癌症研究领域出版约17,000种出版物,研究人员做不到一一阅读这些内容,INtERAcT 目前正在测试提取与蛋白质 – 蛋白质相互作用的相关数据,该研究领域,已被确定为包括癌症在内的多种疾病中生物过程中断的可能因素。(地址:https://www.zurich.ibm.com/interact/

3、PIMKL

PIMKL
PIMKL

第三个项目 PIMKL 是一种使用数据集的算法,该算法利用描述我们目前在分子相互作用方面的数据集,以此来预测癌症的进展和患者复发的可能,这是多核学习的一种,可以识别分子路径,这对于患者分类至关重要,可以为医疗保健专业人士提供个性化和调整治疗计划的方案。(地址:https://www.zurich.ibm.com/pimkl/

以上这三个项目都已经开源,PaccMann 和 INtERAcT 的开源代码可以在各自的官网中找到,PIMKL 已部署在 IBM 云上,源代码也已发布。

神经网络「黑盒子」的正确打开方式!

现代神经网络经常被吐槽为「黑盒子」。尽管它们在各类问题上都取得了成功,但我们仍无法直观地理解它们是如何在内部做出决策的。随着人工智能系统被应用到更多重要的场景中,更好地了解其内部决策过程将有助于研究者能够及时发现其中的缺陷和错误。对此,谷歌 AI 研究院与 OpenAI 一起合作提出了能够弄清这个「黑盒子」里面到底有什么的新方法——激活图集。谷歌在博客上发布文章介绍了这一意义重大的成果 ——

神经网络已成为图像相关计算任务中的实际标准,目前已被部署在多种场景中:从自动标记图像库中的照片到自动驾驶系统,我们都能看到神经网络的身影。鉴于机器学习系统的在执行方面的准确性比不使用机器学习、直接由人为设计的系统更好,机器学习系统开始变得无处不在。但是,由于这些系统所了解的基本信息都是在自动训练过程中学习到的,因此我们对于网络处理其给定任务的整个过程的了解,有时仍然隔着一层纱。

近期,经过与 OpenAI 同事的通力合作,我们在发表的《用激活图集探索神经网络》论文中(「Exploring Neural Networks with Activation Atlases」,论文地址:https://distill.pub/2019/activation-atlas)论文中,描述了一种新技术,旨在帮助回答「给定一张图像时,图像分类的神经网络能“看到”什么」的问题。

激活图集提供了一种融入卷积视觉网络的新方法,为网络的隐藏层内部提供了一个全局的、层级化和可解释的概念综述。我们认为,激活图集揭示了机器针对图像学到的字母表,即一系列简单、基础的概念,它们被组合并重组进而形成更复杂得多的视觉概念。同时,我们还开源了部分 jupyter notebooks 的代码,以期帮助开发者们开始制作自己的激活图集。

下面显示的激活图集是根据在 ImageNet 数据集上训练的卷积图像分类网络 Inceptionv1 构建的。通常,给分类网络输入一张图像,然后令其标记出该图像属于 1000 个预定类别中的哪一类,例如「意大利面」,「通气管」或「煎锅」。为此,我们通过一个约十层的网络来评估图像数据,该网络每层由数百个神经元组成,且对于不同类型的图块,每个神经元在图像块的激活程度不同。某层中的一个神经元可能对「狗耳朵」图像块的激活程度更大,而另一层的另一个神经元可能会对高对比度的「垂直线」图像更敏感。

我们从一百万张图像的神经网络的每个层中收集到了内部激活图,并构建了一套激活图集。这些激活图由一组复杂的高维向量表示,通过 UMAP 投影到有用的二维布局中,其中 UMAP 是一种保持原始高维空间局部结构的降维技术。

这就需要组织激活向量,并且因为激活图太多而无法一目了然,所以我们也需要将它们整合成一个更易于管理的数量。为此,我们在之前创建的 2D 布局上提前绘制好了网格。对于网格中的每个单元格,我们对位于其边界内的所有激活取均值,并使用特征可视化来创建图标表示。

激活图集
激活图集
左:通过网络输入一组一百万张随机图像,每个图像收集一个随机空间激活图。中间:通过 UMAP 提供激活以将其降维到二维。然后绘制,相似的激活图彼此临近。右:然后我们绘制一个网格,对一个单元格内的激活取均值,并对平均激活做特征转置。

下面我们可以看到仅一层神经网络的激活图集(请记住,这些分类模型可以有六个或更多层)。它显示了在该层,网络在做图像分类时学到的一般视觉概念。这张图集第一眼看上去气势如虹——感觉很多东西在一起涌过来!这种多样性反映了模型所演化出来的各种视觉抽象和概念。

总览多层
总览多层
总览多层(mixed4c)Inceptionv1 网络中其中一层的的激活图集。它大约是整个网络的一半。
植物的探测器
植物的探测器
在这个细节中,我们可以看到不同类型的叶子和植物的探测器
湖泊和沙洲探测器
湖泊和沙洲探测器
在这里,我们可以看到不同的水,湖泊和沙洲探测器。
建筑物和桥梁
建筑物和桥梁
在这里,我们看到不同类型的建筑物和桥梁。

正如我们前面提到的,该网络中还有更多层。让我们看一下这个层之前的层,并深入网络中探索视觉概念是如何变得更加细化的(每个层在前一层的激活顶部构建其激活)。

「哺乳动物」区域
「哺乳动物」区域
在前面的一层——mixed4a 中,有一个模糊的「哺乳动物」区域。
水果和食物
水果和食物
通过网络的下一层,mixed4b,动物和人类已被分离开,中间出现了一些水果和食物。
通过层 mixed4c
通过层 mixed4c
通过层 mixed4c,这些概念被进一步细化并区分为小「半岛」。

在这里,我们已经看到了从一层发展到另一层的全局构架,但每个概念在层的发展过程中也变得更加具体和复杂。如果我们聚焦于有助于特定分类的三层区域,比如「白菜」,我们可以清楚地看到这一点。

三层区域
三层区域
左图:与其他图层相比,这个早期图层发特征非常不突出。中心:在中间层,图像完全与叶子类似,但它们可以是任何类型的植物。右图:在最后一层,图像非常明显像卷心菜,它们的叶子弯曲成圆形球。

这里还有另一个值得注意的现象:当你从一层到另一层移动时,不仅概念被细化,还会出现旧概念组合之外的新概念。

mixed4c mixed5b 进行对比
mixed4c mixed5b 进行对比

您可以看到,在 mixed4c(左和中)中,沙子和水是完全不同的概念,两者都有被分类为「沙洲」的明显属性。将其与后一层(右),mixed5b 进行对比,以上两种概念似乎被融合为了一个激活图。

除了放大特定图层整个激活图集的某些区域外,我们还可以在 ImageNet 中仅为 1000 个类中的一类创建特定图层的图集。下面将展示网络分类任务中的常用概念和探测器,例如「红狐狸」。

「红狐狸」
「红狐狸」
这里,我们可以更清楚地看到网络正在用什么标准来分类「红狐狸」。他们有尖尖的耳朵,被红色的皮毛包围的白色嘴鼻,以及繁茂树木或雪域的背景。
「瓦屋顶」
「瓦屋顶」
这里,我们可以看到「瓦屋顶」探测器的许多不同尺度和角度。
「野山羊」
「野山羊」
对于「野山羊」,我们看到了角和棕色皮毛的探测器,还有我们可能会发现这些动物的环境,如岩石山坡。
「朝鲜蓟」
「朝鲜蓟」
像瓦片屋顶的探测器一样,「朝鲜蓟」也有许多不同大小的探测器,用于探测朝鲜蓟的纹理,但我们也有一些紫色的花探测器,它们可能是检测朝鲜蓟植物的花朵。

这些图集不仅揭示了模型中细微的视觉抽象概念,而且还揭示了高层次的误解。例如,通过查看「大白鲨」的激活图集,我们可以看到水和三角形的鳍(正如预期的那样),但我们也会看到看起来像棒球的东西。这暗示了这个研究模型所采用的捷径,它将红色棒球与大白鲨的张开嘴混合在一起。

「大白鲨」
「大白鲨」
我们可以用棒球图像的补丁来测试这一点,以将模型的特定图像的分类从「灰鲸」切换为「大白鲨」。
从「灰鲸」切换为「大白鲨」
从「灰鲸」切换为「大白鲨」

我们希望激活图集能成为一种使机器学习更易于理解且解释性更强的技术的有用工具。为了帮助开发者入门,我们还发布了部分 jupyter notebooks 代码(https://github.com/tensorflow/lucid#activation-atlas-notebooks),通过单击 colab(https://colab.research.google.com/) 就能立即在浏览器中执行程序。它们创建的基础就是之前发布的工具包 Lucid,其中包括了许多其他可解释性可视化技术的代码。很期待各位能有所发现!

via:https://ai.googleblog.com/2019/03/exploring-neural-networks.html

机器人 4.0 白皮书

近日,达闼科技联合英特尔、新松机器人、科沃斯商用机器人共同发布《机器人 4.0 白皮书 ——云-边-端融合的机器人系统和架构》。

报告摘要

近年来,数字经济正在席卷全球,全球经济向数字经济迁移已经势在必然,数字经济已经成为国家的核心竞争力。据上海社科院测算,2016 年到 2018 年,中国数字经济对 GDP 增长的贡献率分别达到了74.07%、57.50%和 60.00%。预计 2019 年中国数字经济增长仍将占到62.50%。

数据成为驱动经济增长的核心生产要素。大数据和云计算等技术的融合,推动了物联网的迅速发展,实现了人与人、人与物、物与物的互联互通,导致数据量呈现爆发式增长。数据如同农业时代的土地、劳动力,工业时代的技术、资本一样,已成为数字经济时代的生产要素,而且是核心的生产要素。数字技术出现后,网络和云计算成为必要的信息基础设施。随着数字经济的发展,数字基础设施的概念更广泛,既包括了信息基础设施,也包括了对物理基础设施的数字化改造。

移动互联网、大数据、云计算、物联网、人工智能等信息技术的突破和融合发展促进了数字经济的快速发展。数字经济驱动未来,数字经济成为经济社会发展的主导力量。作为硬科技代表的机器人行业,将利用数字经济中的技术红利加速机器人的落地。人工智能、5G 通讯、计算的模式等都对机器人领域有着潜在而巨大的贡献。

一 报告正文

迈向云-边-端融合的机器人 4.0 时代

1 .数字经济的基础设施和发展趋势

近年来,数字经济正在席卷全球,全球经济向数字经济迁移已经势在必然,数字经济已经成为国家的核心竞争力。据上海社科院测算,2016 年到 2018 年,中国数字经济对 GDP 增长的贡献率分别达到了 74.07%、57.50%和 60.00%。预计 2019 年中国数字经济增长仍将占到 62.50%。

数据成为驱动经济增长的核心生产要素。大数据和云计算等技术的融合,推动了物联网的迅速发展,实现了人与人、人与物、物与物的互联互通,导致数据量呈现爆发式增长。数据如同农业时代的土地、劳动力,工业时代的技术、资本一样,已成为数字经济时代的生产要素, 而且是核心的生产要素。数字技术出现后,网络和云计算成为必要的信息基础设施。随着数字经济的发展,数字基础设施的概念更广泛,既包括了信息基础设施,也包括了对物理基础设施的数字化改造。

近年来,移动互联网、大数据、云计算、物联网、人工智能等信息技术的突破和融合发展促进了数字经济的快速发展。数字经济驱动未来,数字经济成为经济社会发展的主导力量。作为硬科技代表的机器人行业,将利用数字经济中的技术红利加速机器人的落地。人工智能、5G 通讯、计算的模式等都对机器人领域有着潜在而巨大的贡献。

2 .机器人技术发展主要阶段分析

2017 年,中国信息通信研究院、IDC 国际数据集团和英特尔共同发布了《人工智能时代的机器人 3.0 新生态》白皮书,其中把机器人的发展历程划分为三个时代,分别称之为机器人1.0、机器人 2.0、机器人 3.0。

机器人 1.0(1960-2000),机器人对外界环境没有感知,只能单纯复现人类的示教动作,在制造业领域替代工人进行机械性的重复体力劳动。机器人 2.0(2000-2015),通过传感器和数字技术的应用构建起机器人的感觉能力,并模拟部分人类功能,不但促进了机器人在工业领域的成熟应用,也逐步开始向商业领域拓展应用。机器人 3.0(2015-),伴随着感知、计算、控制等技术的迭代升级和图像识别、自然语音处理、深度认知学习等新型数字技术在机器人领域的深入应用,机器人领域的服务化趋势日益明显,逐渐渗透到社会生产生活的每一个角落。在机器人 2.0 的基础上,机器人 3.0 实现从感知到认知、推理、决策的智能化进阶。

3 .应用领域分析和大规模商用的难点

当前,全球机器人市场规模持续扩大,工业机器人市场增速稳定,服务机器人增速突出。2018 年,全球机器人市场规模达 298.2 亿美元,2013-2018 年的平均增长率约为 15.1%。在装备制造领域,机械臂凭借强大的负重能力和精准的抓取操作代替着工人的双手;在物流领域, 智能仓储机器人和无人搬运车不断提高着运输效率;在生活服务领域,家用清洁机器人和服务机器人正成为许多家庭的私人保姆和小秘书。

工业制造领域分析

目前,工业机器人在汽车、金属制品、电子、橡胶及塑料等行业已经得到了广泛的应用。随着性能的不断提升,以及各种应用场景的不断清晰,2013 年以来,工业机器人的市场规模正以年均 12.1%的速度快速增长,预计到 2020 年将达到 230 亿美元的销售额。随着人力成本的上升,工业制造领域的应用前景良好,将会保持快速增长的势头。同时,工业机器人需要拥有更高的灵活性、更强的自主避障和快速配置的能力,提高整体产品的易用性和稳定性。

消费服务领域分析

服务机器人虽然整体销售额低于工业机器人,但近几年一直维持着较高的年增长率,商用 服务机器人在商场、银行、酒店、机场等应用场景有了更多的落地部署,主要提供导览、问询、送物等基础服务。同时,家用服务机器人悄然进入千家万户,扫地机器人销量在家用服务机器 人销量中占主要份额,成为目前家务机器人中的主导品类。由于本体能力不足,隐私、安全方 面的问题,家庭管家机器人和陪伴型机器人的市场渗透率较低。2013 年以来全球服务机器人市场规模年均增速达 23.5%,预计 2020 年将快速增长至 156.9 亿美元。

从整个技术发展和市场环境看,机器人产业拥有以下发展推力:

  • 成熟的生态系统
  • 老龄化人口趋势和新兴市场
  • 更多智能产品互联和智能家庭建设
  • 人工智能、自然语言理解能力的增强

大规模商用的难点

在以上几点的助推下,机器人产业会继续快速发展,但要达到大规模商用,还有很多难点需要解决。

首先,机器人目前的能力不能满足用户期望,缺少关键场景。得益于人工智能带来的红利, 近年来机器人感知能力提升明显,可以通过视觉进行人脸识别,做语音交互。但是要真正替代 人类的劳动时间,做一些实际工作,机器人除了要具备感知能力,还要能够理解和决策。机器人需要有记忆、场景理解的能力,拥有知识,才能够优化决策,自主实施工作,并进行个性化演进。目前的机器人依然缺少令人瞩目和必不可少的应用场景,大部分人对于在家中拥有一个机器人没有很高的兴趣。在机器人提高自身能力,完成特定和复杂问题之前,这一比例将维持低水平。

其次,价格高,不成规模。传感器和硬件的价格一直在下降,但是机器人的价格依然很高, 不能被广泛的市场用户接受,没有形成市场规模。扫地机器人由于较低的价格,目前快速的进 入大众家庭。但是对于大多数类别的机器人,特别是具有更强功能、高精度移动底盘、机械臂 的机器人,价格依然是一个痛点。

第三,隐私、安全和数据保护问题亟待解决。随着机器人的应用领域越来越广泛,其物理安全和用户的数据安全问题更加凸显。在与机器人的交互过程中,机器人会不断收集用户的图像、语音、行动数据进行导航和决策,这些数据有的在本地处理,有的在云端处理,人们对这些数据的安全抱有疑虑。对于能够自由移动的服务机器人和拥有机械臂的工业机器人,保证机器人自身的物理安全,不被恶意攻击,避免造成人身伤害也至关重要。

4 .机器人 4.0 的定义和发展机会

机器人 3.0 预计将在 2020 年完成,在此之后,机器人将进入 4.0 时代,把云端大脑分布在从云到端的各个地方,充分利用边缘计算去提供更高性价比的服务,把要完成任务的记忆场景的知识和常识很好的组合起来,实现规模化部署。机器人除了具有感知能力实现智能协作,还具有理解和决策的能力,达到自主的服务。在某些不确定的情况下,它需要叫远程的人进行增强,或者做一些决策辅助,但是它在 90%,甚至 95%的情况可以自主完成任务。

要达到这一目标,首先需要利用人工智能和 5G 技术。利用人工智能技术提高机器人本体感知能力的同时,提升个性化自然交互能力。利用 5G 技术,大大缩短从终端到接入网的时间, 带宽大幅度上升,很多东西可以放到边缘端,加入更多的计算能力,包括云端大脑的一些扩展, 助力机器人规模化部署。

类似互联网的三级火箭发展模式,第一阶段——关键场景,把握垂直应用,提高场景、任 务、能力的匹配,提高机器人在关键应用场景的能力,扩大用户基础;第二阶段——人工增强, 通过加入持续学习和场景自适应的能力,延伸服务能力,取代部分人力,逐步实现对人的替代, 让机器人的能力满足用户预期;第三阶段——规模化,通过云-边-端融合的机器人系统和架构, 让机器人达到数百万千万级水平,从而降低价格成本,实现大规模商用。

5 .白皮书结构说明

本白皮书由英特尔、达闼科技、新松机器人、科沃斯商用机器人共同发布,分为八章。第 一章分析机器人发展情况,并定义机器人 4.0;第二章阐述人工智能和 5G 通讯技术推动机器人架构创新,并提出云-边-端融合的机器人系统和架构;第三章重点分析机器人 4.0 所需的核心技术;第四章探讨云端大脑和安全专网;第五章讨论边缘智能如何支持多机器人协作;第六章 思考服务机器人的场景认知、进化和业务;第七章描述协同创新与合作共赢的关键领域和方向;第八章进行总结与展望。

二 人工智能和 5G 通讯技术推动机器人架构创新

1 .人工智能技术演进和应用现状

人工智能技术的正式提出始于 1956 年,到目前为止已经取得不少进展。从技术上而言, 可以初略划分为两类方法,一类是符号方法,一类是统计方法(支持向量机,神经网络,深度学习都可以归为这一类)。

人工智能的发展可以大致分为两个阶段,1990 年以前主要是符号方法,包括基于规则,逻辑等。八十年代的基于知识库的专家系统是这个时期人工智能走向应用的一个尝试,取得了 一定的成果,但也很快显现了这类方法的问题,比如相对开放领域的知识库很难建立完整(尤其是常识知识很难表示完全),知识库增大后知识推理的组合爆炸,缺乏学习能力等问题。

上世纪 90 年代开始,统计方法开始盛行,取得了不少的进展,包括支持向量机等机器学习方法,并广泛应用于语音识别,自然语言处理,计算机视觉,数据挖掘等领域。从 2012 年开始,深度学习方法在计算机视觉,语音识别方面取得了较大的突破,不少任务的性能在大规模数据集上面得到大幅度提升。人工智能尤其是深度学习方法已经在不少领域开始广泛应用,包括语音识别,人脸识别等,作为机器人 3.0 的核心技术,在机器人的应用中起到了重要的作用。近年来人们发现了困扰传统机器学习方法的一些问题,如鲁棒性、可解释性,小数据学习在深度学习方法的框架下仍然没有得到解决。

总体说来,人工智能技术 60 多年来取得了不少的突破,但也存在不少亟待解决的问题。人工智能之父明斯基在发布他的新书之前发表的一篇论文也深刻地指出,目前人工智能的进展低于他的期望,其中一个主要原因是主流的方法(符号方法,统计方法或更细分的方法)都是想基于单一方法来解决人工智能问题,而真正的人类智能则是有机地结合了多种方法并进行选择应用的结果,未来的人工智能需要走这个方向才能进一步突破。机器人领域的应用对人工智能提出了尤其更高的要求,这也就需要在人工智能领域取得更多的突破。

2 .5G 通讯技术的演进和应用现状

5G 是第五代移动通信技术的简称,5G 标准自 2016 年在 3GPP正式开始立项,于 2017 年 12 月完成了5G R15 非独立组网的标准制定,支持在 4G 网络下同时部署 5G 网络,并于 2018 年 6 月完成了 5G R15 独立组网的标准制定。目前 5G 在各个国家开始了实验性部署。

在国内, 三大运营商从 2018 年开始 5G 实验网的测试,2019 年已经在部分城市完成了在 sub-6Ghz 频段以下的 5G 规模测试。5G 实验网峰值速率可以达到 10Gbps,在密集部署城区平均速率达到了 100Mbps,在低时延模式下,5G 终端和基站传输时延达到 1 毫秒以内,满足了 ITU 最初制定 5G 需求。2019 年 6 月,国内正式发布了5G 的牌照,中国移动、中国联通、中国电信和广电开始了商用部署。4G技术从 2008 年 3GPP release8 标准完成到 2013 年4G 牌照的发布用了5 年时间,5G 从标准完成到牌照的发布只用了一年,凸显了国内 5G 发展的迫切和重要。

除了网络传输能力的提升,5G 还制定了非常灵活的空中接口和核心网标准,增强了对不同业务支持的能力,相对于 4G 以移动宽带(MBB)为主的应用,5G 的应用领域进一步加强移动宽带业务(eMBB),比如高清/全景视频,移动 VR/AR 等等,同时 5G 的应用拓展到海量 连接的物联网(mMTC)和高可靠低时延(URLLC)的业务。URLLC 的业务包括车联网、自动驾驶、远程医疗、工业自动化等应用。

国内的 5G Sub-6Ghz  频段部署,eMBB, URLLC, mMTC 应用都可以得到很好的支持。在高频段,比如28GHz 左右,目前在国内还在实验阶段,高频段将主要支持 eMBB 应用。对于云端机器人应用,既有时延和可靠性要求不高的应用,比如数据备份、训练数据的采集等等,也有实时视频传输交互,还有对时延和可靠性要求非常高 的机器人的运动控制、远程操控等等。这些应用,可以在 5G  网络上,通过灵活的配置得到更好的支持。

对于 5G 的应用,其最初的商用部署是针对 eMBB 业务,比如 5G 的手机等等,由于标准和网络设备的复杂性,5G 设备和网络的功能会根据需求演进。如果 eMBB 模式不能完全满足需求,就需要积极和运营商、设备商沟通、合作,推动对该业务的支持。同时5 的 标准也在不断的演进,目前 5G R16 版本的标准正在制定过程中,计划将于 2019 年底完成。R16 版本将包含对 5G 网络效率的提升和应用的增强,比如对车联网、工业 IoT 和 URLLC 业务的增强。5G 网络的持续演进将进一步增强网络的能力和灵活性,满足机器人 4.0 的云-边-端的更高的互联要求。

3 .云端大脑对机器人能力的增强

2010 年提出的云机器人概念引入了云端大脑,机器人尝试引入云计算、云存储及其它云技术,达到机器人融合基础设施和共享服务的优点。相比于独立的机器人本体,连接云端大脑后的机器人拥有以下四个核心优势。

  • 信息和知识共享:一个云端大脑可以控制很多机器人,云端大脑可以汇集来自所有连接机器人的视觉、语音和环境信息,经云端大脑智能分析处理后的数据信息可以被所有连接机器人使用。利用云服务器,各机器人本体获取和处理的信息可以保持最新, 并安全备份。
  • 平衡计算负载:一些机器人功能需要较高的计算能力,利用云端平衡计算负载可以降低机器人本体的硬件需求,在保证能力的同时,让机器人更轻、更小、更便宜。
  • 协同合作:通过云端大脑,机器人本体不再独立工作,多机器人可以协同工作,例如共同搬运货物,配合完成一整套工作流程等。
  • 独立于本体持续升级:借助云端大脑,机器人可以独立于本体持续升级,不再依赖于本体硬件设备。

4 .边缘计算对机器人服务的提升

IoT 应用的快速发展,使得大量数据在网络边缘产生,推动了边缘计算的产生和发展。边缘计算的提出始于4G 时代,将计算和存储资源部署到网络边缘,不仅可以减少核心网和互联网上的流量,还可以显著降低传输时延,提高网络可靠性。

低时延的业务需要终端、移动蜂窝网(接入网和核心网)、互联网、数据中心的端到端的保障。目前的测试结果表明 5G 手机和基站的数据通路延时可以达到 4 毫秒,在 URLLC 模式下,手机和基站的延时可以达到1毫秒以下,相比 4G 的 20 毫秒提高了 20 倍左右。对于互联网和数据中心的时延,一般情况下由于地理位置分布广和未针对低时延优化,从核心网网关到互联网数据中心可在几十到几百毫秒之间。在 5G中,其核心网引入了分布式网关,网关可以下沉到基站附近,边缘服务器可以直接连接到分布式网关上,大大降低网络的端到端时延。

边缘计算的引入将解决终端能力受限和云计算的实时响应的问题,增强机器人云端大脑的 实时响应能力,对于满足机器人 4.0 的要求十分关键,比如实时的推理、场景理解、操控等等。边缘计算和云计算的结合,将突破终端的计算能力和存储的限制,提高 AI 算法的训练和推理能力,比如提升精度和降低训练时间。

同时将大部分机器人的智能布署在边缘和云端,通过协 作和不断的训练,持续不断的提高机器人智能,比如通过边缘计算能更好的支持实时的多机协 作,支持实时的知识图谱提取、理解和决策,持续不断的提高机器人的智能。边缘计算和云计算还可以解决机器人终端升级维护的困难,在机器人本体的生命周期内不断升级,提高机器人的能力,增强数据安全和隐私保护,充分利用摩尔定律带来的性能提升。

5 .云-边-端一体化对机器人系统的支撑

云-边-端一体化构建了一个通过机器人提供多样化服务的规模化运营平台。其中,服务机器人本体是服务的实施者,而实际功能则根据服务的需要无缝地在终端计算(机器人本体)、边缘计算和云计算之间分布和协同。机器人系统类似现在智能手机上的各种 APP,主要关注如何实现高性价比的多模态感知融合、自适应交互和实时安全计算。

  • 多模态感知融合:为了支持机器人的移动、避障、交互和操作,机器人系统必须装备 多种传感器(如摄像头、麦克风阵列、激光雷达、超声波等)。同时,环境里的传感 器可以补足机器人的物理空间局限性。大部分数据需要在时间同步的前提下进行处理, 并且调用不同复杂度的算法模块(例如 SLAM,图像处理,人和物体的识别等)。机器人硬件系统和边缘计算需要协同来支持(可能来自多个机器人的)多传感器数据同 步和计算加速,因此应该采用能灵活组合 CPU、FPGA 和 DSA (Domain-Specific Accelerator)的异构计算平台。另一部分没有强实时性要求的感知任务(如人的行为 识别、场景识别等),可以由云计算支持。
  • 自适应交互:为了支持机器人的个性化服务和持续学习能力,需要将感知模块的输出与知识图谱结合对环境和人充分理解,并且逐步提取和积累与服务场景和个人相关的个性化知识。通用知识和较少变化的领域知识应该存放在云端,而与地域和个性化服务相关的知识应该存放在边缘或者终端。无论知识存放在哪里,在机器人系统中应该有统一的调用接口,并可以保证实时通讯。基于 ROS2 构造涵盖终端和网络侧的软件系统框架可以满足未来的需求。
  • 实时安全计算:未来的服务机器人应用将有大量需要实时响应的情形(如语音交互、协同操作等),因此需要在边缘服务器部署相应的加速硬件。同时,机器人也将处理 大量涉及用户隐私的数据(如视频、图像、对话等)。云-边-端一体化架构需要构建隐 私数据的安全传输和存储机制,并且限定物理范围。对于可以进行物理操作的机器人, 要构建独立的安全监测机制,保证即使机器人系统被远程攻击劫持后也不会造成物理 安全损害。

三 机器人 4.0 核心技术

在机器人 3.0 时代,服务机器人可以做到一些物体识别、人脸识别,在 4.0 时代需要加上自适应能力。因为用深度学习做物体识别、人脸识别的时候需要很多的数据来源,但是真正到家庭场景时没有那么多数据,这就要求机器人必须通过少量数据去建立识别能力,自己去找到不同的位置,不同的角度做训练。

这些就是机器人 4.0 要做的,首先对三维环境语义的理解,在知道它是什么的基础上,把看到的信息变成知识,让存储就变得更加合理,而且可搜索,可查询,可关联,也可推理。应用层可以根据这个知识和观测为现场场景做出智能的提醒,寻找物品,进行行为检测。例如,老人要出门,机器人的知识库告诉他,今天预报要下雨,但是检测到老人没有带伞,然后查询伞的位置,机器人就可以把伞送到老人手里。这都是结合内部知识和外部情况所做的决策。

知识图谱在整个学术界和工业界越来越受到重视。获得图灵奖的杰夫∙辛顿教授在加入谷歌的时候就说要建一个知识图谱给全世界用。阿里研究院发布 2019 年的十大技术趋势 [8] 里面也专门提到了知识图谱的重要性。这是人工智能迈向下一个阶段的必由之路,也是必做之事。

总结下来,机器人 4.0 主要有以下几个核心技术,包括云-边-端的无缝协同计算、持续学习、协同学习、知识图谱、场景自适应和数据安全。

1 .云-边-端的无缝协同计算

受制于网络带宽以及延迟的制约,当前绝大多数机器人 3.0 系统是以机器人本体计算为主, 云端处理非实时、大计算量的任务为辅的系统架构。机器人的主要任务可以简单划分为感知、 推理及执行三大部分。为了能够精准地感知理解环境以服务于人机交互,机器人系统通常集成 了大量的传感器,因而机器人系统会产生大量的数据。比如采用了高清摄像头,深度摄像头, 麦克风阵列以及激光雷达等传感器的机器人,每秒钟可以产生 250MB 以上的数据量。如此海量的数据全部传输到云端处理既不现实,也不高效。因此,需要将数据处理合理地分布在云- 边-端上。

另一方面,完成感知和理解的 AI 算法也非常复杂。机器人所使用的 AI 算法通常需要很强的算力,例如Faster RCNN 算法在 GPU上可以达到 5fps 的处理能力,但是 GPU 的功耗达到 200W 以上,机器人本体很难承受,从计算成本而言同样也非常昂贵。虽然机器人本体计算平台的计算能力仍在不断提高,但是相对于 AI 算法的需求依然有限。为了完成机器人的计算需求,需要在云和边缘侧提供算力的支持,以实现在大规模机器人应用场景下,更有效、更经济的计算力部署。

随着 5G 和边缘计算的部署,机器人端到基站的延迟可以达到毫秒级,使得 5G 的网络边缘可以很好地支持机器人的实时应用。同时,边缘服务器可以在网络的边缘、很靠近机器人的地方处理机器人产生的数据,减少对于云端处理的依赖,构成一个高效的数据处理架构。

云-边-端一体的机器人系统是面向大规模机器人的服务平台,信息的处理和知识的生成与应用同样需要在云-边-端上分布处理协同完成。例如,汇集来自所有连接机器人的视觉、语音和环境信息,加以分析或重构后,被所有连接的机器人所应用。

因此,在通常情况下,云侧可以提供高性能的计算以及通用知识的存储,边缘侧可以更有效的处理数据,提供算力支持,并在边缘范围内实现协同和共享,机器人终端完成实时的操作和处理等基本机器人的功能。然而由于机器人的业务需求多种多样,协同计算的部署也不是一成不变的,机器人 4.0 系统还要支持动态的任务迁移机制,合理的根据业务需求将不同的任务迁移到云-边-端,实现云-边-端的无缝协同计算。

2 .持续学习和协同学习

在机器学习方面,机器人 3.0 主要是采用基于大量数据进行监督学习的方法,这也是目前机器学习的主流方法,而在机器人 4.0,还需要加上持续学习和协同学习的能力,才能使得机器人能够适应更复杂的应用场景。

在 3.0 时代,服务机器人可以做到一些基本的物体识别、人脸识别,但由于机器人应用对感知识别的正确率要求很高,尽管这些方法在别的要求不高的领域已经可以满足应用需求(例如互联网搜索有 80%的正确率就够了),但对于机器人应用而言则远远不够。

第一是机器学习 所固有的鲁棒性方面的问题,深度学习方法也不能幸免,识别结果可能出错,而且出错的时候 系统也不知道自己错了,这样就可能造成服务的失败和错乱。例如人需要机器人取东西 A,而机器人却取了东西 B, 轻则闹笑话,引起用户不满,严重的可能会造成对用户的伤害(比如取错药品的情况)。鲁棒性的问题是目前所有机器学习方法自身的一个通病,因为训练数据中总 是存在着长尾数据无法被准确识别,该问题很难通过现有的监督学习方法在部署产品前就解决。

第二是数据不足,这也是现实应用中普遍出现的情况,例如用人体特征进行身份识别的时候需要大量的数据(几百张以上的不同人体姿态、角度的照片),而这些数据又无法事先获得。总结下来,这两方面的问题都和缺少数据直接相关。

要解决这些问题必须让机器人具有自主的持续学习能力。具体说来,机器人可以先通过少 量数据去建立基本的识别能力,然后会自主的去找到更多的相关数据并进行自动标注(或通其 他方式,例如与人交互来获得标注,但要注意尽量减少对用户的打扰)。用这些新的数据来对 已有的识别模型进行重新训练以改进性能,随着这个过程不断进行,机器人可以把识别的性能 不断提高。具体拿物体识别来说,机器人应该先通过少量数据来建立对该物体的基本识别能力, 然后可以自己去找到不同的位置,不同的角度做训练,不断提高对这个物体的识别精度,在一 段时间的持续学习后达到接近 100%,一个初步实现参见文献。

在实际应用中,一个机器人能接触到的数据是有限的,其持续学习的速度可能会受到限制。机器人 4.0 是一个云-边-端融合的系统,如果能够在机器人间或机器人与其他智能体间通过这个系统来共享数据、模型、知识库等,就能够进行所谓的协同学习。通过云端的模拟器来进行虚拟环境中的协同学习也是一种行之有效的方法,可以充分利用云的大规模并行处理能力和大数据处理能力。协同学习使得机器人的持续学习能力进一步增强,可以进一步提高学习的速度和精度。

3 .知识图谱

知识图谱在互联网和语音助手方向已经开始较为广泛的应用,尤其是百科知识图谱。机器人也有百科知识问答类的应用场景,对于这类的知识图谱可以直接加以应用。但不同于通常的百科知识类的知识图谱,机器人应用的知识图谱有一些不同的需求:

(1)需要动态和个性化的知识。机器人往往需要对所在的环境和人进行更深入的理解才能进行更好的服务,而且不仅仅是当前的情况,要对过去发生的一些情况进行记录(例如要了解老人通常什么时候起床,某个物体一般放在什么位置)。因此,机器人需要记录环境里不同时间的人和物、发生的事件等相关信息,这些都是通用知识图谱所不能事先提供的,必须在环境里去获取。这些动态的个性化知识能很好的对人进行个性化的服务,例如通过对某用户的观察,机器人可以观察到该用户的一些喜好,或者一些行为模式,这些信息可以帮助对该用户提供更好的服务。

(2) 知识图谱需要和感知、决策紧密结合, 并帮助实现更高级的持续学习能力。从人工智能发展的历史看,单一方法很难彻底解决 AI 问题,前面的介绍也提到不论符号方法还是统计方法都已经显现了瓶颈,而且目前在单一方法里都没有很好的方法解决这些瓶颈问题。按照明斯基的分析,未来需要多种方法结合的 AI 系统。从最近几年的研究进展看,这也是未来人工智能取得进一步突破的必经之路。

所以不同于以往知识图谱和计算机视觉等统计方法基本是独立运作的做法,知识图谱必须和感知决策更深入、有机的结合。具体来说,知识图谱的信息是从感知中获取的,通过基础的感知,加上场景理解,获得的信息可以存入知识图谱,然后这些知识可以进一步进行模式的挖掘(比如时间空间相关的模式)来获得更高层的知识。

知识图谱的一些知识又可以作为环境上下文信息提供给感知算法来进行连续学习,从而实现自适应的感知算法。从某种意义来说,这已经不是传统意义上的纯符号方法的知识图谱,而是一种混合的知识图谱,即符号方法和统计方法结合的知识图谱。这也是未来很有潜力取得突破的一个方向。

由于云-边-端融合的需要,知识图谱会分别存放在机器人侧,边缘侧和云侧,其接口可以采用统一的接口以利于系统对知识图谱进行统一的调用。由于协同学习和实时处理的需要,知识和其他相关信息(如数据,模型等)还可以通过云侧、边缘侧来进行共享,通过一定的冗余备份来达到更高的实时性。这类似于计算机架构中的高速缓存机制(Cache), 比如部分存储在云端的知识经常被调用,可以缓存到边缘端或机器人端提高其存取的速度。在 5G 网络下,延迟本身不是大问题,主要考虑更充分的利用边缘端和机器人端的计算能力,达到整体资源的最优利用。

4 .场景自适应

有了持续学习和知识图谱, 系统在感知方面的鲁棒性大大提高,也在场景分析方面获得了丰富的信息并存在知识图谱中,这就使得机器人能够根据当前的场景进行相应的行动。

场景自适应技术主要通过对场景进行三维语义理解的基础上,主动观察场景里人与物的变化,并预测可能发生的事件,从而产生与场景发展相关的行动建议。例如在养老/助老应用中老人端着一碗汤走向冰箱,机器人可以通过以往的经验或知识预测老人是要去开冰箱放东西, 就可以帮老人打开冰箱。再例如,机器人看到地上有一块果皮,预测可能会导致老人摔倒,这时机器人可以主动捡起果皮(机器人配备了手臂操控的情况下)或站到果皮边并警告老人。

这部分的关键技术是场景预测能力。场景预测就是通过对场景里的人、物、行为等的长期 观察,并结合相关的知识和统计模型来总结出一些个人偏好或行为模式,并据此来预测目前场 景要发生的事件。过去人工智能的符号方法中框架、脚本表示在这里可以作为知识表达的形式, 但更关键的是需要把符号方法和统计方法结合起来,从而解决以往单独用符号方法无法解决的 问题(比如缺少学习能力)。这部分的研究还处于比较初期的阶段,但相信在基于持续学习、知识图谱等技术充分结合的基础上,该方向在未来几年会有较大的突破。最终使得整个机器人 的闭环系统,即感知-认知-行动,变得更加智能和人性化。

云端融合在这里起到非常重要的作用,尤其是知识的共享方面。例如前面的水果皮的例子, 这方面的模式可能发生的不多,在单个机器人的情况下可能从来没见过这个情况,也就无法知 道是危险的。如果通过云-边-端融合,只要有一个机器人看到过这个危险情况的发生,就可以 把该知识分享给所有的机器人,所有的机器人就可以去预测这些危险情况了。除了通过在实际 的物理世界中观察,在云端通过大规模的模拟来预演生活中可能发生的情况,可能也是另外一 个有效的方法来获得更多的事件模式。

5 .数据安全

由于机器人配备了多种多样的传感器,在工作过程中可以搜集到很多的信息,包括视觉数 据,语音数据,位置数据等,这些重要的隐私数据都需要得到保护。在机器人处于云-边-端融 合的环境中,数据的处理根据需求会发生在机器人侧,边缘侧或者云侧,在网络受到攻击的情 况下,保护用户的隐私数据的安全变得尤其重要。

一方面可以通过数据脱敏的手段来消除隐私性;但是从根本上而言,云-边-端融合的机器人系统需要完整的数据安全保障机制,既要求保 证端到端的安全传输,也要保障在服务器端的安全存储。在机器人侧,传感器数据安全地传输 到可信计算单元,以及控制命令安全地传输到执行单元尤其重要,只有确保输入输出的安全, 才可以确保机器人在受到网络攻击的情况下,也能保证机器人物理安全的逻辑得到正确的执行。因此,在机器人侧,需要构建一个从传感器和执行器到可信计算单元之间的可信传输通道。

除了原始的隐私数据外,通过用户数据推理得到的个性化知识也包含了用户的隐私信息, 同样需要得到安全的保障。在云-边-端融合的环境下,机器人侧,边缘侧以及云侧的数据安全需求不同,因此需要不同的安全保障机制。在机器人本体方面需要保证重要的隐私数据的物理安全和安全相关应用的代码安全,网络侧和边缘端需要对用户的数据,以及根据用户数据推理得到的隐私信息做好保护,只有被授权的用户才可以得到访问权。尽量避免敏感数据上传到云端,存储在云端的数据需要提供安全存储鉴别机制。

四 云端大脑和安全专网的实践与思考

1 .云端智能机器人架构

为了让机器人具备通用智能,包括类人的感知和认知能力,类人的动作行为和类人自然交 互能力,并同时最大限度地保障机器人的运行安全,需要构建类人“大脑”的智能体。目前机 器人本体计算能力有限,必须通过可以无限扩展的云端计算能力来提供智能机器人所需的能力。

通过无线 5G 通信网络和一个安全高速骨干网络构成机器人“神经网络”,实现机器人本体和云 端大脑的连接。云端大脑包括机器人视觉系统、对话系统、运动智能和极限现实系统等技术, 其通过人工智能算法不断训练进化,使得前端机器人本体智能随之迅速提高。因此,采用云-网-端结合的智能机器人系统架构,具有更强的适应性和扩展性。

达闼科技提供的机器人云端智能大脑,利用深度学习、强化学习和迁移学习技术,通过物理和虚拟平行智能平台,以及多模态 AI 能力,让机器人的智能快速向人类智能汇集。必要时刻的人类干预确保了 AI 决策的安全性和可控性。极限现实系统借助流行的游戏引擎,有助于利用大量的游戏开发者进行环境的建设。

为了让机器人更加智能,更好的为人类提供服务,云端智能机器人不再是可以和人类简单对话、唱歌、跳舞的娱乐工具,而是需要在实际应用场景中帮助人们完成多种特定的任务,包括抓取目标物体、移动到指定位置等。具备这种云端大脑的新型云端智能机器人将可满足各种服务性行业(如医院、银行、营业厅、迎宾接待、教育等),以及家庭保姆服务等不同场景的需求。支撑机器人在营业厅 VIP 室端茶送水,在养老院与老人聊天、下棋、陪护、护理,在家中做饭、打扫、与人沟通、照看老人小孩以及陪伴应用场景等。

2 .云端机器人大脑

云端机器人“大脑”(如图 5)是由一个可以运行足够大规模机器人,并面向人工智能服务的平台;包含机器学习、人工智能视觉、自然语言处理和机器人运动智能,以及平行智能体的虚拟空间的综合智能平台;人类智慧增强的人机融合机器人运营服务平台;和面向各类机器人应用服务的云端智能开放能力平台四大部分构成。通过云端将机器人的智能视觉系统、智能语音对话系统、运动智能和极限现实系统等融合起来,形成真正可为人类服务的智能机器人。该技术架构富有弹性和无限的潜力,机器智能可以在很多应用场景下为人提供多种应用服务。

云端智能“大脑”具备提供机器人角色和对应智能技能服务,其中人工智能技能服务提供包括但不限于视觉自主导航和运动、行为智能(如视觉反馈抓取物体)等智能运动系统,人脸识别、人体识别、2D/3D 物体识别、环境识别、3D 重建/语义分割等智能视觉系统,包括自动语音识别、自然语言理解、情绪识别以及对话知识库等智能对话系统,以及用来模仿学习和训练机器人综合智能的虚拟平行智能平台。

通过大规模计算力来构建机器人的大脑中枢系统,通过深度学习、强化学习、模仿学习等 AI 技术,通过物理世界和平行虚拟空间智能融合,以及多模态智能交互,来训练机器人的通用智能能力。通过机器人身体上的各种传感器感知真实物理世界,并对物理世界进行三维重建,通过语义分割形成三维环境的高精度语义地图,让机器人真正理解当前的物理世界以及客观物体之间的关系。三维语义地图同时也构建了机器人数字孪生(Digital Twin)运行的虚拟物理空间,可持续不断地模拟和训练各种智能机器人的智能能力。这种云端智能“大脑”可支持同时为百万级实体机器人提供云端 AI 智能服务,帮助机器人理解物理世界。

人类智慧增强人机融合机器人运营服务平台,在必要的时刻,通过人机无缝融合的方式来支撑云端机器人规模化商用运行和安全管控服务。人类将直接正向干预(Human Intelligence),确保人工智能的安全性和决策可控性,在提供无差错的商用级服务的同时,这些人类的干预形成强化学习,智能反馈到 AI 训练系统中,从而让机器人智能快速向人类智能进化。

3 .机器人安全专网的实践

公众互联网中存在大量数据隐私泄露、病毒木马和漏洞攻击等问题,如果智能机器人与云端大脑的网络通信完全基于公众互联网,必将给云端智能架构带来极大的安全隐患。为了提高云端智能架构与系统的安全性,达闼科技构建了机器人安全专网 VBN (全称:Virtual Backbone Network),机器人本体通过物联网或移动互联网就近接入至 VBN 专网接入点,然后通过专网专有线路去访问云端大脑

达闼科技机器人安全专网叠加在运营商的网络基础设施之上,基于运营商的专有线路而不是互联网线路进行网络传输。作为云-边-端融合机器人系统的神经网络,它为机器人和云端大脑提供安全可靠的网络连接。达闼科技机器人专网从如下几个方面加强云端超融合机器人系统的整体安全性:

(1) 机器人专网 POP 点之间的传输线路为点对点 SDH 线路或 MPLS VPN 专线等专有线路, 专网的核心设备不提供互联网接入,设备和线路均与互联网物理隔离。只在有互联网接入需求的站点单独增加互联网接入设备,由该设备实现与互联网对接,但是针对这种场景会增加严格的 L3 到 L7 层的安全防护策略以及安全接入认证策略。总体来说,达闼科技机器人专网在物理上实现了与公众互联网的隔离,逻辑上则利用虚拟专网技术实现租户之间的业务隔离,为最终用户进一步提升了业务的安全性。

(2) 云端大脑与机器人专网一体化部署,即云端大脑部署在机器人专网 POP 点内,或者是通过专有线路与机器人专网互通。机器人只有在接入到专网 POP 点并通过认证后,才能去访问特定的云端大脑服务。对于互联网用户,云端大脑完全不可见,这大大降低了云端大脑被网络攻击的风险,提升了系统安全性。

(3) 智能机器人在接入到 VBN 专网时需要更严格的准入和认证机制。首先机器人在申请接入之前,相关信息必须在云端平台登记,必须在经过该平台的注册和激活后才能申请接入到专网,这样可以充分提升接入实体的可信性。机器人在接入到专网的过程中,须经过多重认证。对于物联网接入方式,必须使用定制的物联网卡,并设置特定的接入点和用户名密码,在通过物联网认证后到达 VBN 专网部署的专用接入网关,在该网关上再做一次认证。为提升第二次认证的可靠性,集成了 SDP 思想,将区块链技术引入到认证系统中,只有在许可链中写有访问权限的设备才能发现和访问 VBN 专网,即使链中的部分节点受损或被攻击,链也可以立即隔离这些节点并继续运行,从而提升网络认证体系的可靠性。

(4) 智能机器人可能通过物联网,也可能通过 4G/5G 互联网接入到 VBN 专网提供的接入点,VBN 专网接入点是和其他网络(如物联网、互联网等)的主要连接点,也可能是系统的主要风险点。除了严格的准入和认证机制外,此处会专门部署基于云的防火墙,该防火墙会基于从 L3 到 L7 等多个层面,针对每个接入租户或用户进行安全策略部署,包含但不限于对源和目的 IP 的策略限制、对源和目的端口号的策略限制、对应用层的安全策略等等。通过在 VBN 专网的入口处部署高等级的安全管控策略,非法用户即使是接入到专网后能攻击的范围也极其有限,能极大的降低 VBN 专网以及在专网后端运行的云端大脑被攻击的风险,从而为云端超融合机器人系统的整体安全性提供保障。

未来,云端智能机器人系统可以把人工辅助监督、记忆知识内容、低频次的认知类决策神经网络等功能仍然放在云端大脑,逐步把视觉识别、语音识别和智能运动等 AI 感知能力,以及需要实时响应的功能模块放在端侧和边缘计算节点,边缘计算节点和云端大脑通过机器人安全专网相连。

云端智能机器人天然具备移动通信的属性,它将是 5G 网络的杀手级应用。5G 网络为云端智能机器人与云端的网络连接提供最佳传输载体。云-边-端智能机器人正在向机器人本体—5G 网络—边缘计算节点—机器人安全专网和大规模云端“大脑”的架构发展。达闼科技打造的智能机器人云端“大脑”,在实施商业化运营和云端的安全控制的过程中,必然需要依托大带宽、低时延、超高可靠性、网络切片和边缘计算的 5G 网络来进一步增加机器人专网,这将是智能服务机器人产业化的必由之路。

五 边缘智能支持多机器人协作的实践与思考

1 .工业机器人发展趋势

近年来,随着物联网、云计算、大数据和人工智能为代表的新一代信息技术与传统工业技术的加速融合,全球新一轮科技革命和工业革命正蓬勃兴起。在这种世界科技和工业发展背景下,德国、美国、日本、英国和中国等世界主要国家分别推出了工业 4.0、工业互联网、工业智能化、工业 2050 和中国制造 2025 等一系列振兴工业的国家战略。习总书记曾经在两院院士大会上指出:机器人是“制造业皇冠顶端的明珠”。作为智能制造的核心装备,工业机器人在智能制造的发展过程中起到了不可替代的作用。

工业 3.0 通过广泛应用信息技术,已经使得工厂生产线的自动化程度和生产效率大幅度提高。但随着时间的推移,业界逐渐意识到了一些问题:如今消费者的个性化需求繁多,生产线 无法按照消费者需求生产出相应的产品,导致产品不畅销或者产能过剩造成资源浪费。另一个 重要的问题是,并没有很好的利用整个产品生命周期产生和累积的数据。近年来随着互联网的 蓬勃发展与人工智能算法的不断改善,使得业界可以在一定程度上解决上述问题,工业 4.0 即智能制造应运而生。

通过赋予生产线智能属性,可以增加生产线的柔性,满足消费者个性化需 求,利用数据仓库和数据挖掘做出生产决策,平衡多生产线负荷,提高有效产能避免资源浪费。同时又不得不面临新的问题:原始设备的运算和存储能力不足以满足智能制造的要求,而随着 产品生命周期中产生的数据量的不断累计势必会增加云端成本,并且数据安全如何保障也是一 个问题。基于以上问题,新松构建了以云-边-端为框架的平台。边缘计算设备可以满足数据的 实时传送与运算,并且在数据上传到公有云之前对数据进行分析与压缩,私有云则保证了数据 的安全性,将控制力留在企业边界。

当前,工业机器人呈现出以下三个方面的发展趋势:
1)泛在互联。由于以 AGV 为代表的移动工业机器人将在未来广泛使用,高可靠、高并发和低延迟的无线接入方式将成为工业机器人云平台的重要接入方式(包括环境的参数,多种设备接入的需求);
2)云端融合。一方面, 工业机器人的功能越来越强大,智能化程度越来越高,同时随着大数据、云计算和人工智能技 术的快速发展,把基于大数据的智能化计算移到云端实现是工业机器人的重要发展趋势(工业 机器人现场的数量的剧增,对分布式存储和处理的需求);
3)智能服务。工业机器人发展至今, 在工艺过程优化、远程监控、状态分析和预测性维护等生产使用环节积累了大量的数据和规则, 如何利用机器学习和云计算技术将这些海量数据、规则和知识形成机器人的智能服务,成为工 业机器人云平台发展的必然要求(全生命周期的管理)。

机器人是靠近产线和数据源头的网络边缘侧的重要制造设备,也是融合网络、计算、存储、应用等核心能力的重要载体和平台。在网络的边缘智能侧,机器人面向产线,就近提供边缘智 能服务,满足行业数字化敏捷连接、实时业务、数据优化、应用智能、安全与隐私保护等方面 的关键需求。

2 .多机协作应用

随着小批量、多品种、个性定制等生产需求的不断改变,对生产模式的柔性化要求越来越迫切,整个制造系统的数字化、网络化和智能化是发展的必然趋势。智能制造的“执行层”主要包括智能作业和智能物流,而工业机器人和移动机器人是其核心装备:工业机器人完成在固定工位的精密、快速、高强度作业,移动机器人在生产车间、仓库完成物料的搬运。

未来多机器人协作的边缘智能将实体空间中的人员、设备、资源、环境、活动等要素,以数据驱动的方式在赛博空间中建立从个体到集群的状态模型、关系模型、决策模型,通过状态感知-实时分析-优化决策-精确执行的闭环过程实现对实体空间要素的精确管理和协同优化。

3 .多机器人边缘智能系统架构

数据采集

针对不同类机器人或智能设备的数据,搭建统一的数据信息集成平台,形成设备“纵向”(设备端——管理层)与“横向”(设备产业链各环节之间)的二维信息联通平台,筛选出真正有用的数据,重点是将“原始数据”变为“有用数据”。

边缘计算

利用网络计算资源,将知识镜像建模和知识挖掘,在网络层中形成实体的镜像对称模型和大数据环境,通过对实体运行历史数据中的关联性和逻辑性进行挖掘,产生能够支持决策的制造知识,重点是将对数据的洞察变为支持决策的知识,形成知识库。边缘计算设备作为边缘设备的输出端,需要较高的实时性与扩展性。面对复杂的 IT 与 OT 设备混连的环境,我们需要有按照优先级处理事件的方案或者协议,比如TSN。而作为云端的输入端则需要较高的稳定性。我们需要对边缘计算设备做冗余以避免整个生产线失控的场景,比如分布式架构。而其自身的边缘智能则需要较强的浮点运算能力以进行智能分析与决策,比如使用专用的加速芯片。

边缘智能部署在边缘计算设备上。与端设备,采用的 TSN 硬件协议与 OPC 应用协议,最大限度保证了 IT 与 OT 的通信实时性与效率。与云设备,则是采用了 TCP 传输数据与 RPC 进行远程调用,保证了数据传输的安全稳定性,降低云端与边端之间的通信开发难度,提高系统稳定性与扩展性。

(1) 智能分析。将隐性问题显性化,通过设备端的智能分析,准确评估设备真实的健康状态(安全性,可靠性,实时性和经济性等多个维度)和未来趋势,并能够对潜在的故障和隐性问题进行预诊和定位,为设备使用、维护和管理的智能决策提供重要决策支持依据,重点是将“有用数据”变为“有用信息”。

(2) 智能决策。对状态的识别和决策,以优化、协同为核心手段,基于装备真实健康状态和衰退趋势,结合用户决策的定制化需求,提供设备使用、维护和管理的最优决策支持,并达成任务活动与设备状态的最佳匹配,以保障生产系统的持续稳定运行(近零故障运行),将有用的信息变为最优决策。

边缘应用

形成工业的典型应用场景,不断对于智能系统的动态优化和重构,将智能优化后的决策同步到设备的运行和企业资源运营的执行系统中,实现决策与价值的闭环。

(1) 优化生产线工艺流程。针对生产线中多机器人协同作业存在的作业时间不一致、路径冲突等问题,基于多机器人协同工艺优化方法,挖掘多维工艺参数与作业效率、节拍之间的隐含关系,以生产作业效率、路径最优为目标,实现基于群体智能的多机器人协同作业工艺参数与运动轨迹优化。

(2) 完善生产的运营管理数据,为更好的决策提供数据基础。依据机器人的设计工艺、应 用工艺,在三维环境下对机器人进行轨迹规划、可达性分析以及干涉检验等仿真;通过机器人 作业效率分析实现对工艺方案的评价及优化。根据机器人生产线工艺规划、多机协同作业规划、排产及物流控制方案,驱动三维模型进行生产过程模拟,依据仿真结果进行机器人及其所在单 元的应用工艺设计或优化过程的校验与评估,实现机器人生产线运行效率、节拍平衡等目标优 化。将仿真分析结果反馈至设计和应用环节进行验证;更新机器人工艺设计知识库,实现工艺 操作透明化及工艺过程自主优化。

综上,边缘计算是扩展机器人个体智能的途径。在未来的多机器人协作过程中,对于机器 人的预测性维护,生产线的智能排产等方面也都是机器人在边缘智能的重要应用方向。边缘智能技术通过协同机器人设备与边缘服务器,利用深度学习模型优化,深度学习计算迁移等方法, 使机器人在未来的使用中,能更好的自主决策,同时也让产线变得更智能,能够支撑生产计划 灵活适应产线资源的变化,最终使产线变得柔性化、个性化、智能化,实现智能制造的升级。

六 服务机器人的场景认知、进化和业务赋能的思考

1 .服务机器人多源异构数据协同认知

环境认知对于机器人而言是一个重要的研究环节。机器人对环境认知的目的是为复杂未知 环境下的机器人提供足够的决策信息。这就需要将机器人通过图像识别、导航定位、语音交互、触觉感知等技术获取的异构数据进行融合,实现优势互补,从而提升机器人对周围环境的感知能力。进一步,通过网络与其它智能体协同,并结合知识,可以显著提高认知的置信度。

未来将有多个服务机器人在智能环境中共同工作。多机器人之间、机器人与环境之间都可以通过网络和边缘计算共享它们的感知信息和场景状态信息。从认知数据融合的方法出发,将对自然环境的感知与理解从片面的、离散的、被动的感知层次提高到全局的、关联的、主动性的认知层次上,全面深入分析机器人系统与环境之间的交互关系,以实现灵活、稳定、可靠的机器人环境认知系统。

2 .云端一体架构支撑下的服务机器人认知进化

2010 年云计算技术将从概念层面逐渐走向应用层面,许多研发公司已经将云计算作为新的战略核心,并探索其企业级、社会级的应用。构建云端一体架构,实现从样本数据采集、标注、模型训练到端侧部署的整个过程。商用服务机器人领域,由于B端客户的需求多样,场景复杂,更需要机器人具备较高的场景自适应能力。机器人作为端侧智能设备,可以通过云端训练支持,端侧推理引擎部署,在云端一体架构支撑下获得认知能力的持续进化。

云平台从终端机器学习、深度学习需求出发,把内存、I/O、存储和计算容量通过网络集 成为一个虚拟的资源池来使用。在云端搭建训练平台,集成分布式计算、并行处理等核心技术, 构建虚拟化、高效、低成本、开放共享的系统架构,从终端机器学习需求出发,建立私有云业 务样本数据库,通过增量式学习和训练,不断优化前端模型准确度,构建差异化、个性化核心 技术能力,为前端业务持续赋能,为业务决策提供更“精准”、更“智能”、更“广泛”的技术 支撑。

云平台提供多元化的数据采集工具、智能爬虫工具和数据标注工具,提供从数据采集获取、数据清洗和后续的数据标注等一整套服务。依托机器人实际应用场景中的数据采集和大量已经 收录的公开数据集数据,包含文本、图片、音频、视频等类型数据,覆盖包括人脸检测、人脸 识别、人体检测、物体识别、语音识别、智能安防等领域,提供更全面、更精准的原始数据和 定制数据的采集、管理服务。

通过相机等图像设备采集实际应用场景中的视频数据,通过麦克风阵列等音频采集设备采 集音频数据,云平台进行数据管理、分类、存储。分类的标准依据实际应用场景进行,可以根 据数据类别,如人体样本、桌子、椅子、显示器、键盘样本等分类,也可以根据垂直领域分类, 如仓库数据、银行大厅数据、商超数据等。存储的数据可以通过标注训练、更新模型,更好地 在垂直领域部署图像智能和对话智能任务,实现机器人的能力面向垂直领域的逐步进化。

对于智能对话任务,在产品化项目测试完成后,整个系统将进行上线。接下来,伴随着客 户对产品的使用,将产生大量的对话数据和协作数据,这些数据都将导入到云平台的数据库中。随后,数据平台将提供接下来的技术和流程界面支撑,包括数据自动标签,数据人工标签,数据人工分析,数据扩容,框架/模型训练,框架/模型测试相关模块,从而达到整个系统知识库的完善,模型场景精确度提高,框架合理性技术提升,系统的智能进化,最终客户满意度的持 续提升。

传统的标注方式为模型给出候选结果,人工进行判别、修改和再标注。云平台可以结 合用户反馈,如在VIP 打招呼时用户是否答应,在回答问题后观察用户表情等方式,自动对回答进行判别标注,更新模型。此外,还可以通过“众包模式”,通过用户测试反馈点击机器人 回答是“好”是“坏”,作为标注方式。通过增量式的学习和训练,形成图像智能和对话智能 的自我进化能力。

3 .AIOT 技术浪潮背景下服务机器人如何赋能业务

(1)服务机器人与业务场景的深度连接

AIOT 被视作一种将影响人类社会形态的技术浪潮,其实现路径也值得服务机器人产业关注。换言之,AIOT 技术浪潮下服务机器人如何赋能业务?

如前文所述,服务机器人对场景的综合认知能力和业务处理能力涉及对话智能、图像智能、运动智能等技术环节。这其中,云端机器学习训练平台和云端业务管理平台的开发维护至关重 要,其意义不仅在于服务机器人本身的学习进化、日常运行、业务处理,也在于有机会与业务 场景云端实现某种意义上的对接,实现“云端一体化”。

而除了云端的对接,服务机器人的 AIOT 之路还需实现智慧场景下的多设备协同。机器人厂商可通过为B 端客户深度定制可信网络传输协议,实现服务机器人与传统设备间的数据传输链路,让服务机器人与场景中的各类设备互联互通。举例而言,在第三方设备接入方面,机器人厂商需为机器人预留丰富的可扩展软硬件接口;在通信方面,需支持 WiFi、4G、蓝牙、NB-IoT 等多种通信方式;在软件方面,需预留可与客户业务系统对接的接口,且机器人需具备集成能力;在架构设计方面,需在底层实现模块和模块之间的解耦,在应用层实现决策级或特征级的数据融合。

如此一来,服务机器人将成为诸多行业业务场景 AIOT 网络的重要实体终端;而通过提高网络接入能力和计算能力,机器人又成为边缘结点之一,最终实现帮助客户提升业务效率、服务水平的目的。

(2)案例简析:服务机器人 AIOT 赋能智慧银行、智慧检务

下面,以科沃斯商用机器人有限公司打造的银行服务机器人、案管机器人为例,分析AIOT 技术浪潮下服务机器人赋能行业的具体路径,以及不同垂直领域的共性与差异。

a .银行服务机器人

行业需求分析

如今,传统银行网点存在运营成本高、使用价值低等问题,正逐步向智慧银行方向转型升级。智慧银行以提升用户服务体验为中心,利用人工智能、大数据等新兴技术实现银行服务方式与业务模式的再造和升级。其中,智能设备间的互联互通尤为关键,它使得信息传递的效率加快、准确性提高,让众多设备实现N+N>2N 的联动效果。

产品价值分析

科沃斯银行服务机器人通过迎宾接待、业务咨询、二次营销等功能,为顾客提供智能化、人性化的服务体验,以服务为切口、以 AIOT 为路径,赋能银行智慧化转型。下面结合科沃斯银行服务机器人落地应用情况,简析银行服务机器人价值要素。

降低网点运营成本,优化网点营销收益,提升银行社会形象是银行服务机器人的三大核心价值.目前,科沃斯银行服务机器人已覆盖中国建设银行、中国农业银行、中国银行、平安银行、兴业银行等 20 余家知名银行。在位于新加坡的中国银行全球首家创新研发基地,为国际嘉宾承担引导服务工作。截至目前,其为银行网点顾客提供的服务总量已超 800 万人次,引导分流客户成功总量约 30 万人次,金融商品营销成功总量超过 30 万人次。通过提升银行服务水准升级零售业务,旺宝深入银行科技化进程。科沃斯智慧银行应用案例已入选工信部《人工智能实践录》。

b.案管机器人

行业需求分析

根据《最高人民检察院关于深化智慧检务建设的意见》,到 2020 年底,充分运用新一代信息技术,推进检察工作由信息化向智能化跃升,研发智慧检务的重点应用;到 2025 年底,全面实现智慧检务的发展目标,以机器换人力,以智能增效能,打造新型检察工作方式和管理方式。

目前,检务工作中的一些难点需要以开创性的方式解决。如来访人员在办事过程中不熟悉流程,检察机关人员需要花费大量的时间去回答办事流程类的问题;辩护人和诉讼代理人缺少案件查询与追踪的平台;办事人员对案件信息和法律文书有快速查询需求等等。

产品价值分析

科沃斯商用机器人有限公司推出的案管机器人基于良好的人机交互能力和定位导航自主运动能力,能够为客户提供主动迎宾、身份审核、业务咨询与案件信息查询、电子卷宗刻录、本异地事项办理等五大功能。案管机器人在检察院业务场景中,类似于银行服务机器人之于银行场景,承担了业务入口的重任,通过与现场机具的互联互通,深度嵌入现有业务流程,优化业务逻辑,提高办事效率,为客户创造实实在在的价值。

(3)展望:AIOT 领域服务机器人的市场机遇

综上可见,服务机器人融入业务场景的重要抓手是人机交互能力。而在基于 IoT 技术的市场中,与人发生联系的场景(无论是智慧政务还是智慧医疗、智慧办公等)逐渐丰富,人机交互的需求愈发强烈。随着近些年智能终端设备的发展,用户对于人与机器间的交互方式也提出了全新要求,从被动交互到主动交互,从限定场景交互到多场景自适应交互,尤其在 AIOT 技术浪潮下,云、边、端能力的发展和一体化,服务机器人的人机交互能力将取得长足进展。

以科沃斯银行服务机器人、案管机器人为代表的 to B 服务机器人产品,在对话智能、图像智能、运动智能融合的基础上,通过与场景中其他设备之间的互联互通以及云端的服务能力, 形成从端智能到云平台的一揽子 AIOT 智慧化解决方案,与业务场景深度耦合,为客户提供从共性到个性的定制化服务。未来随着服务场景的快速拓展和持续进化,服务机器人解决方案提供商需要抽象不同行业场景的共性需求,形成共性平台+应用子集的整体解决方案架构,通过共性部分的规模化降低行业服务成本,应用子集部分则需要通过服务中台的抽象和建立,构建针对 B 端客户个性化定制需求的快速响应能力,最终实现服务机器人产品的实质性落地和可持续发展。

七 协同创新与合作共赢

为了加速下一代服务机器人的规模化和商用化,亟需多方参与共同推进技术、产品、服务的尝试、迭代和更新。在优势互补的开放创新框架下,探讨长期愿景、研发前沿技术、推广商业合作、搭建创新生态,吸引商业实体、科研院所、开源社区的广泛参与和贡献。

在机器人 4.0 演进过程中,要摆脱线性思维,建立跳跃式发展框架。具体来说,人工智能和人工增强要按需融合,在核心技术逐步演进过程中,从优化垂直应用场景入手,率先在关键场景为用户提供稳定可靠的服务。在 5G 通信技术的支撑下,本地数据采集和云端知识共享应高效连接,通过不断延伸服务场景,逐步减少人工增强的比例。在共享计算、存储、通信资源基础上,智能算法持续从(云端)大数据和(本地端)个性化数据中抽取知识,逐步从特定场景适应到通用场景,最终实现机器人即服务(Robot As A Service)的长期愿景。

1 .机器人 4.0 的基础通用参考平台

针对这些需求,英特尔中国研究院提供了面向机器人 4.0 的基础通用参考平台——HERO系统平台。底层是硬件计算平台,上面是软件层。机器人 3.0 的部分,包括基本感知和交互、运动导航、规划、操纵。机器人 4.0 部分更多支持自适应交互和持续学习,包括三维场景的语义理解和个性化的知识图谱。

HERO 平台不仅可以提供基础的软硬件能力,并且可以基于该平台进一步扩展。例如,异构计算平台可以加入第三方硬件加速模块,知识图谱可以针对特定应用领域去扩展该领域的通用知识图谱,可以利用其中提供的动态知识图谱部分来获取动态的人性化知识。自适应学习部分也可以加入更多的感知模块来增强已有的感知功能或补充新的感知功能。

2 .知识融合

越来越多的研究者认为,人工智能技术将会从模仿人的行为和决策过程过渡到了解人类的 学习能力和运用知识的能力。在数字化时代,越来越多的信息被分析和存储后,将被映射为结构化的知识库。知识工程和人工智能的结合,会大大提高模式识别和机器学习算法的精度。随着认知科学、机器人学、自然语言理解等相关领域的发展,将催生出超越现有 Apple Siri、Google Now、IBM Watson 的推荐系统和问答系统,并且会跨越不同语言的边界。通过建立知识库和智能算法的良性循环,不断完善对假设的验证,实现预测和自我诊断。

3 .众包与群体智慧

深度学习算法在语音识别和图像分类中取得跳跃式发展的成绩,很大程度上得益于规模足 够大的数据集、以及通过众包技术给训练数据打标签的做法。在过去十几年,众包技术从 早期的创造内容Wikipedia,到标注数据 Amazon Mechanical Turk,到投资创新项目Kickstarter。在下一阶段,群体智慧将会扩展到创造新产品、打造新服务。未来的众包任务会更加细分、更 加多样化,和人工智能算法有关的包括标注数据、训练模型,和人类增强有关的包括提出 问题、做出决策,和云端融合有关的包括可视化工具和人机交互接口。

4 .仿真训练

在物理世界收集训练数据,让机器人从头开始学习决策策略,会遇到很多挑战。收集过程通常费时费事,有些任务会对人带来危险,有些极端案例不容易收集到。计算机图形学与仿真技术可以解决上述挑战,通过在虚拟场景中配置不同的环境和任务参数,分解机器人的感知、决策、控制模块,搭建模块与模块之间的状态表征方法,实现从虚拟仿真到真实操作的跨越。目前,基于增强学习框架,在奖励函数和机器人操作之间形成映射和迁移关系,在模拟器中超实时地迭代训练,可以大大缩短训练时间和降低学习成本。

5 .机器人即服务

机器人即服务结合了云计算、人工智能、机器人学、虚拟现实、自动化等,是数字经济时 代的全新业务模式,是“软件即服务”、“平台即服务”、“基础设施即服务”之后的新型服务 模式。通过租借机器人服务,企业能够以低成本、灵活、方便的形式完成不同的任务。机器人 本体需要提供动态、可定制、可编程的接口和模块,即可以在零售、农业、健康、物流、教育、制造等不同领域,填补日益扩大的劳动力短缺的缺口,提升运营效率,提高投入产出比。就像 智能手机与手机应用市场的经济模式类似,未来的机器人服务会激发硬件工程师、软件工程师、交互设计师、产品经理、算法工程师、人工训练师等参与,协同打造出机器人的应用市场、模 型市场、技能市场、服务市场等。预计从 2016 年到 2026 年这十年间,机器人即服务的市场规模会增长到 340 亿美元,复合年增长率达到 66%。

八 总结与展望

机器人技术是多学科交叉的科学工程, 涉及机械、电子、计算机、通信、人工智能和传感器,甚至纳米科技和材料技术等。毫不夸张地说,智能机器人是人工智能应用“皇冠上的明珠”。

近年来,人工智能和机器学习获得快速发展,但机器人个体的自主智能距离人们的期待还 有较大的差距,影响了机器人产业的规模化发展。如何利用跨领域的技术推动力,加速对机器 人的赋能是机器人产业亟待解决的问题。本机器人 4.0 白皮书针对当前机器人产业现状和瓶颈, 提出构建云边端一体化的协同计算平台,并在此平台上支持机器人持续学习和协同学习的能力, 实现基于个性化知识图谱和场景自适应的融合,通过协同创新实现机器人产业规模化。

边缘计算是最近几年提出的新概念,其推广和落地非常依赖于具体的应用,尤其适用于对实时性要求较高的场景。机器人应用正是非常合适的应用场景。边缘实时计算加上云计算的无限处理能力,可以大大提升机器人本体的人机交互和场景自适应能力,也会增强自主移动和感知能力。通过基于 5G 的云边端一体化,机器人本体的能力设计具有很大的弹性空间,从而解耦对机器人本体硬件能力的依赖,降低成本,推动大规模的部署就成为可能。

由于篇幅所限,白皮书对有些相关的问题没有深入探讨,例如机器人的灵巧操控技术、多模态感知融合技术、多智能体学习等等。我们希望未来通过深化产业协同创新,对这些问题继续探索。

虽然未来总是充满不确定性,我们坚信 AI 与 5G 的互相促进是机器人规模化发展的必经之路。希望机器人 4.0 白皮书中阐述的核心技术、云边端融合的系统框架和机器人跳跃式发展的思路,可以引领机器人技术和产业发展的方向。云端大脑和安全专网的实践和思考,以及智能制造和商业应用领域的经验解析,能够优化实施路径,让机器人尽快大规模地走进各行各业, 走进千家万户!

哈工大NLP工具:PyLTP

一、哈工大 LTP

LTP(Language Technology Platform)中文为语言技术平台,是哈工大社会计算与信息检索研究中心开发的一整套中文语言处理系统。LTP 制定了基于 XML 的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等 6 项中文处理核心技术),以及基于动态链接库(Dynamic Link Library,DLL)的应用程序接口,可视化工具,并且能够以网络服务的形式进行使用。

二 . pyltp 终极安装

下面介绍 Windows10 Python 环境下 LTP 的扩展包 pyltp 安装过程。

1. 常见错误

大家通常会调用 “pip install pyltp” 安装该扩展包,但会遇到各种错误,下面介绍一种可行的方法。

2. 安装pyltp包

首先,安装 Python3.6 环境,如下图所示“python-3.6.7-amd64.exe”。

python-3.6.7-amd64.exe
python-3.6.7-amd64.exe

接着,下载 pyltp 扩展包的 whl 文件至本地,调用 CMD 环境进行安装,注意需要将所在文件的路径写清楚。

  1. pyltp-0.2.1-cp35-cp35m-win_amd64.whl (对应Python3.5版本)
  2. pyltp-0.2.1-cp36-cp36m-win_amd64.whl (对应Python3.6版本)
  3. pip install C:\Python36\Scripts\pyltp-0.2.1-cp36-cp36m-win_amd64.whl

whl下载地址:
https://download.csdn.net/download/qq_22521211/10460778

注意,如果报错“error:Microsoft Visual C++ 9.0 is required”,则安装下面 exe文件。

exe文件
exe文件

3 .下载模型文件

最后需要下载模型文件,其下载地址为:

本文下载 3.4 版本的模型,下载解压如下图所示:

3.4版本的模型
3.4版本的模型

在编写代码时,需要导入指定文件夹中的模型,再进行中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等分析。例如:

#词性标注

pdir='AgriKG\\ltp\\pos.model'

pos = Postagger()

pos.load(pdir)

postags = pos.postag(word) #基于分词得到的list将下词性标注

postags = list(postags)

print(u"词性:", postags)

分词、词性标注、句法分析一系列任务之间存在依赖关系。举例来讲,对于词性标注,必须在分词结果之上进行才有意义。LTP 中提供的 5 种分析之间的依赖关系如下所示:

讲到这里,哈工大 pyltp 基本安装成功,接下来将介绍它的基本用法。
基础性文章,希望对入门者有所帮助。

三.中文分句和分词

1.中文分句

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

from pyltp import Segmentor

from pyltp import Postagger

from pyltp import NamedEntityRecognizer

#分句

text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"

sents = SentenceSplitter.split(text)

print('\n'.join(sents))

中文分句的输出结果如下所示:

  1. 贵州财经大学要举办大数据比赛吗?
  2. 那让欧几里得去问问看吧!
  3. 其实是在贵阳花溪区吧。

2.中文分词

# -*- coding: utf-8 -*-

from pyltp import SentenceSplitter

from pyltp import Segmentor

from pyltp import Postagger

from pyltp import NamedEntityRecognizer

&nbsp;

text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"

&nbsp;

#中文分词

segmentor = Segmentor() #初始化实例

segmentor.load("AgriKG\\ltp\\cws.model") #加载模型

words = segmentor.segment(text) #分词

print(type(words))

print(' '.join(words))

segmentor.release() #释放模型

输出结果如下所示(人工换行):

  1. <class ‘pyltp.VectorOfString’>
  2. 贵州 财经 大学 要 举办 大 数据 比赛 吗 ?
  3. 那 让 欧 几 里 得 去 问问 看 吧 !
  4. 其实 是 在 贵阳 花溪区 吧 。