Slide 1

Slide 1 text

ϦϒηϯεͰͷMLγεςϜ։ൃɾӡ༻ͱ ݚڀɾ։ൃΞγελϯτͷऔΓ૊Έ Shotaro Tanaka / @yubessy / Ϧϒηϯε ͜Ε͔Βͷ։ൃνʔϜͷ͋ΓํΛߟ͑Δ @ Sansan Innovation Lab

Slide 2

Slide 2 text

ࣗݾ঺հ ాத ঵ଠ࿠ / @yubessy • גࣜձࣾϦϒηϯε • ςΫϊϩδΧϧϚʔέςΟϯά෦ σʔλϓϥοτϑΥʔϜάϧʔϓ • ࢓ࣄ • Ҏલ: σʔλ෼ੳج൫ (Livesense Analytics) ͷ։ൃɾӡ༻ • ݱࡏ: ػցֶशج൫ (Livesense Brain) ͷ։ൃɾӡ༻ • ژ౎ΦϑΟεۈ຿ • ݚڀɾ։ൃΞγελϯτͷϝϯλʔ

Slide 3

Slide 3 text

࿩͢͜ͱ • ػցֶशγεςϜͱͦͷ࣮ߦج൫ͷ։ൃɾӡ༻Λ͍ͯ͠ΔνʔϜ • ژ౎ΦϑΟεத৺ʹݚڀɾ։ൃΞγελϯτͱֶͯ͠ੜΞϧόΠτΛ࠾༻ • ͳͥΞγελϯτͷ࿮૊Έ͕͋Δͷ͔ɾͲΜͳ࢓ࣄΛ͍ͯ͠Δ͔ • ۀ຿্ͲΜͳোน͕ଘࡏ͢Δ͔ɾͦΕΛͲ͏ࠀ෰͍ͯ͠Δ͔

Slide 4

Slide 4 text

Ϧϒηϯεͷ؀ڥ

Slide 5

Slide 5 text

ӡӦαʔϏε

Slide 6

Slide 6 text

૊৫ߏ੒ • ࣄۀ෦ • ΞϧόΠτࣄۀ෦ (ϚοϋόΠτ) • స৬ձٞࣄۀ෦ (స৬ձٞ) • ෆಈ࢈Ϣχοτ (Door ௞ି, IESHIL) • ... • ԣஅ૊৫ • ςΫϊϩδΧϧϚʔέςΟϯά෦ • σʔλϓϥοτϑΥʔϜάϧʔϓ ← MLؔ࿈ͷνʔϜ͸͜͜ʹॴଐ • σʔλϚʔέςΟϯάάϧʔϓ • ΠϯϑϥετϥΫνϟάϧʔϓ • ωΠςΟϒΞϓϦάϧʔϓ

Slide 7

Slide 7 text

MLνʔϜɾMLج൫νʔϜ ࣾһ • MLΤϯδχΞ: 2໊ • MLج൫ΤϯδχΞ: 2໊ • ׬શʹ෼ۀ͍ͯ͠ΔΘ͚Ͱ͸ͳ͘ɺॏͳΔ෦෼΋͋Δ ΞϧόΠτ = ݚڀɾ։ൃΞγελϯτ • ژ౎ΦϑΟε: 4໊ • ౦ژΦϑΟε: 1໊

Slide 8

Slide 8 text

αʔϏεͱMLγεςϜ MLɾMLج൫νʔϜ͕֤αʔϏεʹ༷ʑͳMLγεςϜΛఏڙ • ϨίϝϯυΤϯδϯ → αΠτɾΞϓϦͳͲͰͷٻਓਪનʹར༻ • Ԡื཰ɾ࠾༻཰ͳͲͷਪఆɾ༧ଌϞσϧ → ޿ࠂग़ߘͳͲʹར༻ • όϯσΟοτπʔϧ → A/Bςετͷޮ཰Խʹར༻ ෳ਺ͷMLγεςϜΛগਓ਺ͷνʔϜͰ։ൃɾӡ༻Ͱ͖ΔΑ͏޻෉ • MLγεςϜΛߏ੒ཁૉ͝ͱʹ෼ղ͠ૄ݁߹Խ • ڞ௨ͷΠϯϑϥͰෳ਺γεςϜΛӡ༻ ৄࡉ͸ ࣄۀԣஅ૊৫ͰͷMLγεςϜ։ൃɾӡ༻ͱج൫ઃܭ Ͱ

