导航:首页 > 源码编译 > 多设备多任务排序算法

多设备多任务排序算法

发布时间:2024-09-01 08:14:37

① 约翰逊算法的公式

为了便于阐述约翰逊法的具体做法,下面结合一个例子来进行说明:
约翰逊法
约翰逊法
例:有五个工件在二台设备上加工,加工顺序相同,先在设备1上加工,再在设备2上加工,工时列于下表1中,用约翰逊法排序。
表1 加工工时表
具体步骤为:
第一步,取出最小工时t12=2。如该工时为第一工序的,则最先加工;反之,则放在最后加工。此例是A工件第二工序时间,按规则排在最后加工。
第二步,将该已排序工作划去。
第三步,对余下的工作重复上述排序步骤,直至完毕。此时t21=t42=3,B工件第一工序时间最短,最先加工;D工件第二工序时间最短,排在余下的工件中最后加工。最后得到的排序为:B-C-E-D-A。整批工件的停留时间为27分钟。
更一般的情况是工件加工顺序不同,称为随机性排序。由杰克逊对约翰逊法稍加改进后得到求解方法,称为杰克逊算法。

② 并行处理的并行算法的基本策略

在并行处理技术中所使用的算法主要遵循三种策略:
1.分而治之法:也就是把多个任务分解到多个处理器或多个计算机中,然后再按照一定的拓扑结构来进行求解。
2.重新排序法:分别采用静态或动态的指令词度方式。
3.显式/隐式并行性结合:显式指的是并行语言通过编译形成并行程序,隐式指的是串行语言通过编译形成并行程序,显式/隐式并行性结合的关键就在于并行编译,而并行编译涉及到语句、程序段、进程以及各级程序的并行性。
二、并行性描述定义
利用计算机语言进行并行性描述的时候主要有三种方案:
1.语言扩展方案:也就是利用各种语言的库函数来进行并行性功能的扩展。
2.编译制导法:也称为智能编译,它是隐式并行策略的体现,主要是由并行编译系统进行程序表示、控制流的分析、相关分析、优化分析和并行化划分,由相关分析得到方法库管理方案,由优化分析得到知识库管理方案,由并行化划分得到程序重构,从而形成并行程序。
3.新的语言结构法:这是显式并行策略的体现。也就是建立一种全新的并行语言的体系,而这种并行语言通过编译就能直接形成并行程序。
三、并行软件
并行软件可分成并行系统软件和并行应用软件两大类,并行系统软件主要指并行编译系统和并行操作系统,并行应用软件主要指各种软件工具和应用软件包。在软件中所牵涉到的程序的并行性主要是指程序的相关性和网络互连两方面。
1.程序的相关性:程序的相关性主要分为数据相关、控制相关和资源相关三类。
数据相关说明的是语句之间的有序关系,主要有流相关、反相关、输出相关、I/O相关和求知相关等,这种关系在程序运行前就可以通过分析程序确定下来。数据相关是一种偏序关系,程序中并不是每一对语句的成员都是相关联的。可以通过分析程序的数据相关,把程序中一些不存在相关性的指令并行地执行,以提高程序运行的速度。
控制相关指的是语句执行次序在运行前不能确定的情况。它一般是由转移指令引起的,只有在程序执行到一定的语句时才能判断出语句的相关性。控制相关常使正在开发的并行性中止,为了开发更多的并行性,必须用编译技术克服控制相关。
而资源相关则与系统进行的工作无关,而与并行事件利用整数部件、浮点部件、寄存器和存储区等共享资源时发生的冲突有关。软件的并行性主要是由程序的控制相关和数据相关性决定的。在并行性开发时往往把程序划分成许多的程序段——颗粒。颗粒的规模也称为粒度,它是衡量软件进程所含计算量的尺度,一般用细、中、粗来描述。划分的粒度越细,各子系统间的通信时延也越低,并行性就越高,但系统开销也越大。因此,我们在进行程序组合优化的时候应该选择适当的粒度,并且把通讯时延尽可能放在程序段中进行,还可以通过软硬件适配和编译优化的手段来提高程序的并行度。
2.网络互连:将计算机子系统互连在一起或构造多处理机或多计算机时可使用静态或动态拓扑结构的网络。静态网络由点一点直接相连而成,这种连接方式在程序执行过程中不会改变,常用来实现集中式系统的子系统之间或分布式系统的多个计算结点之间的固定连接。动态网络是用开关通道实现的,它可动态地改变结构,使之与用户程序中的通信要求匹配。动态网络包括总线、交叉开关和多级网络,常用于共享存储型多处理机中。在网络上的消息传递主要通过寻径来实现。常见的寻径方式有存储转发寻径和虫蚀寻径等。在存储转发网络中以长度固定的包作为信息流的基本单位,每个结点有一个包缓冲区,包从源结点经过一系列中间结点到达目的结点。存储转发网络的时延与源和目的之间的距离(段数)成正比。而在新型的计算机系统中采用虫蚀寻径,把包进一步分成一些固定长度的片,与结点相连的硬件寻径器中有片缓冲区。消息从源传送到目的结点要经过一系列寻径器。同一个包中所有的片以流水方式顺序传送,不同的包可交替地传送,但不同包的片不能交叉,以免被送到错误的目的地。虫蚀寻径的时延几乎与源和目的之间的距离无关。在寻径中产生的死锁问题可以由虚拟通道来解决。虚拟通道是两个结点间的逻辑链,它由源结点的片缓冲区、结点间的物理通道以及接收结点的片缓冲区组成。物理通道由所有的虚拟通道分时地共享。虚拟通道虽然可以避免死锁,但可能会使每个请求可用的有效通道频宽降低。因此,在确定虚拟通道数目时,需要对网络吞吐量和通信时延折衷考虑。
四、硬件技术在硬件技术方面主要从处理机、存储器和流水线三个方面来实现并行。
1.处理机:主要的处理机系列包括CISC、RISC、超标量、VL1W、超流水线、向量以及符号处理机。
传统的处理机属于复杂指令系统计算(CISC)结构。指令系统大,指令格式可变,通用寄存器个数较少,基本上使用合一的指令与数据高速缓存,时钟频率较低,CPI较高,大多数利用ROM 实现微码控制CPU,而当今的精简指令系统计算(RISC)处理机指令格式简单规范,面向寄存器堆,采用重叠寄存器窗口技术,具有多级Cache,多种流水线结构,强调编译优化技术,时钟频率快,CPI低,大多数用硬连线控制CPU。
CISC或RISC标量处理机都可以采用超标量或向量结构来改善性能。标量处理机在每个周期内只发射一条指令并要求周期只完成从流水线来的一条指令。而在超标量处理机中,使用了多指令流水线,每个周期要发射多条指令并产生多个结果。由于希望程序中有许多的指令级并行性,因此超标量处理机更要依靠优化编译器去开发并行性。
VL1W 结构是将水平微码和超标量处理这两种普遍采用的概念结合起来产生的。典型的超长指令字VL1W 机器指令字长度有数百位。在VLlW 处理机中,多个功能部件是并发工作的,所有的功能部件共享使用公用大型寄存器堆,由功能部件同时执行的各种操作是用VL1W 指令来同步的,每条指令可指定多个操作。VL1W 指令译码比超标量指令容易,但在开发不同数量的并行性时总是需要不同的指令系统。VL1W 主要是开发标量操作之间的并行性,它的成功与否很大程度取决于代码压缩的效率,其结构和任何传统的通用处理机完全不兼容。即使同一结构的不同实现也不大可能做到彼此二进制兼容。VL1W 的主要优点在于它的硬件结构和指令系统简单,在科学应用领域可以发挥良好作用,但在一般应用场合可能并不很好用。
向量处理机对数组执行向量指令,每条指令都包含一串重复的操作。它是专门设计用来完成向量运算的协处理机,通常用于多流水线超级计算机中。向量处理机可以利用循环级展开所得的并行性,它可以附属于任何标量处理机。专用的向量流水线可以在循环控制中消除某些软件开销,它的效果与优化编译器将顺序代码向量化的性能很有关系。从理论上说,向量机可以具有和超标量处理机同样的性能,因此可以说向量机的并行性与超标量机相同。
符号处理机是为AI应用而研制的,已用于定理证明、模式识别、专家系统、知识工程、文本检索、科学以及机器智能等许多应用领域。在这些应用中,数据和知识表达式、原语操作、算法特性、存储器、I/0和通信以及专用的结构特性与数值计算是不一样的,符号处理机也称为逻辑程序设计语言处理机、表处理语言处理机或符号变换器。符号处理并不和数值数据打交道,它处理的是逻辑程序、符号表、对象、剧本、黑板、产生式系统、语义网络、框架以及人工神经网络等问题。这些操作需要专门的指令系统,通常不使用浮点操作。
2.存储器:存储设备按容量和存取时间从低到高可分为寄存器、高速缓存、主存储器、磁盘设备和磁带机五个层次。较低层存储设备与较高层的相比,存取速度较快、容量较小,每字节成本较高、带宽较宽、传输单位较小。
存放在存储器层次结构中的信息满足三个重要特性:包含性、一致性和局部性。所谓包含性,指的是一个信息字的复制品可以在比它高的所有层中找到,而如果在高层中丢失了一个信息,则在比它低的所有层中此信息也将丢失。CPU 和高速缓存之间的信息传送是按字进行的,高速缓存和主存储器间用块作为数据传送的基本单位,主存和磁盘之间又是以页面为基本单位来传送信息的,而在磁盘和磁带机之间的数据传送则是按文件级处理的。所谓一致性要求的是同一个信息项与后继存储器层次上的副本是一致的。也就是说,如果在高速缓存中的一个字被修改过,那么在所有更高层上该字的副本也必须立即或最后加以修改。为了尽量减少存储器层次结构的有效存取时间,通常把频繁使用的信息放在较低层次。维护存储器层次结构一致性一般有两种策略,一种是写直达策略,也就是如果,则立即在所有高层存储器中进行同样的修改;另一种是写回策略,也就是在较低层中对信息进行修改后并不立即在高层存储器中进行相应的修改,而是等到该信息将被替换或将从低层中消失时才在所有高层存储器中进行同样的修改。甚至可以将写直达和写回策略的优点结合起来,形成写一次协议来维护存储器的一致性。
存储器的层次结构是在一种程序行为——访问的局部性基础上开发出来的。主要有时间局部性、空间局部性和顺序局部性。时间局部性指的是最近的访问项很可能在不久的将来再次被访问。它往往会引起对最近使用区域的集中访问。空间局部性表示一种趋势,指的是一个进程访问的各项其地址彼此很近。顺序局部性指的是在典型程序中,除非是转移指令,一般指令都是顺序执行的。
在多处理机系统中一般使用共享存储器。对共享存储器的组织一般采用低位交叉、高位交叉、高低位交叉三种方法。低位交叉又称并发存取,它是把相邻的地址放在相邻的存储器模块中,在访问时不容易产生冲突,并行性较好,但可靠性容错能力和扩展性均较差。高位交叉又称允许同时存取,它是把相邻地址分配到同一个存储器模块中,可靠性、容错能力和扩展性均较强,但访问时易产生冲突,带宽较窄,并行性较差。高低位交叉存取又称C—s存取,它是结合了高位交叉和低位交叉两种方法的优点,既解决了冲突问题,又能有效地提高容错能力和并行性,最适合于向量处理机结构。
3.流水线:流水线技术主要有指令流水线技术和运算流水线技术两种。
指令流水线技术主要目的是要提高计算机的运行效率和吞吐率。它主要通过设置预取指令缓冲区、设置多功能部件、进行内部数据定向、采取适当的指令调度策略来实现。指令调度的策略主要有静态和动态两种,静态词度是基于软件的,主要由编译器完成,动态词度是基于硬件的,主要是通过硬件技术进行。
运算流水线主要有单功能流水线和多功能流水线两种。其中多功能流水线又可分为静态流水线和动态流水线。静态流水线技术只用来实现确定的功能,而动态流水线可以在不同时间重新组合,实现不同的功能,它除流线连接外,还允许前馈和反馈连接,因此也称为非线性流水线。这些前馈和反馈连接使得进入流水线的相继事件的词度变得很不简单。由于这些连接,流水线不一定从最后一段输出。根据不同的数据流动模式,人们可以用同一条流水线求得不同功能的值。
并行计算机发展简述
40 年代开始的现代计算机发展历程可以分为两个明显的发展时代:串行计算时代、并行计算时代。每一个计算时代都从体系结构发展开始,接着是系统软件(特别是编译器与操作系统)、应用软件,最后随着问题求解环境的发展而达到顶峰。创建和使用并行计算机的主要原因是因为并行计算机是解决单处理器速度瓶颈的最好方法之一。
并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。因此,并行计算机的两个最主要的组成部分是计算节点和节点间的通信与协作机制。并行计算机体系结构的发展也主要体现在计算节点性能的提高以及节点间通信技术的改进两方面。
60 年代初期,由于晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。这些技术发展的结果导致了并行计算机的出现,这一时期的并行计算机多是规模不大的共享存储多处理器系统,即所谓大型主机(Mainframe)。IBM360 是这一时期的典型代表。
到了60 年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了。与单纯提高时钟频率相比,这些并行特性在处理器内部的应用大大提高了并行计算机系统的性能。伊利诺依大学和Burroughs 公司此时开始实施IlliacIV 计划,研制一台64 个CPU 的SIMD 主机系统,它涉及到硬件技术、体系结构、I/O 设备、操作系统、程序设计语言直至应用程序在内的众多研究课题。不过,当一台规模大大缩小了的16CPU 系统终于在1975 年面世时,整个计算机界已经发生了巨大变化。
首先是存储系统概念的革新,提出虚拟存储和缓存的思想。IBM360/85 系统与360/91是属于同一系列的两个机型,360/91 的主频高于360/85,所选用的内存速度也较快,并且采用了动态调度的指令流水线;但是,360/85 的整体性能却高于360/91,唯一的原因就是前者采用了缓存技术,而后者则没有。
其次是半导体存储器开始代替磁芯存储器。最初,半导体存储器只是在某些机器被用作缓存,而CDC7600 则率先全面采用这种体积更小、速度更快、可以直接寻址的半导体存储器,磁芯存储器从此退出了历史舞台。与此同时,集成电路也出现了,并迅速应用到了计算机中。元器件技术的这两大革命性突破,使得IlliacIV 的设计者们在底层硬件以及并行体系结构方面提出的种种改进都大为逊色。
1976 年CRAY-1 问世以后,向量计算机从此牢牢地控制着整个高性能计算机市场15 年。CRAY-1 对所使用的逻辑电路进行了精心的设计,采用了我们如今称为RISC 的精简指令集,还引入了向量寄存器,以完成向量运算。这一系列全新技术手段的使用,使CRAY-1 的主频达到了80MHz。
微处理器随着机器的字长从4 位、8 位、16 位一直增加到32 位,其性能也随之显着提高。正是因为看到了微处理器的这种潜力,卡内基- 梅隆大学开始在当时流行的DECPDP11 小型计算机的基础上研制成功一台由16 个PDP11/40 处理机通过交叉开关与16 个共享存储器模块相连接而成的共享存储多处理器系统C.mmp。
从80 年代开始,微处理器技术一直在高速前进。稍后又出现了非常适合于SMP 方式的总线协议,而伯克利加州大学则对总线协议进行了扩展,提出了Cache 一致性问题的处理方案。从此,C.mmp 开创出的共享存储多处理器之路越走越宽;现在,这种体系结构已经基本上统治了服务器和桌面工作站市场。
同一时期,基于消息传递机制的并行计算机也开始不断涌现。80 年代中期,加州理工成功地将64 个i8086/i8087 处理器通过超立方体互连结构连结起来。此后,便先后出现了Intel iPSC 系列、INMOS Transputer 系列,Intel Paragon 以及IBM SP 的前身Vulcan 等基于消息传递机制的并行计算机。
80 年代末到90 年代初,共享存储器方式的大规模并行计算机又获得了新的发展。IBM将大量早期RISC 微处理器通过蝶形互连网络连结起来。人们开始考虑如何才能在实现共享存储器缓存一致的同时,使系统具有一定的可扩展性(Scalability)。90 年代初期,斯坦福大学提出了DASH 计划,它通过维护一个保存有每一缓存块位置信息的目录结构来实现分布式共享存储器的缓存一致性。后来,IEEE 在此基础上提出了缓存一致性协议的标准。
90 年代以来,主要的几种体系结构开始走向融合。属于数据并行类型的CM-5 除大量采用商品化的微处理器以外,也允许用户层的程序传递一些简单的消息;CRAY T3D是一台NUMA 结构的共享存储型并行计算机,但是它也提供了全局同步机制、消息队列机制,并采取了一些减少消息传递延迟的技术。
随着商品化微处理器、网络设备的发展,以及MPI/PVM 等并行编程标准的发布,机群架构的并行计算机出现。IBM SP2 系列机群系统就是其中的典型代表。在这些系统中,各个节点采用的都是标准的商品化计算机,它们之间通过高速网络连接起来。
今天,越来越多的并行计算机系统采用商品化的微处理器加上商品化的互连网络构造,这种分布存储的并行计算机系统称为机群。国内几乎所有的高性能计算机厂商都生产这种具有极高性能价格比的高性能计算机,并行计算机就进入了一个新的时代,并行计算的应用达到了前所未有的广度和深度。
并行计算机随着微处理芯片的发展,已经进入了一个新时代。目前并行计算机的性能已经突破20PFLOPS,正在向百亿亿次发展。我国并行计算机的研制已经走在世界前列。2003年由联想公司生产的深腾6800 在2003 年11 月世界TOP500 排名中位列第14 名,2004 年曙光公司生产的曙光4000A 在2004 年6 月的世界TOP500 排名中位列第10 名,这是我国公开发布的高性能计算机在世界TOP500 中首次进入前十名,这标志着我国在并行计算机系统的研制和生产中已经赶上了国际先进水平,为提高我国的科学研究水平奠定了物质基础。2013年国际超级计算机大会最新发布的世界超级计算机500强排名中,国防科技大学研制的天河二号超级计算机系统,以峰值计算速度每秒5.49亿亿次、持续计算速度每秒3.39亿亿次双精度浮点运算的优异性能位居榜首。
从TOP500 的前10 名来看,美国仍然是超级计算机的最大拥有者。按照世界TOP500 的统计数据来分析,美国在计算能力上占有近全世界的一半,在TOP500 中的所有计算机中拥有的数量超过50%。

