段杰鵬
(北方工業大學信息學院 北京市 100144)
開源生態,成長與挑戰并存。根據《2020 中國開源年度報告》,全球開源都呈現一個大的發展趨勢,以Git Hub 和Git ee 為例,無論是活躍代碼倉庫,還是活躍用戶數,高速增長表現強勁[1]。這種結果除了因為開源勢頭外,還有一個原因就是受疫情影響,采用遠程辦公的方式。體量的快速增加,伴隨而來的問題也越發凸顯。在《開源生態白皮書(2020)》中,不僅指出開源知識產權及合規風險,還著重談到本課題關心的開源軟件(Open Source Software,OSS)風險[2]。技術更新迭代快、運維成本高、安全漏洞威脅嚴重都是亟待解決的開源軟件應用問題。這些風險一定程度上都需要通過軟件演化這一環去解決。
開源環境對軟件演化提出新的挑戰。軟件演化的核心問題是軟件如何適應改變,軟件的演化能力主要體現在4 個方面[3]:可分析性;可修改性;穩定性;可測試性。針對軟件動態演化,學術界主要從以下幾個方面展開工作:程序設計語言、模型、軟件體系結構、平臺。隨著軟件開源社區的出現,基于開源代碼的軟件開發成為新的軟件開發生態[4]。眾所周知,群智開發是開源軟件的一大特點,這就造成軟件演化過程不可控。開源項目往往是核心開發人員把自己的初步成果和想法發布在社區,由數量龐雜的貢獻者進行項目的完善、測試和維護。從項目計劃開始的整個軟件生命周期,都沒有完整的文檔對軟件演化過程進行指導和記錄;軟件演化的發生也更多發生在離散的開發、測試、維護過程中。Scacchi W 等人[5]研究指出,當前對OSS 系統的研究沒有對軟件演化過程中有時超線性,有時次線性的增長曲線提供適當的解釋。有些情況下,OSS 系統是否符合演化的規律也尚不清楚。因此,對開源生態中軟件演化技術的研究,重新思考開源環境下軟件演化的理論和模型,可以幫助理解、推理和解釋開源軟件系統的演化。
Neteler 等人[6]提出了基于遠程和連續分析的OSS 演化方法。為了提供減輕軟件退化和風險的服務,該方法運用了諸如CVS 版本系統庫、承諾日志文件和交換郵件等可用數據源。核心成果包括增長、復雜性和質量控制機制、反饋驅動的通信服務和OSS 演化儀表板服務。Arafat 等人[7]將給定源代碼中的評論量作為可維護性的指標,從而進一步了解開源軟件開發的過程和行為。Capiluppi 等人[8]研究了OSS 系統的結構衰減是否會受到保存該項目的存儲庫的影響。Beecher等人[9]通過研究OSS更多存儲庫,拓展了這項工作。他們根據不同類型的OSS 存儲庫建立了相應的過度框架。為OSS開發人員選擇在哪里主持項目以及讓項目成功演化提供了指導。Robles[10]等人介紹了研究人員可以在OSS 項目中找到的最重要的可供研究的數據源:源代碼、源代碼管理系統、郵件列表和bug 跟蹤系統。他們提出了可根據分析數據源遇到的問題給出建議的演化分析工具。Bachmann[11]等人通過定義數據源的質量和特征度量標準來比較不同的OSS 項目。Koponen[12]等人創建了開源軟件演化的評估框架。該框架可以用來評估開源軟件演化過程的活性、效率、可追溯性和敏捷性。Capiluppi[13]等人通過對比傳統軟件和OSS 項目的軟件演化的共性和差異,對傳統軟件演化模型進行了調整,提出了適用于OSS 系統的軟件演化模型。李穎[14]研究了開源移動應用項目的演化特征,分析了開源移動項目動態演化過程及規律,提出了代碼關聯推薦算法,當開發者修改代碼時,面向開發者提示需要同步修改的代碼塊。Nakagawa[15]等人研究指出軟件體系結構與OSS 質量直接相關,開發人員在OSS 演化中需要充分考慮軟件體系結構知識體系,包括軟件體系結構風格,體系結構模式和體系結構演化方法。
趙會群[16]等人最早提出了體育計算的概念,隨著機器學習的發展,在競技體育中無論是比賽訓練,還是技戰術分析,越來越多地運用了人工智能的輔助手段,體育人工智能成為重要的研究方向。Iyer[17]等人使用神經網絡根據每個板球運動員過去的表現預測其未來表現,結果表明,神經網絡確實可以在團隊選擇過程中提供有價值的決策支持。Grunz[18]等人引入人工神經網絡分層架構,基于足球運動員的位置數據,得到合適的戰術模式。結果表明,分層架構能夠識別不同的戰術模式和各模式之間的變化。Hassan[19]等人通過注釋手球比賽723 個動作序列的位置數據,利用非線性混合神經網絡,成功預測了個人和團隊的戰術位置。Kempe[20]等人利用動態可控神經網絡正確檢測出預選的戰術模式。王杰[21]利用改進的人工神經網絡對乒乓球技戰術進行診斷、評估和預測。
綜上所述,對OSS 演化的研究都集中在演化過程,演化體系結構,演化確認等方面,鮮有對特定領域演化技術的具體研究和分析。體育人工智能的研究多集中于神經網絡在計算機視覺與技戰術分析和預測上。本文將結合開源語音識別在乒乓球技戰術采集中的應用,展開對OSS 演化技術的研究。
在語音識別應用層面,從輸入、處理過程、輸出,無論是識別流程,還是訓練流程,對于應用人員相當于是一個黑盒,輸入和輸出則是用戶可以感知到的。基于機器學習的語言識別技術可以分為訓練過程和識別過程兩個階段,在識別語音之前需要對識別模型進行訓練,以便建立環境參數,為大量語音識別進行分類處理。訓練過程輸入為語音數據,輸出為語音參數模型;識別過程輸入為語音數據和輸出為識別結果。識別過程是一個“黑盒”形態的語音模型,語言模型等要素無法改變的前提下,識別效果的改變,取決于可變因素語音參數模型。語音參數模型受語料特征的影響,比如數據量,說話人特征,語音內容,語義背景等。根據不同的語料庫,可以訓練得到不同的語音參數模型。為了適應環境的變化以及提高識別效果,這就要求在識別流程中可以根據實際狀態動態調整語音參數模型。模型驅動演化就是根據語音環境的變化動態調整模型訓練和識別過程的軟件過程。
模型驅動演化中對識別結果進行嗅探,即判斷識別結果的正確性,它是觸發一系列模型驅動演化動作的前提。如圖1所示的時序圖中反射式中間件從應用層探知用戶對識別結果的修改活動,獲取正確結果,依據此正確結果并結合該段語音的識別結果,計算當前語音參數模型對用戶語音的識別詞錯率WER。當詞錯率達到閾值時,反射式中間件開始探知系統的運行狀態state,滿足空閑狀態后,跟據用戶語音特征,從方法庫中篩選符合條件的語音參數模型。分別加載備用語音參數模型,并計算獲得語音數據wav 的識別結果result,將詞錯率WER 存儲到對應語音參數模型之下。比較所有備用語音參數模型在當前環境下的詞錯率WER,返回詞錯率WER 最小的語音參數模型Model。加載Model,判斷是否可以識別語音數據,滿足條件則繼續進行語音識別。現存語音參數模型無法滿足要求時,開啟數據驅動演化。

