連載37:軟件體系設計新方向:數學抽象、設計模式、系統架構與方案設計(簡化版)(袁曉河著)

模型化機制

 

將一些事物的不同形態,製作成模型,然後將這些模型通過配置機制靈活的注入運轉管理機制中,而且這樣會大大降低用戶的理解複雜度。同時也能夠讓程序以成本最低的方式進行擴展。

 

模型的選擇


模型終歸於模型,其不能完全對應於現實世界。所以,我們需要在不同的角度上去選擇不同的模型。因爲每種模型都具有其優缺點,我們只能夠根據你目前的狀況來選擇模型,選擇模型變得非常重要,當然我們也可以通過一定的驗證和檢測方面來驗證此模型是否滿足要求,例如我們可以用一些數學建模工具來完成一個Demo來模擬一下此模型是否能夠達到我們的要求。然而,很多時候其檢測和驗證的手段也是有限的,而且這些手段也是具有多個不同的模型可供選擇,因此其複雜性就不言而喻。

然而,我認爲最好的方式是將不同的模型的物理意義進行概括,通過其物理意義來分析可能對使用什麼的模型會大有幫助。下面我們就從文本分析的兩個模型:向量空間模型和概率模型來演示我們是如何選擇模型的。

向量空間模型大致的描述爲:

我們把文檔看作一系列詞(Term)(就是進行分詞算法後的詞,後面Term都可以稱爲分詞),每一個詞(Term)都有一個權重(Term weight),不同的詞(Term)根據自己在文檔中的權重來影響文檔相關性的打分計算。

於是我們把所有此文檔中詞(term)的權重(term weight) 看作一個向量

Document = {term1, term2, …… ,term N}

Document Vector = {weight1, weight2, …… ,weight N}

同樣我們把查詢語句看作一個簡單的文檔,也用向量來表示。

Query = {term1, term 2, …… , term N}

Query Vector = {weight1, weight2, …… , weight N}

我們把所有搜索出的文檔向量及查詢向量放到一個N 維空間中,每個詞(term)是一維。我們認爲兩個向量之間的夾角越小,相關性越大。所以我們計算夾角的餘弦值作爲相關性的打分,夾角越小,餘弦值越大,打分越高,相關性越大。

好,這裏我們這樣理解,首先所有的分詞組成一個空間,這個空間是一個n維的空間,每一個維度就是一個分詞,其某一維度上的長度就是其權重。而將一篇文檔和一個搜索的語句都可以當成在這n維空間中的一些向量(連接座標0點和空間點值的有方向的線段)。這兩個向量是否相似(或者是是否匹配),就是通過使用其夾角的大小來描述的。

但是我們在處理夾角的時候是不方便的,於是我們就通過這個夾角的cos(餘弦)來表示。這裏大家就有疑問了,爲什麼要用餘弦來表示呢?爲什麼不用正弦或其他來表示呢?cos是否違反了相關的物理意義,使結果值不正確呢?

其實,我們獲取的最終結果不是其相似度下的打分值有多大,而是關心其排列的順序誰先誰後,所以針對在[0,π)的定義域範圍內,其θ1 < θ2 cosθ1 > cosθ2一定成立,也就是這是一個單調函數,也就是說相識度越高,其cos值越小,其最後打分值也就越高,其到底用角度還是餘弦表示都不影響其排序,只是值不同而已。另外爲什麼要用餘弦來表示呢?因爲使用餘弦就可以使用向量的長度以及點乘的關係來表示了,方便了很多。另外使用cos而不使用sin是因爲cos[0,π)區間範圍內是單調函數,而sin不是單調函數。

概率模型大致的描述爲:

