- TOP
- ã¿ã°äžèЧ
- Anaconda
Anaconda
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
æè¡ããã°
æè¡ãåå°ã«ããŠèªåãªãã®QAãšã³ãžãã¢ãç®æãæ¬é£èŒã第6åã®ããŒãã¯ããã¹ãèªååãã§ãã ååã®èšäº ãã芧ããã ããæ¹ã¯ãåãã ãšæããŸãããç§ã¯æç³»å€§åŠåºèº«ã§ããã£ãªã¢ã®ã¹ã¿ãŒãã¯å¶æ¥è·ã§ããã å®åã§ãåçšã®ãããã¯ãã³ãŒããæžããçµéšã¯ãä»ããããŸããã ãã£ãšèšãã°ããã€ãŠã®ç§ã¯ãPythonã®ç°å¢æ§ç¯ããããããã ãã«ã1ã«æä»¥äžãèºèºããŠæãåããªããªããããªäººéã§ãããåœæã®äžåžãããPythonèå³ãããã ã£ãããªãã§å
¥ããªãã®ïŒãããããªãã£ãŠããšã¯èå³ãªãã£ãŠããšãããããšèšãããèšæ¶ããããŸãã ç§ãäžåžã ã£ãããããªããšã¯èšããªãã§ãããããæãæ°æã¡ã¯ãããããããŸãã åœæã¯æ¬åœã«äœãããããã«ããAnacondaããããã®ãããä»®æ³ç°å¢ããããã®ããå
¬åŒããã€ã³ã¹ããŒã«ã§ããPythonãããã®ãã ããããPCã«Pythonãå
¥ããŠããŸã£ãŠãå£ããŠããŸããã©ãããäžå®ã§ããã ãããªç§ããã©ã®ããã«ããŠãã¹ãèªååãšããé åã«èªä¿¡ãæã¡ããããQAãšã³ãžãã¢ãšããŠã®åå°ã«å€ããŠãã£ãã®ãã ä»åã¯ãããŒã«ãåããããšã®å
ã«ãããèšèšååããžã®çè§£ãšãããããåŸãããèŠç¹ã«ã€ããŠã話ãããŸãã èšäºäžèŠ§ïŒæè¡ãåå°ã«ããŠèªåãªãã®QAãšã³ãžãã¢ãçµã¿ç«ãŠã -ããQAã®å Žå ã第1åãå°éæ§ãã€ãªããŠãããªããããQAãšã³ãžãã¢ã®åãã€ãã ã第2åããã¹ããèšèšããå°éæ§ ã第3åããã¹ããããžã¡ã³ãã¯ãã¹ããããŒãžã£ãŒã ãã®æè¡ã§ã¯ãªã ã第4åããã¹ãããã»ã¹æ¹åïŒæèã®è£å©ç·ãšããŠã®å°éæè¡ ã第5åãå¹éïŒç°æ¥çš®çµéšãåå°ã«ãã ã第6åããã¹ãèªååïŒãèšèšååããç¥ããåœããåã®æè¡ã«ãã æ¬çš¿ã«ããããã¹ãèªåå æ¬é¡ã«å
¥ãåã«ããã®èšäºã§æ±ãããã¹ãèªååãã«ã€ããŠå®çŸ©ããŠãããŸãã äžè¬çã«ãã¹ãèªååãšããã°ããããŒã«ã䜿ã£ãŠãã¹ãå®è¡ãèªååããããšããšæããããã¡ã§ãã ããããAIã«ããã³ãŒãã£ã³ã°ãåœããåã«ãªã£ãçŸä»£ã«ãããŠãç§ã¯ããåºãæå³ãå®çŸ©ããããšæããŸãã ããã¹ããšããæŽ»åãæ§é åããå®è¡å¯èœãªããœãããŠã§ã¢ã·ã¹ãã ããšããŠèšèšã»æ§ç¯ã»éçšããæè¡ã ãã¹ãã«ãããŠãåã«ã¹ã¯ãªãããæžãããšãšãã·ã¹ãã ãšããŠæ§ç¯ããããšã¯äŒŒãŠéãªããã®ã§ãã åè
ã¯æã«æé ã®ç¿»èš³ãšãªã£ãŠããŸããŸãããåŸè
ã«ã¯ã¢ãŒããã¯ãã£ãå¿
èŠã§ãä¿å®æ§ãžã®é
æ
®ãå¿
èŠã§ããããªã«ãã ããã¹ããã®ãã®ãžã®æ·±ãçè§£ã ãå¿
èŠã§ãã ãã€ãŠã¯ãã¹ãèªååã¹ã¯ãªãããæžãã ãã§ãç«æŽŸãªããã¹ãèªååãšã³ãžãã¢ãã§ããã ãããã2026幎1æçŸåšãAIã¯ã¹ã¯ãªãããæžãããšã¯ã§ããŸããããããžã§ã¯ãã®ã³ã³ããã¹ãã«é©ããããã¹ãã·ã¹ãã ãã®éåçã人éã®è£å©ãªãã«ããããžã§ã¯ãã«æé©åãããåœ¢ã§æãããšã¯ã§ããŸããã ãã® ããã¹ãã·ã¹ãã ãèšèšããæè¡ã ããããæ¬çš¿ã§äŒããããã¹ãèªååã®æ¬è³ªã§ãã ããŒã«ãéããŠãæ®éçãªèª²é¡ããåŠã¶ ç§ããã¹ãèªååãåŠã³å§ããåœåãé¢å¿ã¯ãã©ããã£ãŠåãããããšããHowã«ãããŸããã åœåã¯æžããã³ãŒããããå£ããèŸãããæã«ãªã£ããèªåãã¹ããåããŠãªãæ²ãã¿ãå³ãã£ãŠããããšãèŠããŠããŸãããããããPage Object ModelãCIã®åŠç¿ãæ·±ããPlaywrightãªã©ã®ã¢ãã³ãªããŒã«ã®èšèšææ³ã«è§Šããã«ã€ããŠãèŠç¹ãå€ãã£ãŠãããŸããã èªååããŒã«ããã¶ã€ã³ãã¿ãŒã³ã¯ãåãªã䟿å©ãªæ©èœã®å¯ãéãã§ã¯ãããŸããã ãããã¯ã ãã¹ã掻åãæ±ãããæ®éçãªèª²é¡ããžã®è§£æ±ºæ¹æ³ ãã®ãã®ã§ããã äŸãã°ãWebã®E2Eãã¹ãã§ã¯ãåŸ
æ©åŠçããé »ç¹ã«èª²é¡ã«ãªããŸãã ããã¯ããã¹ãå®è¡ç°å¢ããããã¯ãŒã¯ã®ãäžç¢ºå®æ§ããšããã«åãåãããšãããWebã®èªåãã¹ãã«ãããé£ããããŒãã§ãã ãŸããUI倿Žã®ãã³ã«ãã¹ãä¿®æ£ã«è¿œãããçµéšããFlakyãªãã¹ããžã®å¯Ÿå¿ã¯ããŸãã«ãä¿å®æ§ãã®èª²é¡ãã®ãã®ã§ããã åªããããŒã«ã«ã¯ããããã課é¡ã«å¯Ÿããäžè²«ããå顿èãææ³ã蟌ããããŠããŸãã ããªãããã®æ©èœãããã®ãïŒãããªãããã®èšèšãªã®ãïŒã ãã®èæ¯ã«ããææ³ãçè§£ããããšã¯ãåã«ããŒã«ã®äœ¿ãæ¹ãèŠããã ãã§ãªãããã¹ããã®ãã®ã«å¯Ÿããè§£å床ãäžæ°ã«é«ããŠãããŸãã èªååæè¡ãåŠã¶ããšã¯ãã³ãŒãã£ã³ã°ã¹ãã«ã磚ãã ãã§ãªãããããããã¹ãã®æ§é çãªèª²é¡ãæ·±ãçè§£ããããã»ã¹ã§ããããŸãã ããã¯E2Eãã¹ãããŒã«ãéããŠãèªåããšãšãªã課é¡ãšãããããœãããŠã§ã¢ã§è§£æ±ºãããšããããšããªã¢ã«ã«æããç¬éã§ããã ãèšèšååããæè¡çãªèªä¿¡ãããã ãããã¯ãã³ãŒããæžããããšã®ãªãç§ããæè¡çãªè°è«ã«å ãããããã«ãªã£ãæå€§ã®èŠå ã¯ããèšèšååããç¥ã£ãããšã§ãã èªåãã¹ããæžããŠãããã¡ã«ããåãã°ãããã ãã®ã³ãŒãã«éçãæããæ°ãã€ããŸãããèªåãã¹ãã®ã³ãŒãããŸãããœãããŠã§ã¢ã ãšããããšã§ãã ããã«ã¯ãœãããŠã§ã¢èšèšã®åçååãé©çšãããŸããç¹ã«éèŠã ã£ãã®ããé¢å¿ã®åé¢ãããåäžè²¬ä»»ã®ååããšãã£ãæŠå¿µã§ãã ãã¹ãã³ãŒãã®è¯ãæªããèšèªåã§ãã ãããã®ååãæèããããã«ãªã£ãããšã§ãç§ã¯ã³ãŒããããªããšãªãåããã§ã¯ãªããæ§é ãããæå³ãã§æããããããã«ãªããŸããã äŸãã°ã衚é¢çãªçè§£ããããŠããªãç§ã§ã¯ãçæAIãä»è
ãæžãããã¹ãã³ãŒãã«å¯ŸãããåããŠããããOKããšããèšããªãã£ããšæããŸãã ãããä»ã¯ãéåæãèªåèªèº«ã§èšèªåããããã¹ãã®ä¿å®æ§ãããæå³ããšãã芳ç¹ããã¬ãã¥ãŒãã§ããããã«ãªããŸããã ããã®ã¢ãµãŒã·ã§ã³ã¯ãã®ãã¹ãã§æ¬åœã«ç¢ºèªãããå
容ã§ããããïŒã ããã®ã³ãŒãã¯åé¢ããŠå
±éåããããšãå¯èœã§ã¯ãªãã§ããããïŒã ãããŒã«ãç®æãæ¹åæ§ã«åã£ãŠãããããè¯ãæ§é ããå°æ¥ã®å€æŽã«èãããããã倿ããããã®èŠç¹ã¯ãããŒã«ã®ææ³ããèšèšååãåŠã¶ããšã§é€ããŸãã ãã®èŠç¹ãæãŠãããšããç§ã®æè¡çãªèªä¿¡ã®æºæ³ãšãªããŸããã èªååããåœããåã®éžæè¢ãã«ãã èšèšååãç¥ããæè¡çãªèŠéããç«ã€ããã«ãªããšããã¹ãèªååã«å¯Ÿããå¿ççãªããŒãã«ãæ¶ãå»ããŸããã ãããŠããã¹ãèªååã¯ç¹å¥ãªé åã§ã¯ãªãããåœããåã®éžæè¢ãã®äžã€ã«ãªã£ãŠããããšã«æ°ãã€ããŸããã ãéžæã§ããããšãã匷㿠ä»ã®ç§ã¯ãç°¡åãªã¹ã¯ãªããã§ããã°æ§æãèããŠãµããšèªåã§æžãããšãã§ããŸãã(ä»ã§ã¯çæAIã䜿ããŸãã) ãããã¯ãè€éãªãã¹ãã§ãã£ãŠãããã®æ§é ãèªã¿è§£ããä¿å®ã®ãªã¹ã¯ãèŠç©ããããšãã§ããŸãã éèŠãªã®ã¯ãå
šãŠãèªååããããšãã§ã¯ãããŸããã ãããã¯æåã§ããã¹ãããèªååãã¹ããããšããåãã«å¯Ÿããæè¡çãªè£ä»ããæã£ãäžã§èªä¿¡ãæã£ãŠæ€èšã§ããç¶æ
ã«ããããšã§ãã èªååãã§ããããæåãã§ããããä»åã¯ãã¡ãããã¿ãŒãªéžæã ããšæ ¹æ ãæã£ãŠèª¬æã§ããããšã ããããQAãšã³ãžãã¢ãšããŠã®å¹
ãåºããŠãããšèããŠããŸãã å°éæ§ã®çµã¿åãã æåŸã«ããã®æè¡ãä»ã®å°éæ§ãšã©ãçµã³ã€ããè§ŠããŠãããŸãã ãã¹ãèšèšãšã®çµã¿åãã èªååã®æ§é ïŒã¢ãŒããã¯ãã£ïŒãçè§£ããããšã§ããã¹ãèšèšã®è³ªãå€ãããŸãã ãŸãç§ã匷ãæããŠããã®ã¯ã èªåãã¹ããæžãããšã«ãã£ãŠãã¹ãã±ãŒã¹ã®æ§è³ªãçè§£ã§ããããã«ãªã£ãããšã§ãã èªååãããããã¹ãã±ãŒã¹ã¯ãåŸã
ã«ããŠãåææ¡ä»¶ãæç¢ºãã§ã責åãåäžããªã人éã«ãšã£ãŠãåããããããã¹ãã±ãŒã¹ã§ãã ãé¢å¿ã®åé¢ããšããæèã®è£å©ç·ã¯ãèªåã»æåãåãããå
ç¢ãªãã¹ãèšèšãè¡ãããã®åŒ·åãªæŠåšã«ãªããŸãã ãã¹ããããžã¡ã³ã ãã¹ããããžã¡ã³ãã«ãããŠã¯ãROIã®å€æãæŠç¥çã«èªååãåãå
¥ãããã©ããã®å€æãããã粟緻ã«ãªããšèããŠããŸããèªååã³ãŒãã®ãä¿å®ã³ã¹ããããæè¡çè² åµãã®ãªã¹ã¯ãå®äœéšã«åºã¥ããŠçè§£ããŠãããããéåºŠãªæåŸ
ãæ²èŠ³ãããã ãããžã§ã¯ãã®ç¶æ³ã«åãããŠé©åãªã¿ã€ãã³ã°ã§èªååãšããéžæè¢ãéžã¹ãããã«ãªããŸããã ãããã« ãã€ãŠã®ç§ã®ããã«ããæç³»ã ãããç°å¢æ§ç¯ããæãããšå°»èŸŒã¿ããŠããæ¹ãå€ããããããŸããã ç§ã«ãšã£ãŠããã¹ãèªååãåŠã¶ããšã¯ãããæå³ã§ãããã°ã©ããŒã«ãªãããšããšå矩ã§ããã ãããããã®ããŒãã«ã¯ãæ³åããŠããããããã£ãšäœããã®ã§ããã ãããŠãã®ããŒãã«ãé£ã³è¶ããããšã«ãã£ãŠãããã°ã©ããŒãšããŠããããã§ããããšã®å°é£ããšããã®åã¿ãç®ã®åœããã«ããŸããã åæ°ãåºããŠãã®äžæ©ãèžã¿åºããŠã¿ãã°ãããã«ã¯ã·ã¹ãã ãåãä»çµã¿ããå
人ãã¡ãç¯ãäžãããœãããŠã§ã¢èšèšãååããè€éãªçŸå®ãçãæãããã®ãéããã¹ããšãªã£ãŠãããã¯ãã§ãã ãã¹ãèªååãåŠã¶ããšã¯ããã®ãéããã¹ããçºèŠããæé«ã®ãã£ããã«ãªãã¯ãã§ãã ãã®å°ããªäžæ©ããããªãã®QAãšã³ãžãã¢ãšããŠã®åŒ·åºãªåå°ãšãªããšèããŠããŸãã ãé£èŒãæè¡ãåå°ã«ããŠèªåãªãã®QAãšã³ãžãã¢ãçµã¿ç«ãŠã -ããQAã®å Žå ã第1åãå°éæ§ãã€ãªããŠãããªããããQAãšã³ãžãã¢ã®åãã€ãã ã第2åããã¹ããèšèšããå°éæ§ ã第3åããã¹ããããžã¡ã³ãã¯ãã¹ããããŒãžã£ãŒã ãã®æè¡ã§ã¯ãªã ã第4åããã¹ãããã»ã¹æ¹åïŒæèã®è£å©ç·ãšããŠã®å°éæè¡ ã第5åãå¹éïŒç°æ¥çš®çµéšãåå°ã«ãã ã第6åããã¹ãèªååïŒãèšèšååããç¥ããåœããåã®æè¡ã«ãã The post ã第6åããã¹ãèªååïŒãèšèšååããç¥ããåœããåã®æè¡ã«ãã first appeared on Sqripts .
ã¯ããã« çãããããã«ã¡ã¯ïŒAIã·ã¹ãã éšã®S.Tã§ãã éçºãããäžã§ãã¡ããšèããªããã°ãããªããã¹åé¡ã ä»åã¯Pythonã®ãã¹è§£æ±ºæ³ãèããŠã¿ãŸããã ãã¹è§£æ±ºãšã¯? äŸãã°æ¬¡ã®äŸæãèããŸãã import hashlibimport pandas ãã®ãšããimportãããåã¢ãžã¥ãŒã«ã¯ãå®éã«ã¯ãã£ã¹ã¯ã®ã©ããã®ãã¡ã€ã«ãšããŠä¿åãããŠããŸãã ã©ãã®ãã¡ã€ã«ããèªã¿èŸŒãŸãããã¯ã __file__ 屿§ãåç
§ããã°ç¢ºèªã§ããŸãã print(hashlib.__file__)# => /home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/hashlib.py# (ããããšã®pythonã®ãã«ãã€ã³ã©ã€ãã©ãªãèªã¿èŸŒãŸãã)print(pandas.__file__)# => /home/xxxxx/projects/yyyyy/.venv/lib/pythonX.Y/site-packages/pandas/__init__.py# (pipenvã«ãã£ãŠãããžã§ã¯ãã«ãŒãã«çæãããä»®æ³Pythonç°å¢) ãã® import <ã©ã€ãã©ãªå> ãšåŒã³åºãããšãã«ãå®éã«ã¯ãã®ã©ã€ãã©ãªãã©ãããèªã¿èŸŒãããæ±ºããäœæ¥ãã ãã¹è§£æ±º (Path Resolution)ããšãããŸãã ãã¹ã«ã¯è§£æ±ºé ããã Pythonã¯ãã©ã€ãã©ãªãã€ã³ããŒããããšãã«ãããããŸã£ãé çªã§ããã®ã©ã€ãã©ãªããªãããæ¢ãã«è¡ããŸãã ãã®é çªã¯ãsys.pathã®å€ãèŠããšç¢ºèªã§ããŸãã import syssys.path[ '', # ã«ã¬ã³ããã£ã¬ã¯ã㪠'/home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonXY.zip', '/home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y', '/home/xxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/lib-dynload', '/home/xxxxx/projects/my-project/.venv/lib/pythonX.Y/site-packages'] äžèšã®äŸã§ã¯ãäŸãã° import pandas ãšå®è¡ãããšãã¯ããã®ãªã¹ãã®äžããé çªã«pandasããããã©ãããæ¢ãã«è¡ããŸãã 解決é ã®æ±ºãŸãæ¹ ãã®sys.pathã§ãããPythonãå®è¡ããç°å¢ããPythonãã€ã³ã¹ããŒã«ããå Žæã«ãã£ãŠå€ãããŸããã§ã¯ãã©ã®ããã«ããŠãã®å€ã決ãŸãããšãããšãPythonèµ·åæã«ã次ã®é çªã§sys.pathã«å
é ããå€ã远å ãããŠãããŸãã â ã«ã¬ã³ããã£ã¬ã¯ããªïŒPythonãèµ·åãããšãã«å±
ãå ŽæïŒ + â¡ ç°å¢å€æ°PYTHONPATHã®å€ + ⢠ã€ã³ã¹ããŒã«å Žæã«äŸåãããã¹ + ⣠.pthã«ãã£ãŠè¿œå ããããã¹ â ã«ã¬ã³ããã£ã¬ã¯ã㪠ããã¯ãããã®ãŸãŸã§ãç¡æ¡ä»¶ã§å
é ã«è¿œå ãããŸããã€ãŸããimport hogehogeãšå®è¡ãããšãã«ããŸãã¯ã«ã¬ã³ããã£ã¬ã¯ããªã«hogehogeããªãã確èªãã«è¡ããŸãã â¡ ç°å¢å€æ°PYTHONPATHã®å€ Pythonãèµ·åããéã«ãç°å¢å€æ°PYTHONPATHã«ãã£ã¬ã¯ããªã®ãã¹ãèšå®ããŠãããšããã®å Žæã解決å
ã®åè£ã«å ããããšãã§ããŸããå ããããäœçœ®ã¯ãâ ã®ã«ã¬ã³ããã£ã¬ã¯ããªã®åŸã§ãã $ export PYTHONPATH=/home/xxxxxx/my-packages$ python>>> import sys>>> sys.path['', '/home/xxxxxx/my-packages', '/home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonXY.zip', ....(以äžç¥)] ãŸããLinuxç³»OSã®å Žåã¯:(ã³ãã³)ã§ãWindowsã®å Žåã¯;(ã»ãã³ãã³)ã§åºåãããšã§è€æ°ã®ãã¹ã解決å
ã®åè£ã«å ããããšãã§ããŸãã $ export PYTHONPATH=/home/xxxxxx/my-packages:/home/xxxxxx/my-tools$ python>>> import sys>>> sys.path['', '/home/xxxxxx/my-packages', '/home/xxxxxx/my-tools', '/home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonXY.zip', ....(以äžç¥)] å人éçºããããŒã«ãã©ããå¥ã®å Žæã«ãã£ãŠãããã䜿ãããå Žåã¯ããã®ãªãã·ã§ã³ã䜿ããŸãããã ⢠ã€ã³ã¹ããŒã«å Žæã«äŸåãããã¹ ããã¯PythonãOSã«ã€ã³ã¹ããŒã«ããéã«ãã©ã®ãã¹ã«ã€ã³ã¹ããŒã«ãããã«ãã£ãŠå€ããå€ã§ããå®è¡ããPythonã®ããŒãžã§ã³ããAnacondaãªã©ã®ãªããžããªãä»®æ³ç°å¢ã®éãã«ãã£ãŠæ±ºãŸããŸãã å
·äœçã«ã¯ãsys.prefixããä»å®è¡ããŠããPythonã®ã€ã³ã¹ããŒã«ãããŠãããã£ã¬ã¯ããªã§ããã®å€ãããšã«ã次ã®ãããªãã¹ã远å ãããŠãããŸãã <sys.prefixã®å€>/lib/pythonX.Y # äž»èŠã©ã€ãã©ãª(`os`ãšã`sys`ãšã)<sys.prefixã®å€>/lib/pythonX.Y/lib-dynload # Cã©ã€ãã©ãª<sys.prefixã®å€>/lib/pythonX.Y/site-packages # ãµãŒãããŒãã£ã©ã€ãã©ãª ⣠.pthã«ãã£ãŠè¿œå ããããã¹ ããã¯ããŸã䜿ãããšã¯ãªããšæããŸãããsite-packageãã£ã¬ã¯ããªã®åãã£ã¬ã¯ããªã«ããã¹ãéãããå Žåã«ãsite-packageãã£ã¬ã¯ããªå
ã«æ¡åŒµåã.pthã®ãã¡ã€ã«ã眮ããããã«ãã¹ãéãããåãã£ã¬ã¯ããªãæžããŠãããšãããã解決å
ã®åè£ã«å ããããšãã§ãããšãããã®ã§ãã 詊ãã«ãhogeãšãããã£ã¬ã¯ããªãsite-packagesã«è¿œå ããããã«ãã¹ãéããŠã¿ãŸãã $ echo "hoge" > /home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages/mypath.pth$ mkdir /home/xxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages/hoge$ python>>> import sys>>> sys.path['', '..(äžç¥)..', '/home/xxxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages', '/home/xxxxxx/.pyenv/versions/X.Y.Z/lib/pythonX.Y/site-packages/hoge'] äžèšã®éããäœæããhogeãã£ã¬ã¯ããªã«ãã¹ãéããŸããã ã¡ãªã¿ã«ã.pthã«è¿œå ãããã£ã¬ã¯ããªãååšããªãå Žåãsys.pathã«ã¯è¿œå ãããªãããã§ããã¡ãã£ãšãããããããæããŸãã ãŸãšã ãšããããã§ããã¹è§£æ±ºã«ã€ããŠä»åã¯è©³ããèŠãŠã¿ãŸããã ãããïŒæ£ããimportãããªãã»ã»ããšæã£ãæã«ãã©ã察åŠããã°ããããèãããšããããã§è§£èª¬ããããšã圹ã«ç«ã£ãŠãããã°ãšæããŸãã ããŸã åœç€Ÿã®ãã£ãªã¢ã¢ããã€ã¶ãŒããWEBäºæ¥äŒç€Ÿã«èå³ã¯ãããã©ãäœããå§ããã¹ããããããªããã転è·ã¯èããŠããªããã©ãä»ã®ç°å¢ãä»åŸã«æŽ»ããã®ãããããªãããªã©ãä»åŸã®ããã«æ
å ±åéãããããšããæ¹ã«å°ãã§ãåèã«ãªãæ
å ±ããŸãšããŠããŸããè¯ããã°ã芧ãã ããïŒ ###card_post_id=2375###
ã¯ããã« ããã«ã¡ã¯ãITãœãªã¥ãŒã·ã§ã³éšïŒããžã¿ã«ãã¯ãããžãŒæŠç¥æ¬éšïŒã®S.Dã§ãã ä»åã¯å°æ£AIãèªåã§äœã£ãŠã¿ãã®ã§ãšã³ãžãã¢ããã°ã§ç޹ä»ããŸãïŒç®æšã¯ã æ£èããŒã¿ãåŠç¿ãããŠãå®éã«å¯Ÿå±ã§ããïŒã«ãŒã«ã«éåããªãïŒããã«ãããããš ãšããŸãã ç°å¢ã¯ä»¥äžã§æ§ç¯ããŸããã ç°å¢ ããŒãžã§ã³ OS Windows Pro 64bit CPU Ryzen 3900X GPU Geforce RTX2060Super Python 3.8.5 CUDA 10.1 cuDNN 7.6.5 Chainer 7.7.0 python-shogi 1.0.10 ãã®èšäºã§ã¯Pytorch ã§ã¯ãªã Chainerã䜿çšããŸããPytochã§ããæ§ç¯å¯èœã§ãããŸããå¥ã®æ©äŒãããã°Pytorchã§å®è£
ãããã®ãã玹ä»ã§ããã°ãšæããŸãã §0. ç°å¢æ§ç¯ ãã®ç« ã§ã¯ãç°å¢æ§ç¯ãããŸãã 0.1 Visual Studio ãã«ãããŒã« 2015ã®ã€ã³ã¹ããŒã« çŸç¶ã®ææ°ã®Visual Studioã¯ã2019ã§ããã2019ã§ã¯æ£åžžã«åäœããªãå ±åãå€ãã®ã§2015ãã€ã³ã¹ããŒã«ããŸãã Microsoft Build Tools 2015 Update 3ããããã€ã³ã¹ããŒã©ãããŠã³ããŒãã§ããŸãã 0.2 CUDAã®ã€ã³ã¹ããŒã« NVIDIA ããã€ã³ã¹ããŒã©ãããŠã³ããŒãã§ããŸãã 2020.11.24æç¹ã§ãææ°ããŒãžã§ã³ã¯11.1ã§ãã ãããã䜿çšãããœãããŠã§ã¢ã«å¯Ÿå¿ããããŒãžã§ã³ãã€ã³ã¹ããŒã«ããŸãã çŸç¶TensorFlowãChainerãªã©ã察å¿ããããŒãžã§ã³ã¯ã10.0, 10.1, (10.2)ã§ãã ç§ã¯ã10.1ãã€ã³ã¹ããŒã«ããŸããã 0.3 cuDNNã®ã€ã³ã¹ããŒã« NVIDIA ãããzipãã¡ã€ã«ãããŠã³ããŒãã§ããŸãã 2020.11.24æç¹ã§ãææ°ããŒãžã§ã³ã¯8.0.5ã§ãã ãããã䜿çšãããœãããŠã§ã¢ã«å¯Ÿå¿ããããŒãžã§ã³ãããŠã³ããŒãããŸãã çŸç¶TensorFlowãChainerãªã©ã察å¿ããããŒãžã§ã³ã¯ã7.6以å(8.0以éããã¶ã倧äžå€«)ã§ãã ç§ã¯ã7.6.5ã§åãããŠããŸãã ãã¡ã€ã«ãè§£åããããNVIDIA GPU Computing Toolkitã«ãã¡ã€ã«ãã³ããŒããŸã ç§ã®å Žåã¯ã C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 ã«ãã¡ã€ã«ãã³ããŒããŸããã ç»åã«ããããã¡ã€ã«ãšãã©ã«ããã³ããŒããŠãäžã®ãã©ã«ãã«ç§»ããŸãã 0.4 Chainerã®ã€ã³ã¹ããŒã« Chainer ãã€ã³ã¹ããŒã«ããŸãã Chainerã¯ãæ©æ¢°åŠç¿ã®Pythonãã¬ãŒã ã¯ãŒã¯ã§ããæ¥æ¬äŒæ¥ã®æ ªåŒäŒç€ŸPreferred Networksããç ç©¶ãéçºãããŸãããçŸåšã¯ãFaceBookã®Pythonãã¬ãŒã ã¯ãŒã¯ã§ãããPytorchã«åžåãããŸããã 0.4.0 Pythonã®ã€ã³ã¹ããŒã« Python ã®ã€ã³ã¹ããŒã« ä»åã¯ãPythonã¯çç¥ããŸãã Pythonã¯ã3.6以éã3.8ãŸã§ã§ããã°æ£åžžã«åäœããŸãã Anacondaã§ã倧äžå€«ã§ãã 0.4.1 ãã®ä»ã¢ãžã¥ãŒã« pip install -U pip setuptools pip install -U jupyterlab jupyter jupyter-console jupytext spyder matplotlib numpy 0.4.2 Cupyã®ã€ã³ã¹ããŒã« Chainerã§ãGPUã䜿çšããããã«ã¯ãCupyãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã pip install cupy-cuda101 確èª: ãšã©ãŒãåºãªããã°å€§äžå€«ã§ãã ãšã©ãŒãåºãå ŽåãCuPyã®ã€ã³ã¹ããŒã«ãããŸãã§ããŠããªãã§ããæ±äº¬å€§åŠ éåç 究宀 ã«è©³ããæžããŠããã®ã§ããšã©ãŒãåºãŠé²ããªãå Žåã¯åèã«ããŠãã ããã 0.4.3 Chainerã®ã€ã³ã¹ããŒã« pip install chainer==7.7 0.4.4 Chainerã®åäœç¢ºèª Chainerã®Github ããããµã³ãã«ãèœãšããŠããŸãã cd chainer-7.7.0 python examples\mniost\train_mnist.py -g 0 ãªãã·ã§ã³ã¯ãgpuã®çªå·ã§ãã-1ã§ãgpuã䜿ããã«èšç®ã§ããŸãã 0.5 åŠç¿ããŒã¿ æ±äº¬å€§åŠå
ã®ãµãŒããŒãå°æ£ã³ã³ãã¥ãŒã¿å¯Ÿå±å Ž(Flood gate)ã®ããŒã¿ã䜿ããŸãã åŸã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ãåŠç¿ãããããã®æ£èãçšæããŸãã ä»åã¯ããFlood gateãããææ°ã®2020幎ã®å
šæ£èããŒã¿ãcsa圢åŒã§èœãšããŸãã http://wdoor.c.u-tokyo.ac.jp/shogi/x/wdoor2017.7z äžã¯ã2017å¹Žã®æ£èããŒã¿ã§ããã(webãµã€ãæŽæ°ãããŠããªã),2017â2020ã«ããã°èœãšããŸãã(æžããŠããã®ãâŠ?) http://wdoor.c.u-tokyo.ac.jp/shogi/x/wdoor2020.7z 7zipã§è§£åããŠãã ããã å
šæ£è: 13äžä»¶ããã(çŸç¶ãªã®ã§ãä»ãå¢ããŠããŸã) ãã®ããšãåŠç¿ããŒã¿ãšããŠé©åã§ãªãããŒã¿ãããããããã®ã§ãææ°ã50æä»¥äžã§ãã¬ãŒãã£ã³ã°ã3000以äžã®ãã®ã«éå®ããŠãåŠç¿ããŒã¿ãšããŸããããã蟺ã¯ãã©ããªæ¹æ³ã§ãããã§ãã §1. ãã¥ãŒã©ã«ãããã¯ãŒã¯ ããããã¯ãæèéšåãå®è£
ããŸãã å
·äœçã«ãå±é¢ããæãæãäºæž¬ããããã«ããŸãã ã³ãŒãæ§æ \ïŒpolicynetworkïŒ(root dir) | setup.py | train_policy.py | kifulist_train.txt | kifulist_test.txt | kifulist_train_1000.txt | kifulist_test_100.txt |- ïŒmodelïŒ | | model_policy | |- ïŒpydlshogiïŒ | | common.py | | features.py | | read_kifu_.py | | | |- ïŒnetwork> | | policy.py | |- ïŒutilsïŒ | | fileter_csa.py | | make_kifu_list.py | | plot_log.py 1.1 ã¢ãžã¥ãŒã«ã€ã³ã¹ããŒã« import setuptoolssetuptools.setup( name = 'python-dlshogi', version = '0.0.1', author = 'SudaDaisuke', # åå packages = ['pydlshogi'], scripts = [],) ã¹ã¯ãªãããå¥ã®ã¹ã¯ãªãããããimportã§ããããã«ç»é²ããŸãã ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã§äžã®ã³ãã³ããæã¡ãŸãã pip install --no-cache-dir -e . 1.2 Policy Network å°æ£ã®æãæãäºæž¬ããããã®ããã¥ãŒã©ã«ãããã¯ãŒã¯ãæ§æããŸãã Alpha Go ã§ã¯ãæã¡æãæ¢çŽ¢ãããPolicy Networkããšå±é¢ãè©äŸ¡ãããValue NetworkããšããïŒã€ã®æ·±å±€ãã¥ãŒã©ã«ãããã¯ãŒã¯ã§æ§æãããŠããŸãã å°æ£ã®æãæãäºæž¬ããããã«ã Alpha Go ã§æ¡çšãããæ¹æ³ãæ¹è¯ããŠã13å±€ã®ç³ã¿èŸŒã¿ãã¥ãŒã©ã«ãããã¯ãŒã¯ãæ§æããŸãã ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®ä»æ§ é
ç® å€ ãã£ã«ã¿ãŒãµã€ãº 3x3 äžéå±€ã®ãã£ã«ã¿ãŒãµã€ãº 192 ã¹ãã©ã€ã 1 ããã£ã³ã°å±€ 1 ããŒãªã³ã°å±€ 1 掻æ§å颿° ReLU 1.3 Policy Network å®è£
äžã®èšèšãããšã«å®è£
ããŠãããŸãã pydlshogi\network\policy.pyfrom chainer import Chainimport chainer.functions as Fimport chainer.links as Lfrom pydlshogi.common import *ch = 192class PolicyNetwork(Chain): def __init__(self): super(PolicyNetwork, self).__init__() with self.init_scope(): self.l1=L.Convolution2D(in_channels = 104, out_channels = ch, ksize = 3, pad = 1) self.l2=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l3=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l4=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l5=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l6=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l7=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l8=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l9=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l10=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l11=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l12=L.Convolution2D(in_channels = ch, out_channels = ch, ksize = 3, pad = 1) self.l13=L.Convolution2D(in_channels = ch, out_channels = MOVE_DIRECTION_LABEL_NUM, ksize = 1, nobias = True) self.l13_bias=L.Bias(shape=(9*9*MOVE_DIRECTION_LABEL_NUM)) def __call__(self, x): h1 = F.relu(self.l1(x)) h2 = F.relu(self.l2(h1)) h3 = F.relu(self.l3(h2)) h4 = F.relu(self.l4(h3)) h5 = F.relu(self.l5(h4)) h6 = F.relu(self.l6(h5)) h7 = F.relu(self.l7(h6)) h8 = F.relu(self.l8(h7)) h9 = F.relu(self.l9(h8)) h10 = F.relu(self.l10(h9)) h11 = F.relu(self.l11(h10)) h12 = F.relu(self.l12(h11)) h13 = self.l13(h12) return self.l13_bias(F.reshape(h13, (-1, 9*9*MOVE_DIRECTION_LABEL_NUM))) 1.2 åŠç¿åŠç 1.2.1 å®è£
train_policy.pyimport numpy as npimport chainerfrom chainer import cuda, Variablefrom chainer import optimizers, serializersimport chainer.functions as Ffrom pydlshogi.common import *from pydlshogi.network.policy import PolicyNetworkfrom pydlshogi.features import *from pydlshogi.read_kifu import *import argparseimport randomimport pickleimport osimport reimport loggingparser = argparse.ArgumentParser()parser.add_argument('kifulist_train', type=str, help='train kifu list')parser.add_argument('kifulist_test', type=str, help='test kifu list')parser.add_argument('--batchsize', '-b', type=int, default=32, help='Number of positions in each mini-batch')parser.add_argument('--test_batchsize', type=int, default=512, help='Number of positions in each test mini-batch')parser.add_argument('--epoch', '-e', type=int, default=1, help='Number of epoch times')parser.add_argument('--model', type=str, default='model/model_policy', help='model file name')parser.add_argument('--state', type=str, default='model/state_policy', help='state file name')parser.add_argument('--initmodel', '-m', default='', help='Initialize the model from given file')parser.add_argument('--resume', '-r', default='', help='Resume the optimization from snapshot')parser.add_argument('--log', default=None, help='log file path')parser.add_argument('--lr', type=float, default=0.01, help='learning rate')parser.add_argument('--eval_interval', '-i', type=int, default=1000, help='eval interval')args = parser.parse_args()logging.basicConfig(format='%(asctime)s\t%(levelname)s\t%(message)s', datefmt='%Y/%m/%d %H:%M:%S', filename=args.log, level=logging.DEBUG)model = PolicyNetwork()model.to_gpu()optimizer = optimizers.SGD(lr=args.lr)optimizer.setup(model)# Init/Resumeif args.initmodel: logging.info('Load model from {}'.format(args.initmodel)) serializers.load_npz(args.initmodel, model)if args.resume: logging.info('Load optimizer state from {}'.format(args.resume)) serializers.load_npz(args.resume, optimizer)logging.info('read kifu start')# ä¿åæžã¿ã®pickleãã¡ã€ã«ãããå Žåãpickleãã¡ã€ã«ãèªã¿èŸŒã# train datetrain_pickle_filename = re.sub(r'\..*?$', '', args.kifulist_train) + '.pickle'if os.path.exists(train_pickle_filename): with open(train_pickle_filename, 'rb') as f: positions_train = pickle.load(f) logging.info('load train pickle')else: positions_train = read_kifu(args.kifulist_train)# test datatest_pickle_filename = re.sub(r'\..*?$', '', args.kifulist_test) + '.pickle'if os.path.exists(test_pickle_filename): with open(test_pickle_filename, 'rb') as f: positions_test = pickle.load(f) logging.info('load test pickle')else: positions_test = read_kifu(args.kifulist_test)# ä¿åæžã¿ã®pickleããªãå Žåãpickleãã¡ã€ã«ãä¿åããif not os.path.exists(train_pickle_filename): with open(train_pickle_filename, 'wb') as f: pickle.dump(positions_train, f, pickle.HIGHEST_PROTOCOL) logging.info('save train pickle')if not os.path.exists(test_pickle_filename): with open(test_pickle_filename, 'wb') as f: pickle.dump(positions_test, f, pickle.HIGHEST_PROTOCOL) logging.info('save test pickle')logging.info('read kifu end')logging.info('train position num = {}'.format(len(positions_train)))logging.info('test position num = {}'.format(len(positions_test)))# mini batchdef mini_batch(positions, i, batchsize): mini_batch_data = [] mini_batch_move = [] for b in range(batchsize): features, move, win = make_features(positions[i + b]) mini_batch_data.append(features) mini_batch_move.append(move) return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))), Variable(cuda.to_gpu(np.array(mini_batch_move, dtype=np.int32))))def mini_batch_for_test(positions, batchsize): mini_batch_data = [] mini_batch_move = [] for b in range(batchsize): features, move, win = make_features(random.choice(positions)) mini_batch_data.append(features) mini_batch_move.append(move) return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))), Variable(cuda.to_gpu(np.array(mini_batch_move, dtype=np.int32))))# trainlogging.info('start training')itr = 0sum_loss = 0for e in range(args.epoch): positions_train_shuffled = random.sample(positions_train, len(positions_train)) itr_epoch = 0 sum_loss_epoch = 0 for i in range(0, len(positions_train_shuffled) - args.batchsize, args.batchsize): x, t = mini_batch(positions_train_shuffled, i, args.batchsize) y = model(x) model.cleargrads() loss = F.softmax_cross_entropy(y, t) loss.backward() optimizer.update() itr += 1 sum_loss += loss.data itr_epoch += 1 sum_loss_epoch += loss.data # print train loss and test accuracy if optimizer.t % args.eval_interval == 0: x, t = mini_batch_for_test(positions_test, args.test_batchsize) y = model(x) logging.info('epoch = {}, iteration = {}, loss = {}, accuracy = {}'.format(optimizer.epoch + 1, optimizer.t, sum_loss / itr, F.accuracy(y, t).data)) itr = 0 sum_loss = 0 # validate test data logging.info('validate test data') itr_test = 0 sum_test_accuracy = 0 for i in range(0, len(positions_test) - args.batchsize, args.batchsize): x, t = mini_batch(positions_test, i, args.batchsize) y = model(x) itr_test += 1 sum_test_accuracy += F.accuracy(y, t).data logging.info('epoch = {}, iteration = {}, train loss avr = {}, test accuracy = {}'.format(optimizer.epoch + 1, optimizer.t, sum_loss_epoch / itr_epoch, sum_test_accuracy / itr_test)) optimizer.new_epoch()logging.info('save the model')serializers.save_npz(args.model, model)logging.info('save the optimizer')serializers.save_npz(args.state, optimizer) äžã®ã³ãŒãã¯ãåŠç¿éšåãå®è£
ããŠããŸãã å
·äœçã«ã ãããªæãã«å®è£
ãããŠããŸãã 1.2.2 åŠç¿å®è¡ å®éã«åŠç¿ãå®è¡ãããšããããªæãã§ãæå€±èšç®ãšãåŠç¿ããŒã¿ããåŸãããçµæãšã®ç²ŸåºŠã§ãã §2. å°æ£AIå®è£
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã§ãåŠç¿ãçµããã¢ãã«ã䜿ã£ãŠå¯Ÿå±ã§ããããã«ãUSIãšã³ãžã³ã«ããŸãã USI(Universal Shogi Interface)ãããã³ã«ãšã¯ãå°æ£GUIãœãããšæèãšã³ãžã³ãéä¿¡ãããããã«ãTord Romstadæ°ã«ãã£ãŠèæ¡ãããéä¿¡ãããã³ã«ã§ãã http://shogidokoro.starfree.jp/usi.html äžã®ããã«ãUSIãããã³ã«ãããšã«éä¿¡ããããšã§ãå°æ£AIãGUIäžã§åãããŸãã ãã©ã«ãæ§æ \ïŒpolicynetworkïŒ(root dir) |- ïŒbatïŒ | | Docbase.bat | |- ïŒpydlshogiïŒ | |- ïŒplayerïŒ | | base_player.py | | Docbase_player.py | | | |- ïŒusiïŒ | | usi.py | | usi_Docbase_player.py import numpy as npimport chainerfrom chainer import serializersfrom chainer import cuda, Variableimport chainer.functions as Fimport shogifrom pydlshogi.common import *from pydlshogi.features import *from pydlshogi.network.policy import *from pydlshogi.player.base_player import *def greedy(logits): return logits.index(max(logits))def boltzmann(logits, temperature): logits /= temperature logits -= logits.max() probabilities = np.exp(logits) probabilities /= probabilities.sum() return np.random.choice(len(logits), p=probabilities)class PolicyPlayer(BasePlayer): def __init__(self): super().__init__() self.modelfile = r'åŠç¿ããã¢ãã«ã®ãã¹' self.model = None def usi(self): print('id name DocBase ShogiAI') print('option name modelfile type string default ' + self.modelfile) print('usiok') def setoption(self, option): if option[1] == 'modelfile': self.modelfile = option[3] def isready(self): if self.model is None: self.model = PolicyNetwork() self.model.to_gpu() serializers.load_npz(self.modelfile, self.model) print('readyok') def go(self): if self.board.is_game_over(): print('bestmove resign') return features = make_input_features_from_board(self.board) x = Variable(cuda.to_gpu(np.array([features], dtype=np.float32))) with chainer.no_backprop_mode(): y = self.model(x) logits = cuda.to_cpu(y.data)[0] probabilities = cuda.to_cpu(F.softmax(y).data)[0] # å
šãŠã®åæ³æã«ã€ã㊠legal_moves = [] legal_logits = [] for move in self.board.legal_moves: # ã©ãã«ã«å€æ label = make_output_label(move, self.board.turn) # åæ³æãšãã®æãæã®ç¢ºç(logits)ãæ ŒçŽ legal_moves.append(move) legal_logits.append(logits[label]) # 確çã衚瀺 print('info string {:5} : {:.5f}'.format(move.usi(), probabilities[label])) # 確çãæå€§ã®æãéžã¶(ã°ãªãŒãã£ãŒæŠç¥) selected_index = greedy(legal_logits) # 確çã«å¿ããŠæãéžã¶(ãœããããã¯ã¹æŠç¥) selected_index = boltzmann(np.array(legal_logits, dtype=np.float32), 0.5) bestmove = legal_moves[selected_index] print('bestmove', bestmove.usi()) äžã®ããã«ãAIã®æ
å ±ãå±é¢ããšã®æåæãèšç®ããŠãããŸãã §3. GUIãœããã§åãã äžã§äœã£ãã¢ãã«ãšå®éã«å¯Ÿå±ããŸãã GUIãœããã¯ããã€ããããŸããã å°æ£æ ã䜿çšããŸãã äžã®ããã«ãç»é²ããããšãã§ããŸãã §4. åè åè URL å°æ£AIã§åŠã¶ãã£ãŒãã©ãŒãã³ã° https://book.mynavi.jp/ec/products/detail/id=88752 Alpha Goã®è«æ https://www.nature.com/articles/nature16961 §5. çµããã« ãããã§ããããïŒ ç§ã¯ãããŒãã²ãŒã ãè¶£å³ã§å°æ£ãå²ç¢ããã§ã¹çããã¡ãã奜ãã§ãã ãã§ã¹ã¯ã1997幎ã«ãåœæã®ãã£ã³ããªã³ ÐaÑÑО ÐаÑпaÑПв ããããIBM瀟ã®ãã£ãŒããã«ãŒã«æããŸãããç§ããŸã çãŸããŠããªãæä»£ãããAI vs 人éã®æŠããå§ãŸã£ãŠããããšãç¥ã£ããšãã¯ã驿ããŸããããããŠãããš10幎ã¯äººéã«åãŠãªããšããããŠãããå²ç¢ã2016å¹Žã«æ äžä¹ ããããGoogleåäžã®Demis Hassabis ãããçããDeepMind瀟ã®Alpha Goã«æããŸããã ä»åã®å°æ£AIããAlpha Goãåèã«ããŠããŸãã ãããŠãå°æ£ã2010幎代ãããã£ãšãponanzaãšããããå°æ£ãœããã®åŒ·ãã¯æ³šç®ãããŠããŸãããponanzaã«ã¯ãã¢ã³ãã«ã«ãæ³ãæ¡çšãããŠããŸãããåœæãããå°æ£ããã§ãããponanzaãäžç®ãããŠããŠãåœæã®ç«çã§ããæž¡èŸºæãããšponanzaã®å
¬é察å±ãå¬ããããããŸãããïŒæž¡èŸºæç«ç(åœæ)ã®é転åã¡) 2016幎ã Alpha Goã®è«æ ãå
¬éããããšãããã«Alpha ZeroãšåŒã°ããå°æ£AIãèªçããŸãããçŸåšã®ãå°æ£çã¯è€äºè¡å€ª2å ãã¯ãããšããŠãè¥å¹Žäžä»£ãçé ã«ãäžä»£ãåããå°æ£AIãçšããç ç©¶ãçãã«ãªã£ãŠããŸãã ã³ã³ãã¥ãŒã¿å°æ£å€§äŒããéãããŠããŠãå°æ£AIã®åŒ·ããç«¶ã倧äŒããããŸãããã²ãä»åã®èšäºã«èå³ããã£ãæ¹ã¯BERTã§ãå°æ£AIãäœã£ãŠã¿ãŠãã ããïŒ https://www.youtube.com/watch?v=2Vl6Ao4GaSQ&t=853s
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã






