Maxent Source code reading experience

來源:互聯網
上載者:User

讀了張樂的原始碼,總結如下幾點

1,EventSpace對象是一個Event集合,可以是訓練集也可以是測試集或者驗證集。

2,Event對象就是一個範例具體形式為<outcome,vector<observation>>,每個observation是一個pair<predicate,weight>,總得來說Event對象用來標示訓練資料檔案中的一行。

3,Maxent對象至少有一個訓練集EventSpace對象和一個可選驗證集Eventspace對象,一個參數集合集合lamda。為了尋找方便,MaxentObject Storage Service了兩個map用來將用字串表示的predicate和output映射為整數,並用param字典來影射一個給定的<predicate,outcome>對應的參數,param的結構為predicateId->pair<outputId,lamda_index>。

4,關於param的構造有兩個方法build_params,演算法相同資料結構不同而已。需要說明的是對每一個predicate它並非為每一個output都配置一個參數,而是只為那些曾經在training data裡面出現過的<predict,output>對配置參數。說一下這兩種情況的區別。

設想有一個predicate集合<p1,p2...pn>還有一個output集合<o1,o2...om>。

1)

對一個具體的predicate為每一個output配置參數,形成的feature集合如下

f<p1,o1>=w1,f<p1,o2>=w1...f<p1,om>=w1

f<p2,o1>=w2,f<p2,o2>=w2...f<p2,om>=w2

...

f<pn,o1>=wn,f<pn,o2>=wn...f<pn,om>=wn

總共有m*n個feature,也就需要有m*n個參數,如果給定一個Event表示為<?,{p1:w1,p2:w2,p3:w3}>,欲求其output。<o1,{p1:w1,p2:w2,p3:w3}>...<om,{p1:w1,p2:w2,p3:w3}>用這m個完整的Event代入模型計算得到m個機率,選擇機率最大的那個作為最終的預測結果即可。發現為不完整的Event指定一個具體的output之後,feature集合中只有一列會被選中,其的feature在計算過程中都不會被啟用。

2)

由於訓練資料覆蓋範圍有限,如果有一些<pi,oj>組合沒有出現,則相應的f<pi,oj>不會出現在1)中所列的feature集合裡面,從而不會為之準備對應的參數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.