2019-08-05 15:12:41 MysteryLi 阅读数 144
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5906 人正在学习 去看看 杨波

上一篇我介绍了如何接入微软认知服务的语音识别,这篇文章我将为大家介绍如何接入微软认知服务的语音合成(以下简称语音合成)。语音合成中也需要用到YourSubscriptionKey和YourServiceRegion,获取方式同语音识别,这两个密钥与语音识别是通用的,所用到的SDK与语音识别的也是一样。首先我们还是要新建一个场景,如下图所示

然后新建脚本,命名为MicroSoftTTSDemo,然后编辑脚本,将以下内容粘贴到脚本中

using UnityEngine;
using UnityEngine.UI;
using Microsoft.CognitiveServices.Speech;
using System;
using System.IO;
using System.Collections;
using Microsoft.CognitiveServices.Speech.Audio;
using System.Threading.Tasks;
using UnityEngine.Networking;

public class MicroSoftTTSDemo : MonoBehaviour
{
    // Hook up the three properties below with a Text, InputField and Button object in your UI.
    public Text outputText;
    public InputField inputField;
    public Button speakButton;
    public AudioSource audioSource;

    private object threadLocker = new object();
    private bool waitingForSpeak;
    private string message;
    public string path;
    public string fileName;
    public string audioType;
    public DateTime startTime;
    public DateTime endTime;
    public Text timeText;
    void Start()
    {
        if (outputText == null)
        {
            UnityEngine.Debug.LogError("outputText property is null! Assign a UI Text element to it.");
        }
        else if (inputField == null)
        {
            message = "inputField property is null! Assign a UI InputField element to it.";
            UnityEngine.Debug.LogError(message);
        }
        else if (speakButton == null)
        {
            message = "speakButton property is null! Assign a UI Button to it.";
            UnityEngine.Debug.LogError(message);
        }
        else
        {
            // Continue with normal initialization, Text, InputField and Button objects are present.
            //inputField.text = "Enter text you wish spoken here.";
            //message = "Click button to synthesize speech";
            speakButton.onClick.AddListener(ButtonClick);
        }
    }

    void Update()
    {
        lock (threadLocker)
        {
            if (speakButton != null)
            {
                speakButton.interactable = !waitingForSpeak;
            }

            if (outputText != null)
            {
                outputText.text = message;
            }
        }
    }

    public void ButtonClick()
    {
        startTime = DateTime.Now;
        // Creates an instance of a speech config with specified subscription key and service region.
        // Replace with your own subscription key and service region (e.g., "westus").
        var config = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
        // Creates a speech synthesizer.
        // Make sure to dispose the synthesizer after use!
        using (var synthsizer = new SpeechSynthesizer(config, null))
        {
            lock (threadLocker)
            {
                waitingForSpeak = true;
            }
            // Starts speech synthesis, and returns after a single utterance is synthesized.
            var result = synthsizer.SpeakTextAsync(inputField.text).Result;
            //print("after   " + DateTime.Now);

            // Checks result.
            string newMessage = string.Empty;

            if (result.Reason == ResultReason.SynthesizingAudioCompleted)
            {
                // Since native playback is not yet supported on Unity yet (currently only supported on Windows/Linux Desktop),
                // use the Unity API to play audio here as a short term solution.
                // Native playback support will be added in the future release.
                var sampleCount = result.AudioData.Length / 2;
                var audioData = new float[sampleCount];
                for (var i = 0; i < sampleCount; ++i)
                {
                    audioData[i] = (short)(result.AudioData[i * 2 + 1] << 8 | result.AudioData[i * 2]) / 32768.0F;

                }
                // The default output audio format is 16K 16bit mono
                var audioClip = AudioClip.Create("SynthesizedAudio", sampleCount, 1, 16000, false);
                audioClip.SetData(audioData, 0);
                audioSource.clip = audioClip;
                audioSource.Play();
                endTime = DateTime.Now;
                timeText.text = "合成前时间:" + startTime + "     合成成功时间:" + endTime;

                newMessage = "Speech synthesis succeeded!";
            }

            else if (result.Reason == ResultReason.Canceled)
            {
                var cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
                newMessage = $"CANCELED:\nReason=[{cancellation.Reason}]\nErrorDetails=[{cancellation.ErrorDetails}]\nDid you update the subscription info?";
            }

            lock (threadLocker)
            {
                message = newMessage;
                waitingForSpeak = false;
            }
        }
    }
}

