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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kunou
December 08, 2017
Technology
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで機械学習してみた
kunou
December 08, 2017
More Decks by kunou
See All by kunou
GANについて
kunou
0
460
AIか何かについて.pdf
kunou
0
47
Pythonを書いていておーマジかーと感じたあれこれ
kunou
1
740
ネットワークグラフを作成する
kunou
0
69
ZIP!!
kunou
0
200
zip
kunou
0
530
Make Mouse
kunou
0
660
RubyのProcのあれをこうしました
kunou
0
110
esm lt Clojure like threading macro
kunou
0
470
Other Decks in Technology
See All in Technology
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
110
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
150
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
1.2k
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
240
手塩にかけりゃいいってもんじゃない
ming_ayami
0
600
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
380
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.2k
やさしいA2A入門
minorun365
PRO
12
1.9k
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
240
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
7
2.7k
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
210
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.7k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Six Lessons from altMBA
skipperchong
29
4.3k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Site-Speed That Sticks
csswizardry
13
1.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
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のライブラリを使って機械学習 を簡単に出来ました。(ただしパラメータの チューニングは機械学習の知識が必要)