③ 腾讯算法高级研究员陈松坚:智能问答技术及其应用

随着人工智能的飞速发展以及广泛落地应用,越来越多的设备将会被植入智能问答技术,人机交互场景随处可见,智能问答在未来将会成为一个非常重要的入口。

腾讯小知凭借着业界领先的智能AI引擎算法和海量大数据仓库,已将智能问答技术落地实施,并且经过大量的业务考验和优化,知识点匹配度和准确率都已达到90%以上,在2018 年 GITC 全球互联网技术大会上,腾讯小知荣获年度互联网最具价值产品奖。

腾讯小知算法负责人陈松坚也在会场发表了关于智能问答技术原理及其在To B场景下的应用的专题演讲,从自己的角度为我们展现智能问答技术的最新成果。

他首先从智能问答是什么,为什么和怎么做的三个问题出发,阐明了他对当前智能问答技术的定位和价值,首先,现阶段的智能问答是信息检索技术的升级,是量变而未达到质变。但是无论在To B还是To C的场景下,当前的技术都能够切实解决一些用户的痛点,提升用户体验,是亟待推进和充满想象的方向。

在回答怎么做这个问题时,他详细介绍了几种不同的问答机器人的实现路径,包括单轮丛敏问答机器人,多轮问答机器人及阅读理解机器人。其中重点阐述了单轮问答机器人的实现原理,包括字面匹配,词向量匹配,深度语义匹配,迁移学习等技术。

