SlideShare a Scribd company logo
2018-03-03
68th Tokyo.R
RからfastTextを使ってみた
フリーランス 研修・人材育成サービス
タナカ ケンタ
https://mana.bi/
はじめに
このビデオおよび資料は、過去にTokyo.Rで著者が発表し
た内容を、再構成し録画したものです。
現在 (2019年10月) の時点で古くなり、内容が成立しな
い部分などは修正していますが、基本的には当時のままの
内容です。
公開後は積極的なメンテナンスは行いませんので、ご覧に
なったタイミングによっては古くて使い物にならないかもしれま
せんが、ご了承ください。
自己紹介
タナカ ケンタ https://mana.bi/
フリーランス (個人事業主) として、研修講師、
教育コンテンツの開発などを通じて人材育成サービスを提供
データ分析、ITインフラ分野の入門研修などを中心に豊富な実績
メーカー系人材育成企業→調査会社→独立
研修、教育コンテンツ開発のご依頼をお待ちしています。
オンライン、オフライン、日程も柔軟に対応可能です。
1. fastTextとは
 2016年にFacebookが公開した、テキスト表現と
文書分類のためのライブラリ → https://fasttext.cc/
 word2vecなどの先行研究を踏まえて、高速で効率的な
学習ができることが利点 (よく「10億語を数分で」と表現される)
 ライブラリ自身が教師あり学習をサポートしている
 Pythonのgensimパッケージから利用することが一般的なようだが、
R用のパッケージも開発、公開されている
2. RからfastTextを利用するためのパッケージ
 fastText, fastrtext, textTinyR などがある
 今回はfastrtextで教師あり学習をしてみる
 2019年10月現在、fastrtextはCRANから削除されている
作者のGitHubからインストール可能
devtools::install_github("pommedeterresautee/fastrtext")
 2019年10月現在、fastTextパッケージが改良され、教師あり学習にも
対応したので、こちらも使ってみる
devtools::install_github("mlampros/fastText")
3. 使用するデータ
 ロンウイット社がCC BY-NDで提供しているLivedoorニュースコーパス
 9ジャンル、各500 - 900程度の記事が収録されている
 この9クラスを判別する学習モデルを作成、評価する
 先頭4行 (URL、日時、空行、タイトル) を除去して使用
4. データの前処理
 形態素解析は必要 (RMeCab + mecab-ipadic-neologd)
 形態素解析し名詞、動詞、形容詞のみ取り出す関数を作成
 64bit Windowsでは64bit版野良ビルドを使うとよいかも
 教師あり学習のためのラベル (ジャンル) を付与
⇒ __label__n という形式 (nはクラス番号)
5. 学習モデルの作成 (1) fastrtext
 execute() 関数でfastTextを呼び出す
 今回は全7367件の80%で学習、20%で検証
> t <- Sys.time()
> execute(commands = c("supervised",
"-input", "ldcc_train_data.txt",
"-output", "ldcc_train_model",
"-dim", 200, "-lr", 0.1, "-epoch", 50,
"-wordNgrams", 2, "-verbose", 2))
Number of words: 68041 Number of labels: 9
> difftime(Sys.time(), t, units = "secs")
Time difference of 98.08072 secs
5. 学習モデルの作成 (2) fastText
 fasttext_interface() 関数でfastTextを呼び出す
 今回は全7367件の80%で学習、20%で検証
> params = list(command = "supervised", lr = 0.1, dim = 200,
input = file.path(".", "ldcc_train_data.txt"),
output = file.path(".", "model_ldcc"),
epoch = 50, wordNgrams = 2, verbose = 2, thread = 6)
> res = fasttext_interface(params,
path_output = file.path(".", "sup_logs.txt"),
MilliSecs = 5, remove_previous_file = TRUE,
print_process_time = TRUE)
Number of words: 5446 Number of labels: 9
time to complete : 11.32058 secs
6. fastTextの学習パラメータについて
 -dim: ベクトル空間の次元数。一般に200 - 300程度
 -lr: 学習率 (Learning Rate)。fastTextでは0 - 1の値を取る。
一般には0.1以上の値を指定する。
 -epoch: 学習回数。一般に5 - 50の値を指定する。値が大きいほ
ど、訓練データへの適切なパラメータが見つかりやすくなるが、大きすぎ
ると過学習を引き起こす
 -wordNgrams: 前後n単語の語順を考慮して学習する。デフォル
トは1 (語順を考慮しない)。一般に1 - 5の値を指定する。値が大き
すぎると、遠く離れた単語間の、偶然の関係を学習してしまう
 詳細はfastTextのドキュメントを参照のこと
7. 精度評価 (1) fastrtext
 学習結果のモデルはファイルとして出力されるので、読み込んで
検証用データを予測、ラベルの照合を行う
 92.32%程度の正解率が得られた
> test_data.vec <- readLines("ldcc_test_data.txt") # 検証用データの読み込み
> model.ft <- load_model("./ldcc_train_model.bin") # モデルの読み込み
> pred.ft <- predict(model.ft, sentences = test_data.vec,
simplify = TRUE) # 予測の実行
> result.prob <- mean(names(pred.ft) == str_replace_all(
str_replace_all(test_data$label, " .*$", ""),
"__label__", "")) # "__label__" を除去し比較
> print(result.prob) # 正解率の表示
[1] 0.9232858 # 92.32%
7. 精度評価 (2) fastText
 学習結果のモデルはファイルとして出力されるので、読み込んで