Slide 9

Slide 9 text

MLγεςϜͷߏ੒ MLγεςϜͷߏ੒ཁૉΛ෼ׂ͠ʮίϯϙʔωϯτʯͱݺΜͰ͍Δ • ਪનΞϧΰϦζϜ, લॲཧ, ݁ՌϏϡʔϫ ͳͲ͕֤ʑ୯Ұίϯϙʔωϯτ • ̍ίϯϙʔωϯτ = ̍ϨϙδτϦ = ̍ίϯςφΠϝʔδ ͷߏ੒Ͱ౷Ұ ֤ίϯϙʔωϯτຖʹ ࣮૷ ʙ ςετ ʙ ϦϦʔε ͷαΠΫϧ͕׬݁ • ίϯϙʔωϯτຖʹαϯϓϧσʔλ΍ࣗಈςετΛ੔උ • ίϯϙʔωϯτͷಈ࡞ݕূʹඞཁͳͷ͸ docker run ͚ͩ ٕज़໘͸ Argo Workflow ʹΑΔػցֶशϫʔΫϑϩʔ؅ཧ ΋ࢀর

Slide 10

Slide 10 text

ݚڀɾ։ൃΞγελϯτ

Slide 11

Slide 11 text

֓ཁ ݚڀɾ։ൃΞγελϯτʢژ౎ΦϑΟεʣืूཁ߲ • ػցֶशɾσʔλΤϯδχΞϦϯά͓ΑͼͦΕʹ෇ਵ͢Δݚڀɾ։ൃ • ਺िؒʙ਺ϲ݄୯ҐͷϛχϓϩδΣΫτܗࣜ • جૅతͳΤϯδχΞϦϯάεΩϧ +α Ͱ׆͔ͤΔٕज़͕͋Δ͜ͱ • ʢ౰વͳ͕Βʣֶۀ༏ઌ ≠ ৽ଔ࠾༻ • ͋͘·Ͱۀ຿Λ௨ͯ͡νʔϜɾαʔϏεʹߩݙ͢Δͷ͕໨త • ࠾༻໨తͰͷֶੜͷғ͍ࠐΈ͸͠ͳ͍ʢ΋ͪΖΜೖࣾͯ͘͠ΕͨΒخ͍͠ʣ

Slide 12

Slide 12 text

ۀ຿಺༰ ʮ੒Ռ͕ग़Δ͔Θ͔Βͳ͍͕ɺ௅ઓ͢ΔՁ஋͕͋Δʯ͜ͱ • ΍ͬͯΈ͍͕ͨ๩ͯ͘͠खΛ෇͚ΒΕ͍ͯͳ͍ٕज़ݕূɾσʔλ෼ੳ • MLγεςϜͷิॿπʔϧʢσʔλ֬ೝɾϝτϦΫεऩूʣͷ։ൃ ۀ຿ܗଶ্ෆ޲͖ͳ࢓ࣄ͸ආ͚Δ • ظݶ͕͋Δɾۓٸੑ͕ߴ͍ • ࣦഊ࣌ͷϦεΫ͕େ͖͍ • ਂ͍υϝΠϯ஌ࣝɾଞ෦ॺͱͷີͳ࿈ܞΛཁ͢Δ

Slide 13

Slide 13 text