保存脚本后点击运行,在InputFeild中输入英文文本,然后点击Button,即可播放你输入的英文。至此语音合成就已经完成。微软语音合成的发音与真人发音一模一样,不会有机械化的感觉。

下篇文章将为大家介绍微软语音SDK接好后打包所遇到的坑

2019-07-27 15:38:39 alice_tl 阅读数 253
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5906 人正在学习 去看看 杨波

语音信号的采集

一般的语音来源主要是三种,业内开放的通用训练集数据、特定用户录制的数据,采用TTS技术合成的数据。

部分公司会将用户的指令数据进行收集,从而丰富通用训练集,提取高频数据集,Bad Case数据集,专项数据集(方言、中英文混合),特殊场景数据集(导航、电话、音乐等其他应用冲突的场景)等等。

 

在录制和采集语音数据时,业内一般有如下几个指标,这些指标也都和语音识别的原理及架构有关。

采样率

同时也叫采样频率,指每秒钟取得声音样本的次数。采样率越高,数据越精确。常用的采样率是8k(8000),16k,44.1k,48k。

8k是电话所用的采样率。人说话的声音频率,基本在这个采样率之内。

48k采样率是CD,DVD所采用的。超过这个频率人耳是分辨不出来的了。

手机平台中,采样率大都数采样16k。

采样位数

指每个采样数据占的位数,采样精度取决于采样位数的大小。常用的位数是8位(bit),也就是一个字节。还有16位或者32位。

手机平台中一般为16位采样位数。

采样编码

腾讯只支持GBK?

声道数

声道数也叫通道数,即声音的通道的数目。常见的单声道和立体声(双声道),现在已经发展到了四声环绕(四声道)和5.1声道。声道和硬件设备有关。

单声道的声音只能使用一个扬声器发声,当通过两个扬声器回放单声道信息的时候,我们可以明显感觉到声音是从两个音箱中间传递到我们耳朵里的,无法判断声源的具体位置。

双声道目前最常用途有两个,在卡拉OK中,区分奏乐和歌手的声音;在VCD中,用两个声道区分普通话配音和英语配音。

存储空间

声音的存储空间叫比特率,也叫码率,就是形容一秒中数据有多大。

计算公式为:采样率x采样位数x声道数,单位就是bit/秒,除于8,就是byte/s

存储格式

经过录音设备采集的声音,未经编码时叫PCM数据。

在pcm数据前面再加个文件头,就是WAV文件,这个文件头里说明了采样率,采样位数,声道数和文件大小等信息。音频播放器会先读取这个头再播放音频。

MP3是一种经过编码压缩过的音频。

手机平台中一分钟的原始音频大约1.92MB,4分钟的大约7.68MB,而MP3格式4分钟的歌曲只有4MB左右。因此用以语音识别的声音是不能压缩失真的,因为压缩会导致一些细节就会丢失。一般直接使用pcm数据或者WAV数据。

 

各个平台对音频文件的指标要求:

以BAT和讯飞为例:

参数

百度AI开放平台

腾讯

讯飞

阿里

声道

16k采样率

符合16k或8K采样率

 

 

采样率

16bit位数

16bit采样位数

 

 

位数

单声道

单声道

 

 

格式

pcm(不压缩)

wav(不压缩,pcm编码)

amr(压缩格式)

PCM、WAV、AMR、 SILK

 

 

 

2019-11-02 23:31:42 qq_28877125 阅读数 632
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5906 人正在学习 去看看 杨波

