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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
270
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
脆弱性対応、どこで線を引くか
rymiyamoto
0
350
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
380
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
150
EventBridge Connection
_kensh
5
690
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
720
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
120
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
130
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
140
Agentic Web
dynamis
1
200
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
1.5k
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
How to build a perfect <img>
jonoalderson
1
5.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Technical Leadership for Architectural Decision Making
baasie
3
400
Skip the Path - Find Your Career Trail
mkilby
1
140
New Earth Scene 8
popppiees
3
2.3k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
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のライブラリを使って機械学習 を簡単に出来ました。(ただしパラメータの チューニングは機械学習の知識が必要)