ྫ: Julia ͷฒྻܭࢉػೳͷݕূɾಋೖ • ࣾ಺Ͱ͸ Julia ͰϨίϝϯυΞϧΰϦζϜΛ࣮૷͍ͯ͠Δ • ϓϩηεɾεϨουฒྻػೳʹΑΔߴ଎ԽΛݕূ࣮͠ࡍʹಋೖ

Slide 14

Slide 14 text

ྫ: Ϋνίϛͷ൑ผϞσϧͷݕূ • ΫνίϛαΠτͷҙຯෆ໌ͳ౤ߘͳͲΛࣗಈ൑ఆ͢ΔϞσϧΛ࡞ͬͯΈΔ • ಛ௃ྔɾΞϧΰϦζϜͷௐ੔Ͱ࠶ݱ཰ɾద߹཰ΛͲͷఔ౓্͛ΒΕΔ͔ݕূ

Slide 15

Slide 15 text

ྫ: Ϩίϝϯυͷ݁ՌϏϡʔΞͷվળ • Ϩίϝϯυͷ݁ՌΛ֬ೝ͢Δ؆୯ͳ Web ΞϓϦΛ։ൃ • ΞϧΰϦζϜʹΑΔϥϯΩϯάมԽͷൺֱػೳͳͲΛ౥ࡌ

Slide 16

Slide 16 text

Ξγελϯτۀ຿ʹ͓͚Δ੍໿ ࣌ؒ ͷ੍໿ • ීஈ͔Βतۀɾݚڀ౎߹ͷग़ୀࣾ࣌ࠁมߋ΍தൈ͚͕ൃੜ • ࣌ظʹΑͬͯࢼݧ΍࿦จࣥචʹΑΔ௕ظෆࡏ͕ൃੜ ۀ຿ൣғ ͷ੍໿ • εΩϧ͕ݚڀدΓͰҰൠతͳ Web ։ൃʹෆ׳Εͳ͜ͱ΋ • ݖݶ্ϝϯλʔʹ͔͠Ͱ͖ͳ͍࡞ۀ͕Ұఆൃੜ → ͦΕͧΕͷ੍໿ʹͲ͏ରԠ͍ͯ͠Δ͔Λ঺հ

Slide 17

Slide 17 text

࣌ؒͷ੍໿

Slide 18

Slide 18 text

࣌ؒͷ੍໿ ීஈ͔Βतۀɾݚڀ౎߹ͷग़ୀࣾ࣌ࠁมߋ΍தൈ͚͕ൃੜ • ࢖͑Δ͕࣌ؒগͳ͍ͷͰࢦࣔ଴͕ͪൃੜ͢Δͱޮ཰͕མͪΔ • ࣾһͱಉ࣌ؒ࣠͡Ͱಉظతʹ࢓ࣄΛਐΊΔͷ͕೉͍͠ ࣌ظʹΑͬͯࢼݧ΍࿦จࣥචʹΑΔ௕ظෆࡏ͕ൃੜ • ෆࡏதͷঢ়گมԽʹϓϩδΣΫτ͕ࠨӈ͞ΕΔͱ੒Ռ͕ແବʹͳΔ͓ͦΕ • ظ͕ۭؒ͘ͱϝϯλʔ΋ԿΛ΍͍͔ͬͯͨ๨Ε͕ͪ → ϓϩδΣΫτ؅ཧΛ޻෉֤ͯࣗ͠ͷϖʔεͰਐΊΒΕΔΑ͏ʹ

Slide 19

Slide 19 text

ϛχϓϩδΣΫτܗࣜͰͷ࣮ࢪ ݸผλεΫͰ͸ͳ͘ϓϩδΣΫτͱͯ͠എܠɾΰʔϧΛ໌จԽ • ͜Ε͕Ͱ͖ΔͱνʔϜ΍αʔϏεʹͱͬͯԿ͕خ͍͠ͷ͔ • ͲΜͳΞ΢τϓοτ͕Ͱ͖Ε͹੒ޭͳͷ͔ ஞҰࡉ͔͍ࢦࣔΛ͠ͳͯ͘΋͋Δఔ౓֤ࣗͷ൑அͰਐΊΒΕΔΑ͏ʹ • ̎ʙ̏೔ఔ౓͸ࢦࣔ଴͕ͪൃੜ͠ͳ͍͜ͱΛ໨҆ʹ • िʹ̍ճϖʔεͰৼΓฦΓΛ࣮ࢪ

