2023年9月23日 星期六

[LeetCode] LeetCode解題&自動驗證程式 leetcode-solver-bot-verify-tool

公司30週年時, 盛大的舉辦了一場AI contest, 只要通過預賽的隊伍, 公司就會出錢帶你去日本福岡比決賽, 30週年時比的是AI賽車&撲克牌Hearts (傷心小棧), 那時為了在比賽中得到好名次, 還寫了一個Hearts比賽模擬程式, 可以import客製化的AI程式, 方便快速訓練模型以及驗證自己的AI程式程度如何:

https://github.com/zmcx16/OpenAI-Gym-Hearts


然後過了五年的今天, ChatGPT在今年整個大爆紅, 於是公司又決定舉辦一次AI contest, 這次的預賽項目是coding解題AI, 要寫出一個會解coding problem的AI來比賽, 看誰的正確率最高。

為了這場比賽 & 再去一次福岡, 預賽開賽前第一個想到的, 就是我需要一個驗證程式, 幫助我驗證自己寫出來的coding bot performance如何, 這樣才知道自己每次的修改是不是越改善越好, 畢竟只靠官方的練習次數一天三次實在太少了, 就決定在預賽開賽的前一個週末寫這個驗證程式, 寫好的程式碼如下:

https://github.com/zmcx16/leetcode-solver-bot-verify-tool


使用方法可以參考上面github的README.md, 主要參數如下:



程式其實主要有五個步驟, 每個步驟都可以獨立執行, 可以透過--run-steps來控制:

1. 從資料集生成問題集, 把原始的資料集轉成一個一個question file。

2. 生成solution code, 透過參數-a可以設定你想要拿來測試的coding bot, 如果是用這個repo預設的bot, 記得要先在./leetcode_solver_bot/default_chatgpt_bot.py裡填上自己的OPENAI_API_KEY。

3. 取得LeetCode的cookies & csrf token, 因為要請LeetCode backend幫我們做解答的驗證, 所以需要account才能上傳生成的solution code, 設定0就會自行讀取既有的cookie檔案, 設成1就會用selenium開啟firefox自動login LeetCode網站來取得cookies & csrf token。

4. 驗證答案, 會上傳solution code到LeetCode backend等驗證結果並儲存, 儲存後的檔案會是LeetCode網站回傳的驗證結果:


5. 計算統計結果, 會分別儲存完整版score_readable.json以及精簡版score_summary_readable.json:



除了當次的驗證結果, 也可以分別跑兩組不同的coding bot作為實驗組&對照組, 然後再用verify_calc_score_p_value.py計算p-value, 驗證是否這次的修改有顯著性, 而不是運氣好才碰巧剛好分數高:



這次sharing差不多就到這邊, 這次的AI大賽預賽也過一半了, 希望一切順利~。

4 則留言:

  1. 回覆
    1. 謝謝聲援! 其實都是組長跟組員拼命改AI, 我只幫忙做tool & refactor & 小改打雜XDDD

      刪除
  2. 祝您還能再去福岡

    回覆刪除
    回覆
    1. 謝謝祝福! 靠我這組的組長跟另一個扛壩子組員了XDD

      刪除