Slide 1

Slide 1 text

Yuji Isobe JavaScriptͰ΋ ػցֶश͕΍Γ͔ͨͬͨ࿩ Emotion Intelligence × GIGษڧձ

Slide 2

Slide 2 text

Ϛωʔδϟʔ 
 ϝϯςφʔ @yujiosaka github.com/yujiosaka/headless-chrome-crawler

Slide 3

Slide 3 text

ձࣾ www.emin.co.jp

Slide 4

Slide 4 text

એ఻ᶃ www.zenclerk.com/

Slide 5

Slide 5 text

ϏδωεɾOSSϚΠϯυΛ࣋ͬͨΤϯδχΞืूʂ એ఻ᶄ www.wantedly.com/projects/233437

Slide 6

Slide 6 text

ຊ୊

Slide 7

Slide 7 text

1.JavaScriptͰػցֶश͸Ͳ͜·ͰͰ͖Δͷ͔ 2.JavaScriptΛ࢖͏ϝϦοτͱσϝϦοτ 3.۩ମతͳ࣮ݱํ๏ͱσϞ ຊ೔ͷςʔϚ

Slide 8

Slide 8 text

ͦ΋ͦ΋JavaScriptͰ
 ػցֶशͬͯ·ͱ΋ʹͰ͖Μͷʁ

Slide 9

Slide 9 text

JavaScriptͰσΟʔϓϥʔχϯά speakerdeck.com/yujiosaka/hitasurale-sitedeipuraningu github.com/yujiosaka/js-mind XXXSFEEJUDPNSOPEFDPNNFOUTEH KT@NJOE@EFFQ@MFBSOJOH@MJCSBSZ@XSJUUFO@JO@FT ͳΜͰJavaScriptͰ͜Μͳ͜ͱͨ͠Μͩʁ ͦΜͳͷStarཉ͠͞ʹܾ·ͬͯΔͰ͠ΐ

Slide 10

Slide 10 text

ਤ੕

Slide 11

Slide 11 text

౰࣌ͷΦν TQFBLFSEFDLDPNZVKJPTBLBIJUBTVSBMFTJUFEFJQVSBOJOHV TMJEF

Slide 12

Slide 12 text

౰࣌ͷΦν TQFBLFSEFDLDPNZVKJPTBLBIJUBTVSBMFTJUFEFJQVSBOJOHV TMJEF

Slide 13

Slide 13 text

A. օ͕࢖ͬͯΔ͔Βศརʹͳ͍ͬͯ͘ Q. ͳͥσʔλαΠΤϯε͸Pythonʁ trends.google.co.jp/trends/explore?date=today%205-y&geo=JP&q=JavaScript,Python,AI

Slide 14

Slide 14 text

NumPy/Pandas - ߴ଎ɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕΍Γ΍͍͢ scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛ࢖ͬͨߴ଎ͳਂ૚ֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython Cݴޠ࣮૷ʴSIMD໋ྩʴ਺ֶతͳ࠷దԽʴ؆ܿͳهड़

Slide 15

Slide 15 text

NumPyΛ࢖ͬͨߴ଎ͳߦྻܭࢉ > import time > import numpy as np > a = np.random.random((1000, 1000)) > b = np.random.random((1000, 1000)) > t = time.time() > np.dot(a, b) > print(time.time() - t) 0.08162903785705566 Python + NumPy > const math = require('mathjs'); > const a = math.random([1000, 1000]); > const b = math.random([1000, 1000]); > const t = Date.now(); > math.multiply(a, b); > console.log((Date.now() - t) / 1000); 135.587 JavaScript + math.js

Slide 16

Slide 16 text

NumPy/Pandas - ߴ଎ɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕΍Γ΍͍͢ scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛ࢖ͬͨߴ଎ͳਂ૚ֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython γϯϓϧͳΠϯλʔϑΣʔεʢfit, transform, predictʣ

Slide 17

Slide 17 text

XGBoost ͔Β LightGBM ΁ͷ੾Γସ͕͑਺ߦͰ׬ྃ scikit-learnͷҰ؏ͨ͠ػցֶशAPI github.com/dmlc/xgboost/ github.com/Microsoft/LightGBM

Slide 18

Slide 18 text

NumPy/Pandas - ߴ଎ɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕΍Γ΍͍͢ scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛ࢖ͬͨߴ଎ͳਂ૚ֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython

Slide 19

Slide 19 text

σʔλαΠΤϯε΍ΔͳΒ Pythonʢ·ͨ͸Rʣͬ͠ΐ

Slide 20

Slide 20 text

͚ͩͲ…

Slide 21

Slide 21 text

ػցֶश͚ͩͳΒ೉͘͠ͳ͍

Slide 22

Slide 22 text

JavaScriptͰ΋Ͱ͖ͪΌ͏ʂ

Slide 23

Slide 23 text