Slide 20

Slide 20 text

# ϓϩδΣΫτ: Julia + Docker ͷฒྻԽػߏͷݕূɾಋೖ ## എܠ Data Platform άϧʔϓͰ͸֤αʔϏεͰར༻͢ΔϨίϝϯυΞϧΰϦζϜΛ Julia Ͱ࣮૷͠ Docker ίϯςφͱͯ͠ӡ༻͍ͯ͠·͢ɻ https://github.com/livesense-inc/brain.recommender Matrix Factorization ͷΑ͏ͳΞϧΰϦζϜ͸ɺֶश΍༧ଌͷҰ෦ͷॲཧΛฒྻԽ͢Δ͜ͱ͕ՄೳͰ͢ɻ ͜ͷ͏ͪ಺ੵ΍L2ϊϧϜʹΑΔϕΫτϧ୳ࡧʹ͍ͭͯ͸ faiss ౳Λར༻Ͱ͖·͕͢ɺϥΠϒϥϦ͕ͳ͍Α͏ͳέʔεͰ͸ࣗ෼ͰॲཧΛ࣮૷͢Δඞཁ͕͋Γ·͢ɻ Julia ʹ͸༷ʑͳฒྻԽػߏ͕༻ҙ͞Ε͍ͯΔͨΊɺͦΕΒΛ࢖ͬͯΞϧΰϦζϜΛߴ଎ԽͰ͖Ε͹ɺ։ൃɾӡ༻ͷޮ཰Λ޲্Ͱ͖·͢ɻ ͦ͜Ͱࠓճ͸ Julia ͷฒྻԽػߏͷௐࠪͱɺͦΕΛ༻͍ͨߴ଎Խͷ࣮૷Λߦͬͯ΋Β͍·͢ɻ ## ΰʔϧ - Julia + Docker Ͱར༻ՄೳͳฒྻԽػߏΛௐࠪ͠Ϩϙʔτʹ·ͱΊΔ - brain.recommender ͷ prediction ΛฒྻԽʹΑΓߴ଎Խ͢Δ ## ؀ڥ - Julia όʔδϣϯ: 1.0.2 - ίϯςφͷϕʔεΠϝʔδ: julia:1.0.2 (https://hub.docker.com/r/library/julia/) ...

Slide 21

Slide 21 text

Ξ΢τϓοτΛஈ֊తʹ ϓϩδΣΫτதʹෳ਺ճͷνΣοΫϙΠϯτΛઃ͚Δ • ։ൃܥϓϩδΣΫτͰ͸ϦϦʔεΛԿஈ֊͔ʹ෼͚Δ • ෼ੳɾݕূܥϓϩδΣΫτͰ͸ෳ਺ճϨϙʔτΛ࡞੒ ϓϩδΣΫτ͕தஅͯ͠΋ͦͷ࣌఺·Ͱͷ੒Ռ͕׆͖ΔΑ͏ʹ͢Δ • ͍͖ͳΓػೳ࣮૷ʹೖΔͷͰ͸ͳٕ͘ज़ݕূ͔Β࢝ΊΔ • ݕূٕͨ͠ज़ͷಋೖ·ͰͰ͖ͳͯ͘΋஌ݟ͕࢒ΔΑ͏ʹ

Slide 22

Slide 22 text

