はじめに
頑張れば、何かがあるって、信じてる。nikkieです。
週末の #pyhack で手を動かした内容についてブログに残します。
目次
勉強会の概要
(第112回)Python mini Hack-a-thon(オンライン) - connpass
基本的に毎月開催です。スプリントのゆるい版みたいな感じで各自自分でやりたいことを持ってきて、勝手に開発を進めています。参加費は無料です。 初めての方も常連さんもぜひご参加ください。
オンライン開催にしました
取り組んだこと
日本語テキストの分類タスクに取り組みました。
取り組んだ問題とは異なりますが、履歴書のテキストデータから採用するかしないかを分類するような問題設定です。
手元にはこれまで人がつけた「採用」「不採用」というラベルがあるので、教師あり学習が使えると見込んでいます。
性能のいい機械学習モデルができると、採用されやすい履歴書から人が見ることで、人のリソースを効率的に使えそうです。
データサイエンティストとして1年、独力でどこまででき、どこを補強した方がいいのかの確認を目的に、「機械学習で課題解決できたらいいな」とワクワクしながら取り組みました。
取り組みのログは以下にあります:
#pyhack
— nikkie 技書博のPython argparse本 boothにて頒布中 (@ftnext) 2020年6月13日
predict_probaで確率を出したあと、正例判定の閾値を0.5から下げて全部負例という状況は解消。
これはsklearnのcross_validateではできなさそうだったので、交差検証のFoldについて各metricsを出すというコードをひたすらに書きました。
手を動かすのは満足、モデルの性能→今後前処理頑張ろう
うまくいったこと
ホットケーキ作りです!
#pyhack
— nikkie 技書博のPython argparse本 boothにて頒布中 (@ftnext) 2020年6月13日
お昼はホットケーキ焼いて食べました(作り置きも兼ねる)
ココアパウダー入れたらほんのりあまい、おいしい
連日仕事→PyCon JPスタッフの動きで食料が尽きかけてましたが少し余裕を得てほっ(🥞だけに) pic.twitter.com/JoQi8MlIel
というのは冗談で、日本語テキストの前処理のための環境設定と思っています。
特にmecab-ipadic-NEologdを更新し、ふだん使っているmecab-python3
ではなくfugashi
を試しました。
2020年Q1の週1ブログでの素振りにより、前処理をするためのスクリプトはスラスラ書けました。
(今回はモデル訓練までを通して行うことを優先したので、前処理はとても大雑把です)
また、jupyterではなく小分けにしたスクリプトを作って進めたのも感触がよかったです。
課題に感じていること
前処理のコードに比べて、モデルの交差検証での性能評価のコードが書きにくかったです。
- 正例の方が少ない不均衡なデータのため、推論された確率を使って、閾値以上なら正例とするように処理を加える必要があった
- これにより
sklearn
に準備されたcross_val_score
やcross_validate
を使うのを断念。KFold
を繰り返し処理してモデルの指標の値を算出するように変更
結果、繰り返しが多いコードになり、「もうちょっとうまく書けるのでは?」と感じています。
今後
できたモデルはあまり性能がよくはありません。
前処理が単純すぎるので、工夫する余地が多分にあるという感触です。
またモデルの評価指標を決めずにいろいろなスコアを出力して交差検証したのはあまりよくなかったと感じています。
2クラス分類モデルの評価の指針は、例えば以下の本の5章にありそうです。
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
- 作者:Andreas C. Muller,Sarah Guido
- 発売日: 2017/05/25
- メディア: 単行本(ソフトカバー)
懇親会では形態素解析のライブラリの話になりました。
最近はginzaが登場してきたとのことでした。
分かち書きを教師なし学習で行う手法も登場していますね(sentencepieceなど)。
参加者、そして、運営の皆さま、1日ありがとうございました!