- σʔλαΠΤϯεʹ͸
 ਺ֶɾ౷ܭ஌ࣝͱϋοΩϯά
 εΩϧ͚ͩͰͳ͘ɺਂ͍
 ઐ໳ੑ͕ٻΊΒΕΔ σʔλαΠΤϯεͱػցֶशͷҧ͍ ESFXDPOXBZDPN[JBUIFEBUBTDJFODFWFOOEJBHSBN ਂ͍ઐ໳ੑ ϋοΩϯά
 εΩϧ ਺ֶɾ
 ౷ܭ஌ࣝ ػց
 ֶश جૅ ݚڀ ةݥ
 κʔϯ σʔλ
 αΠΤϯε

Slide 24

Slide 24 text

σʔλαΠΤϯεͱػցֶशͷҧ͍ ESFXDPOXBZDPN[JBUIFEBUBTDJFODFWFOOEJBHSBN ϋοΩϯά
 εΩϧ ਺ֶɾ
 ౷ܭ஌ࣝ ػց
 ֶश - ਺ֶɾ౷ܭ஌ࣝͱ
 ϋοΩϯάεΩϧ͑͋͞Ε͹ɺ ػցֶश͸Ͱ͖Δ

Slide 25

Slide 25 text

ਂ͍ઐ໳ੑ͕ͳͨͬͯ͘
 ػցֶशͯ͠΋͍͍͡Όͳ͍ ΤϯδχΞͩ΋ͷ

Slide 26

Slide 26 text

NumPy/Pandas - ߴ଎ɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕΍Γ΍͍͢ scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛ࢖ͬͨߴ଎ͳਂ૚ֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython TensorFlow.js / brain.js

Slide 27

Slide 27 text

from tensorflow.contrib.keras.python import keras import numpy as np model = keras.Sequential() model.add(keras.layers.Dense(units=1, input_shape=[1])) model.compile(optimizer='sgd', loss='mean_squared_error') xs = np.array([[1], [2], [3], [4]]) ys = np.array([[1], [3], [5], [7]]) model.fit(xs, ys, epochs=1000) print(model.predict(np.array([[5]]))) TensorFlow Keras

Slide 28

Slide 28 text

import * as tf from '@tensorlowjs/tfjs'; const model = tf.sequential(); model.add(tf.layers.dense({units: 1, inputShape: [1]})); model.compile({optimizer: 'sgd', loss: 'meanSquaredError'}); const xs = tf.tensor2d([[1], [2], [3], [4]], [4, 1]); const ys = tf.tensor2d([[1], [3], [5], [7]], [4, 1]); await model.fit(xs, ys, {epochs: 1000}); model.predict(tf.tensor2d([[5]], [1, 1])).print(); TensorFlow.js WebGLΛ࢖ͬͨGPUܭࢉ

Slide 29

Slide 29 text

Ͱ΋Ͳ͏ͤ஗͍ΜͰ͠ΐʁ

Slide 30

Slide 30 text

- WebGLΛ࢖ͬͨTensorFlow.js͸
 AVXΛ࢖ͬͨTensorFlowͷ1.5-2ഒ஗͍ - ڊେͳϞσϧͷֶश͸10-15ഒ͔͔Δ͜ͱ΋͋Δ WebGLΛ࢖ͬͨGPUܭࢉ KTUFOTPSqPXPSHGBR

Slide 31

Slide 31 text

࣮༻తʹͳΓͭͭ͋Δ

Slide 32

Slide 32 text

͞Βʹ

Slide 33

Slide 33 text

- SIMD໋ྩͱWeb Assembly͕αϙʔτ͞ΕΔ - େ෯ͳύϑΥʔϚϯε޲্͕ظ଴͞ΕΔ TensorFlow.js 2.0΁ͷϩʔυϚοϓ www.tensorflow.org/community/roadmap

Slide 34

Slide 34 text

JavaScript࢖ͬͯͳΜ͔
 ͍͍͜ͱ͋Μͷʁ

Slide 35

Slide 35 text

- TypeScript͕࢖͑Δ - Universal/Isomorphic JavaScriptͷ࣮ݱ - ๛෋ͳNPMύοέʔδ͕׆༻Ͱ͖Δ - ඇಉظͳΦϯϥΠϯֶशʹద͍ͯ͠Δ - ϒϥ΢βͷϦιʔεΛ༗ޮ׆༻Ͱ͖Δ JavaScriptͰػցֶशΛߦ͏ϝϦοτ

Slide 36

Slide 36 text

ϒϥ΢β্ͰTensorFlow.jsΛಈ͔͢ qiita.com/kaneU/items/ca84c4bfcb47ac53af99

Slide 37

Slide 37 text

Ϧιʔεʢˇʣ͕અ໿Ͱ͖Δʂ

Slide 38

Slide 38 text

- ϒϥ΢β্Ͱಛ௃ྔͷநग़ɺม׵ɺ༧ଌΛߦ͏ͨΊ
 ίϐϖ͢Ε͹୭Ͱ΋ίϐʔαΠτ͕࡞Εͯ͠·͏ - ΞϧΰϦζϜͰ͸ͳ͘ɺಛ௃ྔ͕ͦ͜ڝ૪ྗͷݯઘ - ୭͕࡞ͬͯ΋ಉ͡΋ͷ͕Ͱ͖Δ৔߹͚ͩʹཹΊΔ ※ϦόʔεΤϯδχΞϦϯάʹ͸
 ऑ͍ͷͰϏδωεͰ͸஫ҙ͕ඞཁ

Slide 39

Slide 39 text

Googleͷ2018೥ΤΠϓϦϧϑʔϧ
 ωλͰTensorFlow.js͕࢖ΘΕͨ landing.google.co.jp/tegaki/

Slide 40

Slide 40 text

- ѹ౗తͳ৘ใෆ଍ - ߦྻܭࢉ͕؆ܿʹهड़Ͱ͖ͳ͍ - ػցֶशAPI͕ڞ௨Խ͞Ε͍ͯͳ͍ - ࠷৽ͷΞϧΰϦζϜ͕͙͢ʹར༻Ͱ͖ͳ͍ - ධՁؔ਺౳ͷपลϥΠϒϥϦ͕ෆ଍͍ͯ͠Δ JavaScriptͰػցֶशΛߦ͏σϝϦοτ

Slide 41

Slide 41 text

- 1ͭ1ͭ͸େͨ͜͠ͱͷͳ͍ؔ਺͕ͩɺ
 ͸͡Ί͔Βἧ͍ͬͯΔͱ͋Γ͕ͨΈΛ࣮ײ͢Δ ... from sklearn.cross_validation import train_test_split from sklearn.grid_search import GridSearchCV from sklearn.metrics import classification_report ... X_train, X_test, y_train, y_test = train_test_split(X, y) ... clf = GridSearchCV(...) ... report = classification_report(y_test, y_pred) ... scikit-learnͰΑ͘ݟΒΕΔίʔυ

Slide 42

Slide 42 text

Python͔ʁJavaScript͔ʁ - ຊؾͰσʔλαΠΤϯεΛ͢ΔͳΒPython - Ұ͔ΒػցֶशͷΞϓϦΛ࡞ΔͳΒPython - ͪΐͬͱͨ͠ػցֶश͚ͩͳΒԿͰ΋͍͍ - JavaScript͸ܾͯ͠ѱ͍બ୒ࢶͰ͸ͳ͍

Slide 43

Slide 43 text

ͲΜͳ΍Γํ͕͋Δͷʁ

Slide 44

Slide 44 text

TensorFlow.js - χϡʔϥϧωοτϫʔΫɾਂ૚ֶश brain.js - χϡʔϥϧωοτϫʔΫɾਂ૚ֶश Synaptic - χϡʔϥϧωοτϫʔΫɾਂ૚ֶश Natural - ࣗવݴޠॲཧ ml.js - ༷ʑͳػցֶशϥΠϒϥϦ܈ math.js - ౷ܭɾߦྻܭࢉ JavaScriptʹΑΔػցֶशϥΠϒϥϦ js.tensorflow.org github.com/BrainJS caza.la/synaptic/ github.com/NaturalNode/natural mathjs.org github.com/mljs χϡʔϥϧωοτϫʔΫࣗମ͸ൺֱత୯७ͳߦྻܭࢉ

Slide 45

Slide 45 text

TensorFlow.js - χϡʔϥϧωοτϫʔΫɾਂ૚ֶश brain.js - χϡʔϥϧωοτϫʔΫɾਂ૚ֶश Synaptic - χϡʔϥϧωοτϫʔΫɾਂ૚ֶश Natural - ࣗવݴޠॲཧ ml.js - ༷ʑͳػցֶशϥΠϒϥϦ܈ math.js - ౷ܭɾߦྻܭࢉ JavaScriptʹΑΔػցֶशϥΠϒϥϦ js.tensorflow.org github.com/BrainJS caza.la/synaptic/ github.com/NaturalNode/natural mathjs.org github.com/mljs

Slide 46

Slide 46 text

σϞ

Slide 47

Slide 47 text

> const iris = require('ml-dataset-iris'); > const { RandomForestClassifier } = require('ml-random- forest'); > > const CLASSES = ['setosa', 'versicolor', 'virginica']; > > const X = iris.getNumbers(); > const y = iris.getClasses().map(cls =>
 > CLASSES.indexOf(cls)
 > ); > const classifier = new RandomForestClassifier(); > classifier.train(X, y); > classifier.predict(X); > classifier.predict([ 6.7, 3, 5, 1.7 ]); [ 2 ] // 'virginica' mljs

Slide 48

Slide 48 text

JavaScriptͰ΋ ػցֶश͕΍Γ͔ͨͬͨ࿩ ͸ڪΕΔʹ଍Βͳ͍࿩