• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于圖的連通性指標實現知識點的最優(yōu)推薦

      2021-07-27 00:02趙鴻昌
      中國教育信息化·基礎教育 2021年6期

      摘? ?要:文章以加權無向圖的連通性作為量化評價指標,在鞏固復習階段實現了基于知識點網絡的學習內容最優(yōu)推薦,能對全部知識點做整體掌控性練習。知識點網絡具有固有權值、已練習權值和待練習權值,通過遍歷待練習知識點能得到待練習權值及知識點網絡的最優(yōu)連通性指標。文章對49個知識點的小型Linux腳本題庫給出了求取連通性指標的前后端兩種實現方法,并在應用場景下實現了針對學生個體的一步和多步最優(yōu)推薦,以及針對班級和學習小組的最優(yōu)推薦。實踐結果表明:最優(yōu)推薦的有效性與教師的直覺相吻合,學生反映知識結構性明顯增強,學習的主動性也增強,并獲得較好的知識遷移能力。該案例為教育信息化軟件應用于素質教育的內涵式提升給出了有益的借鑒。

      關鍵詞:知識點網絡;圖的連通性;最優(yōu)推薦策略;矩陣特征值

      中圖分類號:G434 文獻標志碼:B 文章編號:1673-8454(2021)12-0085-07

      一、引言

      以《國家職業(yè)教育改革實施方案》等文件作為指引,教師、教材和教法的研究已經成為教育界各級各類教師普遍關注的熱點[1],尤其在當前線上教育蓬勃發(fā)展的大背景下,改進線上個性化學習效果更是教法研究的重中之重。個性化學習能破解優(yōu)質教師資源不足的難題,又能充分利用現代信息技術,特別是大數據和人工智能等技術,來加速推動教育信息化,提高教育的效率和質量,實質上相當于用技術手段有效擴大優(yōu)質教師資源的影響力。

      理想的個性化學習一般需要兩個前提:一是富于經驗的教師設計好電子題庫,庫中諸多基礎知識點和應用類型知識點聯系緊密,形成關系復雜的網狀連接即知識點網絡;二是有適合學生當前學習階段的知識點推薦策略。知識點網絡形式的電子題庫目前已經有了一些研究。例如,根據所設置的題型題量、題目覆蓋次數和題目間的包含容斥關系,已有研究者構建了基于SystemVerilog語言的全自動約束隨機抽題組卷系統[2]。而推薦策略目前則只有隨機推薦和電商平臺中的相似推薦兩類可供借鑒,前者目標不明確,而后者需要做大量結構化數據的特征相關度分析以挖掘用戶的歷史喜好信息,并不完全適合學習過程的各個階段。

      學習主要分為三個階段:知識點識記、知識點應用和知識點創(chuàng)新。學習的前期主要涉及前兩個階段。知識點只有熟練才能應用,因此需要反復“刷題”,以從不同側面理解知識點。一般基于教材、習題冊或電子題庫開展練習。此外,練習的技巧與學習的階段又密切相關。例如,初次學習階段與鞏固復習階段對知識點的練習需求完全不同。初次學習階段一般需要臨近式學習,重在練習與當前知識點關系密切的知識點,容易產生“舉一反三”的效果從而增強學習信心,這已是教育界的共識。而鞏固復習階段的練習策略則需要在整體框架下統籌設計以產生最好的學習效果,要在有限的學習時間內,對所有知識點做整體掌控性的練習,獲得知識點應用能力的最大提升。

      綜上所述,以優(yōu)秀教師提供的知識點網絡為基礎,需要深入研究鞏固復習階段知識點的最優(yōu)練習策略。既不能簡單地隨機推薦知識點開展“題?!笔骄毩暎膊荒苈o目標地利用人工智能等先進技術推薦知識點。目前尚缺少一個能夠達成共識的策略,原因在于知識點網絡的整體掌控程度缺乏量化的評價指標。

      本文針對上述研究背景,提出了一種基于代數圖論中圖連通性指標的最優(yōu)知識點推薦策略,在鞏固復習階段基于知識點網絡實現個性化學習。學習過程中,記錄每個學生的練習程度,多個學生的練習程度還可以疊加。最優(yōu)知識點推薦的對象可以是學生個體,也可以是學習小組,還可以是班級整體,甚至可以是年級或更大規(guī)模的組。因此,這種推薦策略不但可以指導學生自主練習,還可以為教師推薦作業(yè)和習題課的內容,為翻轉課堂和線上線下混合教學的開展提供了有效的技術支撐。

      二、知識點網絡的連通性指標

      如上所述,需要研究鞏固復習階段基于知識點網絡的最優(yōu)練習策略。圖1所示的知識點網絡由知識點及之間的連線組成,每條連線賦予一個非負的固有權值,表示所連接兩個知識點之間的關系緊密程度,權值越大則關系越密切,連線也越粗。每當練習了一個知識點,則把與該知識點相連的所有知識點之間的連線權值加1,如圖1中“生成20行hi”這個知識點練習了一次,就把圖中高亮的知識點與它之間連線的權值加1。因此,任何時刻知識點網絡已經確定的權值由兩部分作和:一是反映知識點之間內在關聯的固有權值;二是反映學習練習過程的已練習權值。如果是多人學習小組,則知識點網絡的權值就取作固有權值與所有學生已練習權值之和。

      任何時刻除了確定的權值之外,知識點網絡的權值還有未確定的因素即待練習權值,這就是需要最優(yōu)推薦的待練習知識點對應權值。假設優(yōu)秀教師提供的知識點網絡是全連通的,即在固有權值的狀態(tài)下就已經是全連通的,那么加入已練習權值和待練習權值后連通程度更強,連通程度可以由代數圖論中圖的Laplacian矩陣來表征,該矩陣是半正定矩陣且最小特征值為0[3]。在無線傳感網和多智能體協同控制的研究領域中,通常選取上述矩陣的第二小特征值作為連通性指標[4],這對于知識點網絡同樣適用。孤立的知識點越多則知識點網絡越呈現出碎片化而不易學習(學習更需要強記)的特征,連通性越強則知識點之間不同側面串聯的應用場景越多。因此,給定知識點網絡的固有權值和已練習權值,問題歸結為再練習哪個知識點獲得的待練習權值能讓連通性指標最大。

      三、實現方案與關鍵代碼

      1.系統結構

      系統由客戶端、服務器和計算引擎三部分組成,如圖2所示。其中,計算引擎的實現方式具有一定的靈活性,可以在服務器實現,也可以在客戶端的瀏覽器上實現,還可以分散在服務器和客戶端實現,因服務器性能和計算負載而定。服務器上的JSON文件是客戶端和服務器之間數據交換的標準格式,記錄了知識點網絡的全部信息,由客戶端讀取并顯示給用戶。JSON文件由電子題庫生成,不同電子題庫格式對應不同的生成規(guī)則??蛻舳诉€要提交已練習的知識點號給服務器,生成的練習過程數據用在計算引擎中,而計算引擎的工作過程相對復雜,共有三步:①由JSON文件生成節(jié)點度矩陣;②由三種權值和JSON文件計算出鄰接矩陣;③再遍歷待練習的知識點號,并通過多次計算Laplacian矩陣的第二小特征值得到最優(yōu)的連通性指標和最優(yōu)待練習的知識點號。

      由圖2可知,本系統結構的優(yōu)點在于對學生個體和班級整體作最優(yōu)推薦的流程完全相同,差別只在于收集一個人或所有人的練習過程文件,此類操作只引入極少的計算負荷。

      2.電子題庫設計

      知識點網絡包括知識點本身和知識點之間的連線,每條連線具有不同的固有權值。知識點網絡記錄在JSON文件中,而JSON文件則來自于電子題庫。電子題庫的格式設計重在簡潔高效,既要便于生成JSON文件,也要考慮網頁前端顯示的易用性,又要盡量減少教師長期維護的工作量。以如下格式Linux腳本電子題庫為例:

      level1

      生成一行hi? ? ? 用echo在屏幕上打印hi? ? echo hi

      生成一行echo? ? 用echo命令在屏幕上打印echo? ? ? echo echo

      ……

      level2

      生成20行hi? ? ? 用不用awk實現。 seq 20 | xargs -i echo hi

      生成5個目錄? ? ?目錄名依次為1,2,3,4,5。 seq 5 | xargs -i mkdir {}

      ……

      level3

      用grep取前3行? ?先seq 5,再用grep取出前3行來。? seq 5 | grep -m 3 "."

      用sed取前3行? ? 先seq 5,再用sed取出前3行來。? ?seq 5 | sed -n '1,3p'

      用sed加空行? ? ?先seq 5,再用sed每行后面加兩個空行。? ? seq 5 | sed 'G;G'

      ……

      level4

      生成20行hi? ? ? 用awk循環(huán)實現? ? echo hi | awk '{ for(i=0;i<20;i++) print $0}'

      用awk取前3行? ? 先seq 5,再用awk取出前3行來。? ?seq 5 | awk '{if(NR<4){print $0}}'

      ……

      level5

      不用tac反序顯示 先用seq 4,再用awk實現反序顯示。? seq 3 | awk '{i=$0"\n"i} END{printf i}'

      ……

      該題庫共有49個知識點,所有知識點按難度組織成level1到level5的級別,前三個級別屬于基礎知識點,后兩個級別是應用類型的知識點。每個知識點包括三個字段:功能描述、詳細信息以及實現該功能的Linux腳本具體命令,字段之間用跳格隔開。如此設計不但方便教師整理知識點,還方便網頁以“刷題”方式顯示前兩個字段,又方便用靜態(tài)隱藏且鼠標懸停的效果顯示第三個字段(答案)。另外,教師只需關注知識點本身和難度分類,知識點之間連線的固有權值由腳本自動生成,知識點號也由行號自動生成,最大限度地降低了人工維護成本。

      3.JSON格式與知識點網絡

      知識點網絡源自電子題庫,但其載體是JSON文件,其中最重要的信息是自動生成知識點之間連線的固有權值,在計算引擎中用以生成節(jié)點度矩陣和鄰接矩陣。眾所周知,Linux腳本命令行以管道符號“|”連接多級簡單腳本命令,而簡單腳本命令如echo、seq、sed、awk等一般只用到20個左右。對于這種情況,連線間固有權值(見下文JSON格式中的“weight”參數)就取作兩個知識點的Linux腳本具體命令中同時出現的簡單腳本命令數目。為方便網頁和服務器進行數據交換,將上述電子題庫轉換成JSON格式。其中,知識點的名字取作該知識點所在電子題庫文件中的行號,而“numOfPipes”參數則表示Linux腳本具體命令中的字符數,字符數越多則知識點在圖1中就顯示為越大的橢圓,代表知識點的難易程度。此外,JSON格式中沒有知識點對應的答案,答案是網頁中某知識點的鼠標點擊事件觸發(fā)時,用其名字在電子題庫中即時查找出來的。

      {

      "level1": [ { "name": "pp2",? "value":"生成一行hi",? "numOfChars":7}, { "name": "pp3",? "value":"生成一行echo",? "numOfChars":9} ……],

      ……

      "level5": [ { "name": "pp50",? "value":"不用tail取后3行",? "numOfChars":70}, { "name": "pp51",? "value":"不用tac反序顯示",? "numOfChars":39}……],

      "links": [

      {"weight": 4, "source": "pp32", "target": "pp44"},

      {"weight": 4, "source": "pp44", "target": "pp54"},

      {"weight": 4, "source": "pp47", "target": "pp54"},

      {"weight": 5, "source": "pp31", "target": "pp47"},

      {"weight": 5, "source": "pp44", "target": "pp47"},

      {"weight": 6, "source": "pp31", "target": "pp44"}

      ……

      ]

      }

      以上將電子題庫轉換成JSON格式的實現腳本過于復雜,此處只描述其核心思想。

      第1步:為電子題庫文件加行號,因此得到每個知識點前面的行號,并加上“pp”用作“name”參數。

      第2步:用awk中的length()函數統計每個知識點的Linux腳本具體命令中的字符數,并把每個知識點整理成name、value和numOfChars格式。

      第3步:將每個知識點中管道符號前后的基本命令提取出來,與知識點的“name”參數一起生成link文件,每行形如51 seq。

      第4步:統計出任何兩個知識點之間相同基本命令的總數目,所用Linux腳本如下:

      cat link | xargs -i sed 's/^/{} /g' link | \

      awk '{if($1<$3 && $2==$4) print $1" "$3}'? | sort | uniq -c

      其中整體分三步:①link文件與自身作信息擴充即所有行全交叉,結果每行由2個字段變成4個字段,即兩個知識點的“name”參數和具體命令中的某個基本腳本命令。②根據源知識點和目標知識點的對稱可互換性,只需用awk過濾出源知識點號更小的情況,并只顯示出兩個知識點的“name”參數,表示兩者之間出現了一次相同的簡單腳本命令。③排序并用uniq命令統計出所有知識點兩兩之間相同簡單腳本命令的總數。

      第5步:按JSON格式要求生成weight、source和target信息,并補齊所有匹配的區(qū)域定界符號。

      4.生成Laplacian矩陣并求特征值

      知識點網絡的Laplacian矩陣定義為無向圖的節(jié)點度矩陣與鄰接矩陣之差,其中鄰接矩陣則由固有權值、已練習權值和待練習權值疊加生成。因為知識點的“name”參數取自電子題庫文件的行號,所以,諸如“l(fā)evel1”這樣的行會讓知識點號有跳號,生成Laplacian矩陣的第一步就需要把link文件中的知識點號轉換為無跳號的知識點號,并且得到固有權值文件zlap.2。關鍵腳本如下:

      cat 1tiku.txt | cat -n | grep level -v | cat -n | awk '{print $1" "$2}' > zlap.1.translation

      cat zlap.1.translation? |? ?awk '{system("sed '\''s/ "$2" / "$1" /g'\''? -i zlap.2");}'

      所生成的固有權值文件zlap.2格式為(第一個字段是固有權值,后兩個字段為知識點號):

      1 9 10

      1 9 11

      1 9 12

      1 9 13

      ……

      下一步合并反映學習過程的已練習權值和待練習權值。實現策略是待練習的知識點號寫入zlap.input.1文件的同時,再合并上每個學生已經練習過的知識點文件zlap.learned,然后將這些知識點相關所有連線的權值依次加1,關鍵腳本如下:

      cat zlap.input.1? <( find? allStudents/? |? grep zlap.learned? | xargs -i cat {}) \

      | xargs -i \bash -c " grep \" {} \\\| {}\$\" zlap.2" \

      | awk '{print "1 " $2" "$3}'? ?> zlap.2.learning

      cat zlap.2? zlap.2.learning? > zlap.2.all

      其中<(xxx)是Linux腳本中不常用的嵌入輸入數據管道,功能是將命令xxx的執(zhí)行結果作為cat命令除zlap.input.1之外的那一部分輸入數據流。

      至此,知識點網絡的固有權值、已練習知識點對應的權值和待練習知識點對應的權值已合并到總權值文件zlap.2.all中,最后即由該文件生成節(jié)點度矩陣和鄰接矩陣進而得出Laplacian矩陣及其特征值。關鍵腳本如下:

      1 seq 49 | xargs -i bash -c " grep \" {} \\\| {}\$\" zlap.2.all | awk 'BEGIN{s=0;}{s=s+\$1;}END{print s}'? "? ? ?\

      2? ?| sed '1i d=[' | sed '$a ];' | tr '\n' ' ' > zlap.3.degree

      3 seq 49 | xargs -i bash -c "sed 's/^/{} /g' <(seq 49)" \

      4? ?| xargs -i bash -c "echo -n hi: ; grep \" {}\$\"? zlap.2.all | awk '{print \$1}' \

      5? ?| awk 'BEGIN{s=0;}{s=s+\$1;}END{print s}' \

      6? ?| sed 's/\$/,/g' " | sed 's/hi:\([0-9]\)/\1/g' | sed 's/hi:/0,\n/g' \

      7? ?| xargs -n 49 | sed 's/,$/;/g' | sed '1i a=[' | sed '$a ]; ' | tr '\n' ' ' > zlap.4.adja

      8 cat zlap.3.degree? zlap.4.adja? | sed '$a eig(diag(d)-a-a'\'')' | octave 2> /dev/null

      其中,首先生成節(jié)點度矩陣,算法見第1行。遍歷每個節(jié)點并從總權值文件中取出含有該節(jié)點號的行,這些行的第1列之和就是此節(jié)點的度,所有節(jié)點的度組成的對角矩陣即為節(jié)點度矩陣。其次由總權值文件生成鄰接矩陣,即對總權值文件進行擴充,把沒有連接關系的節(jié)點對的位置寫上數值0,見第3~6行,其中第3行再次應用信息擴充生成所有知識點號的全交叉。最后求取特征值用到的命令是octave,其要求的矩陣格式轉換與矩陣運算代碼見第2、7、8行。

      在只有固有權值的情況下,求取特征值的結果如下:

      ans =

      -5.7033e-15

      1.7428e+00

      5.0000e+00 ……

      9.8136e+01

      其中反映出知識點網絡的連通性指標是1.7428,計算耗時不足1秒(配置為Intel 酷睿i5-3230M、內存4GB、Ubuntu x64、octave版本4.0.0)。當存在已練習權值和待練習權值時,連通性指標必將增加,關鍵是要找到讓增加量最大的情況:自變量是待練習的知識點號,因變量是知識點網絡的連通性指標。

      四、應用場景與性能測試

      本文列舉典型應用場景的功能需求及其實現方法,并對所得結果做了相應的對比分析。其中,針對學生個體的一步最優(yōu)推薦是學生個性化學習時最常用的場景,針對班級整體的最優(yōu)推薦則是為教師推薦作業(yè)和習題課內容的場景。

      1.針對學生個體的一步最優(yōu)推薦

      學生基于知識點網絡的學習過程就是反復練習所關注的知識點,每當練習完某個知識點,該知識點號被存入服務器上每個學生已經練習過的知識點文件zlap.learned中。在求取知識點網絡的連通性指標時,與文件zlap.learned中知識點相關的知識點之間連線的權值就會加1。根據代數圖論中圖的疊加理論可知,鄰接矩陣中的權值變大則Laplacian矩陣相應的特征值均變大[3],特別地,Laplacian的第二小特征值即連通性指標必將增加,反映出知識點網絡更強的連通性,符合常識。由此,只要遍歷所有待練習的知識點、相應地改變鄰接矩陣的權值并多次求取Laplacian矩陣的特征值就能斷定應學習的知識點。用到的腳本如下:

      seq 49 | xargs -i bash -c "echo {} > zlap.input.1; ./zlaplacian.cmd "? \

      | grep ans -A 3 | awk '{if(NR%5==4) print $0}' | cat -n | sort -k 2

      其中的zlaplacian.cmd是求取一次連通性指標的腳本,其內容前已述及。

      在只有固有權值而沒有已練習知識點的情況下,求取的最優(yōu)推薦知識點及其連通性指標如表1所示。表1中的結果說明,學習者與固有權值情況下1.7428的連通性指標相對照,按最優(yōu)推薦的知識點學習,則連通性指標有約50%的提升,而第6個最優(yōu)推薦知識點的連通性指標則改進甚微。由此可見,此49個知識點的電子題庫中只有5個知識點能讓連通性指標有較為顯著的改進,因此最優(yōu)知識點推薦策略相比隨機推薦有相當大的優(yōu)勢。

      值得一提的是,針對學生個體的一步最優(yōu)推薦知識點是“統計詞頻”,這與筆者基于此電子題庫的教學實踐相吻合。該知識點一般都在前幾次課引入,而且大多數學生都在學習完此知識點之后感覺對Linux腳本的理解程度有了一定的質變。此外,前5個最優(yōu)推薦的知識點都是關于echo命令的,而且其中3個知識點還十分基礎,這符合Linux腳本中“一門深入”的練習策略。實際上,echo確實是表面上很簡單但實際上很難的命令,它串起了Linux腳本中幾乎所有的功能點,通過反復練習和試錯可以發(fā)現它的諸多疑難功能點,從而激發(fā)學習的興趣。另外,還可以不斷強化這些功能點:命令和參數的不同、不使用輸入數據流、回車符是否存在的驗證方法、命令管道中的信息放入數據管道中、回顯二進制數據以及生成一行數據和多行數據。

      2.一步最優(yōu)推薦代碼的性能測試

      以上實現的一步最優(yōu)推薦計算引擎位于服務器上,為降低服務器并發(fā)處理的負荷,計算引擎還可以用JavaScript實現在前端瀏覽器上?,F代瀏覽器運行高性能矩陣運算庫Math.js時可以用GPU加速,對于一般配置的計算機在性能上可能不輸于多人共用的服務器[5]。利用Math.js庫在瀏覽器端作矩陣運算,實測性能大約7秒遍歷所有49個知識點,即完成一步最優(yōu)推薦(配置:Intel 酷睿i5-3230M、內存4GB、64位Chrome瀏覽器),能夠滿足學生個性化學習推薦的實時性要求。關鍵JavaScript代碼如下:

      links = this.responseText.split('\n');

      seq49 = Array.from(new Array(49), (item, index) => index + 1);

      seq49.map( N =>{

      allLinks = links.concat(links.filter(b=>b.includes(" "+N+" ")||b.endsWith(" "+N)).map(a=>{

      return "1 "+a.split(' ')[1]+" "+a.split(' ')[2]; }) );

      allDegrees = seq49.map( a=> {

      return allLinks.filter(b=>b.includes(" "+a+" ")||b.endsWith(" "+a)).map( b=>{

      return b.split(' ')[0]; }).reduce( (a, b) => parseInt(a)+parseInt(b)); });

      D = math.matrix( math.evaluate("diag([".concat(allDegrees).concat("])")) );

      var pA= [];

      seq49x49 = seq49.map( a=>{ return seq49.map( b=>""+b+" "+a); }).flat();

      seq49x49.map( a=>{ Edges= allLinks.filter( b=>b.endsWith(" "+a));

      if( Edges.length!=0)

      pA.push("" +Edges.map(b=>{return b.split(' ')[0]}).reduce((a, b)=> (a-0)+(b-0)));

      else pA.push("0"); });

      mA = math.multiply(math.matrix(math.evaluate("[["+arrTrans(49,pA).join("],[")+"]]")),-1);

      eigs= math.eigs( math.add( D, math.add( mA,math.transpose(mA))) ).values;

      console.log( N );? console.log( eigs._data[1] );

      });

      以上代碼中的輸入文件links是Ajax異步訪問固有權值文件zlap.2的結果,節(jié)點度矩陣與鄰接矩陣的算法與之前Linux腳本的實現完全相同,最終求取矩陣特征值時調用的不再是Linux服務器上的octave命令,而是Math.js庫提供的函數。代碼的難點在于“(a-0)”和“(b-0)”使用了JavaScript的弱類型特性將字符串轉為數值,另外,定制的函數arrTrans將一維數組轉換成二維數組,類似Linux腳本中的xargs -n功能。

      通過在教學中著重對比引入同一功能的Linux腳本實現和JavaScript語言實現,大多數學生從常見功能上獲取了從Linux腳本語言向JavaScript語言的自主學習遷移能力:map類似xargs–i、filter類似grep、push相當于sed–i、concat相當于cat、reduce相當于tr? '\n' ' '? |? bc。學生在對比Linux腳本語言和JavaScript語言的過程中,以很小的學習成本從頂層上掌握了JavaScript語言,創(chuàng)造力得到了極大鍛煉,對編程語言類課程實現了一定程度的融會貫通。

      3.針對學生個體的多步最優(yōu)推薦

      以學生個體的一步最優(yōu)推薦為基礎,實現多步最優(yōu)推薦只需要將待練習的知識點號寫入zlap.input.1文件,不同僅在于前者只寫一個知識點號而后者寫多個知識點號。例如,基于49個知識點號的信息擴充,即得到2401種兩步學習的可能性,要在這里找學生個體的兩步最優(yōu)推薦,關鍵代碼如下:

      seq 49 | xargs -i bash -c "sed 's/^/{} /g' <(seq 49)" \

      | xargs -i bash -c "echo {}| tr ' ' '\n' > zlap.input.1 ; echo {};? ./zlaplacian.cmd"\

      | grep ans -A 3 -B 1 | awk '{if(NR%6==5 || NR%6==1) print $0? ? }' | xargs -n 3 | sort -k 3

      其中,第1行代碼再次用到知識點號的信息擴充策略生成所有學習方案;第2行把每個兩步學習可能方案的知識點號寫入zlap.input.1文件,然后顯示此學習方案并求取連通性指標。

      代碼的運行結果如表2所示,可見兩步最優(yōu)推薦的知識點就是前幾個一步最優(yōu)推薦知識點的組合。因此,針對此題庫兩步最優(yōu)推薦完全可以拆分成兩次一步最優(yōu)推薦。此外,遍歷2401種兩步學習方案耗時也超過5分鐘,目前尚不適合作實時推薦。

      4.針對班級或學習小組的最優(yōu)推薦

      針對班級或學習小組作最優(yōu)推薦僅是針對學生個體最優(yōu)推薦的簡單擴展。學生個體練習過的知識點存放在其單獨的zlap.learned文件中,每行有一個知識點,只要求取這些知識點對應的已練習權值并全合并到總的權值文件zlap.2.all即可,其余的工作完全等同于針對學生個體推薦的情況,實現過程不存在任何技術難度,性能上也沒有引入任何瓶頸,不再贅述。

      五、教學實踐分析

      筆者在2019年春季學期、2019年秋季學期和2020年春季學期試用了Linux腳本的知識點網絡電子題庫。人數和班級數依次是3個班級共70人、6個班級共244人和4個班級共173人,大約按1∶1的人數比組織對比教學。結合教師的統一授課,學生在課堂上用一半時間鞏固復習,按隨機推薦知識點練習或基于一步最優(yōu)推薦的最優(yōu)知識點開展練習。實際測試結果表明,按最優(yōu)推薦知識點學習的學生有很強的主動性,課堂學習效果如圖3所示,學習的目標也更明確。師生問答法測試結果表明,學生掌握整體知識結構的速度明顯更快,學生反映“很快能看懂并能略微修改多級組合的復雜Linux腳本”并且“能簡單創(chuàng)造兩三級腳本的組合”。由此可見,基于知識點網絡的實時一步最優(yōu)推薦系統,可以很好地滿足鞏固復習階段對知識點的最優(yōu)練習策略。

      圖3還反映出學生喜歡使用手勢來分析知識點之間的連接關系。實際上,多使用手勢這種具像的動作有助于引導大腦內部強化特定知識點之間的聯系,手勢可以提高創(chuàng)造力是心理學界近年的研究成果[6]。在細節(jié)方面,學生喜歡用手指類似走迷宮的方式探索低級知識點向高級知識點的進化過程,厘清相似知識點的差異和應用場合的區(qū)別。學生整體上喜歡在小組學習時用雙手的不同手勢向同伴展示某些知識點的類別劃分,加速小組的互學互助。小組討論和創(chuàng)造的氛圍很好,自我認知內驅力得到極大增強。例如,針對“生成兩列數1到5”這個知識點,明顯不滿足于電子題庫中的一種實現方法,并在教師的引導下得到了以下多種解法(此處略去簡單的變體):

      方法一:seq 5? |? sed? p? ?|? xargs? -n? 2即生成5行數,然后每行復制一次再兩行合并為一行。

      方法二:seq? 5? |? xargs? -i? ?echo? {} {}即生成5行數再每行顯示兩次。

      方法三:paste? <(seq 5)? <(seq 5)即利用嵌入輸入數據管道直接拼接為兩列。

      方法四:seq? 5? |? cat? -n即生成5行數再加行號。

      方法五:seq? 5? |? sed 's/\(.*\)/\1 \1/g'即用sed將每行內容復制一次。

      方法六:seq? 5? |? grep . -o -n? |? sed 's/:/ /g'即用grep只顯示匹配的內容和行號,并刪除多余的冒號。

      方法七:seq? 5? |? awk '{print $0" "$0}'即用awk將每行內容復制一次。

      方法八:echo {11..15} | tr ' ' '\n' | sed 's/^\(.\)/\1 /g'即生成11到15再把每個數放一行,最后把每個數字分開。

      方法九:echo {11..15} | sed 's/\(.\)\>/ \1 /g'? |? xargs -n 2即先把每個數字分開再兩行合并為一行。

      方法十:seq 5 | xargs -i? echo -e "\x3{} \x3{}"即用16進制轉換的方式把\x31顯示為數字1,\x32顯示作數字2,以此類推。

      方法十一:用octave作矩陣的轉置,具體腳本為echo {1..5} | sed p | sed '1i a=[' | sed '$a ]'\''' | octave。

      六、結語

      全面應用信息技術推動教育信息化是“三教”改革的研究重點。本文基于知識點網絡形式的電子題庫,研究了待學習知識點的最優(yōu)推薦策略,為鞏固復習階段進行個性化練習提供了最優(yōu)指引。此外,本文在學生創(chuàng)造力培養(yǎng)方面做了積極有益的探索。學生切實體驗了功能塊對編程語言的細節(jié)屏蔽性、功能塊少而精和復雜算法靠人來創(chuàng)造的學習策略。強化練習少數編程語言細節(jié)無關的功能塊,并以此創(chuàng)造問題的多種解法,而不同編程語言的差別只在于用該編程語言相關的細節(jié)實現這些功能塊。

      事實上,使用任何編程語言,在功能塊層面上組合創(chuàng)造的思路都是一樣的。因此,功能性編程作為Linux腳本語言和大數據Spark環(huán)境原生Scala語言的最大優(yōu)勢,逐漸也引入到JavaScript語言和Java語言中,優(yōu)勢在于程序易測試、易掌控和易并行化,算法實現上需要對功能塊作創(chuàng)造性組合,而對語言細節(jié)的依賴程度更低。學生在對比Linux腳本語言和JavaScript語言的過程中,以很小的學習成本從頂層上掌握了JavaScript語言,創(chuàng)造力得到了極大鍛煉,對編程語言類課程實現了一定程度的融會貫通。

      本文所述的最優(yōu)知識點推薦策略尚有幾個值得深入研究的方向。一是類似英語這種大型的知識點網絡,例如,基于Oxford 3000單詞表及例句庫作最優(yōu)推薦算法的耗時太長,不但要研究知識點網絡的最優(yōu)切分,還需要用Scala/Spark在服務器上開展多機并行計算,甚至還要性能更強的芯片時序分析軟件(PrimeTime)實現全路徑的學習過程分析。芯片中各級觸發(fā)器之間的時序路徑類似知識點網絡中的連線路徑,值得深入研究。二是在關鍵代碼之上擴展更多的實用功能,例如,與個人的遺忘曲線聯系起來以全面記錄學生的練習過程,還要與人工智能技術相結合,讓集體學習過程歷史大數據驅動的規(guī)則推薦和知識推薦更有益于學生個體的學習過程,讓班級整體學習力更有效地推動個體學習。實現更加符合學生個體學習力的定制化最優(yōu)知識點推薦。三是研究固有權值可動態(tài)改變并反映知識點創(chuàng)造過程的知識點網絡。當前電子題庫中每個知識點只提供了一種解決方法,實際上,一個問題可以有很多解決方法。另外,好的學生可以邊學習“舊”方法,邊創(chuàng)造“新”方法,更難的情況是尚不明確如何設定知識點網絡的固有權值,可能需要借鑒異步電子設計中組合邏輯環(huán)的破環(huán)技術或者控制理論中的多步動態(tài)優(yōu)化問題[7]。

      參考文獻:

      [1]國發(fā)[2019]4號.國務院關于印發(fā)國家職業(yè)教育改革實施方案的通知[Z].

      [2]趙鴻昌.基于芯片仿真驗證軟件實現的一種試題庫與試卷庫建設方法[J].中國教育信息化,2018(14):89-92.

      [3]Chris Godsil,Gordon Royle..Algebraic Graph Theory[M].New York:Springer,2001.

      [4]Michael M. Zavlanos, Magnus B. Egerstedt, George J. Pappas. Graph-Theoretic Connectivity Control of Mobile Robot Networks[J].Proceedings of the IEEE,2011(9):1525-1540.

      [5]Math.js.An extensive math library for JavaScript and Node[EB/OL]. https://mathjs.org/,2020.

      [6]劉秀英.新聞月評[J].少年兒童研究,2017(1):61-62.

      [7]Svetlozar T. Rachev, Ludger Ruschendorf.Mass Transportation Problems Volume I[M].New York: Springer,1998.

      (編輯:王曉明)

      濉溪县| 枣强县| 昔阳县| 朝阳县| 堆龙德庆县| 喀喇沁旗| 三亚市| 饶河县| 怀柔区| 富民县| 江城| 休宁县| 慈溪市| 西林县| 台中县| 贡觉县| 安新县| 尼木县| 余干县| 古田县| 怀来县| 千阳县| 正安县| 米脂县| 邯郸市| 慈利县| 洛隆县| 屯留县| 乐东| 瓦房店市| 本溪| 香河县| 西乡县| 光山县| 石河子市| 常熟市| 新野县| 厦门市| 鄂尔多斯市| 神池县| 汝南县|