嘉楠科技 勘智K210芯片介绍:

 勘智K210这款芯片由著名的矿机公司嘉楠科技基于RISC-V架构进行研发设计,可根据业务场景需求扩展基础指令,具备较强的可编程能力。同时,勘智K210具备机器听觉与机器视觉两种能力,可以灵活适配人脸识别、目标检测、语音唤醒及识别等场景,是国内ASIC领域为数不多保持一定通用性的芯片。作为嘉楠科技自主研发的边缘侧AI芯片,勘智K210兼具高能耗比和灵活性。

 在算力方面,勘智K210可在0.3W的条件下提供1TOP的算力支持,充分适配在多数业务场景中低功耗约束下的算力需求。在芯片集成度方面,勘智K210采用视听一体化设计。在机器视觉上,芯片基于自主研发的神经网络加速器KPU,可完成基于神经网络的图像分类任务,进行人脸识别与检测,以及实时获被检测目标的分类。在听觉能力上,芯片自带APU语音处理单元,最高可支持8路音频数据及16个方向,无需占用CPU即可实现声源定向、声场成像、波束形成、语音识别与唤醒等功能。

 在算法定制化方面,勘智K210在可编程能力上呈现出更高的灵活性。首先,相比ARM等架构,勘智K210采用RISC-V架构,拥有更强的可定制化能力,便于开发者根据具体应用场景定制算法。其次,芯片搭载FPIOA现场可编程IO阵列,支持TensorFlow、Keras、Darknet、Paddle和Caffe等主流AI编程框架,以及全面的开发文档,对开发者十分友好。

 此外,芯片内置64位双核处理器架构,分为计算核与应用核,能够为开发者提供足以应对复杂业务场景的计算资源。勘智K210可在仅为0.3W的功耗约束下提供1TOPS算力,能耗比优异。
在这里插入图片描述

第一代AI芯片勘智K210

性能 中央处理器:RISC-V Dual Core 64bit,with FPU
图像识别:QVGA@60fps/VGA@30fps
语音识别:麦克风阵列(8mics)
功耗 系统典型应用场景功耗<1W
芯片功耗<300mW
安全 高级加密硬件加速器(AES)
一次性只读存储器(OTP)
SHA256
扩展性 操作系统:FreeRTOS
网络模型:TinyYOLOv2(after pruned)
深度学习框架:TensorFlow/Keras/Darknet/Caffe/PaddlePaddle
外设: FPIOA、UART、GPIO、SPI、I²C、I²S、WDT、TIMER、RTC等

开发板介绍:Maix-Go

在这里插入图片描述

 MAIX GO 是Sipeed公司旗下MAIX产品线的一员,GO意为立即出发,该开发板的设计思路为 到手即用,豪华全功能;适合学生,工程师调试使用,也适合销售给客户演示功能。

 GO外型尺寸为60*88mm,标准套餐配亚克力外壳,200W像素摄像头,M12 4mm焦距高清镜头,600mAH锂电池,2.8寸QVGA LCD,1W 小喇叭,Type-C 优质USB线,wifi 天线。

好消息:MAIX 系列硬件 均支持我们的开源项目MaixPy(支持openmv算法!): https://github.com/sipeed/MaixPy

MaixPy介绍:
  MaixPy固件为micropython固件,可以让大家轻松使用AI算法,及常规单片机的操作;同时我们的MaixPy固件兼容OpenMV的多数API!买了MAIX开发板,就相当于拥有了3倍于MAIX开发板价格的OpenMV开发板!并且实测对于普通算法的算力反而是原版STM32H7版的2~3倍!在AI算法上的算力甚至超出STM32H7版openmv 1000倍以上!没错,是1000倍!

MAIX开发板与OPENMV V4开发板对比

MAIX 系列开发板 OPENMV V4
主控芯片 K210 STM32H743
芯片内核 双核RISC-V 64bit IMAFDC ARM Cortex-M7 32bit
主频 标称400M,可超600M 标称400M
内存 6MB 通用内存+2MB AI内存 1MB
Flash 16MB 2MB
mpy支持 支持,MaixPy开源项目 支持,openmv开源项目
常规视觉算法 支持,兼容多数openmv算法 openmv算法
常规视觉算法速度 2~3倍于 openmv v4
神经网络算法 支持,封装了mpy的nn类 支持,封装了mpy的nn类
神经网络算法速度 数百GOPS(千倍于STM32) 数百MOPS
人脸检测速度(QVGA,RGB图像) 常规算法 6帧,AI加速可达60帧以上 约2帧
价格(RMB) 69~199 499
是否可商用 有商用邮票孔模块

