概要
- NLPで使えるものを作りたかった
(動くものを作るのが最優先)
- PreTrainedモデルを使ったチュートリアルを色々試して最後まで辿り着くことができた
(バージョン管理はかなり重要だと思った)
- 積み残しあり
- それはそれとして
作ったもの
使ったもの
[データ」
- trelloから落としてきたカード一覧
[学習]
- fugashi 1.0.5
- ipadic 1.0.0
- mecab-python3 1.0.3
- tensorflow 2.3.1
- tensorflow-estimator 2.3.0
- tensorflow-gpu 2.3.1
- transformers 3.4.0
[アプリ]
- django(3.1)
[環境]
- Ubuntu20.4
- docker 19.03
- docker-compose 1.27
- image tensorflow/tensorflow:latest-gpu-py3-jupyter(学習用)
- image python:3.8(アプリ用)
[参考にしたサイト」
- https://qiita.com/takubb/items/fd972f0ac3dba909c293
手順
参考にしたサイトを順番に実行してゆく
本件のために追加・修正した処理は以下
1. BertのFinetuning
transformerのソースを修正してタスクを足すタイプのチュートリアルは最後まで行きつかなかった、、参考サイトの方法で何とかアプリ作る所まで行きついた
1-1. trelloからデータの取得
- trelloのAPIを使ってカードを取得
- 取得したデータの名から学習用に使用できるデータを抽出
(完了している、ストーリーポイント(SP)がついている、ストーリーが記載されている)
1-2. ラベルの設定、対応表の保存
- SPは[0.5,1.0,2.0,3.0,,,]のようになっているが、マルチクラスの分類で使用できるラベルは[1,2,3,4,,,]なのでデータを修正してマッピング表{"0.5":0,"1.0":1,"2.0":2,,,}を作成しておく
- token化する際のmax_lengthを調整(長すぎるとなぜか学習できない)
2. Djangoで呼び出す
2-1. 学習で作成したモデルを配置
- staticに配置して読み込む
2-2. 学習時に作成した対応表を使用して結果をSPに変換
- staticに変換表を配置して変換処理に使用
結果
- 出来上がりは使ったものにある通り
- データが少ないので精度は不安定、結果は以下
今後やりたいこと
アプリまでいったので満足感は得た、、ジョークアプリとしては面白いと思う
- 精度を上げたい(CVやってないし、GPUはmax_lenght=128以上はメモリのらないといわれたし、、)
- Importanceを出したい、可視化したい
それはそれとして
諸々思いました
- プロジェクト単位でのデータ蓄積は厳しいかも
- 本当に使う場合は「上位3位以内を参考値としてみる」など運用の工夫が必要(精度を上げても100%にはならない。人がSPをつけても100%は無理だと思うし、、)
- 似たようなProbabilityが上位に並ぶ場合はストーリが不完全?ストーリー詳細化が必要となる指標になる?
- 最小単位のカードは「スプリントの中で一人がこなせる」大きさのSPに収束する?とするとSPを推測するよりも一定のSPに収まらないストーリーとその原因を出すほうが使える?
- チームに新しいメンバーが入った時も同じモデルでSPを出してよいのか?全体平均は上がるはず?そんなことが実際の案件で顧客に受け入れられるか?
- 同一タスクのSP平均増減が許容されない場合、メンバーはアプリやサービスが終わるまで固定せざるを得ない?
- ご指摘、アドバイスなど是非お願いします!