此后他还分享了小知团队将上述技术产品化的经验,包括智能客服机器人和电话机器人两大块,主要分享了当前产品的形态,亮点和实际项目中取得的一些成果。

最后,他简单总结了小知目前完成的工作以及就智能问答的发展提出了自己的几点看法。

--------------------------------------------------------------

以下是演讲稿全文:

各位下午好,很高兴今天能在这里给大家做分享报告。先介绍一下,我们腾讯小知是致力于为政府和各行业提供一揽子智能问答解决方案的团队,目前已经落地的包括基于文本的智能客服机器人和碧和基于语音的电话机器人等。

在大多数人的认知里,智能问答很可能是以上的3个印象,2011年打败了人类取得问答竞赛冠军的waston;2017年被沙特授予公民身份的机器人sofia;更为大家熟知的钢铁侠中的机器人管家jarvis。在大家心目中,智能就意味着能够像真人一样交流。然而作为从业者,很遗憾地告诉大家,目前的技术还远没有达到这个目标,我认为本质上目前的智能问答技术是对信息检索技术的一次升级,是量变而未到质变。这个皇冠上的明珠还等待我们去摘取。

既然问答技术还不成熟,那为什么还要投身到这个领域呢。我想从To B和To C两个角度去回答。对企业来讲,当前的问答技术虽然无法解答复杂的咨询,但是大部分的简单的头部问题是可以比较好的解答的。从本轮AI大潮NLP赛道的几名种子选手都从智能客服这个方向切入就可以看出企业是确实存在对智能问答的刚性需求。而对普通用户来讲,一方面siri等语音助手每天都在为用户提供便捷的交互界面,另一方面像amazon echo这一类的智能家居产品也逐步进入千家万户,成为物联网生态的中心入口之一,这便是智能问答的价值所在。