概率統計檢索模型(Probabilistic Retrieval Model)是另一種普遍使用的信息檢索算法模型,它應用文檔與查詢相關的概率來計算文檔與查詢的相似度。通常利用檢索單元作爲線索,通過統計得到每個檢索單元在相關的文檔集(對應於某詢)中出現和不出現的概率以及其在與該查詢不相關的文檔集中出現和不出現的概率,最終,利用這些概率值,計算文檔與查詢的相似度。設文檔D包含t個檢索單元,分別記爲(ω1,ω2,...,ωt),其中,ωi爲第i個檢索單元的權值,可以理解爲該檢索單元的出現爲文檔D與查詢Q相關所作的“貢獻”,文檔D與查詢Q的相似度則是t個包含在D中的檢索單元“貢獻”的組合。

在獨立性假設的前提下,同時考慮檢索單元出現在文檔中的概率以及不出現在文檔中的概率,對於給定的查詢q 的某一個檢索單元

blob.png  

其中  N:文檔集合中文檔的總數; R:與查詢q 相關的文檔總數; n:含有檢索單元ωi 的文檔總數;  r:與q 相關的文檔中,含有檢索單元ωi 的文檔數。

對於概率模型主要是涉及到如何利用到香農的信息熵的處理,其通過信息熵的視角來分析其文本之間的可能出現的關係,其藉助的樣本空間就是人類在長期積累的文檔信息,所以其理論的基礎是現實中的實際數據,目前概率模型發展的速度非常的迅猛,其很多優秀的文本搜索和人工智能等平臺都使用概率模型。

通過上面的模型我們就必然進行選擇,不同的模型具有不同模型的優缺點,這些模型是否有基本的研究探討都需要有一定的實驗基礎。而且模型的選擇不僅僅基於其技術的優越性,而且還需要考慮我們本身的研究實力,如果我們不具備這樣的能力儲備,那麼其模型的定型就必須考慮這樣的因素,因爲我們是工程師是需要搞出實際的產品,而不是進行理論的研究。所以需要站在一個現實的角度來考慮問題,任何人任何時刻都有歷史的侷限性,這一點對於決策者來說非常的重要。

 

模型的實現

 

經驗公式:

在科學實驗和生產實踐中,經常要從一組實驗數據出發,尋求函數y = f(x)的一個近似表達式y=φ(x),這個近似表達式就稱爲經驗公式。

經驗公式一般由擬合得到,沒有完整的理論推導過程。

經驗公式更趨向於應用,重要看其是否精確。

經驗公式的領域非常的廣闊,這裏只是提及一下,我們在模型處理中需要大量的處理這些經驗公式,而且處理過程也是非常複雜的,需要結合太多的環境信息進行推理、實驗和對比,只是我們需要關注到經驗公式是非常獨特的,但是又是必須的,不是任何理論都能夠現實化,連續、極限、無限等等我們都只能近似的模擬,離散的分析,而無法進行完全實現,同時不是任何模型我們都已經搞明白了,特別是一些概率存在的,無論選擇什麼樣的值都是有問題的,因爲這些是概率的值,所以經驗公式就顯得非常的重要,只要我們明白這些經驗公式的限制場景、限制條件、有限的結論那麼我們就能夠在合適的時機使用好經驗公式。

我們需要理解模型的一些物理意義,通過這些物理意義來分析其公式的有效性和符合性,其實就是使用加減還是乘積都是非常講究的,我們可以通過一些原則來檢驗此算法是否合理。

例如:矩形面積 = * 寬 ,而爲什麼直接可以使用乘積關係呢?因爲長和寬兩者之間的變化因素是獨立的,這個獨立性是基本,兩個獨立的因素在不同的維度上,而在座標系中這兩個因素就是90°的正交化,而在我們的多維空間中,只有兩個因素呈現獨立正交的情況下才能進行乘積的關係,因此上面公式的這些因素,如果在理論上不是獨立正交的,那麼可能其經驗公式就存在問題,所以在所涉及到的算法中需要注意,這個變化的曲線的算法是否影響了獨立正交性。