圖1:模型驅動演化時序圖
在開源語音識別系統輔助應用的過程中,回望開源語音識別模塊為了適應環境和提高識別效果所作的工作,凝練模型驅動演化算法如下:
算法1 ModelEvo()



算法1 在執行過程中,需要等待系統滿足空閑狀態,所以等待的時間T 是該算法時間復雜度組成的重要一環。算法的執行時間還依賴有多少個備用語音參數模型,每個備用語音參數模型都要進行加載、識別和計算,此過程時間復雜度為N。當現存語音參數模型都無法滿足應用需求時,需要啟動數據驅動演化DataEvo(),在進行數據驅動演化時時間復雜度為I,綜上所述,算法1 的總體時間復雜度為O(T+N+I)。算法1 的空間復雜度主要取決于對語音參數模型的篩選過程,此過程的空間復雜度為S(n)=O(N),所以算法1整體的空間復雜度為O(N)。
在實際應用過程中,存在通過方法庫和模型庫篩選語音參數模型后,模型驅動演化加載最優語音參數模型仍然無法滿足當前復雜的應用需求。為了解決以上問題,本文提出了數據驅動演化模型:依據新的語料訓練滿足當前復雜環境的語音參數模型,并將該語音參數模型加載到語音識別模型庫中。
數據驅動演化模型依賴于滿足當前應用環境的新的語料,該語料的獲得途徑有兩種方式:首先可以從外部導入滿足應用環境的語料;其次可以在該環境的應用過程中采集語音數據,對語音數據進行預處理,形成訓練語料,語料數據量達到閾值時,啟動訓練過程,訓練新的語音參數模型,加載語音參數模型到語音識別中,以此來提高適應性。
如圖2所示的時序圖直觀的展示了數據驅動演化的執行過程。當模型驅動演化結束后,在接下來的應用過程中,詞錯率依然低于閾值時,反射式中間件開始對數據庫進行嗅探。在當前應用時段中,如果應用人員從外部導入了新的語料庫,或者采集人員不斷采集語音數據,語音數據量達到可以訓練的閾值時,反射式中間件開始對系統資源狀態進行嗅探。當應用程序處于空閑狀態以及系統資源充足時,語音識別模塊從數據庫獲取語料庫,進行新語音參數模型的訓練。訓練結束后,將語音參數模型加載到語音識別系統中,并且依據語音特征更新方法庫和模型庫。