那如何实现智能问答机器人呢?我们先来看最基本的单轮问答机器人的实现原理。

熟悉搜索引擎的朋友会发现这个架构跟搜索引擎的很类似。单轮问答一般来说就是FAQ问答,是基于业务问答对组成的问答库进行检索匹配。其中FAQ问题集包含多个悔郑盯相似问法供用户问题去匹配。预处理阶段一般会进行文本纠错,标准化和底层NLP特征提取;召回阶段会在倒排索引中召回若干个候选问题(粗排),而最后的匹配阶段会基于各种模型进行匹配打分并返回得分最高的结果(精排)。匹配阶段还会引入其他模块,如知识图谱和拒识模型,目的是辅助提升匹配的最终准确率。

retrieval中的匹配可以看做是naive solution,词袋+VSM, 筛选候选够用了,但是精排需要更精致的策略,第一,要利用监督信息做拟合,我们构建基于问题对的训练语料,拟合是否匹配这个二分类目标。第二,特征上抛弃稀疏的词袋模型,而是构造各种相似度来做base scorer,然后利用非线性的抗噪能力强的xgboost来做融合,比如我们用到词bigram, 字bigram, 核心词,名词等特征集合的相似度。这种方法的优缺点是一体的,由于模型只学习字面相似的特征,因此不受领域影响,通用性强,适合用在冷启动阶段;但也因为只考虑字面相似,无法处理更深层的语义匹配。

那如何度量语义的相似呢。词向量技术的兴起是语义匹配的前提,所谓词向量,是将孤立的传统的token表示映射到相互关联的向量空间中,这种关联性,或者说是相似性,是通过词语的上下文的来描述的。也就是说,上下文越相似的词语,他们的语义就越相似,词向量的欧式距离就越近。这是很容易理解的,更妙的是,通过对向量进行简单加减运算,能够呈现出概念的关系,比如king-man+woman的结果非常接近于queen, 因此说明词向量能够一定程度刻画语义。那对句子如何做向量表示呢?一个简单的想法是直接求和平均,WMD是另一个比较有意思且有效的做法,他将计算句子到句子的相似度建模成一个运输的问题,把句子p的各个词,运输到q的各个词上,也可以说是变换;运输成本是词向量的cosine相似度,而要运输的是各个词在句子中的权重,用线性规划求解一个最优解,即为p到q的距离。另外还有个有效的方法是SIF,思路是做词向量加权求和,但是突显出句子中非通用的部分,即权重用词频倒数来计算权重,实验效果也很不错。

上面的方法有一个问题就是没有利用有监督信息,所以效果有明显的天花板。下面介绍这个工作是基于深层网络做有监督学习的匹配的,做法也比较简单,首先把句子文本用one-hot编码,假如词典大小是500K,那编码完长度就是500K维,其实等于是词袋模型,然后输入到一个多层的神经网络去学习,最终得到一个128维的向量作为句子的语义表示,然后用cosine计算两个句子与文档的相似度作为模型输出。这个方法其实是将高维稀疏的token特征映射到低维语义空间,跟词向量的思路很类似,只不过训练目标不同,并且这里使用了深层网络结构。

但是CNN对上下文的处理能力依赖于窗口大小,远距离就没办法处理了,因此要考虑另一种网络单元RNN,这种单元是专门为时序模型量身打造的,简单来说,每一时刻t上的隐藏状态,或者说第t个词上的语义编码,都由两个输入共同决定,即上一时刻的隐藏状态和当前时刻的原始输入,而为了解决远距离传递导致的梯度消失和梯度爆炸等问题,RNN有一些变种结构来应对,比如 LSTM和GRU等。

CNN和RNN都是对原始输入进行语义编码的基本单元,编码后的向量就可以接入多层感知机进行相似度计算,如果是直接计算cosine相似度,那就是dssm的升级版,而更常见的做法是把两个句子的编码向量拼接在一起,再经过一个多层感知机计算相似度,而这种方法统称为表达式建模;

另一种方案考虑到两个句子之间的交互信息对学习他们是否匹配显然更为重要,这一类方案被称为交互式建模,右边是一个典型的例子,他最大的不同是首先对两个句子的所有窗口组合进行拼接和卷积,得到交互信息。然后再进行多次卷积和池化得到表示。其他的交互方式还包括编码之后,进行交互操作,如作差,点乘等,还有计算attention表示,也是常见的交互方式。

下面介绍我们的方案,跟上面介绍的模型相比,我们的方案主要做了两处改动,一个是使用了稠密连接的网络结构,让rnn层的输入和输出拼接在一起做为下一层的输入,第二个是混合注意力机制,即在计算attention向量进行交互式建模的基础上,增加self-attention向量计算,然后把两个attention向量经过门机制进行融合,这样做一方面引入了问句间的交互信息,同时又增强了对自身的表达建模。

