Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

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

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

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 からどうぞ。 ご視聴ありがとうございました。

×