圖2:數據驅動演化時序圖
依據數據驅動演化模型,在語音輔助識別應用過程中,本文提出了數據驅動演化算法如下:
算法2 DataEvo()

算法2 中的輸入Cor 表示在語音識別輔助應用開始,依據當前環境在數據庫中新創建的一個語料庫。算法2 的執行過程主要是對數據庫和系統資源的探查。假設對數據庫嗅探了N 次,則此while語句的時間復雜度為O(N);假設對系統資源嗅探了M 次后,滿足語音參數模型訓練要求,則此過程的時間復雜度為O(M)。所以綜上所述,算法2 的時間復雜度為O(N)。因為要訓練新的語音參數模型,所以算法2 的空間復雜度取決于訓練一個批次所使用的數據量,假設訓練一個批次需要使用L 條數據,那么算法2 的空間復雜度為O(L)。
本節結合實際應用案例,首先,分別對上述模型驅動演化模型和數據驅動演化模型所提出的算法進行驗證,最后對得出的實驗結果進行分析說明。
本文以開源語音識別輔助乒乓球技戰術采集為背景,首先模擬采集過程中,因為乒乓球技戰術語言的特異性,識別效果無法滿足要求,驗證系統實行模型驅動演化,實現最優語音參數模型的替換;其次模擬當前模型庫中的語音參數模型仍無法滿足乒乓球技戰術采集要求,驗證數據驅動演化啟動后對數據庫和系統資源的成功嗅探,最終實現語音參數模型的訓練和加載。
本節給出三組實驗結果,分別是:識別結果和正確結果的嗅探;參數模型篩選比較替換;數據庫數據量的嗅探。
4.2.1 識別結果和正確結果的嗅探
在模型驅動演化過程中,某段語音的詞錯率是否滿足要求是啟動模型驅動演化的前提條件,所以嗅探器首先要對識別結果和人工更正后的正確結果進行嗅探,以此來計算詞錯率。
在語音識別輔助乒乓球技戰術采集中,首先語音識別模塊加載默認語音參數模型;然后采集人員在應用層錄入一段乒乓球技戰術語音,本文以speechDataA=“接相持段擺失”這一語音數據為例。語音識別模塊對speechDataA 進行識別,識別結果為A=“接向十段白失”。嗅探器從語音識別模塊嗅探識別結果A 的同時,語音識別模塊將識別結果A 反映到應用層,以供采集用戶進行更正。嗅探器從應用層探知采集用戶的更正動作和用戶進行下一段語音數據speechDataB 的錄制動作后,獲得正確結果A′=“接相持段擺失”,最后開始計算speechDataA 的詞錯率。
因為兩個嗅探動作的成功執行(從語音識別模塊嗅探識別結果A;嗅探采集用戶更正動作和嗅探speechDataB 的錄制動作,最后獲取正確結果A′)和詞錯率的成功計算存在前后因果關系,所以本文以speechDataA 詞錯率計算后的結果展示來驗證算法1 中嗅探器的成功執行。如圖3,speechDataA 的詞錯率為50%,所以默認語音參數模型的識別準確率為50%。