在模型的實現中我們需要看到有些處理是爲了滿足一些非法情況的出現,或者是爲了讓公式具有更大的使用範圍或者更加方便的處理方式。

blob.png

另外這裏爲什麼使用log值呢?在信息熵中就是由log值來表示,當然使用ln或者其他爲底的對數都是一樣的(這可以通過信息熵相關的書籍中證明而知),另一方面使用對數處理中可以降低數域表示的範圍,這主要是numDocsdocFreq+1的比值跨度過大。需要採用對數結果值能夠讓結果範圍值更小,而這也不影響公式最後的結果。這和聲音db以及能量db的表達方式是一樣的道理。

在轉換爲程序代碼的時候也需要注意,其也是充滿了很多陷阱的,例如需要關注精度的情況下,使用intfloatdouble等是特別講究的,例如int iCount = log(a + b),此代碼在計算出結果以後是直接轉化爲int類型,小數點後面的值就直接去掉,但是更多時候我們需要的是小數點後面精度更高的結果。

系統誤差:

在重複性條件下,對同一被測量進行無限多次測量所得結果的平均值與被測量的真值之差。

系統誤差是與分析過程中某些固定的原因引起的一類誤差,它具有重複性、單向性、可測性。即在相同的條件下,重複測定時會重複出現,使測定結果系統偏高或系統偏低,其數值大小也有一定的規律。例如,測定的結果雖然精密度不錯,但由於系統誤差的存在,導致測定數據的平均值顯著偏離其真值。如果能找出產生誤差的原因,並設法測定出其大小,那麼系統誤差可以通過校正的方法予以減少或者消除,系統誤差是定量分析中誤差主要來源。

在對同一被測量進行多次測量過程中,出現某種保持恆定或按確定的方法變化的誤差,就是系統誤差。

隨機誤差

隨機誤差也稱爲偶然誤差和不定誤差,是由於在測定過程中一系列有關因素微小的隨機波動而形成的具有相互抵償性的誤差。其產生的原因是分析過程中種種不穩定隨機因素的影響,如室溫、相對溼度和氣壓等環境條件的不穩定,分析人員操作的微小差異以及儀器的不穩定等。隨機誤差的大小和正負都不固定,但多次測量就會發現,絕對值相同的正負隨機誤差出現的概率大致相等,因此它們之間常能互相抵消,所以可以通過增加平行測定的次數取平均值的辦法減小隨機誤差。

測量值的隨機誤差分佈規律有正態分佈、t分佈、三角分佈和均勻分佈等,但測量值大多數都服從正態分佈。

隨機誤差具有以下規律:

1)大小性:絕對值小的誤差出現的概率比絕對值大的誤差出現的概率大。

2)對稱性:絕對值相等的正誤差和負誤差出現的概率相等。

3)有界性:絕對值很大的誤差出現的概率近於零。誤差的絕對值不會超過某一個界限。

4)抵償性:在一定測量條件下,測量值誤差的算術平均值隨着測量次數的增加而趨於零。

 

模型的驗證

 

同樣模型的驗證也是非常的複雜,而且也是具有很多理論根據,同時其在不同的領域進行驗證的方案也不一樣,這裏就不再贅述,只是通過一些經驗出發來拋磚引玉。

我們可以通過結果總體的趨勢來判斷是否合理,這可以結合到圖像表格等輔助手段來判斷驗證我們的處理是否符合要求。

blob.png

從上面表格可以看出,會出現一個異常值1,9的時候,所以我們的結果不是一個單調遞減的函數,而是有一個突變,這違反事實。

在處理變量之間的關係,還需要瞭解到其相互之間的條件關係,這些條件關係可能是顯性的也可能是隱形的,其制約關係可以通過在一些最大值或者最小值等情況給以更好的驗證。

例如:對於兩個變量之前的乘積關係,其實也並不是說只要保證成正比或者成反比的變化,就可以任意選擇其值來處理,有一個公式大家都知道: 

