RecBole小白入門系列部落格(三)——Context類模型執行流程
RecBole小白入門系列部落格(三)
——Context類模型執行流程
傳送門:
RecBole小白入門系列部落格(一)——快速安裝和簡單上手
RecBole小白入門系列部落格(二)——General類模型執行流程
寫在前面
- 這次的內容和上次General類模型執行流程差不多,我會特別提一下Context類模型不一樣和需要注意的地方。
- 由於模型的完整執行流程會牽扯到很多部分,從資料到引數,所以這裡將簡略的舉出例子,讓大家可以大致獨立完成模型的執行。關於一些更加具體和細微的部分,我將在後面單獨寫部落格為大家介紹。
選定模型
RecBole中共有13個General類模型可供使用,模型列表如下:
關於模型的具體資訊可以檢視上面的連結,大家選用需要的模型即可。我們以模型FM為例。
設定模型超引數
每個模型的超引數都不一致,大家可以從上面的連結中檢視自己所需模型的超引數有哪些。在RecBole中每個模型都有預設的引數,因此如果是想簡單跑一跑就暫時不動。
模型預設引數在原始碼目錄RecBole/recbole/properties/model
中,各位感興趣在小夥伴可以在裡面檢視預設引數值。
那麼想調參的同學怎麼辦呢?讀過RecBole小白入門系列部落格(一)——快速安裝和簡單上手的朋友可能知道,在RecBole中調整引數有好幾種方法,這裡我推薦使用自定義配置檔案。
RecBole的配置檔案格式均使用.yaml
檔案,十分簡潔明瞭,大致的形式如下:
accum: "stack"
gcn_output_dim: 500
embedding_size: 64
dropout_prob: 0.3
sparse_feature: True
class_num: 2
num_basis_functions: 2
引數名稱: 引數值
這樣的樣式
引數值可以是字典巢狀,也可以是列表等,就像這樣
load_col:
inter: [user_id, business_id, stars]
item: [business_id, address, categories]
user: [user_id, fans, compliment_hot, compliment_cool, complitment_cute, compliment_plain]
大家暫時不用管引數的含義等,後面會注意講到。大致瞭解配置檔案的格式之後,我再說下推薦的修改模型引數的方法:
- 在目錄
RecBole/
下新建配置檔案test.yaml
- 在
test.yaml
中寫入想要修改的引數 - 儲存
例如,我想修改模型LR的引數,就去檢視路徑RecBole/recbole/properties/model/LR.yaml
,可以發現LR引數很少,就只有一個:
embedding_size: 10
那如果我想把embedding_size
改成32的話,就在test.yaml
中寫入
# model config
embedding_size: 32
別的模型引數同理
選定資料集
資料集基本格式
選定模型之後就是要選定要用的資料集了。RecBole框架使用的資料集要求處理成對應的原子檔案才可以正常使用,目前支援6種原子檔案,Context模型顧名思義會用到各種上下文,因此會用到的檔案可能有多個 .inter、.item和**.user**
字尾 | 含義 | 例子 |
---|---|---|
.inter | 使用者-商品互動特徵 | user_id, item_id, rating, timestamp, review |
.user | 使用者特徵 | user_id, age, gender |
.item | 商品特徵 | item_id, category |
每個原子檔案可以被看作 m 行 n 列的表格(不計表頭),代表該檔案儲存了 n 種不同的特徵,共 m 條記錄。 檔案第一行為表頭,表頭中每一列的形式為 feat_name:feat_type,標示了該列特徵的名字及型別。 約定特徵為四種型別之一。
feat_type | 含義 | 例子 |
---|---|---|
token | 單個離散特徵 | user_id, age |
token_seq | 離散特徵序列 | review |
float | 單個連續特徵 | rating, timestamp |
float_seq | 連續特徵序列 | vector |
關於資料集原子檔案的處理和格式等,我接下來會專門用一篇部落格來講,這裡給出一個簡明的例子即可,想馬上了解的同學可以看他們的網站https://recbole.io/cn/atomic_files.html
以及RecBole提供的已經按格式處理好的資料集
https://github.com/RUCAIBox/RecDatasets
以 ml-1m 為例 :
處理過後可以得到 ml-1m.inter 檔案,模式如下:
還要注意Context模型用的資料集可以沒有使用者id和物品id,但最好特徵多一些,才能得到更好的結果。
設定資料集引數
針對特定資料集,需要設定相應的引數,才可以讓模型正常執行。這裡仍然以 ml-1m 資料集為例,給出相應的配置檔案。在上文 test.yaml
繼續寫入資料集引數,我會在下面註釋中給出各個引數的含義,這些都是必須設定的引數。
# dataset config
field_separator: "\t" #指定資料集field的分隔符
seq_separator: " " #指定資料集中token_seq或者float_seq域裡的分隔符
USER_ID_FIELD: user_id #指定使用者id域
ITEM_ID_FIELD: item_id #指定物品id域
RATING_FIELD: rating #指定打分rating域
TIME_FIELD: timestamp #指定時間域
NEG_PREFIX: neg_ #指定負取樣字首
LABEL_FIELD: label #指定標籤域
#因為資料集沒有標籤,所以設定一個閾值,認為rating高於該值的是正例,反之是負例
threshold:
rating: 4
#指定從什麼檔案裡讀什麼列,這裡就是從ml-1m.inter裡面讀取user_id, item_id, rating, timestamp這四列,剩下的以此類推
load_col:
inter: [user_id, item_id, rating]
user: [user_id, age, gender, occupation]
item: [item_id, genre]
設定訓練引數
設定好資料及之後,我們要繼續設定訓練的引數,在test.yaml
中繼續寫入:
# training settings
epochs: 500 #訓練的最大輪數
train_batch_size: 4096 #訓練的batch_size
learner: adam #使用的pytorch內建優化器
learning_rate: 0.001 #學習率
training_neg_sample_num: 0 #負取樣數目
eval_step: 1 #每次訓練後做evalaution的次數
stopping_step: 10 #控制訓練收斂的步驟數,在該步驟數內若選取的評測標準沒有什麼變化,就可以提前停止了
大家一定注意,因為Context類模型不用負取樣,因此training_neg_sample_num
一定是0
設定評測引數
執行前最後一步,需要設定評測引數。在test.yaml
中繼續寫入:
# evalution settings
eval_setting: RO_RS #對資料隨機重排,設定按比例劃分資料集
group_by_user: False #是否將一個user的記錄劃到一個組裡
split_ratio: [0.8,0.1,0.1] #切分比例
metrics: ['AUC', 'LogLoss'] #評測標準
valid_metric: AUC #選取哪個評測標準作為作為提前停止訓練的標準
eval_batch_size: 4096 #評測的batch_size
注意,區別於General類模型,Context模型沒有全排序,所以在eval_setting
設定裡是沒有full的
總結引數設定
至此我們的引數設定就全都好了,完整的 test.yaml
應該是這個樣子的:
# model config
embedding_size: 32
# dataset config
field_separator: "\t" #指定資料集field的分隔符
seq_separator: " " #指定資料集中token_seq或者float_seq域裡的分隔符
USER_ID_FIELD: user_id #指定使用者id域
ITEM_ID_FIELD: item_id #指定物品id域
RATING_FIELD: rating #指定打分rating域
TIME_FIELD: timestamp #指定時間域
NEG_PREFIX: neg_ #指定負取樣字首
LABEL_FIELD: label #指定標籤域
#因為資料集沒有標籤,所以設定一個閾值,認為rating高於該值的是正例,反之是負例
threshold:
rating: 4
#指定從什麼檔案裡讀什麼列,這裡就是從ml-1m.inter裡面讀取user_id, item_id, rating, timestamp這四列,剩下的以此類推
load_col:
inter: [user_id, item_id, rating]
user: [user_id, age, gender, occupation]
item: [item_id, genre]
# training settings
epochs: 500 #訓練的最大輪數
train_batch_size: 4096 #訓練的batch_size
learner: adam #使用的pytorch內建優化器
learning_rate: 0.001 #學習率
training_neg_sample_num: 0 #負取樣數目
eval_step: 1 #每次訓練後做evalaution的次數
stopping_step: 10 #控制訓練收斂的步驟數,在該步驟數內若選取的評測標準沒有什麼變化,就可以提前停止了
# evalution settings
eval_setting: RO_RS #對資料隨機重排,設定按比例劃分資料集
group_by_user: False #是否將一個user的記錄劃到一個組裡
split_ratio: [0.8,0.1,0.1] #切分比例
metrics: ['AUC', 'LogLoss'] #評測標準
valid_metric: AUC #選取哪個評測標準作為作為提前停止訓練的標準
eval_batch_size: 4096 #評測的batch_size
執行
將 ml-1m
資料集資料夾放在目錄RecBole/dataset
下,至此幾個關鍵檔案的層次應該是:
-RecBole
-dataset
-ml-1m
ml-1m.inter
ml-1m.item
ml-1m.user
test.yaml
run_recbole.py
接下來按照我上期RecBole小白入門系列部落格(一)——快速安裝和簡單上手講的執行方法執行就好啦!
假設執行LR模型(別的模型同理,改一下model就好)
python run_recbole.py --model=LR --dataset=ml-1m \
--config_files=test.yaml
然後就有下面這樣的資訊輸出了:
這裡是列印出的訓練引數資訊,可以看到有很多我們沒設定的預設資訊
接下來是資料集的引數資訊:
之後給出資料集的基本資訊:
再然後是evaluation的設定:
下面是模型結構:
**接下來就開始訓練啦,會列印出每一輪的結果: **
一直到訓練結束,會給出最終的測試結果:
調(lian)參(dan)
參照上一期裡的調參即可
RecBole小白入門系列部落格(二) ——General類模型執行流程
結束語
Context類模型執行流程就寫到這裡,之後我還會繼續更新剩下的兩種模型執行流程,以及之前提到的各種引數設定,資料集處理,資料集配置等。大家還有什麼想看的可以留言( ̄▽ ̄)~,有什麼問題也歡迎和我討論!
最後附上官網、API文件和GitHub連結~大家有興趣可以自行查閱哦!
官網:https://recbole.io/cn/index.html
API文件:https://recbole.io/docs/
GitHub:https://github.com/RUCAIBox/RecBole
相關文章
- RecBole小白入門系列部落格(一)——快速安裝和簡單上手
- 部落格入門
- Docker從入門到精通(三)——概念與執行流程Docker
- Flutter小白教程系列(三) --- Dart語言快速入門FlutterDart
- 個人部落格入門4
- Java入門系列-21-多執行緒Java執行緒
- HelloDjango 系列教程:建立 Django 部落格的資料庫模型Django資料庫模型
- Java執行緒入門第三篇Java執行緒
- 搭建自己的技術部落格系列(三)讓你的部落格擁有評論功能!
- Mybatis原始碼系列 執行流程(一)MyBatis原始碼
- Java類初始化執行流程Java
- Java多執行緒系列——從菜鳥到入門Java執行緒
- Gradle 系列部落格梳理Gradle
- Spring Boot 系列部落格Spring Boot
- 搭建自己的技術部落格系列(五)hexo部落格接入busuanzi外掛,展示訪問量和網站執行時間Hexo網站
- 前端切圖仔入門Docker,三分鐘上線自己的部落格平臺前端Docker
- 測試流程必須嚴格執行嗎?
- 初入部落格園
- 【部落格搭建】Typecho個人部落格搭建,快速安裝,超小白(很簡單的)
- Laravel Nova 入門建立一個簡單的部落格Laravel
- django基礎入門之搭建部落格系統Django
- React入門例項參考阮一峰部落格React
- JVM系列之類載入流程-自定義類載入器JVM
- SpringSecurity啟動流程原始碼解析 | 部落格園新人第三彈SpringGse原始碼
- Hexo系列3:部落格優化Hexo優化
- Consul 入門-執行
- 機器學習之小白入門機器學習
- 前端小白的入門前端
- (三)Redis 執行緒與IO模型Redis執行緒模型
- Java入門系列-11-類和物件Java物件
- github actions 入門指南及部落格自動部署實踐Github
- 多執行緒系列(三):執行緒池基礎執行緒
- 【Go語言】小白也能看懂的context包詳解:從入門到精通GoContext
- RecyclerView綜合案例庫和系列部落格View
- 牛人部落格系列(持續更新)
- 同為部落格,不同風格 ——Hexo另類搭建Hexo
- 網路安全風險評估流程包括哪些步驟?小白入門必看
- Activity 流程模型匯入匯出-activity流程模型匯入匯出模型