2019年7〜10月までフルタイムで通っていたスクールの卒業課題テーマを、機械学習の勉強のために発展させたものです
卒業発表スライド https://www.slideshare.net/secret/y0m7g1nZdxpVYP
*当初は炎上予測がテーマだったので、このnotebookの内容とはややズレます
*表紙スライドの字が見えない場合は2枚目から戻ると見えます
*ちなみに…
スクールで取り組んだ課題のリポジトリ https://github.com/kaorisugi/diveintocode-ml
論文読解課題のスライドシェア https://www.slideshare.net/secret/qGmdiwl4uGS20O
これからツイートする予定の文章に対し、過去の類似ツイートを探し、反応のネガポジスコア付きで上位10位まで提示する。
1)ツイートデータセットを取得
・TwitterAPIを使ってツイートを取得
・各ツイートに対する反応ツイート(リプライ、引用RT)を取得
・反応ツイートの極性表現数をカウントしてネガポジスコアとpositive/negative/fire!!!判定を得る
(positive/negativeの判定基準:極性表現数が多い方、fire!!!(炎上)の判定基準:極性表現の70%以上がnegative)
2)データセットの前処理
・正規表現、ストップワード除去など
3)予測モデルを生成
・データセットをDoc2vecで学習
4)ツイート予定文章のネガポジ予測を返す
・データセットから、ツイート予定文書と似ている文書を探す
・ネガポジスコア付きで、類似ツイート上位10個を返す
類似度確認用にデータセット内にあるものと同じ文を入力したところ、類似度1位で返ってきた。また、2位、3位にもマスクに関する似た話題のツイートが提示されたので類似ツイートの抽出は成功。ネガポジスコアもデータズレなどなく正確に表示され、目的は達成できた。
ツイッターAPI制限により、まだサンプルが少ない(完成時200件程度)が、データを蓄積できる仕様にしているので、ツイート文のバリエーションを増やしていけば、様々な入力文に対応できるようになると思う。
ネガポジ判定については、ネガティブなテーマへの言及に共感したコメントでネガ判定が出ているケースも多く、必ずしもツイート主へのネガ感情ではないことに注意が必要。
1)文章ベクトルを特徴量としたネガポジ予測モデル
・文章ベクトルとフォロワー数を特徴量X、ネガポジスコアを目的変数yとしたデータを学習
・文章ベクトルはDoc2vecとTf-idfの2種を作成
・ツイート予定文書を入力してネガポジスコアを予測する
・試した予測モデル
・MultiOutputRegressor、SVRのrbf と SVRの線形、lightgbm、ランダムフォレスト
→精度が低すぎて断念
2)ツイッターAPI制限への挑戦(データセットの拡大)
・古いツイートを大量取得できるパッケージを発見(通常は1週間程度しか遡れない)
→取得データから反応ツイートの取得を試みたができなかった
・config.py ファイルにツイッターAPIトークンを記入
・jupyternotebookファイル twitter_judgement_model.ipynbを実行
・jupyternotebook上でのMeCab利用で詰まる場合は、下記の自然言語処理環境のDockerイメージを使うとうまくいきました。
https://github.com/hoto17296/docker-japanese-nlp
・必要なツール、ライブラリ
$ pip install tweepy
$ pip install oseti
$ pip install requests requests_oauthlib
$ pip install sengiri
$ pip install gensim
$ pip install emoji