① 約翰遜演算法的公式
為了便於闡述約翰遜法的具體做法,下面結合一個例子來進行說明:
約翰遜法
約翰遜法
例:有五個工件在二台設備上加工,加工順序相同,先在設備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. 作業要求
大部分學生認為課程學習難度適中,能夠獨立完成作業,課程負擔也比較合適。不過,在理科專業,數據結構課程作業偏多,而計算概論負擔相對較輕。
全國高等學校教學研究中心