上面的模型是比较复杂的模型,参数量有5.8M。在实际中应用中训练语料会严重不足,为了解决这个问题,我们引入了迁移学习的策略。首先第一种是多任务联合学习,比如在拟合两个问句是否匹配的同时,也对问句进行分类预测;另外还可以同时对匹配的问题对做seq2seq的翻译模型训练。这两个策略都证明能有效提升准确率。

而另一个思路更加直观,即引入其他领域的语料,所谓多语料迁移。Fine-tune即参数微调是其中一种做法,即先用通用语料训练网络,固定底层表达层的参数,然后再使用领域语料调整上层参数;另一种思路参考了对抗学习的思想,即引入一个新的任务“混淆分类器”去判别当前样本是来自源语料还是目标语料,通过在损失函数中增加反向的混淆分类损失项,让混淆分类器尽可能地无法区分样本的来源,从而保证共享了参数的表达网络能够学习到两部分语料中共性的部分。

以上的介绍都是为了完成一个基本的单轮对话机器人,而实际应用中,往往存在需要需要交互的场景,比如查询社保余额,就需要用户提供指定信息,如姓名,身份证号,手机号等。这种是所谓任务导向型机器人,而另一种,基于知识图谱的机器人也往往会涉及到多轮交互。这里简单介绍一下多轮对话机器人的架构,整体上是一个对话管理系统,总的来说是管理会话状态,包含4个模块,分别是输入部分:自然语言理解模块NLU,负责意图识别和抽取槽位实体,比如这里匹配到了意图是查询社保余额,抽取到了社保号1234。得到的意图和槽位值会送入到对话状态追踪模块,DST,他负责会话状态的更新,形式化来说是一个函数,输入是当前状态s和当前的query经过NLU处理过得到的意图和槽位值q, 输出新的状态s‘,下一步是把s’送入DPL,对话策略模块,这个模块是根据新的状态s‘输出行动a,通常这个决策选择会依赖于一个外部数据库或知识图谱,最后,由输出部分,自然语言生成模块NLG负责将行动转换为自然语言文本,返回给用户。

前面提到的单轮FAQ机器人,有一个问题是问答准确率依赖于问答库的质量,而问答库的构建耗时费力,所以针对数据较大的非结构化文档,如果可以直接从中抽取答案,是非常理想的做法。比如斯坦佛大学开源的drQA,就是基于wikipedia的语料做的一个开放域上的问答机器人,我们来看看这种阅读理解机器人的架构示意,他也是基于检索重排的思路,首先把可能的文段从语料库中摘取出来,然后送入阅读理解模型进行答案定位,打分,排序和选择得分最高的答案。阅读理解模型与匹配模型是类似的,需要先对问题和候选文段进行编码表示,不同之处在于最终预测的目标是答案的起始和结束位置。我所在的团队在去年,在阅读理解的权威公开测评Squad v1中取得过第一的成绩,同时参加这个测评的包括了google, facebook, 微软,阿里idst, 科大讯飞等国内外同行。说明业界对这种技术还是非常看重的。

下面分享小知在把以上技术落地产品化的经验。首先我们来看看小知的整体架构图,核心引擎有两部分,一块是上面重点阐述的深度语义匹配模型,另一块是本次分享没有展开的知识图谱引擎,在此之上,我们构建了FAQ机器人,多轮会话机器人(任务机器人),闲聊机器人等。以下是我们单轮和多轮机器人的示例。

在我们实际的落地项目中,得益于深度迁移模型的语义匹配能力和行业知识图谱的的精准匹配和辅助追问,小知机器人能够做到95%左右的问答准确率,并且节省了50%以上的服务人力,切实为政府和企业提升效率和降低成本。

在智能客服的基础上,我们又打造了基于语音的电话机器人,力主融合智能客服,人工在线客服,工单系统和电话机器人,为客户打造从售前售中售后的整体解决方案。

以下是电话机器人的整体架构图,核心是自然语言理解NLU模块,负责识别用户提问意图

提取相关实体。根据NLU输出的结果,内置的对话管理引擎会进行流程状态流转和跟踪。

另外,ASR语音识别和TTS语音合成是不可或缺的重要服务,这三个模块相互协作,共同完成与用户的交互。

最后对智能问答的未来发展提几点我的看法。目前学术界比较公认的一个方向是,需要更有机地结合模型和规则,而在问答领域,规则的一大组成部分就是知识图谱,包括开放领域的知识图谱和专业领域知识图谱。而更进一步地,我们需要研究带有推理性质的事理型知识图谱去描述领域内的规则和知识,让机器人能够处理带有复杂条件的问题,提供更智能的回复。在我看来,智能问答的一个突破口就在于解决以上三个问题。以上就是今天分享的内容,谢谢大家。

主讲人介绍:

陈松坚,腾讯数据平台部算法高级研究员,有着8 年的 NLP 研发经验,2017 年加入腾讯 TEG 数据平台部,负责智能客服产品腾讯小知的算法规划和落地。负责过多个智能客服项目,对封闭领域的智能问答有丰富的实战经验。

④ 计算机基础课程有那些

您好!
请看资料,或许会有帮助的。

根据不同专业对计算机的不同需求,北京大学计算机基础课程教学体系划分为计算机专业(A类)、理科非计算机专业(B类)、文科专业(C类)三类。

为了了解北京大学计算机基础教学的课程体系和知识点设置的情况,以及学生的学习效果,我们在北京大学计算机基础任课教员和低年级理科学生中进行 了计算机基础课程分类分级教学情况的调查。下面重点介绍北京大学计算机基础课程教学体系、课程设置以及教学效果、教学经验、教学改革等方面的调查结果。

一、北京大学计算机基础课程教学体系
北京大学计算机基础课程教学体系按照计算机专业(A类)、理科非计算机专业(B类)、文科专业划分为三类。A类和B类的计算机基础课程有三门课程:计算概论、数据结构与算法、微机原理。为了加强计算机专业学生的程序设计能力,在信息学院专门为计算机专业学生开设了程序设计实习、数据结构与算法实习这两门实践课程,进行系统的程序设计训练。C类计算机基础课程包括两学期的内容:文科计算机基础(上)、文科计算机基础(下)。

三类教学体系中不同的课程都设有主持教员和主讲教员,这些来自北京大学不同的院系的教员组成教学小组,共同制定教学大纲、选取教材、统一教学进度、定期交流教学经验。

1.计算机专业计算机基础课程体系(A类)
在设置计算机专业的基础课程时,基于如下的考虑:

(1)首先要给学生提供对计算机学科的一个全局性了解,建立学科全局观,既有利于日后深入学习做出选择,也有利于对各学科分支在学科全局中的位置和相互关系有透彻的理解。

(2)设计程序解决一个问题时,除了认真分析问题之外,最重要的是选择合适的数据结构,并设计满足限制条件(或者更优)的算法。因此,计算机专业的学生要熟练掌握各种常见的数据结构,深刻理解某些经典算法,如快速排序、二分法等等的原理和时间、空间复杂度,掌握算法设计的一般步骤。