## εςοϓ ### 1 - ฒྻԽػߏͷಈ࡞ݕূ ҎԼͷ Julia ެࣜυΩϡϝϯτʹهࡌ͞ΕͨฒྻԽػߏ͕ɺDocker ίϯςφ಺Ͱಈ࡞͢Δ͔֬ೝ͍ͯͩ͘͠͞ɻ https://docs.julialang.org/en/v1/manual/parallel-computing/index.html#Multi-Threading-(Experimental)-1 ࠓճͷݕূର৅͸ϚϧνεϨου·ͨ͸ϚϧνϓϩηεʹΑΔฒྻԽͰ͢ (άϦʔϯεϨου, ΫϥελίϯϐϡʔςΟϯά͸ର৅֎Ͱ͢)ɻ ### 2 - ฒྻԽػߏͷύϑΥʔϚϯεݕূ 1Ͱݕূͨ͠ॲཧͷ͏ͪಛʹ SharedArrays, SparseArrays ͷ read/write ʹ͍ͭͯɺҎԼͷΑ͏ʹύϑΥʔϚϯεݕূΛߦ͍ͬͯͩ͘͞ɻ ... ·ͨ2ͰͷฒྻԽର৅ͷؔ਺ͷॻ͖ํͱͯ͠ɺ࣍ͷΑ͏ͳҧ͍ʹΑΓ݁Ռʹ͕ࠩग़Δ͔Λௐ΂͍ͯͩ͘͞ (ฒྻॲཧͰ࠷దԽϚΫϩ͕ޮ͔͘Λௐ΂ΔͨΊ)ɻ ... ### 3 - brain.recommender ͷฒྻԽ 1, 2 ͷݕূ݁ՌΛ΋ͱʹ brain.recommender ͷ࣍ͷॲཧΛฒྻԽ͍ͯͩ͘͠͞ɻ prediction ͰͷϢʔβɾΞΠςϜຖͷείΞܭࢉ: ...

Slide 23

Slide 23 text

ۀ຿ൣғͷ੍໿

Slide 24

Slide 24 text

ۀ຿ൣғͷ੍໿ εΩϧ͕ݚڀدΓͰҰൠతͳ Web ։ൃʹෆ׳Εͳ͜ͱ΋ • ෳࡶͳ Git ͷϒϥϯνӡ༻ʹ׳Ε͍ͯͳ͍ • Python, Jupyter ͸ݚڀͳͲͰ࢖͏͕ Web ΞϓϦ։ൃ͸ະܦݧ ݖݶ্ϝϯλʔʹ͔͠Ͱ͖ͳ͍࡞ۀ͕Ұఆൃੜ • ຊ൪؀ڥͰͷಈ࡞֬ೝ΍ϦϦʔε͸Ͱ͖ͳ͍ • ։ൃऀͱӡ༻ऀ͕ҟͳΔͱ໰୊ൃੜ࣌ͷରԠʹखؒऔΔ → γεςϜߏ੒ɾϦϦʔεϑϩʔͷ޻෉ͰোนΛখ͘͢͞Δ

Slide 25

Slide 25 text

࠶ܝ: MLγεςϜͷߏ੒ MLγεςϜͷߏ੒ཁૉΛ෼ׂ͠ʮίϯϙʔωϯτʯͱݺΜͰ͍Δ • ਪનΞϧΰϦζϜ, લॲཧ, ݁ՌϏϡʔϫ ͳͲ͕֤ʑ୯Ұίϯϙʔωϯτ • ̍ίϯϙʔωϯτ = ̍ϨϙδτϦ = ̍ίϯςφΠϝʔδ ͷߏ੒Ͱ౷Ұ ֤ίϯϙʔωϯτຖʹ ࣮૷ ʙ ςετ ʙ ϦϦʔε ͷαΠΫϧ͕׬݁ • ίϯϙʔωϯτຖʹαϯϓϧσʔλ΍ࣗಈςετΛ੔උ • ίϯϙʔωϯτͷಈ࡞ݕূʹඞཁͳͷ͸ docker run ͚ͩ

Slide 26

Slide 26 text