MAIX Go 板卡介绍:

  1. 采用Kendryte K210 AI主控,主频400M(可超频至600M),乘法操作算力0.23TOPS,总算力1TOPS。
    SDK相关资料:dl.sipeed.com/MAIX/SDK
    HDK相关资料:dl.sipeed.com/MAIX/HDK
    MaixPy(micropython)相关资料:dl.sipeed.com/MAIX/MaixPy
    Wiki:maixpy.sipeed.com
    Blog:blog.sipeed.com
    BBS: bbs.sipeed.com (国际性论坛,自带谷歌翻译,不用怕英文或者中文发帖)
    QQ群:826307240(大群),878189804(AI小群)
    Telegram group: https://t.me/sipeed
    Support 邮箱:support@sipeed.com
  2. 板载基于STM32的JTAG调试器&串口ISP烧录器,命名为open-EC.
  3. 充电管理+电源路径选择芯片
  4. 麦克风阵列连接器
  5. 加速度传感器MSA300
  6. 锂电池接口
  7. TF卡槽
  8. USB type-C 座
  9. 音频解码芯片+双声道音频功放
  10. RGB LED
  11. 高灵敏度 I2S 麦克风
  12. 200W摄像头,M12 镜头座,默认配4mm焦距高清镜头,用户可选配其它镜头
  13. 1W 小喇叭
  14. 三向拨轮按键
  15. 镜头可反接到背面
  16. 2.8寸带电阻触摸屏的LCD,分辨率320*240,驱动芯片ILI9341. MAIX GO 整板组装视频: https://www.bilibili.com/video/av41033435 开发板包装:采用高端硬塑料盒包装,既可装开发板,又可装元件
2019-06-03 17:25:21 crazy_joe 阅读数 32
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5906 人正在学习 去看看 杨波

封面

说到模块化编程,对我个人而言首先起因于团队协作的需要,也就是组织架构结构特点来决定,而不是跟风求得自我认同,看看我们团队的组织结构:

 

其中:

基础平台部职责:

1、AI实验室:语音,图像识别算法持续优化;垂直领域不同业务场景下持续提高算法精准度指标;产出通用算法基础服务组件,为基础平台做支持。

2、基础平台组:所有非业务相关的组件的开发:如:缓存,消息,传输,数据库交互,虚拟化等通用组件;非业务相关系统的开发,如:运维平台,交换平台,门户平台,统一用户门台,监控平台等;集成深度学习实验室基础服务组件。最终产出通用基础平台,为产品和项目开发提供基础服务支撑。

3、产品和项目上线及日常运维,基于已有运维平台为产品部和项目部提供产品上线支撑以及日常运维工作。

该部门下设:部门经理,AI研发经理,基础平台经理

产品开发部职责:

根据产品部门的规划设计,开发可复用的行业产品,负责多个产品线的开发和迭代。

该部门下设:部门经理,产品开发经理。

项目开发部职责:

负责项目类软件的全周期实施管理,项目集成中的软件部分以及产品的二次开发。

该部门下设:部门经理(类似于PMO),项目经理,开发经理。

其他两个部门和本次内容无关,简单介绍如下:

产品部负责部分售前工作,产品规划,产品设计,产品管理,专利和著作权相关工作。

QA负责软件测试和质量管理。

~回归正题~

由于组织结构的特点,要求软件开发必须组件化,特别是基础平台部,各个组件都是可以单独应用到产品和项目软件中,就想手机是一个产品,里面的元器件如cpu,内存,相机都是可插拔的。

那么maven的模块化配置就非常有用了(在没使用maven之前,采用的是eclipse打包之后,cmd命令install组件化jar文件到仓库的方式)。

maven的模块化网上已经很多了,无外乎一个parent,一堆子项目。然后parent配置的依赖和插件都可以在子项目中用。这里对模块化的配置就不详说了。

这里讲一个模块化的细节场景:

场景:基础平台中某些包含界面视图(如jsp,vm等)的通用化功能单元,要求可作为jar供其他项目或产品直接在代码中调用,而不是用的时候将jsp复制到项目中或者独部署基础平台通过服务的方式调用。同时又要求可打包成war在基础平台开发中调试。

那么就要求在基础平台打包的过程中能同时打成war和jar包,并且jar中包含所有界面视图文件。

对jar包中静态资源(jsp,js,png,tld等)的访问,利用了meta-info这个文件夹的特性。

有人说这个特性是server3.0的特性,应该不是(具体是什么时候支持的,自己可查阅),早期的struts和spring都已经使用这个特性了,只不过放的是tld文件(自定义标签)。

meta-info对于jar来说是用来描述与该应用相关的各类元数据的地方,比如里面的MANIFEST.MF,通常用来描述启动参数:如main方法所在类,依赖包等。还比如servlet3.0中模块化的描述文件web-fragment.xml等。

