SNA Hackathon 2019ãã¡ã€ãã«ã¯4æ1æ¥ã«çµäºãããã®åå è ã¯ãææ°ã®æ©æ¢°åŠç¿æè¡ãã³ã³ãã¥ãŒã¿ãŒããžã§ã³ããã¹ãåŠçãããã³æšå¥šã·ã¹ãã ã䜿çšããŠãœãŒã·ã£ã«ãããã¯ãŒã¯ãã£ãŒãã®ãœãŒãã«åå ããŸããã ããŒããªãªã³ã©ã€ã³éžæãš160ã®ã¬ãã€ãã®ããŒã¿ã«å¯Ÿãã2æ¥éã®ããŒãã¯ãŒã¯ã¯ç¡é§ã§ã¯ãããŸããã§ãã:)ã åå è ãæåããããã«äœãå©ãã«ãªã£ããããã®ä»ã®è峿·±ã芳å¯ã«ã€ããŠè©±ããŸãã
ããŒã¿ãšã¿ã¹ã¯ã«ã€ããŠ
ç«¶äºã¯ã OKãœãŒã·ã£ã«ãããã¯ãŒã¯ã®ãŠãŒã¶ãŒã®ãã£ãŒããæºåããã¡ã«ããºã ããã®ããŒã¿ãæç€ºããŸããã
- ã³ã³ãã³ã衚瀺ãã°ã¯ããŠãŒã¶ãŒãã³ã³ãã³ããäœæè ãããã³ãã®ä»ã®ããããã£ã説æãã倿°ã®èšå·ãšãšãã«ãŠãŒã¶ãŒãã£ãŒãã«èšé²ãããŸãã
- 衚瀺ãããã³ã³ãã³ãã«é¢é£ããããã¹ãã
- ã³ã³ãã³ãã§äœ¿çšãããç»åã®æ¬äœã
ããŒã¿ã®åèšéã¯160ã®ã¬ãã€ããè¶ ããŸããããã®ãã¡3ã€ä»¥äžããã°çšã3ã€ä»¥äžãããã¹ãçšãæ®ããåççšã§ãã 倧éã®ããŒã¿ã¯åå è ãé©ãããŸããã§ããïŒ ML Bootcampã®çµ±èšã«ãããšãã»ãŒ200人ãã³ã³ãã¹ãã«åå ãã3,000ãè¶ ããæåºç©ãéä¿¡ããŸããã ãã¶ãã圌ãã¯700,000ã«ãŒãã«ãš3æã®GTX 2080 Tiã°ã©ãã£ãã¯ã¹ã«ãŒãã®è³éããŒã«ã«åæ©ä»ããããŸããã
ã³ã³ãã¹ãã®åå è ã¯ãããŒãã®äžŠã¹æ¿ãã®åé¡ã解決ããå¿ èŠããããŸãããåã ã®ãŠãŒã¶ãŒããšã«ããã¯ã©ã¹ïŒãããŒã¯ãååŸãããªããžã§ã¯ãããªã¹ãã®å é ã«è¿ã¥ãããã«è¡šç€ºãªããžã§ã¯ããäžŠã¹æ¿ããŸãã
ROC-AUCãå質è©äŸ¡ææšãšããŠäœ¿çšãããŸããã åæã«ãã¡ããªãã¯ã¯ãã¹ãŠã®ããŒã¿å šäœãšããŠã§ã¯ãªãããŠãŒã¶ãŒããšã«åå¥ã«èæ ®ãããŠããå¹³ååãããŸããã ãã®èšç®ãªãã·ã§ã³ã¯ãå€ãã®ã¯ã©ã¹ã«å±ãããŠãŒã¶ãŒãåºå¥ããããšãåŠç¿ããã¢ã«ãŽãªãºã ãå©ç¹ã享åããªããšããç¹ã§æ³šç®ã«å€ããŸãã äžæ¹ãæšæºã®Pythonããã±ãŒãžã«ã¯ãã®ãããªãªãã·ã§ã³ã¯ãããŸãããããã«ããã以äžã§èª¬æããããã€ãã®è峿·±ãç¹ãæããã«ãªããŸããã
æè¡ã«ã€ããŠ
åŸæ¥ãSNA Hackathonã¯ã¢ã«ãŽãªãºã ã§ããã ãã§ãªãããã¯ãããžãŒã§ããããŸããåºè·ãããããŒã¿ã®éã¯160ã®ã¬ãã€ããè¶ ããŠãããåå è ã¯è峿·±ãæè¡çãªã¿ã¹ã¯ã«çŽé¢ããŠããŸãã
坿šçް工vs. Csv
åŠè¡ç ç©¶ããã³Kaggleã§ã®äž»èŠãªããŒã¿åœ¢åŒã¯CSVã§ããããã®ä»ã®ãã¬ãŒã³ããã¹ã圢åŒã§ãã ãã ããæ¥çã®ç¶æ³ã¯å€å°ç°ãªããŸããããã€ããªãã¹ãã¬ãŒãžåœ¢åŒã䜿çšãããšãã¯ããã«ã³ã³ãã¯ãã§åŠçé床ãåäžããŸãã
ç¹ã«ã Apache Sparkã«åºã¥ããŠæ§ç¯ããããšã³ã·ã¹ãã ã§ã¯ã Apache Parquetãæã人æ°ããããŸããããã¯ãå€ãã®éèŠãªéçšæ©èœããµããŒãããããŒã¿ãæ ŒçŽããå圢åŒã§ãã
- é²åããµããŒãããæç€ºçã«æå®ãããåè·¯ã
- ãã£ã¹ã¯ããå¿ èŠãªåã®ã¿ãèªã¿åããŸãã
- èªã¿åãæã®ã€ã³ããã¯ã¹ãšãã£ã«ã¿ãŒã®åºæ¬çãªãµããŒãã
- æååå§çž®ã
ããããæãããªå©ç¹ã«ãããããããApache Parquet圢åŒã§ã®ç«¶äºã®ããã®ããŒã¿ã®æåºã¯ãäžéšã®åå è ããã®å³ããæ¹å€ã«äŒããŸããã ä¿å®äž»çŸ©ãšäœãæ°ãããã®ã®éçºã«æéãè²»ããããšãæãŸãªãããšã«å ããŠãããã€ãã®æ¬åœã«äžå¿«ãªç¬éããããŸããã
第äžã«ãPythonã®Parquetãæäœããããã®äž»èŠããŒã«ã§ããApache Arrowã©ã€ãã©ãªãŒã§ã®åœ¢åŒã®ãµããŒãã¯ãå®ç§ãšã¯ã»ã©é ãã§ãã ããŒã¿ãæºåãããšãããã¹ãŠã®æ§é ãã£ãŒã«ãããã©ããã«æ¡åŒµããå¿ èŠããããŸããããããã§ãããã¹ããèªããšããå€ãã®åå è ããã°ã«ééãããã®æç¹ã§çŸåšã®ããŒãžã§ã³0.12ã§ã¯ãªããå€ãããŒãžã§ã³ã®ã©ã€ãã©ãª0.11.1ãã€ã³ã¹ããŒã«ããããšã匷å¶ãããŸããã 第äºã«ãåçŽãªã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ïŒcatãlessãªã©ïŒã䜿çšããŠParquetãã¡ã€ã«ã衚瀺ããŸããã ãã ãã parquet-toolsããã±ãŒãžã䜿çšãããšããã®æ¬ ç¹ãæ¯èŒçç°¡åã«è£ãããšãã§ããŸãã
ããã§ããæåã«ãã¹ãŠã®ããŒã¿ãCSVã«å€æããŠããäœ¿ãæ £ããç°å¢ã§äœæ¥ããããšãã人ã¯ãæçµçã«ãã®èããæŸæ£ããŸãããçµå±ãParquetã¯ããªãéãåäœããŸãã
ããŒã¹ãã£ã³ã°ãšGPU
ãçããµãŒã¯ã«ã§åºãç¥ãããŠããããµã³ã¯ãããã«ãã«ã¯ã§éå¬ãããSmartDataäŒè°ã§ãAlexey Natekinã¯CPU / GPUã§ã®äœæ¥äžã«ããã€ãã®äžè¬çãªããŒã¹ãã£ã³ã°ããŒã«ã®ããã©ãŒãã³ã¹ãæ¯èŒããŸãã ã ããããããã§ãããã®çµè«ã¯ãäž»ã«åœå ã®CatBoostããŒã«ã®éçºè ã«ããæŽ»çºãªè«äºã«ã€ãªãããŸããã
éå»2幎éã§ãGPUã®éçºãšã¢ã«ãŽãªãºã ã®é©å¿ã®é²æ©ã¯æ¢ãŸãããSNA Hackathonãã¡ã€ãã«ã¯CatBoost + GPUãã¢ã®åå©ãšèããããšãã§ããŸã-ãã¹ãŠã®åè ã¯ããã䜿çšããäž»ã«åäœæéãããã«ããå€ãã®æšãè²ãŠãèœåã®ããã«ã¡ããªãã¯ãåŒãåºããŸããã
å¹³åã¿ãŒã²ãããšã³ã³ãŒãã£ã³ã°ã®çµ±åãããå®è£ ã¯ãCatBoostã«åºã¥ããœãªã¥ãŒã·ã§ã³ã®é«ãçµæã«ãè²¢ç®ããŸããããããªãŒã®æ°ãšæ·±ãã¯ããå€§å¹ ã«å¢å ããŸããã
ä»ã®ããŒã¹ãã£ã³ã°ããŒã«ãåæ§ã®æ¹åã«é²ãã§ãããGPUãµããŒãã远å ããã³æ¹åããŠããŸãã ã ããããã£ãšæšãè²ãŠãŸãããïŒ
ã¹ããŒã¯vs. Pyspark
Apache SparkããŒã«ã¯ãäžéšã¯Python APIã®ãããã§ãç£æ¥ããŒã¿ãµã€ãšã³ã¹ã®åŒ·åãªãªãŒããŒã§ãã ãã ããPythonã䜿çšãããšãç°ãªãã©ã³ã¿ã€ã ãšã€ã³ã¿ãŒããªã¿ãŒãçµ±åããããã®ãªãŒããŒãããã远å ãããŸãã
ãŠãŒã¶ãŒã¯ããã®ã¢ã¯ã·ã§ã³ãŸãã¯ãã®ã¢ã¯ã·ã§ã³ããããã远å ã³ã¹ãã®éãèªèããŠããã°ãããèªäœã¯åé¡ã«ãªããŸããã ããããåå è ãApache Sparkã䜿çšããªãã£ããšããäºå®ã«ãããããããéåžžã«å€ãã®äººãåé¡ã®å€§ãããèªèããŠããªãããšã倿ããŸããã Scalaã¯ããã«ãœã³ãã£ããã«å®æçã«ç»å Žãã察å¿ããè§£ææžã¿ã®æçš¿ã衚瀺ãããŸãã ã
èŠããã«ãScala / Javaçµç±ã§Sparkã䜿çšããå Žåãšæ¯èŒããŠãPythonçµç±ã§Sparkã䜿çšããå Žåã®é床äœäžã¯ã次ã®ã¬ãã«ã«åé¡ã§ããŸãã
- Spark SQL APIã®ã¿ããŠãŒã¶ãŒå®çŸ©é¢æ°ïŒUDFïŒãªãã§äœ¿çšãããŸã-ãã®å Žåãã¯ãšãªå®è¡èšç»å šäœãJVMã®ãã¬ãŒã ã¯ãŒã¯å ã§èšç®ããããããå®è³ªçã«ãªãŒããŒãããã¯ãããŸããã
- UDFã¯ãC ++ã³ãŒãã§ããã±ãŒãžãåŒã³åºãããšãªãPythonã§äœ¿çšãããŸãããã®å ŽåãUDFãèšç®ãããæ®µéã®ããã©ãŒãã³ã¹ã¯7ã10åäœäžããŸãã
- UDFã¯Pythonã§C ++ããã±ãŒãžïŒnumpyãsklearnãªã©ïŒã«ã¢ã¯ã»ã¹ããŠäœ¿çšãããŸãããã®å Žåãããã©ãŒãã³ã¹ã¯10ã50åäœäžããŸãã
äžéšã«ã¯ã PyPy ïŒPythonã®JITïŒãšãã¯ãã«åãããUDFã䜿çšããããšã§ãã€ãã¹ã®åœ±é¿ãè£ãããšãã§ããŸããããããã®å Žåã§ãããã©ãŒãã³ã¹ã®éãã¯è€æ°ãããå®è£ ãšå±éã®è€éãã«ã¯è¿œå ã®ãããŒãã¹ãã䌎ããŸãã
ã¢ã«ãŽãªãºã ã«ã€ããŠ
ããããããŒã¿ãµã€ãšã³ã¹ããã«ãœã³ã§æãè峿·±ãã®ã¯ããã¡ãããã¯ãããžãŒã§ã¯ãªãããã¡ãã·ã§ããã«ã§å®çžŸã®ããæ°ããã¢ã«ãŽãªãºã ã§ãã CatBoostã¯ä»å¹ŽSNA Hackathonãæ¯é ããŸããããããã€ãã®ä»£æ¿ã¢ãããŒãããããŸããã ãããã«ã€ããŠã話ããŸã:)ã
埮åå¯èœãªã°ã©ã
äºéžã®çµæã«åºã¥ã決å®ã®æåã®åºçç©ã® 1ã€ã¯ãæšã§ã¯ãªã埮åå¯èœãªã°ã©ãïŒäººå·¥ãã¥ãŒã©ã«ãããã¯ãŒã¯ãšãåŒã°ããŸãïŒå°çšã§ããã èè ã¯OKã®åŸæ¥å¡ã§ãããããè³åã远ããããäœè£ã¯ãããŸããããå å®ãªæ°åŠçåºç€ã«åºã¥ããŠææãªãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããããšã楜ããã§ããŸãã
ææ¡ããããœãªã¥ãŒã·ã§ã³ã®äž»ãªã¢ã€ãã¢ã¯ãå©çšå¯èœãªæ©èœãå ¥åããŒã¿ã®ããŸããŸãªåŽé¢ãèæ ®ããäºæž¬ã«å€æããåäžã®èšç®å¯èœãªåŸ®åå¯èœã°ã©ããæ§ç¯ããããšã§ããã
- ãªããžã§ã¯ããšãŠãŒã¶ãŒã®çµåã䜿çšãããšãå€å žçãªå ±åæšå¥šã®èŠçŽ ã远å ã§ããŸãã
- MLPãä»ããã¹ã«ã©ãŒåã蟌ã¿ããéçŽãžã®ç§»è¡ã«ãããä»»æã®ç¹æ§ã远å ã§ããŸãã
- query-key-valueã®æ³šæã«ãããã¢ãã«ã¯æè¿ã®å±¥æŽãèŠãŠãã以åã¯äžæ £ããªãŠãŒã¶ãŒã®åäœã«ãåçã«é©å¿ããããšãã§ããŸããã
ãã®ã¢ãã«ã¯ãããã¹ãã³ã³ãã³ããæšå¥šããåé¡ã解決ãããªã³ã©ã€ã³éžæã«éåžžã«åªããŠããããšã倿ãããããè€æ°ã®ããŒã ãæ±ºåã§äžåºŠã«ãã¬ã€ããããšããŸããããæåããŸããã§ããã ããã¯ãããã«ã¯æéãšçµéšãå¿ èŠã§ãããšããäºå®ãšããã¡ã€ãã«ã®å±æ§ã®æ°ãã¯ããã«å€ããããªãŒã«åºã¥ãã¡ãœããããããã®ããã«å€§ããªå©ç¹ãåãåã£ããšããäºå®ãåå ã§ããã
å ±åæ¯é ç
ãã¡ãããã³ã³ãã¹ããéå¬ãããšãããã°ã«ããªã匷ãã·ã°ãã«ãããããšãããããŸãããããã«åéãããå åã¯ããã£ãŒãã®ã©ã³ãã³ã°ã«é¢ããOKã§è¡ãããäœæ¥ã®å€§éšåãåæ ããŠããããã§ãã ããã«ãããããããæåŸãŸã§ãåå è ãã3çªç®ã®å åãã«å¯ŸåŠããããšã«æåããããšãæãã§ããŸãã-ã³ã³ãã³ãïŒããã¹ããšåçïŒãã屿§ãæœåºããããã®ã¢ãã«ã®éçºã«å·šå€§ãªäººçè³æºã𿩿¢°çè³æºãæè³ããç¶æ³ã¯ããã§ã«æ¯ã¹ãŠéåžžã«æ§ãããªå質ã®åäžããããããŸãæºåããããäž»ã«ååçãªç¹æ§ã
ãã®åé¡ãç¥ã£ãŠãæåã«äºéžã©ãŠã³ãã§ã¿ã¹ã¯ã3ã€ã®ãã©ãã¯ã«åå²ããæçµçã«ã®ã¿çµåããŒã¿ã»ããã圢æããŸããããããã«ãœã³åœ¢åŒã§åºå®ã¡ããªãã¯ã䜿çšããŠãã³ã³ãã³ãã¢ãã«ã®éçºã«æè³ããããŒã ã¯ãå ±åã§éçºããŠããããŒã ãšæ¯èŒããŠæå³çã«è² ããç¶æ³ã«é¥ããŸããäžéšã
ju審å¡è³ã¯ããã®äžæ£ãè£ãã®ã«åœ¹ç«ã¡ãŸãã...
ãã£ãŒãã¯ã©ã¹ã¿ãŒ
ããã¯ãFacebookããDeep Clusterã¢ã«ãŽãªãºã ãåçŸããã³ãã¹ãããäœæ¥ã«å¯ŸããŠã»ãŒæºå ŽäžèŽã§æäžãããŸããã ã¯ã©ã¹ã¿ãŒãšç»åã®åã蟌ã¿ãæ§ç¯ããããã®åæã®ããŒã¯ã¢ãããå¿ èŠãšããªãã·ã³ãã«ãªæ¹æ³ã¯ãã¢ã€ãã¢ã®æ°èŠæ§ãšææãªçµæãé äºããŸããã
ãã®æ¹æ³ã®æ¬è³ªã¯éåžžã«ç°¡åã§ãã
- æå³ã®ãããã¥ãŒã©ã«ãããã¯ãŒã¯ã§ç»åã®åã蟌ã¿ãã¯ãã«ãèšç®ããŸãã
- çµæã®ç©ºéã§ãã¯ãã«ãk-meansã§ã¯ã©ã¹ã¿ãŒåããŸãã
- ç»åã®ã¯ã©ã¹ã¿ãŒãäºæž¬ããããã®ãã¥ãŒã©ã«ãããã¯ãŒã¯åé¡åšããã¬ãŒãã³ã°ããŸãã
- åæãããŸã§ïŒ800 GPUãããå ŽåïŒããŸãã¯ååãªæéããããŸã§ãæé 2ã3ãç¹°ãè¿ããŸãã
æå°éã®åŽåã§ãOKç»åã®é«å質ãªã¯ã©ã¹ã¿ãªã³ã°ãé©åãªåã蟌ã¿ã3æ¡ç®ã®ã¡ããªãã¯å¢å ãéæããããšãã§ããŸããã
æªæ¥ãèŠã
ã©ã®ããŒã¿ã§ããäºæž¬ãæ¹åããããã®ãæã穎ããèŠã€ããããšãã§ããŸãã ããèªäœã¯ããã»ã©æªãã¯ãããŸãããæã穎ãçºèŠãããé·ãéãå±¥æŽããŒã¿ã®æ€èšŒçµæãšA / Bãã¹ãã®éã«äžå¯è§£ãªççŸã®åœ¢ã§ããçŸããªãå Žåãããã¯ã¯ããã«æªãã§ãã
ãã®çš®ã®æãäžè¬çãªæã穎ã®1ã€ã¯ãå°æ¥ã®æ å ±ã®äœ¿çšã§ãã ãã®ãããªæ å ±ã¯å€ãã®å Žåéåžžã«åŒ·åãªä¿¡å·ã§ãããæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãæå¹ã«ãªã£ãŠããå Žåãèªä¿¡ãæã£ãŠäœ¿çšãå§ããŸãã 補åã®ã¢ãã«ãäœæãããšããå°æ¥ããã®æ å ±æŒæŽ©ãé¿ããããã«ããããæ¹æ³ã§åªåããŠããŸãããããã«ãœã³ã§ã¯ãåå è ã䜿çšããã¡ããªãã¯ãäžããè¯ãæ©äŒã§ãã
æãæãããªæã穎ã¯ããããã®ãã£ãŒã«ãã«numLikesãšnumDislikesãååšããã·ã§ãŒã®æç¹ã§ãªããžã§ã¯ãã«åå¿ã«ãŠã³ã¿ãŒããã£ãããšã§ãã åããªããžã§ã¯ãã«é¢é£ããæéçã«æãè¿ã2ã€ã®ã€ãã³ããæ¯èŒããããšã§ãæåã®ã€ãã³ãã«å¯Ÿãããªããžã§ã¯ãã®åå¿ãé«ç²ŸåºŠã§å€æã§ããŸããã ããŒã¿ã«ã¯åæ§ã®ã«ãŠã³ã¿ãŒãããã€ãããããããã䜿çšãããšé¡èãªå©ç¹ãåŸãããŸããã åœç¶ãå®éã®äœ¿çšã§ã¯ããã®ãããªæ å ±ã¯å©çšã§ããŸããã
人çã§ã¯ãåæ§ã®åé¡ã«æ°ä»ããã«ã€ãŸããå¯èœæ§ããããéåžžã¯åŠå®çãªçµæããããããŸãã ããšãã°ãããŒã¯ã®æ°ã«é¢ããçµ±èšãã«ãŠã³ããããã¯ã©ã¹ïŒã ãã¹ãŠã®ããŒã¿ã«å¿ããŠããªããžã§ã¯ããåå¥ã®å±æ§ãšããŠååŸããŸãã ãŸãã¯ãåå ããŒã ã®1ã€ã§è¡ã£ãããã«ãã«ããŽãªå±æ§ãšããŠãªããžã§ã¯ãèå¥åãã¢ãã«ã«è¿œå ããŸãã ãã¬ãŒãã³ã°ã»ããã§ã¯ããã®ãããªæ©èœãåããã¢ãã«ã¯ããŸãæ©èœããŸããããã¹ãã»ããã«äžè¬åããããšã¯ã§ããŸããã
çµè«ã®ä»£ããã«
åå è ã®æ±ºå®ã«é¢ããããŒã¿ããã¬ãŒã³ããŒã·ã§ã³ãå«ããã¹ãŠã®ã³ã³ãã¹ãè³æã¯ã Mail.ru Cloudã§å ¥æã§ããŸãã ããŒã¿ã¯ããªã³ã¯ã®å¯çšæ§ãé€ããŠãå¶éãªãã«ç ç©¶ãããžã§ã¯ãã§äœ¿çšã§ããŸãã ã¹ããŒãªãŒã«ã€ããŠã¯ãæçµããŒã ã®ã¡ããªãã¯ãå«ãæçµããŒãã«ãããã«æ®ããŸãããã
- Scalaã®ãããã¿ãPython-0.7422ã®é衚瀺ããœãªã¥ãŒã·ã§ã³ã®è§£æã¯ããããå ¥æã§ããã³ãŒãã¯ãããšããã«ãããŸã ã
- ããžãã¯ã·ãã£-0.7256
- ã±ãã£ã¢-0.7226
- ããŒã 6-0.7205
- ããŒãã®3-0.7188
- ããŒã«ïŒ14-0.7167ããã³å¯©æ»å¡è³
- BezSNA-0.7147
- ãã³ã¬-0.7117
- ããŒã 5-0.7112
SNA Hackathon 2019ã¯ãã·ãªãŒãºã®ä»¥åã®ã€ãã³ããšåæ§ãããããæå³ã§æåããŸããã ããŸããŸãªåéã®ã¯ãŒã«ãªå°éå®¶ã1ã€ã®å±æ ¹ã®äžã«éããå®ãå€ãæéãéããããšãã§ããŸãããåå è èªèº«ãšçµç¹ãå©ããŠããããã¹ãŠã®äººã«æè¬ããŸãã
äœããã£ãšè¯ãã§ããã§ããããïŒ ãã¡ããããã§ãïŒ éå¬ãããåã³ã³ããã£ã·ã§ã³ã¯ãæ°ããçµéšã§ç§ãã¡ãè±ãã«ããŸããæ¬¡ã®æºåããããšãã«èæ ®ããããã§æ¢ãŸãã€ããã¯ãããŸããã SNAããã«ãœã³ã§ãäŒãããŸãããïŒ