Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

以前にTokyo.Rで発表した内容を再構成しました。この資料をもとに作成したビデオが https://youtu.be/WTj06Dzixk4 にあります。

  • Identifiez-vous pour voir les commentaires

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

  1. 1. 2018-03-03 68th Tokyo.R RからfastTextを使ってみた フリーランス 研修・人材育成サービス タナカ ケンタ https://mana.bi/
  2. 2. はじめに このビデオおよび資料は、過去にTokyo.Rで著者が発表し た内容を、再構成し録画したものです。 現在 (2019年10月) の時点で古くなり、内容が成立しな い部分などは修正していますが、基本的には当時のままの 内容です。 公開後は積極的なメンテナンスは行いませんので、ご覧に なったタイミングによっては古くて使い物にならないかもしれま せんが、ご了承ください。
  3. 3. 自己紹介 タナカ ケンタ https://mana.bi/ フリーランス (個人事業主) として、研修講師、 教育コンテンツの開発などを通じて人材育成サービスを提供 データ分析、ITインフラ分野の入門研修などを中心に豊富な実績 メーカー系人材育成企業→調査会社→独立 研修、教育コンテンツ開発のご依頼をお待ちしています。 オンライン、オフライン、日程も柔軟に対応可能です。
  4. 4. 1. fastTextとは  2016年にFacebookが公開した、テキスト表現と 文書分類のためのライブラリ → https://fasttext.cc/  word2vecなどの先行研究を踏まえて、高速で効率的な 学習ができることが利点 (よく「10億語を数分で」と表現される)  ライブラリ自身が教師あり学習をサポートしている  Pythonのgensimパッケージから利用することが一般的なようだが、 R用のパッケージも開発、公開されている
  5. 5. 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")
  6. 6. 3. 使用するデータ  ロンウイット社がCC BY-NDで提供しているLivedoorニュースコーパス  9ジャンル、各500 - 900程度の記事が収録されている  この9クラスを判別する学習モデルを作成、評価する  先頭4行 (URL、日時、空行、タイトル) を除去して使用
  7. 7. 4. データの前処理  形態素解析は必要 (RMeCab + mecab-ipadic-neologd)  形態素解析し名詞、動詞、形容詞のみ取り出す関数を作成  64bit Windowsでは64bit版野良ビルドを使うとよいかも  教師あり学習のためのラベル (ジャンル) を付与 ⇒ __label__n という形式 (nはクラス番号)
  8. 8. 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
  9. 9. 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
  10. 10. 6. fastTextの学習パラメータについて  -dim: ベクトル空間の次元数。一般に200 - 300程度  -lr: 学習率 (Learning Rate)。fastTextでは0 - 1の値を取る。 一般には0.1以上の値を指定する。  -epoch: 学習回数。一般に5 - 50の値を指定する。値が大きいほ ど、訓練データへの適切なパラメータが見つかりやすくなるが、大きすぎ ると過学習を引き起こす  -wordNgrams: 前後n単語の語順を考慮して学習する。デフォル トは1 (語順を考慮しない)。一般に1 - 5の値を指定する。値が大き すぎると、遠く離れた単語間の、偶然の関係を学習してしまう  詳細はfastTextのドキュメントを参照のこと
  11. 11. 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%
  12. 12. 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%
  13. 13. 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% 学習パラメータの変更による 精度改善はほとんど見られない ⇒形態素の前処理などで工夫 の余地がある
  14. 14. 9. まとめ  fastTextはFacebookが開発した高速なWord Embedding / Text Classificationアルゴリズム  fastrtext / fastTextパッケージで簡単に教師あり学習ができる  Livedoorニュースコーパスを対象に分類実験したところ、 大してチューニングせずに92-3%程度の精度が得られた  サンプルコードはGitHubにあります
  15. 15. おわりに データ分析その他IT関連の研修、教育コンテンツ開発 のご依頼をお待ちしています。 オンライン、オフライン、日程も柔軟に対応可能です。 全国どこへでも伺います (交通費は別途頂戴いたします)。 お問い合わせは https://mana.bi からどうぞ。 ご視聴ありがとうございました。

×