我们通常将静态文件如:jsp放在webapp/WEB-INF下,那么对于jar,它的根目录/META-INF/resources/WEB-INF就如同webapp/WEB-INF,只不过不用于加载web.xml等文件。那么打包的时候只要将webapp/WEB-INF下的目录拷贝到src/main/resources下即可(此目录下的所有文件都会打包到jar包的跟目录,也就是classpath下)。

示例

这里通过一个例子来说明如何将基础平台打包成war的同时连同jsp打包成jar,最后供项目开发调用的具体过程。

开发环境:

eclispe Oxygen Release (4.7.0);

maven 3.2.2

项目结构:

 

其中core-web是基础平台(Core)的一部分,主要是通用的含有界面的模块化组件,我们计划将其打包成jar并在busuness-prj项目直接调用。

其他几个项目类似这里不做配置讲解,可下载代码后查看,这里只讲解core-web。

一下是core-web的程序结构,包含了一个通用模块,这里假设为a模块,通过spring mvc来实现,具体的spring的配置下载后看代码,这里篇幅问题就不写了,项目结构如下:

 

为了测试,模块A的界面就简单设计一下,如打印一下当前时间。

 

主要用到了以下maven插件:

maven-antrun-plugin;打包前文件拷贝;

maven-jar-plugin;打jar包;

maven-war-plugin;打war包。

jetty-maven-plugin;jetty运行(非必须,可以将打好的war放在tomcat等容器中运行,这里只是图个方便);

关于这几个插件的详细配置,这里只用了基本配置,不做详细说明,网上应该有很多文章了。

具体maven配置如下:

 

运行maven:clean package,在eclipse中配置这个命令即可,如下:

 

打完包后,target中会同时出现jar和war包,如下:

 

其中jar的结构如下,成功的将web-inf下的文件打包进了jar文件:

 

接下来运行maven:install,将jar文件install到仓库里(项目右键run as ->maven install即可)。

接下来只要在business-prj中配置对此core-web的jar依赖即可,具体配置如下:

 

运行jetty,同样在eclipse中配置jetty启动,如下:

 

启动之后,地址栏输入:localhost:8080/a/list.do。即可直接在项目中使用基础平台的组件了,当然business-prj也需要配置SpringMvc的支撑(web.xml等文件中要添加具体配置,具体配置下载项目查看)。

~以上就是本次分享的全部内容~

maven的配置中大家有遇到很多问题,可一起讨论。


以上示例基本实现了基础平台部门与产品及项目开发部门的协同开发,当然协同开发还有很多方面,比如git的协同,沟通的协同等很多方面,后面有时间会陆续分享。

已分享的相关文章推荐阅读:

【干货分享】大话团队的GIT分支策略进化史

项目协作管理平台-teambition和tapd--深度体验

项目原件下载

为防止地址失效,所有下载链接都在公众号维护,请关注公众号后,回复“R001” 获取本次分享的项目。

感谢阅读和关注!

 