(3)计算机专业的学生应该从理论和实践上掌握微型计算机的基本组成、工作原理及常用接口技术,建立微机整体概念,具备利用微机进行硬、软件开发的初步能力。除此之外,还要初步掌握汇编语言程序设计的基本方法和上机调试过程。

因此,北京大学计算机系设置了计算概论课程、数据结构与算法课程、数据结构实习、程序设计实习和微机原理课程。其中,计算概论作为总论性质的课程,是其他课程的先修课程。

2.理科非计算机专业计算机基础课程体系(B类)
非计算机专业学习计算机技术的目的很明确,不是把它作为纯理论的课程来学习,而是作为应用技术来掌握。对于理工类非计算机专业的学生来说,虽然他们在学习和工作中不是以计算机为中心,但是很多情况下却离不开计算机,他们需要结合自己的专业,利用计算机作为工具来开展工作。

与计算机专业一样,对理科非计算机专业的计算机基础课程体系同样也设置了计算概论、数据结构与算法、微机原理三门课程。但是,由于两者的学习目的不同,故而要求也有很大不同。

3.文科专业计算机基础课程体系(C类)
对文科学生在计算机方面的要求比对理科非计算机专业学生的要求更低一些,教授的内容也更偏向于应用,结合使用计算机和应用计算机,讲解计算机与信息技术的基本知识和基本方法。文科专业计算机基础课程包括两学期的内容:文科计算机基础(上)、文科计算机基础(下)。

二、课程的主要教学目标和教学内容
各门课程的主持和主讲教员参考各门课程的主持和主讲教员参考CCC2002(China Computing Curricula, 中国计算机科学与技术学科教程)、CC2001、“计算机基础教学白皮书”和CFC2004(China Fundamental-computing Curricula, 中国高等院校计算机基础教育课程体系)等课程体系为不同类型的计算机基础教育课程分别制定了教学大纲。

1. 计算机专业
计算机专业的计算机基础课包括五门课程:计算概论、数据结构与算法、数据结构与算法实习、程序设计实习、微机原理。其中,计算概论是其他课程的先修课,数据结构与算法和数据结构与算法实习是两门同修课程。

(1) 计算概论A(54学时,3学分)

这门课程的教学目标是给计算机专业的学生提供一个对计算机学科的全局性认识,让学生一开始就有全局观,既对日后深入学习做出选择提供帮助,又有利于透彻理解各学科分支在整个计算机学科中的位置和相互关系。在教学实践中,既要遵循人的认识习惯,又能让学生有效地掌握学科哲学思想。

该课程的基本目的是:使学生了解‘计算科学’的意义、内容和方法,从基础理论、基本开发技术和应用三个层面来介绍;使学生对计算机的认识由感性的、功能的认识深入到内涵的、机理的认识;使学生对计算机学科的主要骨干课的内容以及相互关系有一个概括的了解,对计算机专业的课程体系建立一个整体印象;使学生掌握程序设计的基本方法,可以用C++语言编写应用程序。

在教学实践中,我们采用了两条主线:计算科学简介,C++程序设计。即在介绍计算科学的同时也讲解C++程序设计,实践证明,这样收到了很好的教学效果。

教学方式:既有课堂教学(多媒体教学),又有网络课堂:http://162.105.80.97 ,可以进行课后复习、交作业、讨论、辅导答疑,等等。

(2) 程序设计实习(36学时,2学分)

这是信息学院本科生必修课。

该课程的基本目的是:了解程序设计语言的本质,并熟练掌握一种程序设计语言;培养学生的实际动手能力, 为进一步学习其他专业课程奠定良好的基础。目前程序设计使用的高级语言是C++。

教学方式:课堂授课和上机实习相结合。

(3) 数据结构与算法A(54学时,3学分)

该课程为信息学院本科生必修课,又是计算机软件专业一门十分重要的基础课。计算机科学各领域及有关的应用软件都要使用到各种数据结构。这门课程向学生详细讲解各种常见的数据结构及其特点,讲授算法设计和分析技术的一般方法,使学生能够熟练运用各种数据结构,针对具体问题设计出合适的算法。

课程网站: http://db.pku.e.cn/mzhang/ds/

该课程的基本目的是:通过本课程的学习,学生将基本掌握数据结构和算法的设计分析技术,提高程序设计的质量;根据所求解问题的性质选择合理的数据结构并对时间空间复杂性进行必要的控制;培养学生逻辑思维能力、独立思考能力、分析问题和解决问题能力,以及严谨的科学作风。

(4) 数据结构与算法实习(周学时4,2学分)

该课程为信息学院本科生必修课,先修要求:计算概论A ,同修要求:数据结构与算法。

课程网站:http://db.pku.e.cn/mzhang/ds/shixi/index.htm

该课程的基本目的是:配合“数据结构”理论课程的学习,提高学生的实际动手能力;能够独立地实现常用基本数据结构的ADT,能够灵活地应用基本ADT,以及相应的STL中设置的常用数据结构,解决一些实际问题,独立编写中小型应用程序;应用基本数据结构,并结合排序、检索、文件、索引等技术,合作编写比较综合的大型应用程序。

(5) 微机原理A(54学时,3学分)

该课程为信息学院本科生必修课,先修要求:计算概论A,数字逻辑。

该课程的基本目的是:从理论和实践上掌握微型计算机的基本组成、工作原理及常用接口技术;初步掌握汇编语言程序设计的基本方法和上机调试过程;建立微机整体概念,具备利用微机进行硬、软件开发的初步能力。

教学方式:课堂讲授,示教演示,上机实习。

2. 理科非计算机专业
理科非计算机专业计算机基础课程包括3门课:计算概论、数据结构与算法、微机原理。其中,计算概论是其他两门课程的先修课。

(1)计算概论B(51学时,3学分)

该课程为理科本科通选基础课B。

课程网站:http://162.105.30.60/course/index.htm; http://icl.pku.e.cn/member/hujf/;ftp://162.105.20.22/courses/; http://gis.pku.e.cn/Course/ComputerCourse02/index.htm

该课程的基本目的是:使学生初步理解有关计算机和信息技术的基本概念和基础知识,学会使用计算机进行信息处理,使用常用软件,使用因特网;讲授程序设计基础,侧重其基本部分。

教学方式:课堂讲授,配以上机。每次课都布置作业,包括上机作业。

(2)数据结构与算法B(2(课堂教学)+2(教学实验)课时/周,3学分)

该课程为理科本科生必修课 。