blob.png

噪音數據指出現在某變量上的隨機誤差或變異。 不一致數據指在數據庫中屬性值相同的事例分屬於不同的類的情況。

而我們針對噪音和不一致的數據需要從我們的驗證數據清理出來,因爲這些數據很可能影響我們的最終的結果,其實如何才能去除這些噪音呢?此處我只能說sorry,因爲研究的較少,只是噪音的影響的確很大,必須引起大家的注意。

其實可以理解爲白噪聲是一個純隨機過程,也就是沒有特徵可尋,不存在相關性等等性質.在統計學中,我們建立迴歸方程,是希望提取越多的信息越好,也就是希望迴歸之後的殘差項的信息完全提取完畢,那麼殘差項就是白噪聲了.所以通常我們都會通過檢驗殘差項的性質來判斷迴歸方程的優劣.你可以先把迴歸模型的理論弄清楚.

用專業定義來講:隨機變量X(t)(t=1,2,3……),如果是由一個不相關的隨機變量的序列構成的,即對於所有S不等於T,隨機變量Xt和Xs的協方差爲零,則稱其爲純隨機過程.對於一個純隨機過程來說,若其期望和方差均爲常數,則稱之爲白噪聲過程.

對於數學模型來說,從理論到應用需要翻越一個坎,而從模型到實現也需要翻越一個坎,本章無法給出如何進行數學模型的構建,這應該屬於一個很大的領域,本章只是淺嘗輒止給出了數學模型從模型到實現可能存在的困難,這些困難對於設計者來說,其實比數學模型的構建還要重要一些,隨着專業化的分工不同,數學模型的構建是一些算法工程師安身立命的“本錢”,而對於軟件設計的設計工程師來說,如何更加有效的將模型轉化爲設計纔是他們安身立命的“本錢”。

 

參考資料

 

1. 百度搜索 網站:https://www.baidu.com

2. 互動百科 網站:http://www.baike.com

3. 《面向模式的軟件體系結構(1):模式系統》 作者:Frank Buschmann / Regine meunier / Hans Rohnert / Peter Sommerlad / Michael Stal 譯者:賁可榮 / 郭福亮 出版社:機械工業出版社 ;出版時間:20031

4. 《深度探索C++對象模型 》 作者:Stanley B. Lippman ; 譯者:侯捷 ;出版社:華中科技大學出版社 ;出版時間:20075

5. 《線性代數的幾何意義》 作者:任廣千等 ;出版社:西安電子科技大學出版社 ;出版時間:20157

6. 《線性代數及其應用》 作者:David C.Lay ;譯者:劉深泉等 ; 出版社:機械工業出版社 ;出版時間:20058

7. 《深入核心:VCL架構剖析》 作者:李維 ;出版社:電子工業出版社 ;出版時間:20042

8. 《泛型編程與STL》 作者: Matthew H. Austern ;譯者: 侯捷 ;出版社: 中國電力出版社;出版時間: 20031

9. 《數據庫系統導論》 作者:戴特  ;譯者:孟小峯  ;出版社:機械工業出版社 ;出版時間:20077

10. 《深入淺出MFC》 作者:侯俊傑  ;出版社:華中科技大學出版社 ;出版時間:20011

11. 《計算機組成原理》 作者: 唐朔飛  ;出版社:高等教育出版社 ;出版時間:20081

12. UNIX編程藝術》 作者: Eric S. Raymond  ;譯者:姜宏/何源/蔡曉駿 ;出版社:電子工業出版社 ;出版時間:20111

13. 《編程原本》 作者:Alexander Stepanov / Paul McJones,譯者:裘宗燕  出版社:機械工業出版社華章公司;出版時間:20121

14. 《大規模C++程序設計》 作者: John Lakos ,譯者:李師賢 / 明仲 / 曾新紅 / 劉顯明 等   出版社:中國電力出版社;出版時間:20039

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章