**èªç¶èšèªåŠçã«ååŠçã¯äžå¯æ¬ ã§ãã**ããã¹ãã¯æåã®çŸ åã§ããæ§é åãããŠããªãããããã®ãŸãŸã§ã¯åŠçããã®ãé£ããã§ããç¹ã«Webããã¹ãã®äžã«ã¯ HTMLã¿ã° ã JavaScript ã®ã³ãŒããšãã£ããã€ãºãå«ãŸããŠããŸãããã®ãããªãã€ãºã¯ååŠçããŠåãé€ããªããã°æåŸ ããçµæã¯åŸãããªãã§ãããã
åºå
ž: [Deep learning for computational biology](http://msb.embopress.org/content/12/7/878)
æ¬èšäºã§ã¯èªç¶èšèªåŠçã«ãããååŠçã®çš®é¡ãšãã®åšåã«ã€ããŠèª¬æããŸãã説æé åºãšããŠã¯ãã¯ããã«ååŠçã®çš®é¡ã説æããŸããåååŠçã«ã€ããŠã¯ã1.ã©ããªåŠçãªã®ãã2.ãªããã®åŠçãããã®ãã3.å®è£ æ¹æ³(ãªãã¹ã) ãšãã芳ç¹ãã説æããŸããçš®é¡ã«ã€ããŠèª¬æããåŸãååŠçã®åšåãæž¬ãããã«ååŠçãããå Žåãšããªãã£ãå Žåã§ã®ææžåé¡ã®çµæãæ¯èŒããŸãã
ååŠçã®çš®é¡ãšå®è£
ãã®ç¯ã§ã¯ä»¥äžã«ç€ºã5ã€ã®ååŠçã«ã€ããŠèª¬æããŸãã5ã€ã®ååŠçã«ã€ããŠã1.ã©ããªåŠçãªã®ãã2.ãªããã®åŠçãããã®ãã3.å®è£ æ¹æ³ãšãã芳ç¹ãã説æããŸãã
ããã¹ãã®ã¯ãªãŒãã³ã°
ããã¹ãã®ã¯ãªãŒãã³ã°ã§ã¯ãããã¹ãå
ã«å«ãŸãããã€ãºãé€å»ããŸãããããããã€ãºãšããŠãJavaScriptã®ã³ãŒããHTMLã¿ã°ãæããããŸãããããã®ãã€ãºãé€å»ããããšã§ããã€ãºãã¿ã¹ã¯ã®çµæã«åãŒãæªåœ±é¿ãæããããšãã§ããŸãã以äžã®ãããªã€ã¡ãŒãžã§ã:

JavaScriptãHTMLã¿ã°ã®é€å»ã¯ããè¡ãããã®ã§ãããå®éã«ã¯ããŒã¿ã«å¿ããŠé€å»ããããã€ãºã¯å€ãããŸãããã®ãããªå Žåã«äœ¿ããæãšããŠæ£èŠè¡šçŸããããŸããæ£èŠè¡šçŸãæžãéã«ã¯ä»¥äžã®ãããªãªã³ã©ã€ã³ãšãã£ã¿ã䜿ã£ãŠãªã¢ã«ã¿ã€ã ã«ãã¿ãŒã³ãããã確èªããªããè¡ããšãäœæ¥ãæããŸãã
Pythonã«ã¯ Beautiful Soup ã lxml ã®ãããªã¯ãªãŒãã³ã°ãè¡ãã®ã«äŸ¿å©ãªã©ã€ãã©ãªããããŸãã
BeautifulSoupãçšããããã¹ãã®ã¯ãªãŒãã³ã°äŸã¯ãã¡ã:
preprocessings/ja/cleaning.py
åèªã®åå²
æ¥æ¬èªã®ããã«åèªã®åºåããæããã§ãªãèšèªã«å¯ŸããŠãŸãè¡ãããã®ãåèªã®åå²åŠçã§ããåèªãåå²ããçç±ãšããŠãã»ãšãã©ã®èªç¶èšèªåŠçã·ã¹ãã ã§ã¯å ¥åãåèªã¬ãã«ã§æ±ãããšãæããããŸããåå²ã¯äž»ã«åœ¢æ çŽ è§£æåšãçšããŠè¡ããŸããäž»ãªåœ¢æ çŽ è§£æåšãšã㊠MeCab ã Juman++ã Janome ãæããããŸãã
ã€ã¡ãŒãžãšããŠã¯ä»¥äžã®ããã«åå²ããŸãããã®éãèªåœæ°ãæžããããã«åèªãå圢ã«ããããšããããŸã:

圢æ çŽ è§£æããéã«åé¡ãšãªãã®ãããã©ã«ãã§ã¯æ°èªã®è§£æã«åŒ·ããªãç¹ã§ããäžã®äŸãèŠããšãåœç«æ°çŸè¡é€šãããåœç«ããæ°ããçŸè¡é€šãã®3ã€ã«åå²ããŠããŸãããã®ãããªçµæã«ãªãåå ãšããŠãè§£æã«äœ¿ã£ãŠããèŸæžã«ãåœç«æ°çŸè¡é€šããå«ãŸããŠããªãããšãæããããŸããç¹ã«Webã«ã¯æ°èªã倿°å«ãŸããŠããã®ã§ãã®åé¡ã¯ããã«æ·±å»ã«ãªããŸãã
ãã®åé¡ã¯ NEologd ãšåŒã°ããèŸæžã远å ããããšã§ããšã§ããçšåºŠè§£æ±ºã§ããŸããNEologd ã«ã¯éåžžã®èŸæžãšæ¯ã¹ãŠå€ãã®æ°èªãå«ãŸããŠããŸãããããã£ãŠãNEologdã䜿çšããããšã§æ°èªã®è§£æã«åŒ·ããªããŸãã以äžã¯äžãšåãæãNEologdã䜿ã£ãŠè§£æããçµæã§ã:

以äžã®ããã«ããŠåèªã®åå²ãããåŸãåŸç¶ã®åŠçãè¡ãªã£ãŠãããŸãã以äžã¯Pythonã«ããå®è£
ã§ã:
preprocessings/ja/tokenizer.py
åèªã®æ£èŠå
åèªã®æ£èŠåã§ã¯åèªã®æåçš®ã®çµ±äžãã€ã¥ããè¡šèšæºãã®åžåãšãã£ãåèªã眮ãæããåŠçãããŸãããã®åŠçãè¡ãããšã§ãå šè§ã®ããã³ããšåè§ã®ãïŸïœºããã²ãããªã®ãããããåãåèªãšããŠåŠçã§ããããã«ãªããŸããåŸç¶ã®åŠçã«ãããèšç®éãã¡ã¢ãªäœ¿çšéã®èгç¹ããèŠãŠãéèŠãªåŠçã§ãã
åèªã®æ£èŠåã«ã¯æ§ã ãªåŠçããããŸããããã®èšäºã§ã¯ä»¥äžã®3ã€ã®åŠçã玹ä»ããŸãã
- æåçš®ã®çµ±äž
- æ°åã®çœ®ãæã
- èŸæžãçšããåèªã®çµ±äž
æåçš®ã®çµ±äž
æåçš®ã®çµ±äžã§ã¯ã¢ã«ãã¡ãããã®å€§æåãå°æåã«å€æãããåè§æåãå
šè§æåã«å€æãããšãã£ãåŠçãè¡ããŸããããšãã°ãNaturalãã®å€§æåéšåãå°æåã«å€æããŠãnaturalãã«ãããããïŸïœºããå
šè§ã«å€æããŠããã³ãã«ããŸãããã®ãããªåŠçãããããšã§ãåèªãæåçš®ã®åºå¥ãªãåäžã®åèªãšããŠæ±ããããã«ãªããŸãã

æ°åã®çœ®ãæã
æ°åã®çœ®ãæãã§ã¯ããã¹ãäžã«åºçŸããæ°åãå¥ã®èšå·(ããšãã°0)ã«çœ®ãæããŸããããšãã°ãããããã¹ãäžã«ã2017幎1æ1æ¥ãã®ãããªæ°åãå«ãŸããæååãåºçŸãããšããŸããããæ°åã®çœ®ãæãã§ã¯ãã®æååäžã®æ°åãã0幎0æ0æ¥ãã®ããã«å€æããŠããŸããŸãã

æ°åã®çœ®ãæããè¡ãçç±ã¯ãæ°å€è¡šçŸã倿§ã§åºçŸé »åºŠãé«ãå²ã«ã¯èªç¶èšèªåŠçã®ã¿ã¹ã¯ã«åœ¹ã«ç«ããªãããšãå€ãããã§ããããšãã°ããã¥ãŒã¹èšäºããã¹ããŒããããæ¿æ²»ãã®ãããªã«ããŽãªã«åé¡ããã¿ã¹ã¯ãèããŸãããããã®æãèšäºäžã«ã¯å€æ§ãªæ°å衚çŸãåºçŸããã§ãããããã«ããŽãªã®åé¡ã«ã¯ã»ãšãã©åœ¹ã«ç«ããªããšèããããŸãããã®ãããæ°åãå¥ã®èšå·ã«çœ®ãæããŠèªåœæ°ãæžãããŠããŸããŸãã
ãã®ãããæ°å€è¡šçŸãéèŠãªã¿ã¹ã¯(æ å ±æœåºãšã)ã§ã¯æ°åã®çœ®ãæãã¯è¡ããŸããã
èŸæžãçšããåèªã®çµ±äž
èŸæžãçšããåèªã®çµ±äžã§ã¯åèªã代衚çãªè¡šçŸã«çœ®ãæããŸããããšãã°ãããœããŒããšãSonyããšãã衚èšãå
¥ãæ··ãã£ãæç« ãæ±ãæã«ããœããŒãããSonyãã«çœ®ãæããŠããŸããŸããããã«ããããã以éã®åŠçã§2ã€ã®åèªãåãåèªãšããŠæ±ããããã«ãªããŸãã眮ãæããéã«ã¯æèãèæ
®ããŠçœ®ãæããå¿
èŠãããããšã«ã¯æ³šæããå¿
èŠããããŸãã

åèªæ£èŠåã®äžçã¯å¥¥æ·±ããŠã以äžã§èª¬æããæ£èŠå以å€ã«ãã€ã¥ãã®æºãåžå(loooooooooooool -> lol)ãçç¥èªã®åŠç(4eva -> forever)ãå£èªè¡šçŸã®ä»£è¡šå(ã£ã -> ã§ã)ãšãã£ãæ£èŠåããããŸããããŒã¿ã倧éã«ããã°åŸè¿°ããåèªã®åæ£è¡šçŸã§ããçšåºŠå¯Ÿå¿ã§ããåŠçããããšã¯æããŸãããèªåã®è§£ãããã¿ã¹ã¯ã«å¿ èŠãªåŠçãããã®ãäžçªè¯ããšæããŸãã
以äžã§èª¬æããåèªã®æ£èŠåã®äžéšãå®è£
ããŠããŸã:
preprocessings/ja/normalization.py
ã¹ãããã¯ãŒãã®é€å»
ã¹ãããã¯ãŒããšããã®ã¯èªç¶èšèªåŠçããéã«äžè¬çã§åœ¹ã«ç«ããªãçã®çç±ã§åŠç察象å€ãšããåèªã®ããšã§ããããšãã°ãå©è©ãå©åè©ãªã©ã®æ©èœèª(ãã¯ããã®ããã§ããããŸãããªã©)ãæããããŸãããããã®åèªã¯åºçŸé »åºŠãé«ãå²ã«åœ¹ã«ç«ãããèšç®éãæ§èœã«æªåœ±é¿ãåãŒãããé€å»ãããŸãã
ã¹ãããã¯ãŒãã®é€å»ã«ã¯æ§ã ãªæ¹åŒããããŸããããã®èšäºã§ã¯ä»¥äžã®2ã€ã®æ¹åŒã玹ä»ããŸãã
- èŸæžã«ããæ¹åŒ
- åºçŸé »åºŠã«ããæ¹åŒ
èŸæžã«ããæ¹åŒ
èŸæžã«ããæ¹åŒã§ã¯ããããããã¹ãããã¯ãŒããèŸæžã«å®çŸ©ããŠãããèŸæžå ã«å«ãŸããåèªãããã¹ãããé€å»ããŸããèŸæžã¯èªåã§äœæããŠãããã®ã§ãããæ¢ã«å®çŸ©æžã¿ã®èŸæžãååšããŠããŸããããã§ã¯æ¥æ¬èªã®ã¹ãããã¯ãŒãèŸæžã®äžã€ã§ãã Slothlib ã®äžèº«ãèŠãŠã¿ãŸãããã300èªã»ã©ã®åèªãäžè¡ããšã«å®çŸ©ãããŠããŸã:
ããã
ããã
ãã¡ã
ãã£ã¡
ããš
ããª
ããªã
ãã
ããã€
ãã€
ããŸ
ãã
ãããã
...
ãã®èŸæžå
ã«å®çŸ©ãããåèªãã¹ãããã¯ãŒããšããŠèªã¿èŸŒã¿ã䜿çšããŸããå
·äœçã«ã¯èªã¿èŸŒãã ã¹ãããã¯ãŒããåèªã«åå²ãããããã¹ãå
ã«å«ãŸããŠããã°é€å»ããŠããŸããŸãã以äžã®ãããªã€ã¡ãŒãžã§ã:

èŸæžã«ããæ¹æ³ã¯çŽ æŽãªæ¹æ³ã§ç°¡åã§ããããã€ãæ¬ ç¹ããããŸããäžã€ç®ã¯èŸæžãäœãããã®ã³ã¹ãããããç¹ã§ããããäžã€ã¯ãã¡ã€ã³ã«ãã£ãŠã¯åœ¹ã«ç«ããªãå Žåãããç¹ã§ãããã®ãããèªåã®å¯Ÿè±¡ãšããŠããã³ãŒãã¹ã«ãã£ãŠäœãå€ããå¿ èŠããããŸãã
åºçŸé »åºŠã«ããæ¹åŒ
åºçŸé »åºŠã«ããæ¹åŒã§ã¯ãããã¹ãå
ã®åèªé »åºŠãã«ãŠã³ãããé«é »åºŠ(æã«ã¯äœé »åºŠ)ã®åèªãããã¹ãããé€å»ããŸããé«é »åºŠã®åèªãé€å»ããã®ã¯ããããã®åèªãããã¹ãäžã§å ããå²åãé«ãäžæ¹ã圹ã«ç«ããªãããã§ãã以äžã®å³ã¯ããè±èªã®æ¬ã®æãé »åºãã50åèªã®çޝèšé »åºŠããããããããã®ã§ã:

50åèªãèŠãŠã¿ããšãthe ã ofãã«ã³ãã®ãããªææžåé¡çã«åœ¹ã«ç«ããªããããªåèªãããã¹ãã®50%è¿ããå ããŠããããšãããããŸããåºçŸé »åºŠã«ããæ¹åŒã§ã¯ãããé«é »åºŠèªãã¹ãããã¯ãŒããšããŠããã¹ãããåãé€ããŸãã
ã¹ãããã¯ãŒãã®é€å»ãããŠããå®è£
ã¯ãã¡ã:
preprocessings/ja/stopwords.py
åèªã®ãã¯ãã«è¡šçŸ
åèªã®ãã¯ãã«è¡šçŸã§ã¯ãæååã§ããåèªããã¯ãã«ã«å€æããåŠçãè¡ããŸãããªãæååãããã¯ãã«ã«å€æããã®ããšãããšãæååã¯å¯å€é·ã§æ±ãã«ãããé¡äŒŒåºŠã®èšç®ããã«ããçã®çç±ãæããããŸãããã¯ãã«è¡šçŸããã®ã«ãæ§ã ãªææ³ãååšããã®ã§ããã以äžã®2ã€ã«ã€ããŠç޹ä»ããŸãã
- one-hot衚çŸ
- åæ£è¡šçŸ
One-hot衚çŸ
åèªããã¯ãã«ã§è¡šçŸããæ¹æ³ãšããŠãŸãèããããã®ã¯one-hot衚çŸã§ããone-hot衚çŸãšããã®ã¯ããèŠçŽ ã®ã¿ã1ã§ãã®ä»ã®èŠçŽ ã0ã§ãããããªè¡šçŸæ¹æ³ã®ããšã§ãã忬¡å ã« 1 ã 0 ãèšå®ããããšã§ããã®åèªãåŠããã衚ããŸãã
ããšãã°ãone-hot衚çŸã§pythonãšããåèªã衚ããšããŸããããããã§ãåèªã®éåã§ããããã£ãã©ãªã¯(nlp, python, word, ruby, one-hot)ã®5åèªãšããŸãããããããšãpythonã衚ããã¯ãã«ã¯ä»¥äžã®ããã«ãªããŸãã

one-hot衚çŸã¯ã·ã³ãã«ã§ããããã¯ãã«éã®æŒç®ã§äœãæå³ã®ããçµæãåŸãããªããšãã匱ç¹ããããŸããããšãã°ãåèªéã§é¡äŒŒåºŠãèšç®ããããã«å ç©ãåããšããŸããããone-hot衚çŸã§ã¯ç°ãªãåèªã¯å¥ã®ç®æã«1ãç«ã£ãŠããŠãã®ä»ã®èŠçŽ ã¯0ãªã®ã§ãç°ãªãåèªéã®å ç©ãåã£ãçµæã¯0ã«ãªã£ãŠããŸããŸããããã¯æãŸããçµæãšã¯èšããŸããããŸãã1åèªã«1次å ãå²ãåœãŠãã®ã§ãããã£ãã©ãªæ°ãå¢ãããšéåžžã«é«æ¬¡å ã«ãªã£ãŠããŸããŸãã
åæ£è¡šçŸ
ããã«å¯ŸããŠåæ£è¡šçŸã¯ãåèªãäœæ¬¡å
ã®å®æ°å€ãã¯ãã«ã§è¡šã衚çŸã§ããã ããã50次å
ãã300次å
ãããã§è¡šçŸããããšãå€ãã§ããããšãã°ãå
ã»ã©æããåèªãåæ£è¡šçŸã§è¡šããšä»¥äžã®ããã«è¡šããŸãã

åæ£è¡šçŸã䜿ãããšã§one-hot衚çŸãæ±ããŠããåé¡ã解決ã§ããŸããããšãã°ããã¯ãã«éã®æŒç®ã§åèªéã®é¡äŒŒåºŠãèšç®ããããšãã§ããããã«ãªããŸããäžã®ãã¯ãã«ãèŠããšãpython ãš ruby ã®é¡äŒŒåºŠã¯ python ãš word ã®é¡äŒŒåºŠãããé«ããªãããã§ãããŸããããã£ãã©ãªæ°ãå¢ããŠãååèªã®æ¬¡å æ°ãå¢ãããã«æžã¿ãŸãã
åæ£è¡šçŸã®ãã¯ãã«ãåŸãããã®å®è£
ã¯ãã¡ã:
preprocessings/ja/word_vector.py
ååŠçã®åšå
ãã®èª¬ã§ã¯ååŠçã«ã©ãã»ã©ã®å¹æãããã®ãæ€èšŒããŸããå ·äœçã«ã¯ææžåé¡ã¿ã¹ã¯ã«ååŠçãé©çšããå ŽåãšããŠããªãå Žåã§å顿§èœãšå®è¡æéãæ¯èŒããŸãããçµæãšããŠãååŠçãããããšã§å顿§èœãåäžããå®è¡æéã¯ååã»ã©ã«ãªããŸããã
ææžåé¡ã«äœ¿çšããã³ãŒãã¹
ææžåé¡ã®ããŒã¿ã»ãããšã㊠livedoor ãã¥ãŒã¹ã³ãŒãã¹ã䜿ããŸãããlivedoor ãã¥ãŒã¹ã³ãŒãã¹ã¯ livedoor ãã¥ãŒã¹ã®èšäºãåéããHTMLã¿ã°ãåãé€ããŠäœæããããã®ã§ãããã®ããŒã¿ã»ããã«ã¯ä»¥äžã«æãã9ã€ã®ã¯ã©ã¹ãå«ãŸããŠããŸã:
- ãããã¯ãã¥ãŒã¹
- Sports Watch
- ITã©ã€ãããã¯
- å®¶é»ãã£ã³ãã«
- MOVIE ENTER
- ç¬å¥³éä¿¡
- ãšã¹ããã¯ã¹
- livedoor HOMME
- Peachy
䜿çšããååŠçã®çš®é¡
ãã®ç¯ã§ã¯ååŠçããå Žåã®ååŠçã®çš®é¡ã«ã€ããŠç°¡åã«è¿°ã¹ãŠãããŸãã
ååŠçããªãå Žåã¯æç« ã圢æ çŽ è§£æ(ipadic)ããåŸãBoWã«å€æãTF-IDFã§éã¿ä»ãããŠããŸãã
ããã«å¯ŸããŠãååŠçããå Žåã¯ãŸãæç« ã«å¯ŸããŠã¯ãªãŒãã³ã°ãè¡ããŸããè¡ã£ãåŠçã¯ä»¥äžã®3ã€ã§ã:
- URLã®é€å»
- ã¡ã³ã·ã§ã³ã®é€å»
- ããã€ãã®èšå·ã®é€å»
ã¯ãªãŒãã³ã°ããåŸã¯åœ¢æ çŽ è§£æã®èŸæžã« NEologd ã䜿ã£ãŠæç« ãåãã¡æžãããŸãããããŠåãã¡æžãããåèªã«å¯ŸããŠããã¹ãã®æ£èŠåãè¡ã£ãŠããŸããåŠçãšããŠã¯ä»¥äžã®2ã€ãè¡ã£ãŠããŸã:
- æåçš®ã®çµ±äž
- æ°åã®çœ®ãæã
æ£èŠåããåèªã«å¯ŸããŠåºçŸé »åºŠããŒã¹ã§ã¹ãããã¯ãŒãã®é€å»ãè¡ããæçµçã«ã¯BoWã«TF-IDFã§éã¿ä»ããããã¯ãã«ãçšããŠåé¡ãè¡ããŸããåé¡ã«ã¯ RandomForest ãçšããŠããŸãã
çµæ
çµæã«ã€ããŠã¯å顿§èœãšå®è¡æéãæ¯èŒããŠã¿ãŸãããŸãã¯å顿§èœ(accuracy)ã«ã€ããŠã¿ãŠã¿ãŸãã
| ååŠçãã | ååŠçãªã |
|---|---|
| 0.917 | 0.898 |
å顿§èœã«ã€ããŠã¯ååŠçããå Žåãšããªãã£ãå Žåã§ã»ãšãã©å€åããŸããã§ãããäºæ³ã§ã¯æ§èœåäžãããšæã£ãŠããã®ã§ããã»ã»ã»ããã®èŸºã¯ãããªãèå¯ãå¿
èŠã§ãã
å®è£
ã®ãã¹ãä¿®æ£ãããšãããååŠçããå Žåãšããªãã£ãå Žåã§ 1.9ãã€ã³ãå·®ãã€ããŸããããã®æ§èœã§ã®1.9ãã€ã³ãå·®ãªã®ã§ãããªãã®å·®ã§ã¯ãªãã§ããããã
å®è¡æéãæ¯èŒãããšãã以äžã®ãããªçµæã«ãªããŸãããååŠçããªãå Žåã¯600ç§çšåºŠããã£ãŠããã®ã«å¯ŸããŠãååŠçããå Žåã¯ã ããããã®ååã®æéã§èšç®ãçµäºããŠããŸããããã¯ã¯ãªãŒãã³ã°ãæ£èŠåããããŠç¹ã«ã¹ãããã¯ãŒãã®é€å»ã§èªåœæ°ãæžãããããšãå®è¡æéã®åæžã«ã€ãªãã£ããšèããããŸãã

â»ååŠçæéãå«ã
notebooks/document_classification.ipynb
ãããã«
ååŠçã¯èªç¶èšèªåŠçã«ã¯æ¬ ãããªãåŠçã§ããèªç¶èšèªãã³ã³ãã¥ãŒã¿ã§æ±ãããã«ã¯æ§ã ãªåŠçãå¿ èŠã§ããæ¬èšäºã§ã¯ãã®ãã¡ã®ããã€ãã玹ä»ããŸããããã®èšäºãçæ§ã®ã圹ã«ç«ãŠã°å¹žãã§ãã
ç§ã®Twitterã¢ã«ãŠã³ãã§ãæ©æ¢°åŠç¿ãèªç¶èšèªåŠçã«é¢ããæ
å ±ãã€ã¶ãããŠããŸãã
@Hironsan
ãã®åéã«ãèå³ã®ããæ¹ã®ãã©ããŒããåŸ ã¡ããŠããŸãã
