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
430
AIか何かについて.pdf
kunou
0
32
Pythonを書いていておーマジかーと感じたあれこれ
kunou
1
720
ネットワークグラフを作成する
kunou
0
49
ZIP!!
kunou
0
170
zip
kunou
0
510
Make Mouse
kunou
0
630
RubyのProcのあれをこうしました
kunou
0
94
esm lt Clojure like threading macro
kunou
0
430
Other Decks in Technology
See All in Technology
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
240
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
6
1.6k
Platform Engineeringは自由のめまい
nwiizo
4
2.1k
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
7.2k
Data-centric AI入門第6章:Data-centric AIの実践例
x_ttyszk
1
400
2025-02-21 ゆるSRE勉強会 Enhancing SRE Using AI
yoshiiryo1
1
330
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
120
Goで作って学ぶWebSocket
ryuichi1208
0
180
データマネジメントのトレードオフに立ち向かう
ikkimiyazaki
6
960
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
技術負債の「予兆検知」と「状況異変」のススメ / Technology Dept
i35_267
1
1.1k
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
580
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
A designer walks into a library…
pauljervisheath
205
24k
Speed Design
sergeychernyshev
27
790
Visualization
eitanlees
146
15k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Embracing the Ebb and Flow
colly
84
4.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
The Invisible Side of Design
smashingmag
299
50k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
174
51k
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のライブラリを使って機械学習 を簡単に出来ました。(ただしパラメータの チューニングは機械学習の知識が必要)