圖3:詞錯率計算
4.2.2 參數模型篩選比較替換
根據本文對乒乓球技戰術語言的研究,采集一條標準的乒乓球技戰術信息,其中最多含有7 個漢字,識別結果最多錯一個的前提條件下,詞錯率為14%,據此,本文將詞錯率的比較閾值設置為20%,方便之后的實驗研究。
顯然speechDataA 的詞錯率明顯大于閾值,所以嗅探器開始對系統運行狀態進行嗅探,當系統處于空閑狀態后,依據語音特征,從方法庫(技術路線是:技戰術采集→山西口音普通話)和模型庫中檢索最優語音參數模型備選模型。語音參數模型準確率比較篩選后得到三個語音參數模型如表1所示。

表1:模型信息
語音識別模塊分別加載上述模型,依據speechDataA 和它的標簽文本A′計算當前環境下的詞錯率。如圖4所示,Model10 的詞錯率為66%左右,Model21 為33%左右,Model30 的詞錯率為40%左右。Model21 與默認語音參數模型相比,準確率明顯提高。綜上所示,現有語音參數模型中,適應當前環境的最優語音參數模型為Model21。

圖4:詞錯率比較
本文通過對系統資源的監控,首先驗證了嗅探器對系統空閑狀態的探查。如圖5為系統資源使用情況隨時間的變化圖,圖中對系統的資源監控起始于算法1 中備選語音參數模型的適應性比較,結束于最優語音參數模型加載前。所以根據圖中給出的CPU 使用率變化情況,在0ms 之前,系統監控結束之后,CPU 使用率在30%以下,說明系統處于空閑狀態,證明嗅探器對系統空閑狀態的嗅探結果是成功的。

圖5:系統資源圖
CPU 作為計算機系統的運算和控制核心,是信息處理、程序運行的最終執行單元,所以當軟件運行時,CPU 使用率第一時間發生變化。從圖5可以發現:0-50ms,50-100ms,100-150ms 分別出現了一次波峰,因為有三個候選語音參數模型,所以每個時間段都表示算法在執行一次加載語音參數模型、識別語音數據、計算詞錯率、更新數據的過程。因為人工智能對GPU 的使用是其在硬件資源使用上的一大特點,同樣,進行語音識別時需要占用GPU 資源。如圖5綠色折線表示演化過程中,GPU 使用率變化情況,因為進行了三次語音參數模型加載和語音識別過程,所以在時間線上也出現了三次波峰。圖5中橙色折線表示內存使用情況,內存主要負責暫時存儲CPU 的計算結果以及和外部存儲器交換資源。每個波峰都表示對識別結果和詞錯率的計算和存儲,并將詞錯率結果存儲到數據庫中。
4.2.3 數據庫數據量的嗅探
數據驅動演化的目的是利用適應當前環境的語音數據,訓練新的語音參數模型,提高之后語音輔助采集的語音識別效果。應用過程中采集的語音數據達到一定數據量或者有新的語料庫導入才能開始訓練新的語音參數模型。
如圖6所示為嗅探器對系統創建的語料庫中語音數據量的嗅探。嗅探器每隔一段時間對語料庫中的數據量進行嗅探,當達到閾值時,停止嗅探。本文為方便測試,在實驗過程中設置嗅探語音數據量的閾值為100 條語音數據,設置嗅探間隔為30min。在圖6中有兩條折線,表示本文分別作了兩次實驗,實驗變量為是否人工導入新的語料庫。藍色折線表示隨著語音輔助應用的進行,嗅探器感知到語料庫中的語音數據量在不斷增加,在210min 嗅探到117 條數據時,停止了嗅探活動。橘色折線在120min 之后,就沒有新的嗅探數據,表明120min 之后,嗅探器停止了對系統創建的語料庫中數據量的嗅探,這是因為,嗅探器嗅探到了由外部導入了新的語料庫,所以結束了對現有語料庫中數據量的嗅探。

圖6:語音數據量隨時間變化圖
面對開源語音識別輔助應用過程中因為識別環境和語音特征不同造成識別效果不佳,以及語音模型對采集人員的黑盒問題,本文提出了模型驅動演化算法和數據驅動演化算法,通過替換和訓練語音參數模型實現識別效果的提高。本文通過實驗驗證了模型驅動算法和數據驅動演化算法的有效性,利用開源軟件演化技術可以提高語音識別輔助系統對環境的適應性。最后通過語音輔助乒乓球技戰術采集系統的實現和應用,進一步驗證了本文提出的開源語音軟件演化技術在實際應用中的效果。