ίϯϙʔωϯτ୯ҐͰͷվળ ̍ϓϩδΣΫτͰ̍ίϯϙʔωϯτΛվળ → ඞཁεΩϧΛݶఆ • ֤ࣗͷಘҙ෼໺΍ڵຯʹԠͯ͡ϓϩδΣΫτΛ೚ͤΔ • ະܦݧͷٕज़Ͱ΋ΩϟονΞοϓίετΛͳΔ΂͘খ͘͞ ̍ϨϙδτϦ͋ͨΓͷ։ൃਓ਺ΛݮΒͯ͠޻ఔΛ୯७Խ • Git flow ͷΑ͏ͳ൥ࡶͳϒϥϯνӡ༻͸ඞཁͳ͍ • ίϯϑϦΫτ͕ൃੜ͠ʹ͘͘ɺൃੜͯ͠΋ղܾ͕༰қʹ

Slide 27

Slide 27 text

֤ϨϙδτϦ΁ͷϓϧϦΫ਺ • Ξγελϯτ / ओͳίϯϙʔωϯτ ຖͷϓϧϦΫͷ਺ • ਓʹΑͬͯѻ͏ίϯϙʔωϯτ͕ࣗવʹ෼͔Ε͍ͯΔ

Slide 28

Slide 28 text

ϦϦʔεͷলྗԽɾ҆શԽ ϦϦʔεϑϩʔΛ̎ஈ֊ʹ෼͚ɺϝϯλʔ͸ίϯϙʔωϯτར༻ͷ൑அͷΈ 1. Ξγελϯτ͕ίϯϙʔωϯτʹػೳ௥Ճ 2. ϝϯλʔ͕γεςϜͰར༻͢ΔίϯϙʔωϯτόʔδϣϯΛ੾Γସ͑ ϦϦʔεલޙͰ༷ʑͳ҆શࡦΛߨ͍ͯ͡Δ • ։ൃ؀ڥͰ͸Ξγελϯτ͕γεςϜͷಈ࡞֬ೝ·Ͱߦ͑Δ • ඞཁʹԠͯ͡ΧφϦΞϦϦʔεɾA/BςετͰӨڹΛہॴԽ • ສҰͷ੾Γ໭͠΋όʔδϣϯΛ໭͚ͩ͢ → ໰୊ରԠͷ༨༟͕ੜ·ΕΔ

Slide 29

Slide 29 text

ϦϦʔεϑϩʔ

Slide 30

Slide 30 text

·ͱΊͱFAQ

Slide 31

Slide 31 text

·ͱΊ • MLγεςϜͷ։ൃɾӡ༻νʔϜͰݚڀɾ։ൃΞγελϯτΛ࠾༻ • ֶੜΞϧόΠτͷۀ຿ʹ͸͍͔ͭ͘ͷ੍໿͕͋Δ • ࣌ؒͷ੍໿ • ۀ຿ൣғͷ੍໿ • ੍໿Λ͏·͘ѻ͏޻෉Λͯ͠νʔϜͷੜ࢈ੑΛ޲্ • ࣌ؒͷ੍໿ → ϓϩδΣΫτ؅ཧΛ޻෉ • ۀ຿ൣғͷ੍໿ → γεςϜߏ੒ɾϦϦʔεϑϩʔΛ޻෉

Slide 32

Slide 32 text

FAQ • ΞγελϯτͷͨΊʹؤுͬͯ࢓૊ΈΛ࡞ΓࠐΉʁ • ΞγελϯτʹݶΒͣ৽نࢀೖোนΛԼ͛Δ͜ͱʹҙຯ͕͋Δ • Ξγελϯτ͕͍ͳ͘ͳͬͨΒͲ͏ͳΔʁ • ৽ػೳ։ൃ΍ٕज़తνϟϨϯδʹऔΓ૊ΊΔػձ͕ݮΔ • ϝϯλʔͱͯ͠Ұ൪େมͳ͜ͱ͸ʁ • ίϯςΩετεΠον • ϝϯλʔͷ࢓ࣄͬͯͲ͏ʁ • ૉ௚ʹָ͍͠