Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyで機械学習してみた
Search
kunou
December 08, 2017
Technology
1
1.1k
Rubyで機械学習してみた
kunou
December 08, 2017
Tweet
Share
More Decks by kunou
See All by kunou
GANについて
kunou
0
420
AIか何かについて.pdf
kunou
0
25
Pythonを書いていておーマジかーと感じたあれこれ
kunou
1
710
ネットワークグラフを作成する
kunou
0
35
ZIP!!
kunou
0
170
zip
kunou
0
500
Make Mouse
kunou
0
610
RubyのProcのあれをこうしました
kunou
0
68
esm lt Clojure like threading macro
kunou
0
400
Other Decks in Technology
See All in Technology
株式会社EventHub・エンジニア採用資料
eventhub
0
1.9k
Hands-on / Kaname Frusawa / Cloud Compare Users Meetup 2024 at University of Tokyo on April 17
paraworld
2
470
AIQ株式会社 エンジニア向け会社紹介資料
aiqlab
0
370
Four keys改善の取り組み事例紹介
sansantech
PRO
3
230
小さな開発会社がWebサービスを作る理由
polidog
PRO
1
160
TransitGatewayの基礎
toru_kubota
0
230
現代CSSフレームワークの内部実装とその仕組み
poteboy
3
1.2k
Cloud Native Java with Spring Boot (CNCF Aarhus, April 2024)
thomasvitale
1
130
Microsoft Cloudで開発ライフサイクルを保護する
kkamegawa
0
140
レガシーをぶっ壊せ。AEONで始めるDevRelの話 / Qiita Night 2024-2-22
aeonpeople
3
150
Oracle Cloud Infrastructure:2024年4月度サービス・アップデート
oracle4engineer
PRO
1
110
OpenTelemetry を使ったトレースエグザンプラーの活用 / otel-trace-exemplar
k6s4i53rx
2
640
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
How to Ace a Technical Interview
jacobian
272
22k
Building Applications with DynamoDB
mza
88
5.6k
Unsuck your backbone
ammeep
662
57k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
321
20k
Typedesign – Prime Four
hannesfritz
36
2.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
240
1.2M
Fantastic passwords and where to find them - at NoRuKo
philnash
36
2.5k
Visualization
eitanlees
135
14k
The Invisible Customer
myddelton
114
12k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Transcript
Rubyで機械学習してみた 8, 12, 2017 A-LT
Rubyで機械学習してみた やったこと 1.RubyでMeCabを使い文書を分かち書きにする 2.RubyでPyCallを使いWord2Vecする 3.Rubyで類似性の高い単語を取得する
1.RubyでMeCabを使い文書を分か ち書きにする
Rubyで機械学習してみた MeCabとは MeCabはオープンソースの形態素解析エンジン で、奈良先端科学技術大学院大学出身、現 GoogleソフトウェアエンジニアでGoogle 日本 語入力開発者の一人である工藤拓によって開 発されている。名称は開発者の好物「和布蕪 (めかぶ)」から取られた。 wikipediaより
Rubyで機械学習してみた 形態素解析とは 形態素解析(けいたいそかいせき、 Morphological Analysis)とは、文法的な 情報の注記の無い自然言語のテキストデー タ(文)から、対象言語の文法や、辞書と 呼ばれる単語の品詞等の情報にもとづき、 形態素(Morpheme, おおまかにいえば、言
語で意味を持つ最小単位)の列に分割し、 それぞれの形態素の品詞等を判別する作業 である。 wikipediaより
Rubyで機械学習してみた 実際に形態素解析してみる
Rubyで機械学習してみた 実際に形態素解析してみる 入力: “昨日食べたものが思い出せない” 出力: 昨日 名詞,副詞可能,*,*,*,*,昨日,キノウ,キノー 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ た
助動詞,*,*,*,特殊・タ,基本形,た,タ,タ もの 名詞,非自立,一般,*,*,*,もの,モノ,モノ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 思い出せ 動詞,自立,*,*,一段,未然形,思い出せる, オモイダセ,オモイダセ ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
Rubyで機械学習してみた 実際に形態素解析してみる 入力: “昨日食べたものが思い出せない” 出力: 昨日 名詞,副詞可能,*,*,*,*,昨日,キノウ,キノー 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ た
助動詞,*,*,*,特殊・タ,基本形,た,タ,タ もの 名詞,非自立,一般,*,*,*,もの,モノ,モノ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 思い出せ 動詞,自立,*,*,一段,未然形,思い出せる,オモイダセ,オモイダセ ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
Rubyで機械学習してみた Rubyでやってみる MeCabのWrapperであるnattoというgemがある
Rubyで機械学習してみた Rubyでやってみる require ‘natto' nm = Natto::MeCab.new puts nm.parse("昨日はうどんを食べたよ") =>
昨日 名詞,副詞可能,*,*,*,*,昨日,キノウ,キノー は 助詞,係助詞,*,*,*,*,は,ハ,ワ うどん 名詞,一般,*,*,*,*,うどん,ウドン,ウドン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ よ 助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
Rubyで機械学習してみた Rubyでやってみる require ‘natto' nm = Natto::MeCab.new puts nm.parse("昨日はうどんを食べたよ") 昨日
名詞,副詞可能,*,*,*,*,昨日,キノウ,キノー は 助詞,係助詞,*,*,*,*,は,ハ,ワ うどん 名詞,一般,*,*,*,*,うどん,ウドン,ウドン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ よ 助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
Rubyで機械学習してみた 今回Mecabを何に使うか? Word2Vecするために、単語ごとに分かち書きされた状態に したい。品詞などは使わない。
Rubyで機械学習してみた Rubyで分かち書きにしてみる require ‘natto' nm = Natto::MeCab.new(output_format_type: :wakati) puts nm.parse(“昨日はうどんを食べたよ")
昨日 は うどん を 食べ た よ
Rubyで機械学習してみた Rubyで分かち書きにしてみる require ‘natto' nm = Natto::MeCab.new(output_format_type: :wakati) puts nm.parse(“昨日はうどんを食べたよ")
昨日 は うどん を 食べ た よ
Rubyで機械学習してみた さらに基本形にする 時を駆ける少女 時を駆けた少女 時を駆けたい少女 時を駆けている少女
Rubyで機械学習してみた さらに基本形にする 時を駆ける少女 時を駆けた少女 時を駆けたい少女 時を駆けている少女 全部駆ける にしたい
Rubyで機械学習してみた MeCabで基本形にする $ echo "時を駆けたい少女" | mecab -F"%f[6] " -U"%m
" - E"\n" 時 を 駆ける たい 少女
Rubyで機械学習してみた MeCabで基本形にする $ echo "時を駆けたい少女" | mecab -F"%f[6] " -U"%m
" - E"\n" 時 を 駆ける たい 少女
Rubyで機械学習してみた MeCabで基本形にする $ echo "時を駆けたい少女" | mecab -F"%f[6] " -U"%m
" - E"\n" 時 を 駆ける たい 少女
Rubyで機械学習してみた Rubyで基本形の分かち書きにする Natto::MecabのコンストラクタにMecabのオプションが渡せるら しい。
Rubyで機械学習してみた Rubyで基本形の分かち書きにする Natto::MecabのコンストラクタにMecabのオプションが渡せるら しい。 Natto::MeCab.new('-F"%f[6] " -U"%m " -E"\n" ‘).
parse('時を駆けたい少女') => "\"時\"を\"駆ける\"たい\"少女\"\n\""
Rubyで機械学習してみた Rubyで基本形の分かち書きにする Natto::MecabのコンストラクタにMecabのオプションが渡せるら しい。 Natto::MeCab.new('-F"%f[6] " -U"%m " -E"\n"‘). parse('時を駆けたい少女')
=> "\"時\"を\"駆ける\"たい\"少女\"\n\"" 何かちょっと違う…
Rubyで機械学習してみた Rubyで基本形の分かち書きにする Natto::MecabのコンストラクタにMecabのオプションが渡せるら しい。 Natto::MeCab.new('-F"%f[6] " -U"%m " -E”\n”’, output_format_type:
:wakati). parse('時を駆けたい少女') ArgumentError: wrong number of arguments (given 2, expected 0..1) こうかな?
Rubyで機械学習してみた Rubyで基本形の分かち書きにする Natto::MecabのコンストラクタにMecabのオプションが渡せるら しい。 Natto::MeCab.new('-F"%f[6] " -U"%m " -E”\n”’, output_format_type:
:wakati). parse('時を駆けたい少女') ArgumentError: wrong number of arguments (given 2, expected 0..1) こうかな?
Rubyで機械学習してみた Rubyで基本形の分かち書きにする Natto::MecabのコンストラクタにMecabのオプションが渡せるら しい。 Natto::MeCab.new('-F"%f[6] " -U"%m " -E”\n”’, output_format_type:
:wakati). parse('時を駆けたい少女') ArgumentError: wrong number of arguments (given 2, expected 0..1) ……
Rubyで機械学習してみた Rubyで基本形の分かち書きにする `echo "時を駆けたい少女" | mecab -F"%f[6] " -U"%m "
-E”\n"` => "時 を 駆ける たい 少女 \n"
Rubyで機械学習してみた Rubyで基本形の分かち書きにする `echo "時を駆けたい少女" | mecab -F"%f[6] " -U"%m "
-E”\n"` => "時 を 駆ける たい 少女 \n" Nattoで基本形の分かち書きにする方法が分かりませんでした!
2.RubyͰPyCallΛ͍Word2Vec ͢Δ
Rubyで機械学習してみた Word2Vecとは? Word2vecは、2層から成り、テキスト処理を行う ニューラルネットワークです。 テキストコーパス を入力すると、出力結果には、ベクトルのセット、 つまりコーパスにある単語 の特徴量ベクトル(feature vector)が出されま す。
〜中略〜 Word2vecの目的及び有用性は、類似語のベクトル をベクトル空間にグループ化することです。つま り、数値に基づいて類似性を検知するのです。 参考URL: https://deeplearning4j.org/ja/word2vec
Rubyで機械学習してみた Word2Vecとは? Word2vecは、2層から成り、テキスト処理を行う ニューラルネットワークです。 テキストコーパス を入力すると、出力結果には、ベクトルのセット、 つまりコーパスにある単語 の特徴量ベクトル(feature vector)が出されま す。
〜中略〜 Word2vecの目的及び有用性は、類似語のベクトル をベクトル空間にグループ化することです。つま り、数値に基づいて類似性を検知するのです。 ࢀߟURL: https://deeplearning4j.org/ja/word2vec
Rubyで機械学習してみた Word2Vecとは? Word2vecは、2層から成り、テキスト処理を行う ニューラルネットワークです。 テキストコーパス を入力すると、出力結果には、ベクトルのセット、 つまりコーパスにある単語 の特徴量ベクトル(feature vector)が出されま す。
〜中略〜 Word2vecの目的及び有用性は、類似語のベクトル をベクトル空間にグループ化することです。つま り、数値に基づいて類似性を検知するのです。 ࢀߟURL: https://deeplearning4j.org/ja/word2vec
Rubyで機械学習してみた Pythonで書くと from gensim.models import word2vec import sys sentences =
word2vec.LineSentence(text_file_path) model = word2vec.Word2Vec(sentences, sg=1,size=100, min_count=1, window=10,hs=1,negative=0) model.save(model_file_path) ࢀߟURL: https://m0t0k1ch1st0ry.com/blog/2016/08/28/word2vec/
Rubyで機械学習してみた Pythonで書くと from gensim.models import word2vec import sys sentences =
word2vec.LineSentence(text_file_path) model = word2vec.Word2Vec(sentences, sg=1,size=100, min_count=1, window=10,hs=1,negative=0) model.save(model_file_path) ࢀߟURL: https://m0t0k1ch1st0ry.com/blog/2016/08/28/word2vec/
Rubyで機械学習してみた Pythonで書くと from gensim.models import word2vec import sys sentences =
word2vec.LineSentence(text_file_path) model = word2vec.Word2Vec(sentences, sg=1,size=100, min_count=1, window=10,hs=1,negative=0) model.save(model_file_path) ࢀߟURL: https://m0t0k1ch1st0ry.com/blog/2016/08/28/word2vec/ これをRubyでPyCallを使って書いてみる
Rubyで機械学習してみた Rubyで書くと require 'pycall/import' include PyCall::Import pyimport 'gensim' sentences =
gensim::models::word2vec.LineSentence.new(‘text_file_pa th’) model = gensim::models::word2vec.Word2Vec.new(sentences, sg: 1, size: 100, min_count: 1, window: 10, hs: 1, negative: 0) model.save(model_file_path)
Rubyで機械学習してみた Rubyで書くと require 'pycall/import' include PyCall::Import pyimport 'gensim' sentences =
gensim::models::word2vec.LineSentence.new(‘text_file_pa th’) model = gensim::models::word2vec.Word2Vec.new(sentences, sg: 1, size: 100, min_count: 1, window: 10, hs: 1, negative: 0) model.save(model_file_path)
3.Rubyで類似性の高い単語を取得 する
RubyͰػցֶशͯ͠Έͨ 今回学習させたファイルはこちら http://www.aozora.gr.jp/cards/001562/files/ 52410_ruby_51060.zip
Rubyで機械学習してみた 関羽でやってみる $ ruby similar_word.rb train.model 関羽 憂鬱 0.816013514995575 従える
0.7802281379699707 玄徳 0.7487945556640625 張飛 0.7451599836349487 先頭 0.7414117455482483 謝 0.740109920501709 顔 0.7302446961402893 同意 0.7249001860618591 沈痛 0.7155432105064392 以下 0.7124083042144775
Rubyで機械学習してみた 関羽でやってみる $ ruby similar_word.rb train.model 関羽 憂鬱 0.816013514995575 従える
0.7802281379699707 玄徳 0.7487945556640625 張飛 0.7451599836349487 先頭 0.7414117455482483 謝 0.740109920501709 顔 0.7302446961402893 同意 0.7249001860618591 沈痛 0.7155432105064392 以下 0.7124083042144775
Rubyで機械学習してみた 関羽でやってみる $ ruby similar_word.rb train.model 関羽 憂鬱 0.816013514995575 従える
0.7802281379699707 玄徳 0.7487945556640625 張飛 0.7451599836349487 先頭 0.7414117455482483 謝 0.740109920501709 顔 0.7302446961402893 同意 0.7249001860618591 沈痛 0.7155432105064392 以下 0.7124083042144775 Կނ͔Top ༕ᓔ
Rubyで機械学習してみた 張飛でやってみる $ ruby similar_word.rb train.model 張飛 憂鬱 0.760344386100769 関羽
0.7451599836349487 従える 0.7081006765365601 驚く 0.7006173133850098 謝 0.693412721157074 すっかり 0.6737435460090637 かえって 0.6630535125732422 促 0.6543962955474854 顔 0.6533028483390808 左右 0.650241494178772
Rubyで機械学習してみた 張飛でやってみる $ ruby similar_word.rb train.model 張飛 憂鬱 0.760344386100769 関羽
0.7451599836349487 従える 0.7081006765365601 驚く 0.7006173133850098 謝 0.693412721157074 すっかり 0.6737435460090637 かえって 0.6630535125732422 促 0.6543962955474854 顔 0.6533028483390808 左右 0.650241494178772
Rubyで機械学習してみた 張飛でやってみる $ ruby similar_word.rb train.model 張飛 憂鬱 0.760344386100769 関羽
0.7451599836349487 従える 0.7081006765365601 驚く 0.7006173133850098 謝 0.693412721157074 すっかり 0.6737435460090637 かえって 0.6630535125732422 促 0.6543962955474854 顔 0.6533028483390808 左右 0.650241494178772 ͓લ͔
Rubyで機械学習してみた 劉備でやってみる $ ruby similar_word.rb train.model 劉備 大きい 0.7147447466850281 指さす
0.7119417190551758 茶壺 0.6981431245803833 むち 0.6907016634941101 彼女 0.689379096031189 母 0.6783629655838013 起つ 0.6581389307975769 おろおろ 0.6535757780075073 胸 0.6521176099777222 僧 0.6508723497390747
Rubyで機械学習してみた 劉備でやってみる $ ruby similar_word.rb train.model 劉備 大きい 0.7147447466850281 指さす
0.7119417190551758 茶壺 0.6981431245803833 むち 0.6907016634941101 彼女 0.689379096031189 母 0.6783629655838013 起つ 0.6581389307975769 おろおろ 0.6535757780075073 胸 0.6521176099777222 僧 0.6508723497390747
Rubyで機械学習してみた 劉備でやってみる $ ruby similar_word.rb train.model 劉備 大きい 0.7147447466850281 指さす
0.7119417190551758 茶壺 0.6981431245803833 むち 0.6907016634941101 彼女 0.689379096031189 母 0.6783629655838013 起つ 0.6581389307975769 おろおろ 0.6535757780075073 胸 0.6521176099777222 僧 0.6508723497390747 ཱུඋؾ ໌࿕Ͱͨ͠
Rubyで機械学習してみた まとめ ▸ RubyでもPythonのライブラリを使って機械学習 を簡単に出来ました。(ただしパラメータの チューニングは機械学習の知識が必要)