2016-03-25 21:25:02 laxcus 阅读数 538
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5906 人正在学习 去看看 杨波

  最近赢了人机大战的AlphaGo热度持续不减,火得一塌糊涂,圈里圈外,是人都在谈AlphaGo。但是AlphaGo毕竟是为特定场景特定应用设计的特定型人工智能,和通用型人工智能还是有很大差别,离人工智能普及更差得很远。所以这么说,是因为之前做过几个特定型人工智能项目(语音识别和图像识别类型的,合起来可以是视频识别,但是没做),有些体会,对特定型人工智能设计思路比较了解,近期一直在考虑通用型人工智能的事,现在已经开始做这件事。但是只是一个开始,很多东西还在琢磨、探索中,路能不能走通也是未知数。在此和大家说说,分享一下我们的设计思路,希望能抛砖引玉。
  先从人工智能本身说起。人工智能是啥?就是让计算机拥有类似人的思维能力,怎么拥有呢?学习!现在这已经是共识,就是把一大堆数据输进计算机,借助大数据的存储计算能力,加上人对数据的分析理解,过滤掉里面的“噪音”,在大数据里形成一个相对准确的数据池。这个数据池,就成为计算机“思考”的源头。然后继续往里面加数据,这样数据池里的数据就会越来越多,计算机可以参考比较的内容也会越来越多,相应的分析判断能力就会越来越强,理论上,它就会越来越“聪明”。
  这个过程好比老师教孩子。小孩受本身阅历限制,他的知识储备少,在成长过程中会接受错误信息,对某些问题不理解,或者对某些信息判断错误,老师在这时要及时发现纠正,灌输正确的知识,让孩子形成正确的认识。正确的东西学习重复多了,自然对错误的知识形成抗体,以后也不会再犯。
  再说特定型人工智能。特定型人工智能和通用型人工智能相比,它是专门为某一个领域准备的。比如说这次人机大战的AlphaGo,它只思考下围棋的事,别的事不用管,那么做为它的老师,“真正的人”,只管向它输入各种围棋棋谱,给它建立一个分析模型,考虑对手落子之后,怎么根据这个落子下出正确的棋路。在这个过程中,它可能会下错,不过有老师在,老师会给它纠偏,慢慢它的棋艺就会越来越高。
  相比之下,通用型人工智能就要复杂多了。因为我们面对的世界太庞大,上下五千年,东西两半球,小到柴米油盐,大到两次大战,啥事没发生过,还有人的各种感情问题,比如“你是风儿我是沙”这样卿卿我我的东西,让计算机能够理解,建立这样全方位的知识体系肯定难得多。
  到这儿,就要说我们设想的这个东西了:自编程。自编程不是让人写代码,也不是让机器写代码(机器写代码N年前就有了,现在好象也没啥进展)。是让机器模仿人的意图,主动建立一套识别分析模型。在这套模型里,根据不同的录入内容,再进行细分,逐渐具体到一个个单项上。拿AlphaGo这件事来说,它只是世界上各种对弈棋类中的一种,在通用型人工智能这个大的模型框架下,是其中很小的一个子模型。
  再打个比方,军坛里有很多人在讨论隐形飞机的事。这件事如果让机器做,那么应该这样处理:
  1.建立一个飞机的识别分析模型。
  2.在飞机的识别分析模型之下建立一个隐形飞机的识别模型。
  3.向隐形飞机的识别分析模型里加注各种相关的数据。
  如果有人问“世界上哪种隐形飞机最牛B”时,根据“最牛B”这个语义,找到和“隐形飞机”关联的数据进行计算。得分高的自然就牛B。开始可能会有错,那就调整关联参数进行纠偏。这个工作开始一般是人做,训练多了让机器识别判断自己做。人工智能很关键的“深度学习”、“自主学习”实际指的就是这个。以后随着越来多人问,正确答案会受到更多人肯定,关联参数的权重就要增加,达到一定比例后,把正确的保留,错误的取消掉。
  这就是我们大体解决通用型人工智能的思路。归纳起来就是一个树形结构,先有“根”一级的识别分析模型,在“根”之下,有“子”一级识别分析模型,子还有“孙”,逐次递增,直到一个个具体单项。每一级识别分析模型都有各种属性与它建立关联。人机交互的时候,根据应用场景,与树形结构中的识别分析模型进行关联,找到最可能匹配的单项,再去寻找正确的答案。
  如果把AlphaGo迁移到通用型人工智能下面,最少是这样一个层次结构:“棋-围棋-对弈”。AlphaGo将成为通用人工智能环境下的一个子集。以后李世石如果再找AlphaGo下棋,通用型人工智能将引导他到“对奕”下面。其实不只李世石,全世界的人都可以和AlphaGo搏杀,搞个万人对阵机器大赛,如果真有一天出现这个场景,那可比当年《棋王》里的王一生大战老者壮观多了去了!
  扯远了,说正题!其实我们现在做通用型人工智能还是有很多困难。最大问题是要建立各种识别分析模型,还有在里面建立各种识别判断。而且每个识别分析模型的要求标准不一样,另外它们之间肯定有互通的地方,也有排斥的地方,这要建立很多关联,对它们精确定位,在计算的时候还在结合现实场景去理解和处理关联。统一规则肯定没法做到,比较靠谱的是针对几个相似的识别分析模型,做相对统一的规则,不过现在这个正在尝试中。
  至于数据的存储计算问题,现在已经解决,我们有一个超强的大数据系统,PB、EB量级的数据,存储计算起来都已经在不在话下。目前已经是已经PB了。
  总之我们做的通用型人工智能还是个框架,很多东西在摸索、探索中。有兴趣的兄弟可以交流,也希望哪位大神能给点提醒,来个突破!^_^!

MLP多层感知机

阅读数 1432

没有更多推荐了,返回首页