精华内容
下载资源
问答
  • 人工智能机器学习常见算法

    万次阅读 多人点赞 2016-05-22 15:47:54
    很多在平时的工作中都或多或少会用到机器学习的算法。这里IT经理网为您总结一下常见机器学习算法,以供您在工作和学习中参考。 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有

    这里写图片描述

    摘要

    之前一直对机器学习很感兴趣,一直没时间去研究,今天刚好是周末,有时间去各大技术论坛看看,刚好看到一篇关于机器学习不错的文章,在这里就分享给大家了.
    机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考。
    这里写图片描述
    机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。
    这里写图片描述

    学习方式

    根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。

    监督式学习:

    这里写图片描述

    在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾

    展开全文
  • 步入开源硬件智能机器人教育时代

    千次阅读 2013-01-20 17:15:59
    写于2011年9月,原文章标题《基于开源硬件的中小学智能机器人实验室建设探索》。发表在《中小学信息技术教育》杂志2012年第1期。杂志编辑将标题改为《步入开源硬件智能机器人教育时代》。  欢迎评论、转载。转载请...
     本文系曾祥潘老师原创文章。写于2011年9月,原文章标题《基于开源硬件的中小学智能机器人实验室建设探索》。发表在《中小学信息技术教育》杂志2012年第1期。杂志编辑将标题改为《步入开源硬件智能机器人教育时代》。 
    
      欢迎评论、转载。转载请保留以上信息。


    步入开源硬件智能机器人教育时代

    曾祥潘

    广州市白云区景泰小学

    [摘要]  智能机器人实验室的建设是机器人教育进入中小学的重要环节。如何使智能机器人实验室的应用获得可持续发展,机器人设备选型是关键。机器人厂商为了保护生产利益,产品兼容上存在技术屏障,使得不同类型机器人软硬件不能互换使用。为了避免设备生产厂商过多地影响机器人教育的发展,笔者提出采用开源硬件的智能机器人设备建设实验室,希望藉此打破技术壁垒,推进中小学机器人教育的普及。

    [关键词]  开源硬件  智能机器人  Arduino

    一、智能机器人实验室建设现状

    智能机器人的应用十分广泛,无论是工业、农业、军事乃至家庭、教育领域都可见其身影。在中小学机器人教育领域,对应用于教学的机器人性能要求不高,但要有较高的开放性和可扩展性,使用者可根据需要通过增减模块改变机器人功能,便于自主创新。另外在学校里使用的设备,注定要具有较高的性价比。

    目前,生产教育用机器人的厂商比较多,国内的或者国外的都有,中小学已建好的智能机器人实验室大多数采用了其中一家或多家厂商的产品。但是,笔者通过文献调查、机器人竞赛、及对周边学校实验室管理员了解使用情况时发现,学校在实验室的建设和使用中,由于各机器人生产厂商从保护知识产权和经济利益角度出发,其机器人产品普遍存在以下一些问题:

    1、各厂家产品繁杂,各品牌机器人自成体系互不兼容。为了保护生产利益,加上没有统一的技术标准,实验室在后期建设或者器材更新时大多只能选择同一厂商的产品,学校在器材的选择上受到限制。

    2、机器人产品更新换代迅速,旧型号零配件供应不足。不同型号的机器人配件往往不能互换,旧型号机器人在性能上虽然能满足教学需要,但停产后配件难寻,被迫升级全套器材,造成浪费。

    3、机器人功能模块类型少,其扩展性受限。各种型号的机器人多数针对竞赛而设计,配备的功能模块较少,其它类型的模块由于兼容性问题无法使用,机器人能实现的功能十分有限。

    4、机器人核心技术资料不公开,学生不能充分掌握机器人的各种知识。缺少电路原理图,无法分析零配件功能用途;机器人底层语言函数源代码不公布,不能了解机器人运作原理。

    5、缺少技术支援,机器人后期维护难。保修期一过,厂商的技术支持将停止,出现技术问题得不到解决。由于跟竞赛联系紧密,教师们对于技术上的研讨十分保守,教学交流也是难以开展。

    6、机器人价格较高,建设经费投入大。较高的建设经费使机器人教育进学校发展缓慢,同时,设备单价昂贵,教师担心设备损坏不敢“放手”让学生动手操作机器人,制约了学生的学习积极性。

    二、关于开源硬件

    开源硬件是指与开源软件相同方式设计的计算机和电子硬件。开源硬件通常发布有详细的硬件设计资料,如电路图、材料清单和电路板布局数据等。使用者可以通过购买、委托制造或自制等方式获得开源硬件。另外,得益于开源硬件独特的开发和发布方式,制作、使用开源硬件无需担心版权问题。

    在智能机器人领域,最常见的开源硬件是Arduion,见图1。

    图1   Arduino UNO主控板

    <!--[if !vml]-->
     



    Arduino是意大利的一个教学用开源硬件项目。Arduino包含一个单片机开发板、一个简单易用的软件开发系统(见图2)、一系列丰富的传感器和驱动电路。Arduino的电路板可以自行制作焊接,也可以购买已经组装好的,软体开发系统可以从官方站点 www.arduino.cc 上免费下载使用。

    Arduino系统使用C语言进行编程。Arduino的C语言已经进行了简化,降低了复杂性,初学者可以很容易上手,大大降低了入门门槛。笔者在初次接触Arduino,只花了几十分钟就可以编写简单的Arduino程序。如果不想使用字符编程,还可以选择图形化的编程工具,通过添加拖动图标的方式轻松编程。

    三、商品机器人与开源机器人

    常见的由机器人厂商生产的机器人称为商品机器人,由开源硬件组装而成的机器人称为开源机器人。

    开源机器人能否满足中小学机器人教学需求?现在将智能机器人实验室使用较为广泛的两款商品机器人与使用Arduino制作的开源机器人作一比较,见表1。

    表1  两款商品机器人与Arduino开源机器人比较

    机器人类型

    国产G品牌教育机器人

    国外L品牌教育机器人

    Arduino开源机器人

    控制器

    内核

    32位Cortex-M3内核

    32位 ARM7内核

    8位AVR或32位Cortex-M3内核

    控制接口

    12路I/0口每个都具备输入输出功能

    4输入口、3输出口

    6模拟输入端口、14数字输入输出端口

    传感器

    光敏传感器、磁敏开关、触碰开关、火焰传感器、红外测障传感器、灰度传感器、声音传感器

    触动传感器 光电传感器、超声波传感器、声音传感器

    支持数以百计各种类型的传感器

    执行器

    直流电机、减速电机、2种颜色的灯

    内置角度传感器的伺服电机、灯泡、扬声器

    支持各种电子装置和器件,电机、光传感器等等

    数据传输

    USB

    USB、蓝牙、红外

    USB、串口、蓝牙、以太网、XBee无线等

    编程平台

    编程模式

    标准流程图与C语言双重编程功能

    图形化编程

    文本编程或图形化编程

    支持操作系统

    Windows

    Windows、Mac OS X

    Windows、Mac OS X、Linux

    运动平台

    2WD铝合金小车

    积木式机械结构

    各种车体、机械结构均可使用

    从上述比较可见,开源机器人配置能达到甚至优于商品机器人,完全可以满足中小学机器人教学的需求。开源机器人相对商品机器人具有以下优点:

    1、技术规范统一,新旧型号配件通用。Arduino在开发过程中力求新旧版本的通用,无论从物理结构上还是接口电路电气性能,各种新旧型号的控制器和传感器都可以互相搭配使用,这样可以大大节约了硬件资源。

    2、功能模块十分丰富,机器人扩展能力非常强,利于学生创新想法的实现。它能够使用上百种功能模块,甚至可以自行开发功能模块,创新应用得到最大的支持。

    3、所有技术资料公开、透明。从电路原理图、零件清单到编程平台源代码垂手可得,使用者可深入研究机器人的底层技术。

    4、使用者众多,技术交流社区活跃,技术问题可迅速得到解决。Arduino官方论坛注册用户达到五万三千多人,加上其它使用Arduino的交流社区,Arduino用户可能达到近十万人。另外,国内相继涌现了学习使用Arduino的工作坊,如北京Arduino俱乐部、上海“新车间”等。无论从网上或者网下都可以找到Arduino用户进行交流。

    5、无技术垄断现象,器材价格透明,利于推广。由于技术资料公开,没有厂商可以垄断Arduino的生产与销售,使得Arduino的性价比极高。

    四、建设开源硬件机器人实验室

    通过以上对商品机器人和开源机器人的研究分析,可见利用开源硬件建设机器人实验室的优势是十分突出的,据此,笔者提出通过建设开源硬件机器人实验室的构想,籍此扩展机器人实验室建设的途径和渠道,为促进中小学机器人教育发展提供参考。

    机器人实验室建设通常包含三方面的内容:计算机、智能机器人、配套设施。笔者依此对开源硬件机器人实验室建设的配置建议可作如下的选取:

    1、计算机可因学校实际情况,采用购买新计算机或者使用原计算机室设备的方法解决。Arduino开发环境对计算机硬件需求很低,现在能够正常使用的计算机都能满足需要。如购买新计算机,可以采购手提电脑,便于机器人运行调试。

    2、智能机器人数量可根据学生实际人数,按照2-3人一台机器人的数量配备。开源智能机器人零配件的配置可分为基础配置和拓展配置两部分。

    (1)采用基础配置的机器人可满足中小学智能机器人的入门教学,完成诸如机器人巡线行走、走迷宫等任务。基础配置的详细零部件见表2

    表3  开源智能机器人零配件拓展配置

    零部件

    型号

    数量

    传感器

    颜色传感器

    1

    数字指南针

    1

    红外火焰传感器

    1

    温度传感器

    1

    霍尔传感器

    1

    执行器

    伺服电机

    1

    继电器模块

    1

    直流电机

    1

    2自由度机械臂

    1


    3、配套设施包含组装机器人的起子、钳子等工具。另外需要铺设机器人运行场地。还可以配备适量的机械加工设备,如手钻、钢锯、电磨等,以满足机器人改装和创新活动的需求。

    五、实验室的运作方式

    目前,机器人教育在中小学尚属于初期的探索阶段,能够学习的经验很少。如何能更好地发挥实验室的使用效益,笔者认为可以从以下方面着手:

    1、拓展使用对象

    实验室建成初期可先从机器人兴趣小组入手,培养一部分有兴趣的学生,组成机器人学习团队。教师可利用机器人兴趣小组开展校内的机器人展示、竞赛活动,扩大机器人实验室影响面,吸引更多的学生参与学习。教师在机器人兴趣小组的教学活动中积累经验,形成自己的教学能力。逐步将课外小组松散的教学行为转变成面向全体学生的常规课堂教学。

    2、拓宽应用面

    得益于开源硬件体系,机器人可使用的传感器种类和使用效果都得到较大提高,教师可利用丰富的硬件资源开拓各种机器人创新应用。同时,Arduino除了在机器人领域的应用外,在其它方面如物理、数学、通用技术等学科也有着广泛的应用。开源机器人实验室完全可以成为多个学科的通用实验室。笔者相信,开源机器人实验室的使用前景十分广阔。

    [参考文献]

    [1]王英琴.中小学机器人实验室建设的探索与思考. 中小学信息技术教育,2005,(12).

    展开全文
  • 人工智能机器学习常见算法

    千次阅读 2018-01-29 10:00:16
    摘要 之前一直对机器学习很感兴趣,一直没时间去研究,今天刚好是周末,...这里IT经理网为您总结一下常见机器学习算法,以供您在工作和学习中参考。    机器学习的算法很多。很多时候困惑人们都是,很多算法是一

    摘要

    之前一直对机器学习很感兴趣,一直没时间去研究,今天刚好是周末,有时间去各大技术论坛看看,刚好看到一篇关于机器学习不错的文章,在这里就分享给大家了. 
    机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考。 
    这里写图片描述 
    机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。 
    这里写图片描述

    学习方式

    根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。

    监督式学习:

    这里写图片描述

    在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)

    非监督式学习:

    这里写图片描述

    在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。

    半监督式学习:

    这里写图片描述

    在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

    强化学习:

    这里写图片描述

    在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)

    在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。

    算法类似性

    根据算法的功能和形式的类似性,我们可以把算法分类,比如说基于树的算法,基于神经网络的算法等等。当然,机器学习的范围非常庞大,有些算法很难明确归类到某一类。而对于有些分类来说,同一分类的算法可以针对不同类型的问题。这里,我们尽量把常用的算法按照最容易理解的方式进行分类。

    回归算法:

    这里写图片描述

    回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)

    基于实例的算法

    这里写图片描述

    基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)

    正则化方法

    这里写图片描述

    正则化方法是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net)。

    决策树学习

    这里写图片描述

    决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3(Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)

    贝叶斯方法

    这里写图片描述

    贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

    基于核的算法

    这里写图片描述

    基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等

    聚类算法

    这里写图片描述 
    聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

    关联规则学习

    这里写图片描述 
    关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

    人工神经网络

    这里写图片描述 
    人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)

    深度学习

    这里写图片描述

    深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是百度也开始发力深度学习后, 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。

    降低维度算法

    这里写图片描述

    像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

    集成算法:

    这里写图片描述 
    集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

    结束

    原文链接:http://blog.csdn.net/baihuaxiu123/article/details/51475384
    展开全文
  • TensorFlow 智能机器人原理与实现

    千次阅读 2017-08-16 11:14:00
    本文来自作者 李嘉璇 在 GitChat 上的精彩分享,「阅读原文」看看大家与作者交流了哪些问题 第一部分讲解自然语言处理的原理,第二部分讲解聊天...人工智能理解自然语言的原理,要回答这个问题,首先需要界定下

    本文来自作者 李嘉璇 在 GitChat 上的精彩分享,「阅读原文」看看大家与作者交流了哪些问题

    第一部分讲解自然语言处理的原理,第二部分讲解聊天机器人的实现原理,解决方案及挑战,最后以 seq2seq+Attention 机制讲解模型结构。第三部分讲解如何从0开始训练一个聊天机器人。

    一、自然语言处理的原理

    人工智能理解自然语言的原理,要回答这个问题,首先需要界定下这个问题的含义,一种是狭义的说如何用计算机来处理和分析自然语言;另一种是则是广义地理解关于「人工智能」、「自然语言」和「理解」的含义。

    我们先从广义层面探讨。弄清楚这几个名词。

    自然语言:就是人类社会中发明和演变的用于沟通和交流的语言。而人工智能在对事物(不仅仅是自然语言)的理解,往往包含两个层次:一是研究内容;二是方法论。

    研究内容上主要是现在流行的研究课题,例如知识图谱、CV、语音识别、NLP 等。

    方法论是指实现人工智能的方法,主要有三种:符号主义、联结主义、行为主义。

    符号主义是用数理逻辑的推理来模拟人的思维智能,例如专家系统的实现。联结主义对人脑的仿生学研究,最常见的就是神经网络模型。

    行为主义重点在可预测的人类行为上,认为人类通过与外界环境的交互而得到自适应性,涉及的算法有遗传算法、强化学习等。

    现有的NLP主要是以规则和统计相结合来处理的。它的规则一面偏向于符号主义的视角;

    而统计一面偏向于挖掘一般规律,属于归纳,目前用的方法,比如将自然语言用词向量的方法表征,然后接入神经网络中进行训练,也就是联结主义的思想。

    理解:关于机器是否能真正理解语言一直有争论。先抛开这个问题,我们看看人类对语言的理解是怎么样的。实际上,人类对理解这个事情也做的不一定好。

    比如,南北方对「豆腐脑」的认知是不同的,两人交谈可能就会对同一物体的理解不同。

    因此,理解是需要由相似的生活经历、共同话题、上下文、会话的环境、双方的知识等很多因素决定的。

    既然对于人类来说,真正能理解对方,需要这么多的隐性因素,那对于机器来说,我们最好就不要关心机器是否真正能理解问题的含义本身,而是尽可能地让机器关注上述因素,来模拟人的智能。

    狭义的层面是我们工程师研究的主要方向。

    也就是将自然语言理解看成是用计算机来处理和分析自然语言,它涉及到语言学(词、词性、语法)和计算机学科(模型/算法)的范畴。

    从语言学上来看,研究的方向包括词干提取、词性还原、分词、词性标注、命名实体识别、词性消歧、句法分析、篇章分析等等。

    这属于研究的基础范畴,在这些基础的研究内容之上,面向的是具体的文本处理应用,如,机器翻译、文本摘要、情感分类、问答系统、聊天机器人等。

    在计算机算法的研究方面,一般是以规则和统计相结合的方法,也就是理性主义和经验主义相结合。

    自然语言本质上还是符号系统,因此有一定的规则可寻,但是它的复杂性又决定了没有规则可以既不相互冲突又能覆盖所有的语言现象。

    后来大规模语料库的完善和统计机器学习方法流行起来后,就省去了很多人工编制规则的负担,使模型生成自动生成特征。

    所以,我们研究的 NLP 就是使用数理和机器学习的方法对语言进行建模。可以说,NLP 不是达到真正的自然语言理解,而是把语言当成是一种计算任务。

    二、聊天机器人的实现原理,解决方案及挑战

    我们从聊天机器人的分类和实现原理分别说起。

    目前聊天机器人根据对话的产生方式,可以分为基于检索的模型(Retrieval-Based Models)和生成式模型(Generative Models)。

    基于检索的模型有一个预先定义的回答集,我们需要设计一些启发式规则,这些规则能够根据输入的问句及上下文,挑选出合适的回答。

    生成式模型不依赖预先定义的回答集,而是根据输入的问句及上下文,产生一个新的回答。

    聊天机器人的这两条技术路线,从长远的角度看目前技术还都还处在山底,两种技术路线的异同和优势如下:

    基于检索的模型的优势:

    • 答句可读性好

    • 答句多样性强

    • 出现不相关的答句,容易分析、定位 bug

    但是它的劣势在于:需要对候选的结果做排序,进行选择

    基于生成式模型的优势:

    • 端到端的训练,比较容易实现

    • 避免维护一个大的 Q-A 数据集

    • 不需要对每一个模块额外进行调优,避免了各个模块之间的误差级联效应

    但是它的劣势在于:难以保证生成的结果是可读的,多样的。

    因此,上述方法共同面临的挑战有:

    1. 如何利用前几轮对话的信息,应用到当轮对话当中

    2. 合并现有的知识库的内容进来

    3. 能否做到个性化,千人千面。

    这有点类似于我们的信息检索系统,既希望在垂直领域做得更好;也希望对不同的人的 query 有不同的排序偏好。

    从应用目的的角度区分,可以分为目标驱动(Goal Driven),应用于客服助理等,在封闭话题场景中;无目标驱动(Non-Goal Driven),应用在开放话题的场景下,这是可谈论的主题是不限的,但是需要机器人有一定的基础常识。

    尽管目前工业界应用的大多数是基于检索的模型,属于目标驱动的,例如:阿里小蜜,应用的话题领域比较窄,稍微将话题扩大一点,它就会不着边际回复或者文不对题。如下图:

    一个开放话题场景下的生成式模型应该是最智能、符合我们预期的聊天机器人。因此总结来看:

    智能聊天机器人的目标:

    1. 和人类能够进行持续的沟通

    2. 对不同的提问能够给出合适的回答

    3. 考虑到人类不同个性化的差异性,给出差异性的回答(例如,同一个问题,对男女老少不同群体的回答应该略有差异)

    那么对于一个智能机器人来说,它的聊天的功能在其中应该处于什么位置?首先,聊天应该是一个基础模块;其次,聊天应该和完成任务的模块有很好的协作;最后,聊天应该使机器人看上去像您的朋友,而不是您的代理或者助手。

    从上述角度来说,现在有一些经常与聊天机器人混淆的概念,也是一些聊天系统的周边产品:

    1. QA 问答系统:是回答事实问题(例如珠峰有多高)以及非事实问题(例如 why, how, opinion 等观点性问题)的领域机器人。

    2. Dialog system 对话系统:这种大多是目标驱动的,但是近几年都也在慢慢接受聊天机器人功能

    3. Online customer service 在线客服:例如淘宝小蜜,它在多数情况下像一个自动的 FAQ。

    因此,尽管聊天系统都是针对文本理解的大方向,但目标不同决定了技术路线会有所偏重,但聊天功能是一个基础功能。

    智能聊天机器人可以从上面的周边系统研究领域的数据集有所借鉴:

    • 非事实问题的问答

    • 社区型问答系统(例如百度知道等,对问题和答案间有较强的匹配;并且一个问题多个答案时有评分、排序)

    • 从在线系统中挖掘一些好的 QA corpus

    那如何来评价一个聊天机器人的好坏?最重要的是问句和答句的相关性,也就是本质是:短文本相关度计算。但要注意:

    1. 相似性和相关性是不同的。用于相似性计算的各种方法并不适用于相关性。我们需要建立一套短文本相关性计算方法。

    2. 相关性计算有一些在早期的聊天机器人的构建中延续下来的方法:

    • 词语共现的统计

    • 基于机器翻译的相关度计算

    • 主题模型(LDA)的相似度计算

    目前在聊天机器人上使用的深度学习方法有如下这些:

    1. Word2vec, Glove

    2. CNN, LSTM, GRU

    3. Seq2Seq

    4. Attention mechanism

    5. Deep Reinforcement Learning

    其中,深度强化学习是把“如何得到一个足够让人满意的生成式结果”量化成Reward。这些因素包括:

    • 是否容易被回答(一个好的生成式的结果应该是更容易让人接下去的)

    • 一个好的回复应该让对话前进,避免重复性

    • 保证语义的连贯性。用生成式的结果反推回query的可能性有多大,能保证在语义上是和谐的、连贯的。

    那么如何实现在智能聊天机器人的第三个目标,差异化回答呢?也就是如何在对话里如何引入个性化(personality)信息?

    首先预训练一个人的向量,让生成的结果贴近人的特点。通过 word embedding 将人的信息作为一个词向量,在输入部分增加一组人的向量;在生成回答的时候,考虑不同的人应该选什么样的词语。

    目前,我们要做一个真正智能的自动聊天机器人,仍然面临一些挑战:

    • 缺乏公共的训练数据集,目前使用国外的数据集较多

      • Ubuntu dialog corpus(subset of Ubuntu Corpus)

      • Reddit dataset(可读性和质量都不错)

      • Corpora from Chinese SNS(微博)

    • 测试集还不统一

    • 评估度量:度量很难设计(目前是从机器翻译和自动摘要的BLEU、ROUGE里借鉴的,但面临问题是否能刻画聊天机器人的好坏,并且指导聊天机器人的技术朝着正向的方向发展)

    • 聊天机器人的一般对话和任务导向的对话之间如何能够平滑切换

      • 这种平滑切换对用户的体验非常重要

      • 切换的技术需要依赖情绪分析及上下文分析

      • 用户不需要给出明确的反馈。例如,我前一句说鹿晗好,后一句说不喜欢韩范,需要聊天机器人能正确识别

    • 仍然存在的问题

      • 句子级、片段级的语义建模还没有词语的建模(word embedding)那么好

      • 生成式仍然会产生一些安全回答

      • 在知识的表示和引入上还需要努力

    最后有一些可以期待的结论和前景:

    可以认为智能聊天机器人是一个ALL-NLP问题,深度学习是促进了chatbot的发展,但还不够,需要和传统机器学习相结合。目前我们仍在探索一些方法论及测试的评价体系。

    并且希望聊天机器人能够主动找人说话,例如它说“你昨天跟我说什么……你生日快到啦……”等等。

    这个可以用规则实现,需要把问题定义清楚。个性化的聊天机器人的实现,着力点可能更偏工程。聊天机器人的研究可能在2015年左右才开始蓬勃兴起,所以大家有很大的机会和挑战。

    一些聊天机器人的参考文献:

    Neural Responding Machine for Short-Text Conversation (2015-03)

    A Neural Conversational Model (2015-06)

    A Neural Network Approach to Context-Sensitive Generation of Conversational Responses (2015-06)

    The Ubuntu Dialogue Corpus: A Large Dataset for Research in Unstructured Multi-Turn Dialogue - Systems (2015-06)

    Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models (2015-07)

    A Diversity-Promoting Objective Function for Neural Conversation Models (2015-10)

    Attention with Intention for a Neural Network Conversation Model (2015-10)

    Improved Deep Learning Baselines for Ubuntu Corpus Dialogs (2015-10)

    A Survey of Available Corpora for Building Data-Driven Dialogue Systems (2015-12)

    Incorporating Copying Mechanism in Sequence-to-Sequence Learning (2016-03)

    A Persona-Based Neural Conversation Model (2016-03)

    How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation (2016-03)

    下面是讲解智能聊天机器人的 Seq2Seq+Attention 机制。

    而生成式模型现在主要研究方法是 Sequence to Sequence+Attention 的模型,以及最新出的 GANSeq 模型。(参考论文:Sequence to Sequence Learning with Neural Networks)

    seq2seq 模型是一个翻译模型,主要是把一个序列翻译成另一个序列。它的基本思想是用两个 RNNLM,一个作为编码器,另一个作为解码器,组成 RNN 编码器-解码器。

    在文本处理领域,我们常用编码器-解码器(encoder-decoder)框架。如下图:

    在这个模型中,每一时间的输入和输出是不同的。我们的目的是把现有序列 ABC 作为输入,映射成 WXYZ 作为输出。编码器对输入的 ABC 进行编码,生成中间语义编码 C。

    然后解码器对中间语义编码 C 进行解码,在每个i时刻,结合已经生成的 WXY 的历史信息生成 Z。

    但是,这个框架有一个缺点,就是生成的句子中每一个词采用的中间语义编码是相同的,都是 C。

    因此,在句子比较短的时候,还能比较贴切,句子长时,就明显不合语义了。

    它的过程分为这两步:

    (1)编码(Encode)

    ht 是由当前的输入 xt 和上一次的隐藏层的输出 ht-1,经过非线性变换得到的。

    向量c通常为RNN中的最后一个隐节点(h,Hidden state),或是多个隐节点的加权总和(在注意力机制里)。

    (2)解码(Decode)

    解码的过程常常使用贪心算法或者集束搜索,来返回对应概率最大的词汇。

    在实际实现聊天系统的时候,一般编码器和解码器都采用RNN模型以及RNN模型的改进模型 LSTM。

    当句子长度超过30以后,LSTM模型的效果会急剧下降,一般此时会引入 Attention 模型,对长句子来说能够明显提升系统效果。

    Attention 机制是认知心理学层面的一个概念,它是指当人在做一件事情的时候,会专注地做这件事而忽略周围的其他事。

    例如,人在专注地看这本书,会忽略旁边人说话的声音。这种机制应用在聊天机器人、机器翻译等领域,就把源句子中对生成句子重要的关键词的权重提高,产生出更准确的应答。

    增加了 Attention 模型的编码器-解码器框架如下图所示。Seq2Seq 中的编码器被替换为一个双向循环网络(bidirectional RNN),源序列 x=(x1,x2,…,xt) 分别被正向与反向地输入了模型中,进而得到了正反两层隐节点,语境向量c则由 RNN 中的隐节点h通过不同的权重 a 加权而成。

    三、动手实现一个智能机器人

    本次代码基于TF 1.1版本实现,使用双向 LSTM+Attention 模型。分为6步:

    1)库引入及超参数定义

    import numpy as np #matrix math 
    import tensorflow as tf #machine learningt
    import helpers #for formatting data into batches and generating random sequence data
    
    tf.reset_default_graph() #Clears the default graph stack and resets the global default graph.
    sess = tf.InteractiveSession()
    
    PAD = 0
    EOS = 1
    
    vocab_size = 10
    input_embedding_size = 20 #character length
    
    encoder_hidden_units = 20 #num neurons
    decoder_hidden_units = encoder_hidden_units * 2
    
    #input placehodlers
    encoder_inputs = tf.placeholder(shape=(None, None), dtype=tf.int32, name='encoder_inputs')
    
    encoder_inputs_length = tf.placeholder(shape=(None,), dtype=tf.int32, name='encoder_inputs_length')
    decoder_targets = tf.placeholder(shape=(None, None), dtype=tf.int32, name='decoder_targets')

    2)输入文本的向量表示

    embeddings = tf.Variable(tf.random_uniform([vocab_size, input_embedding_size], -1.0, 1.0), dtype=tf.float32)
    
    #this thing could get huge in a real world application
    encoder_inputs_embedded = tf.nn.embedding_lookup(embeddings, encoder_inputs)

    3)Encoder

    from tensorflow.contrib.rnn import LSTMCell, LSTMStateTuple
    encoder_cell = LSTMCell(encoder_hidden_units)
    
    ((encoder_fw_outputs,
      encoder_bw_outputs),
     (encoder_fw_final_state,
      encoder_bw_final_state)) = (
        tf.nn.bidirectional_dynamic_rnn(cell_fw=encoder_cell,
                                        cell_bw=encoder_cell,
                                        inputs=encoder_inputs_embedded,
                                        sequence_length=encoder_inputs_length,
                                        dtype=tf.float64, time_major=True)
        )
    
    encoder_outputs = tf.concat((encoder_fw_outputs, encoder_bw_outputs), 2)
    
    encoder_final_state_c = tf.concat(
        (encoder_fw_final_state.c, encoder_bw_final_state.c), 1)
    
    encoder_final_state_h = tf.concat(
        (encoder_fw_final_state.h, encoder_bw_final_state.h), 1)
    
    encoder_final_state = LSTMStateTuple(
        c=encoder_final_state_c,
        h=encoder_final_state_h
    )

    4)Decoder

    decoder_cell = LSTMCell(decoder_hidden_units)
    encoder_max_time, batch_size = tf.unstack(tf.shape(encoder_inputs))
    decoder_lengths = encoder_inputs_length + 3
    #weights
    W = tf.Variable(tf.random_uniform([decoder_hidden_units, vocab_size], -1, 1), dtype=tf.float32)
    #bias
    b = tf.Variable(tf.zeros([vocab_size]), dtype=tf.float32)
    
    assert EOS == 1 and PAD == 0
    
    eos_time_slice = tf.ones([batch_size], dtype=tf.int32, name='EOS')
    pad_time_slice = tf.zeros([batch_size], dtype=tf.int32, name='PAD')
    
    #retrieves rows of the params tensor. The behavior is similar to using indexing with arrays in numpy
    eos_step_embedded = tf.nn.embedding_lookup(embeddings, eos_time_slice)
    pad_step_embedded = tf.nn.embedding_lookup(embeddings, pad_time_slice)
    
    def loop_fn_initial():
        initial_elements_finished = (0 >= decoder_lengths)  # all False at the initial step
        #end of sentence
        initial_input = eos_step_embedded
        #last time steps cell state
        initial_cell_state = encoder_final_state
        #none
        initial_cell_output = None
        #none
        initial_loop_state = None  # we don't need to pass any additional information
        return (initial_elements_finished,
                initial_input,
                initial_cell_state,
                initial_cell_output,
                initial_loop_state)
    
    def loop_fn_transition(time, previous_output, previous_state, previous_loop_state):
        def get_next_input():
            output_logits = tf.add(tf.matmul(previous_output, W), b)
    
            #Returns the index with the largest value across axes of a tensor.
            prediction = tf.argmax(output_logits, axis=1)
            #embed prediction for the next input
            next_input = tf.nn.embedding_lookup(embeddings, prediction)
            return next_input
    
    
        elements_finished = (time >= decoder_lengths) # this operation produces boolean tensor of [batch_size]
                                                      # defining if corresponding sequence has ended
    
    
    
        #Computes the "logical and" of elements across dimensions of a tensor.
        finished = tf.reduce_all(elements_finished) # -> boolean scalar
        #Return either fn1() or fn2() based on the boolean predicate pred.
        input = tf.cond(finished, lambda: pad_step_embedded, get_next_input)
    
        #set previous to current
        state = previous_state
        output = previous_output
        loop_state = None
    
        return (elements_finished, 
                input,
                state,
                output,
                loop_state)
    
    def loop_fn(time, previous_output, previous_state, previous_loop_state):
        if previous_state is None:    # time == 0
            assert previous_output is None and previous_state is None
            return loop_fn_initial()
        else:
            return loop_fn_transition(time, previous_output, previous_state, previous_loop_state)
    
    decoder_outputs_ta, decoder_final_state, _ = tf.nn.raw_rnn(decoder_cell, loop_fn)
    decoder_outputs = decoder_outputs_ta.stack()
    
    decoder_max_steps, decoder_batch_size, decoder_dim = tf.unstack(tf.shape(decoder_outputs))
    #flettened output tensor
    decoder_outputs_flat = tf.reshape(decoder_outputs, (-1, decoder_dim))
    #pass flattened tensor through decoder
    decoder_logits_flat = tf.add(tf.matmul(decoder_outputs_flat, W), b)
    #prediction vals
    decoder_logits = tf.reshape(decoder_logits_flat, (decoder_max_steps, decoder_batch_size, vocab_size))
    
    decoder_prediction = tf.argmax(decoder_logits, 2)

    5)Optimizer

    stepwise_cross_entropy = tf.nn.softmax_cross_entropy_with_logits(
        labels=tf.one_hot(decoder_targets, depth=vocab_size, dtype=tf.float32),
        logits=decoder_logits,
    )
    
    #loss function
    loss = tf.reduce_mean(stepwise_cross_entropy)
    #train it 
    train_op = tf.train.AdamOptimizer().minimize(loss)
    
    sess.run(tf.global_variables_initializer())

    6)Training on the toy task

    batch_size = 100
    
    batches = helpers.random_sequences(length_from=3, length_to=8,
                                       vocab_lower=2, vocab_upper=10,
                                       batch_size=batch_size)
    
    print('head of the batch:')
    for seq in next(batches)[:10]:
        print(seq)
    
    def next_feed():
        batch = next(batches)
        encoder_inputs_, encoder_input_lengths_ = helpers.batch(batch)
        decoder_targets_, _ = helpers.batch(
            [(sequence) + [EOS] + [PAD] * 2 for sequence in batch]
        )
        return {
            encoder_inputs: encoder_inputs_,
            encoder_inputs_length: encoder_input_lengths_,
            decoder_targets: decoder_targets_,
        }
    loss_track = []
    
    max_batches = 3001
    batches_in_epoch = 1000
    
    try:
        for batch in range(max_batches):
            fd = next_feed()
            _, l = sess.run([train_op, loss], fd)
            loss_track.append(l)
    
            if batch == 0 or batch % batches_in_epoch == 0:
                print('batch {}'.format(batch))
                print(' minibatch loss: {}'.format(sess.run(loss, fd)))
                predict_ = sess.run(decoder_prediction, fd)
                for i, (inp, pred) in enumerate(zip(fd[encoder_inputs].T, predict_.T)):
                    print('  sample {}:'.format(i + 1))
                    print('    input     > {}'.format(inp))
                    print('predicted > {}'.format(pred))
                    if i >= 2:
                        break
                print()
    
    except KeyboardInterrupt:
        print(' training interrupted')

    在30000次迭代后,loss 值降到了0.0869。


    展开全文
  •  机器人是一种可编程和多功能的,用来搬运材料、零件、工具的操作机,智能机器人则是一个在感知、思维、效应方面全面模拟人的机器系统(外形不一定像人)。在当前技术环境下,智能机器人一般都应包含人机交互、环境...
  • AI(Artificial Intelligence)人工智能机器学习常见算法此文章是转载:为了理解MPP 的 AI 而找的文章。一,人工智能的算法个体人工智能-随机数(Random) -A*寻路(A* Search Algorithm) -状态机机制(Finite-State ...
  • 机器学习常见算法整理

    万次阅读 2019-12-06 16:56:01
    5.1 算法特性 传统推荐系统中直接使用协同过滤推荐算法或ALS算法对用户进行产品推荐,无法实现“千千面”的推荐以及实时变化推荐,即不同用户不同场景推荐不同产品。对于不同推荐算法触发出来的候选集,只是根据...
  • 常见机器学习分类

    千次阅读 2019-03-15 20:24:17
    很多在平时的工作中都或多或少会用到机器学习的算法。本文为您总结一下常见机器学习算法,以供您在工作和学习中参考。 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他...
  • 人工智能机器学习

    千次阅读 2019-08-15 20:44:34
    人工智能人工智能概述python与java人工智能分类人工智能的历史机器学习机器学习定义机器学习概念机器学习概念性含义 人工智能 概述 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、...
  • 机器学习常见算法分类

    千次阅读 2021-02-03 19:32:43
    机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 “机器学习是对能通过经验自动改进的计算机算法的研究”。 “机器学习是用数据或以往的经验,...
  • 机器学习常见算法分类汇总

    千次阅读 2015-07-24 09:12:16
    很多在平时的工作中都或多或少会用到机器学习的算法。本文为您总结一下常见机器学习算法,以供您在工作和学习中参考。机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法...
  • AI:人工智能概念之机器学习、深度学习中常见关键词、参数等中英文对照(绝对干货) 导读 本博主基本收集了网上所有有关于ML、DL的中文解释词汇,机器学习、深度学习中常见关键词、参数等中英文对照,如有没有...
  • 机器学习 常见面试题 总结

    千次阅读 2016-08-03 21:21:18
    除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到...
  • 拥抱人工智能,从机器学习开始背景:一、机器学习:二、机器学习算法:1. 线性回归:找到一条直线来预测目标值2. 逻辑回归:找到一条直线来分类数据3. K-近邻:用距离度量最相邻的分类标签4. 朴素贝叶斯:选择后验...
  • 人工智能机器学习路线图

    万次阅读 多人点赞 2016-09-07 23:21:02
    也许你和这个叫『机器学习』的家伙一点也不熟,但是你举起iphone手机拍照的时候,早已习惯它帮你框出人脸;也自然而然点开今日头条推给你的新闻;也习惯逛淘宝点了找相似之后货比三家;亦或喜闻乐见微软的年龄识别...
  • 机器学习的常见分类及常用算法

    千次阅读 2019-06-01 23:54:40
    3.机器学习常见分类 4.机器学习常用算法 1. 机器学习概述 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或...
  • 人工智能 | 图解机器学习

    千次阅读 2020-04-13 09:49:39
    机器学习这个主题已经很普遍了,每个都在谈论它,但很少有能够透彻地了解它。当前网络上的一些机器学习文章晦涩难懂,理论性太强,或者通篇云里雾里地介绍人工智能、数据科学的魔力以及未来的工作等。 所以呢...
  • 机器学习常见术语汇总

    千次阅读 2018-11-15 18:07:35
    例如,一个评估邮件信息并输出「垃圾邮件」或「非垃圾邮件」的机器学习模型就是一个二元分类器。 binning/bucketing 根据值的范围将一个连续特征转换成多个称为 buckets 或者 bins 二元特征,称为 buckets ...
  • [人工智能]深入浅出机器学习

    千次阅读 多人点赞 2017-01-05 10:49:43
    机器学习谈起 ... 在本篇文章中,我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的也能了解机器学习,并且上手相关的实践。这篇文档也算是EasyPR开发的番外篇,从这里开始
  • ML算法(常见机器学习算法公式)

    万次阅读 2017-06-09 17:02:30
     找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位...
  • 机器学习与深度学习常见面试题

    万次阅读 2019-04-08 09:10:43
    为了帮助参加校园招聘、社招的同学更好的准备面试,SIGAI整理出了一些常见机器学习、深度学习面试题。理解它们,对你通过技术面试非常有帮助,当然,我们不能只限于会做这些题目,最终的目标是真正理解机器学习与...
  • 人工智能AI常见的经典K-means聚类算法原理和工作过程K-means聚类算法亦称K聚类均值算法,K-means算法是硬聚类算法中的一种。聚类算法是一类无监督机器学习。K-means算法是计算数据聚集的算法,主要通过不断地取离...
  • 智慧化与自动化的差异可能就在于,机器...如今人工智能技术将可进一步赋予机械监视人类的能力,了解所有的需求,以近似人类的方式与人类互动,尽管它仍停留在专家系统范畴,尚未踏进强人工智能的领域。 假如有国家
  • 机器学习知识点(人工智能篇)

    万次阅读 2017-07-17 17:11:01
    AI(Artificial Intelligence),即人工智能。人工智能领域的研究包括机器人、语音识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工...
  • 开源机器学习模块,包括分类、回归、聚类系列算法,主要算法有SVM、逻辑回归、朴素贝叶斯、Kmeans、DBSCAN等;也提供了一些语料库。 学习地址:https://scikit-learn.org/stable/modules/classes.html 5.2、numpy...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,170
精华内容 30,868
关键字:

常见的智能机器人