先修课程: 计算概论(通过学习计算概论,学生要有一定的程序设计能力,能熟练掌握运用C的控制结构,函数定义与调用,数组,结构,指针。

课程网站:http://162.105.69.120/teachers/zhangnx/ds/算法与数据结构/INDEX.HTM;ftp://162.105.20.22/courses/;http://db.pku.e.cn/ds/

该课程的基本要求是:从每个数据结构的逻辑结构、相应的一组基本运算和实现三个方面去掌握线性表、栈、队列、串*、树、图和字典等常用的数据结构;掌握在顺序存储结构上实现的重要的几种排序算法;对算法的时间和空间复杂性有一定的分析能力;针对简单的应用问题,应能选择合适的数据结构及设计有效的算法解决之。

教学方式:以课堂讲授为主,并根据教学进度安排上机实验。上机内容包括:单链表、栈、二叉树操作、图的遍历、检索、排序。

(3)微机原理B(54学时,3学分)

该课程为理科非计算机专业限制性选修课。由于绝大部分非计算机专业的学生没有学过数字逻辑课程,所以与计算机系微机原理课程相比,增加了数字逻辑的基本内容;在内容的深度上也比计算机专业略浅一些。

该课程的基本目的:理解微型计算机的基本组成、工作原理及常用接口技术;初步掌握汇编语言程序设计的基本方法和上机调试过程;建立微机整体概念。

教学方式:课堂讲授,示教演示,上机实习。

3.文科
文科专业计算机基础课程分两学期讲授。

(1)文科计算机基础(上)(48学时,2学分)

该课程为文科必修课程。这门课的目的是向文科学生介绍计算机的发展,计算机的使用与维护,计算机网络方面的常识,以及常用软件(如word、excel)的使用。通过本课程的学习,希望学生能够较为熟练地使用计算机,真正把计算机作为日常生活和学习中的工具。

课程网站:http://162.105.30.75;http://162.105.30.75:8080;http://162.105.30.80:8000

教学方式:对于基础知识采用课堂讲授的形式,对于其他需要动手操作的技能采用上机实验。

(2)文科计算机基础(下)(周学时3,2学分)

该课程为文科类必修课程。该课程讲授较为高级的计算机应用技术,一共包含7个模块:网络、多媒体、数据库、VB、ASP、网页制作、动态网页制作。我们将这个7个模块组合起来,一共形成了7门课程,学生可以任选其中1种或2种。这7门课程是:网络与多媒体技术,网络与数据库技术,网络与VB程序设计,数据库与VB程序设计,VB与ASP,(静态)网页制作,动态网页制作。

三、教学效果的调查结果
参与调查的学生一共626人(包括网上答卷和纸质答卷),其中计算机专业(简称A类)343人(只学过计算概论的学生153人,学过数据结构和计算概论的学生71人,全部基础课程都学过的学生119人),理科非计算机专业(简称B类)165人,文科专业(简称C类)118人。

我们从基本信息、师资力量、教学方式、教学效果、课程安排五个方面进行了调查,并对结果进行了初步分析。由于文章的篇幅的限制,本文只给出教学效果,也就是学生对课程的知识点的了解程度。

在教学效果的调查中,对每门课程,我们让学生选出他们认为重要的知识点(多选),这样可以从结果看出不同年级和专业的学生对所学过每门课程的认识。

对理科专业(包括计算机专业)的学生考察了他们对4门课程的认识:计算概论、程序设计、数据结构与算法、微机原理。由于文科专业课程内容相对简单,我们将各个知识点汇聚在一起作为一门课程(文科计算机基础)来考察。

1.计算概论
调查结果表明,“学习写出正确、简洁的程序”被所有的学生(包括计算机专业和非计算机专业)认为是计算概论课程中最重要的知识点。计算机专业学生认为最不重要的知识点是机器指令与汇编,其次是布尔代数与逻辑电路。理科非计算机专业学生认为最不重要的知识点是布尔代数与逻辑电路,其次是计算模型。

计算机专业一年级学生对计算概论课程的各个知识点重要性的认识没有很大的起伏,而二年级学生(学过数据结构和微机原理的学生)对其中不同知识点有不同对待。二年级学生普遍认为机器指令和汇编、系统软件和应用软件、计算机网络等知识点不重要,原因可能是内容比较简单(例如系统软件和应用软件),或者以后会学到而且现在不急于了解(例如计算机组织与体系结构)。

2.程序设计
调查结果表明,学生认为最重要的知识点是指针,其次是基本程序结构;认为最不重要的知识点是贪心法,广度优先搜索。学生认为指针是程序设计中最重要的知识点,这和我们教学中采用C/C++作为入门语言不无关系。

观察计算机专业三类学生的看法,可以看出,随着学习的深入,认为数组、递归和回朔两个知识点很重要的学生比例在增加。例如一年级中只有37%的学生认为数组重要,而到二年级之后这个比例上升到70%以上。

3.数据结构与算法
调查结果表明,计算机专业学生认为数据结构中前几个最重要的知识点是:排序、二叉树、图的遍历、索引(包括B树/B+树);最不重要的知识点是高级数据结构(如字符树、广义表、AVL树)其次是树。

理科非计算机专业认为最重要的知识点依次是线性表、二叉树、排序,认为最不重要的知识点是高级数据结构、索引,其次是散列与检索。

教学实践中,我们的教学重点也基本上与学生认为最重要的知识点基本一致。同时在教学过程中没有重点讲授的内容(如高级树形结构),也被学生们认为是不重要的。

4.微机原理课程
调查结果表明,计算机专业学生认为最重要的知识点是汇编语言程序格式,其次是CPU的操作和时序、指令编码格式及80x86指令系统、中断的用途和中断控制器的作用;最不重要的知识点依次是伪指令和宏指令、外部引脚的功能、操作数的汇编表示、存储空间的扩展。

理科非计算机专业学生认为微机原理中最重要的知识点依次是定时器/计数器、中断的用途和中断控制器的作用、存储器的结构、存储器工作原理;最不重要的知识点是总线及常见总线标准、伪指令和宏指令、存储空间的扩展等。

5.文科计算机基础
由于文科专业课程内容相对简单,我们将各个知识点汇聚在一起作为一门课程(文科计算机基础)来考察。

调查结果表明,可以看出文科专业学生最感兴趣的知识点依次是:动画的处理、演示文稿的制作、文字处理软件的功能和用法、计算机安全与犯罪的有关常识;最不感兴趣的知识点是计算机文化与信息化社会、与计算机应用相关的道德与法规介绍、计算机的概念和发展史、软件与知识产权保护、计算机中的信息表示、网络教学与远程教育等。

6.教学效果小结
我们在分析了各专业各年级的调查数据之后,可以得出如下几个结论:

(1)在计算机专业,不同年级的学生对同一门课的认识可能会有比较大的出入;而在非计算机专业,不同年级的学生对同一门课的认识基本一致。例如计算机专业的学生对计算概论的认识,一年级学生认为较为重要的知识点如机器指令和汇编、系统软件和应用软件、计算机网络等,二年级的学生却认为都不重要。原因大概是内容比较简单,或者以后会学到。

(2)无论是计算机专业还是理科非计算机专业,学生普遍认为程序设计中最重要的知识点是指针。这和我们教学使用的编程语言有很大关系,因为目前教学实践中程序设计采用的入门语言一般是C/C++,而C/C++中指针功能强大但是不容易掌握,所以多数学生认为指针是程序设计中最重要的知识点。Java的语法中没有指针,面向对象的风格更完备,学生学起来可能比C++更容易一些。是否采用Java作为入门语言,是值得我们考虑的一个问题。

(3)学生认为数据结构中最重要的知识点是快速排序、二叉树、二叉树的遍历、图的遍历、最短路径、B树/B+树等,这基本上和我们教学中重点讲述的内容一致。

(4)文科学生对动画的处理、演示文稿的制作、文字处理软件的功能和用法、计算机安全与犯罪的有关常识最感兴趣,而对计算机文化与信息化社会、与计算机应用相关的道德与法规介绍、计算机的概念和发展史、软件与知识产权保护、计算机中的信息表示、网络教学与远程教育等内容没有很大兴趣,可以看出,文科学生希望老师多讲一些可以表现自己创造力和个性的、实用的或者学 生比较关心的内容。

四、教师的教学经验以及对计算机基础课程教学改革的看法
我们用e-mail采访了十几位担任本计算机基础课程的主讲教师,刘楚雄、陈泓捷、唐大仕、龙晓苑、李文新、胡俊峰、代亚飞、高军、王腾蛟等老师认真地回答了问卷,并提供了教学大纲等信息。他们其中有教学经验丰富的老教授,也有具有创新精神的青年骨干教师;有计算机专业的老师,也有其他学院担任本院计算机基础课程教学任务的老师。

1. 教学经验

归纳起来,各位老师的教学经验有以下几个方面:

(1)注重调动学生的积极性。可以让学生做一些小程序,提高学生的动手能力和信心来激发学生的积极性;可以增加鼓励措施,如请学生讲课,适当表扬,出一些需要创造性思维的作业;可以引入一些能用计算机解决的智力游戏,让学生积极思考;选取例子时也可以选一些短小简洁的问题,先提出问题,然后求解,容易集中学习注意力,等等。

(2)讲课内容注重实用性和具体性。学生对实际中存在的问题更容易感兴趣;对具体的例子比抽象的讲解更容易接受。可以通过让学生使用计算机去解决现实生活中的一些问题,因为学生大都希望能学以致用,能够解决一些具体的问题。他们在解决具体问题的过程中同时也学会了解决问题的方法。

(3)多与学生交流。可以在课程网站上建立留言板,在BBS上答疑,鼓励学生与教师和助教多交流,等等。这样能够发现学生的疑问甚至自己的不足,及时调整。

(4)选用内容新颖、编制优良的教材,参阅精品课程网站。

2. 教学改革设想

谈到计算机基础课程教学改革,老师们提出如下较为一致的看法:

(1)不同专业的计算机基础课程侧重点应该有所不同,强调针对性。有些工程性强的专业涉及到的科学计算比较多,艺术类专业可能会注重多媒体处理。不同专业的计算机基础课程应该包括针对该专业特点的内容。

(2)调整必修课和选修课的比例。有的老师认为,对于某些理科专业来说,计算机基础课程必修课应该包括计算概论、数据结构与算法,而像软件工程和Windows程序设计等课程可以作为选修课;对另外一些很少涉及编程的理工专业,必修课可以只包含计算概论,而数据结构与算法等作为选修课。对于文科专业来说,“计算机基础”应作为必修课,而程序设计可以作为限选课或者非限选课,算法与数据结构可以作为非限选课。

(3)教学内容应该突出应用性。希望学生能够学以致用,但是从学生的反应和老师的意见来看,在这方面仍有很大的努力空间。

五、结论

总的来看,我们的教学实践是成功的,但是也有一点不足。可以总结为以下几点:

1. 教学效果的评价

从学生对每门课程的认识来看,我们取得了很好的教学效果。学生认为课程中重要的知识点基本上和教学实践中重点讲解的内容一致。不过,在文科专业,学生希望可以学到更多的关于多媒体(动画、视频等)处理的实用技能。

2. 师资力量的评价

无论从计算机专业还是从非计算机专业来看,师资力量都基本能够满足要求。绝大多数理科学生认为教师和助教对学生认真负责,大部分文科学生也持相同看法。同时我们也注意到,理科非计算机专业学生虽然大部分认为老师很敬业,但是不是十分认可其能力。另外,计算机专业的计算概论课程需要增加助教。因此,提出应该很好解决教师的进修与充电的问题。

3. 课程安排和内容方面

老师和学生反映较多的问题是应该给不同学院甚至专业开设不同的计算机课程,教学内容应该和专业领域结合得更紧密一些。例如对于编程,不同专业要区别对待。有的学院除个别专业方向须掌握编程方法外,其余均是对现在已有程序的应用;而另外一些专业却对程序设计能力有较强烈的要求。再如对于美术相关的专业,可能会对电影制作方面有较高的要求。

4. 教学方式

老师如果能注重调动学生的积极性,教学效果可能会更好。可以讲解或布置有挑战性或应用性或有趣的任务、问题或习题,增加奖励和鼓励措施,讲授知识时能够做到理论联系实际,努力使该课程生动有趣且易懂等来调动学生的积极性并吸引学生的注意力。

5. 作业要求

大部分学生认为课程学习难度适中,能够独立完成作业,课程负担也比较合适。不过,在理科专业,数据结构课程作业偏多,而计算概论负担相对较轻。

全国高等学校教学研究中心

阅读全文

与多设备多任务排序算法相关的资料

热点内容
编译c无法识别unsighed 浏览:433
怎么给几年前的安卓机强行刷机 浏览:316
天方地圆制作算法 浏览:193
算法失效分析 浏览:760
gcc编译选项给gdb调试 浏览:590
ios和android前景好 浏览:66
苹果如何蓝牙传送安卓app 浏览:552
方舟编译器mod怎么用 浏览:762
服务器地址栏在哪里 浏览:397
做安检还是程序员好 浏览:529
程序员最火的bug 浏览:938
腾讯文件夹英文怎么写 浏览:127
pdf内码 浏览:434
微信小程序文件夹怎么发给好友 浏览:972
java不能被继承的类 浏览:163
苹果app网址怎么添加 浏览:910
php明年的今天 浏览:115
麒麟970也能用方舟编译器么 浏览:476
金融实验大作业python 浏览:795
云服务器搭建聊天室 浏览:603