検証用データを予測、ラベルの照合を行う
 91.71%程度の正解率が得られた (誤差の範囲でパッケージによる違いはない)
> params <- list(command = "predict",
model = file.path(".", "ldcc_train_model2.bin"),
test_data = file.path(".", "ldcc_test_data.txt"))
> res <- fasttext_interface(params,
path_output = file.path(".", "predict_result.txt"))
> pred.ft <- readLines("predict_result.txt")
# fastTextパッケージでは返り値に "__label__" が付くので、test_data$labelを使う
> result.prob <- mean(pred.ft == test_data$label)
> print(result.prob) # 正解率の表示
[1] 0.9171758 # 91.71%
8. パラメータを変えると...
 教師データを増やす (90%) ⇒ 約92.8%, 約34秒
 epochを増やす (200) ⇒ 約93.89%, 約98秒
 両方組み合わせる ⇒ 約91.31%, 約110秒
 Ngramを増やす (3) ⇒ 約90.83%, 約53秒
 次元を増やす (300) ⇒ 約91.78%, 約56秒
 参考: doc2vecとtensorflowで、livedoor newsコーパスを自動
分類してみたでは85%
 参考: 深層学習でニュース記事を分類するでは95%
学習パラメータの変更による
精度改善はほとんど見られない
⇒形態素の前処理などで工夫
の余地がある
9. まとめ
 fastTextはFacebookが開発した高速なWord Embedding /
Text Classificationアルゴリズム
 fastrtext / fastTextパッケージで簡単に教師あり学習ができる
 Livedoorニュースコーパスを対象に分類実験したところ、
大してチューニングせずに92-3%程度の精度が得られた
 サンプルコードはGitHubにあります
おわりに
データ分析その他IT関連の研修、教育コンテンツ開発
のご依頼をお待ちしています。
オンライン、オフライン、日程も柔軟に対応可能です。
全国どこへでも伺います (交通費は別途頂戴いたします)。
お問い合わせは https://mana.bi からどうぞ。
ご視聴ありがとうございました。

More Related Content

What's hot

ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
 
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Shotaro Suzuki
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
 
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDSIbis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Cloudera Japan
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
Norishige Fukushima
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
Takuya Tezuka
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
 
情報検索の基礎
情報検索の基礎情報検索の基礎
情報検索の基礎
Retrieva inc.
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
Google Cloud Platform - Japan
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介
Uchio Kondo
 
FiNC DDD第一回勉強会
FiNC DDD第一回勉強会FiNC DDD第一回勉強会
FiNC DDD第一回勉強会
裕紀 重村
 

What's hot (20)

ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
 
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDSIbis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
情報検索の基礎
情報検索の基礎情報検索の基礎
情報検索の基礎
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介
 
FiNC DDD第一回勉強会
FiNC DDD第一回勉強会FiNC DDD第一回勉強会
FiNC DDD第一回勉強会
 

Similar to TokyoRリプレイ - RからfastTextを使ってみた

no12.pptx
no12.pptxno12.pptx
no12.pptx
Penguin49
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
Shunsuke Nakamura
 
Ai for marketing
Ai for marketingAi for marketing
Ai for marketing
Hiroki Iida
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27
Kensuke Mitsuzawa
 
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
Suzuki Masayuki
 
Interop2017
Interop2017Interop2017
Interop2017
tak9029
 
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)none_toka
 
[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...
[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...
[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...
Deep Learning JP
 
WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...
WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...
WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...
Takanori Nakai
 
コンテンツ作成とInstructional design
コンテンツ作成とInstructional designコンテンツ作成とInstructional design
コンテンツ作成とInstructional designMinoru Uchida
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
Motohiro Ueki
 
Un supervised learning
Un supervised learningUn supervised learning
Un supervised learning
yuki uchida
 
データ解析技術2019
データ解析技術2019データ解析技術2019
データ解析技術2019
Yusuke Yamamoto
 
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル
Yuya Unno
 
TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!
Kei Hirata
 

Similar to TokyoRリプレイ - RからfastTextを使ってみた (17)

no12.pptx
no12.pptxno12.pptx
no12.pptx
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
 
Ai for marketing
Ai for marketingAi for marketing
Ai for marketing
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27
 
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
dots.女子部勉強会 vol.5 機械学習ハンズオン ~ 協調フィルタリング ~
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
 
Interop2017
Interop2017Interop2017
Interop2017
 
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
 
[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...
[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...
[DL輪読会] Towards an Automatic Turing Test: Learning to Evaluate Dialogue Respo...
 
WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...
WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...
WSDM2018 読み会 Latent cross making use of context in recurrent recommender syst...
 
コンテンツ作成とInstructional design
コンテンツ作成とInstructional designコンテンツ作成とInstructional design
コンテンツ作成とInstructional design
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
 
Un supervised learning
Un supervised learningUn supervised learning
Un supervised learning
 
データ解析技術2019
データ解析技術2019データ解析技術2019
データ解析技術2019
 
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル
 
TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!
 

TokyoRリプレイ - RからfastTextを使ってみた