5.5K Views
March 07, 22
スライド概要
KAGGLEのJigsawで 銀メダルを獲得した 解法等 チームシャイニー職員 近藤俊彦 2022年2月16日(水)
目次 1. チームシャイニー秋葉原の紹介 2. 自己紹介 KaggleのJigsawコンペについて 3. 5. 113th Place Solution プログラミングコードについて 6. まとめ 4. 2
チームシャイニー秋葉原の紹介 チームシャイニー秋葉原は、東京都千代田区(秋葉原) に所在する就労移行支援事業所です。 https://team-shiny.org/ ⚫ 精神障害、発達障害を対象とした障害者福祉施設 ⚫ データサイエンスに特化、スタッフは当事者で構成 ⚫ 2020年10月に発足 ⚫ 大学・企業との連携を検討中 成長できる環境が有り、助け合いの精神の元、 チームで切磋琢磨しています。 3
自己紹介 チームシャイニー秋葉原職員の近藤俊彦です。 43歳。愛知県出身、名古屋工業大学を学士で卒業。 ⚫ シャイニー入所前はプログラミングはほぼ未経験。 ⚫ 2020年7月からPythonの勉強を始め、コンペに参加。 ⚫ 2020年10月から2021年2月まで、AIQUESTを受講し 優秀な成績で修了。(企業と協働も経験) ⚫ その後KAGGLEで銅、SIGNATEで銀を獲得しました。 時間が掛かる部分は極力避け、改善が見込まれる部分に 集中的に取り組む方針で成果を上げました。 4
KaggleのJigsawコンペについて コンペの目的は英語文章の有害度合いの評価です。Kaggleでは毎年 毒性文章判定のコンペが行われておりJigsaw関連では4回目となります。 小耳にはさんだ情報では、得られた手法を参考に毒性文章判定ツールを開発 している人もいるようです。 ⚫ ⚫ ⚫ ⚫ ⚫ ⚫ ⚫ 開催期間:2021/11/8 ~ 2022/2/7 参加チーム数:2301 評価尺度:アノテーターとの一致度 データ:テキストデータ(validationとtestのみ。trainは各自で用意) 1位は外国のグランドマスター。6位から8位が日本人チーム。 Transformerのモデルを構築したチームが上位を占めました。 後述しますがTransformerのモデルを放置したことが裏目に出ました。 5
113th Place Solution(0) 理解 調査 モデル選定 前処理調整 (3日) (4日) (4日) (10日) 最終順位は113位(2301チーム中)で銀メダルでした。 一時はLB20位前後で金メダルや賞金も狙える位置にいましたが、 最終は落ちて銀メダルと銅メダルのボーダーのあたりでした。 初めに理解として、コンペ概要、公開コードやDiscussionの 読み進めを行い、baselineの参考にしました。 次に、これまでに自然言語コンペに参加した経験を基に 定番の手法を試すと共に新しい手法の調査を並行して行いました。 baselineではスケーリングのためLBに過適合していることが想定されたので、 Trust CVとして前処理の調整に終盤は時間を費やしました。 6
113th Place Solution(1)
毒性の強い文章は、Fで始まるスラングやWhat!!!!!など、悪意のある感情のこもった
文章が相当します。
以下は与えられたvalidationデータの一部です。左より右の文章の方が毒性が高い判定です。
基本的には文章から評価値を求める回帰問題なので、過去の分類問題のtrainデータの
毒性判定(toxic)以外の補助情報のカラム(0か1かのワンホットで定義)に対して
以下のように重みづけを行いました。
{'obscene': 0.16, 'toxic': 0.32, 'threat': 1.5,
'insult': 0.64, 'severe_toxic': 1.5, 'identity_hate': 1.5}
より深刻そうな情報には重みを大きくして文章判定の差別化を行いました。
7
113th Place Solution(2) 基本戦略としてLBとCVの両立を図ろうとしました。 validationの約14000行の文章の中の5-6割は、過去の コンペのデータと重複していることがディスカッションで 指摘されていました。過去の文章と今回の文章は 同じ時期のものなのか?が気にはなりました。 結果論では、validationは特に調整して省かなくても 信頼でき、高いCVがPBでも高い結果となりました。 8
113th Place Solution(3) 前処理のベースとしたTF-IDF(Term Frequency Inverse Document Frequency) について 文書中に含まれる単語の特徴の強さ(重み)を表現する手法の一つです。 ⚫ TF:単語出現数 (ある単語が文書内で出現する頻度) ⚫ IDF:逆文書頻度(ある単語がいくつの文書で使われているかを表す値) これらの指標を用いて,文章中に含まれる単語の重要度を評価します。 (一文書の単位は、どのような文書の単位で特徴分けしたいかによります) 例えば、TFとIDFがともに大きい時は ⚫ ある単語が一つの文書で頻出する ⚫ ある単語が複数の文書であまり横断的に使われていない ことを意味し、この場合は重要度が高くなります。 9
113th Place Solution(4) ◆ Preprocess • TfidfVectorizer • HashingVectorizer • Glove(840B 300D) • BertSequenceVectorizer (unbiased-toxic-roberta) ⚫ TfidfVectorizer単独で処理するのではなく、TfidfVectorizerをベースに もう1種類をscipy.sparse.hstackで結合して特徴量を増やしました。 ⚫ 前処理(テキストクリーニング)しない場合はBertSequenceVectorizer を選びました。(一般的にBertは前処理不要と言われているため) ⚫ HashingVectorizerかGloveを選ぶ際はCVの高い方を選びました。 10
113th Place Solution(5) ◆ Model • 正則化の閾値alphaを調整したリッジ回帰と線形サポートベクター 回帰がLB、CVともに高かったので、それらの重量平均を取りました。 • スパースなデータを扱う時に線形回帰はよく用いられます。 線形回帰以外のLightGBMなどでは思ったほど精度が上がらず 採用は見送りました。 • 過去に行われたKaggle自然言語コンペCommonlitの1位の人が アンサンブルでリッジ回帰を使っていたので信頼することにしました。 ◆ Ensemble 前処理(テキストクリーニング)せずに予測した結果、 WordPieceというトークンを単語単位より細かくする手法を使った結果、 前処理をして予測した結果、3つの結果を調整して評価値としました。 11 これが最適な手法かと言われるといまいち自信はありません。
113th Place Solution(6) ⚫ 1. 工夫したポイント 様々な前処理手法を組み合わせ特徴量を増やしました。 Tfidf同士で組み合わせた例があり、そこからアイデアを得ました。 特徴量を増やすことでCVは改善しました。多数の組み合わせがあり 探索に時間を要しました。前処理に手をかけすぎて他に手が回りませんでした。 2. 様々なデータセットを試しました。 回帰用に調整されたデータセットを用いました。その他にも過去のJigsaw コンペに使われた分類の大規模データセットがありましたが、LBとCVは 両立しなかったので採用を見送りました。 3. 重複データ、ノイズとなりそうなテキストデータの削除 基本中の基本ですが、学習の障害になりそうな訓練データは取り除きました。 12
113th Place Solution(7) ⚫ 1. 工夫したけどうまくいかなかったポイント Transformerによる予測 スタンダードにPytorchのHuggingFaceのモデルを使いました。 CVはまずまずでしたがLBがとても低いのが気になってしまい、 追求するに至りませんでした。自然言語のData Augmentationや 全結合層の改変にも取り組みましたが精度改善には至りませんでした。 2. 逆翻訳 データの水増しとしてディスカッションでも挙げられていましたが、処理時間 がかかる割には結果も出ず早々に見切りをつけました。 3. DeltaTfidf、fasttext、word2vec 手当たり次第に前処理手法を試しましたが、効果が出ない手法もありました。 13
113th Place Solution(8) ⚫ LB(Public Score)とPB(Private Score)の結果 ←CV重視 ←LB重視 ⚫ LBはtestの5%しかなくPBの95%に対して結果が上下することが想定されました。 ⚫ LB重視とCV重視を提出しLB61位からPB113位となりシェイクダウンしました。 ⚫ 下からスコアを伸ばす人が多くLBを過信したLB上位の大半は圏外に落ちていました。 ⚫ 銀のボーダーはPB0.80047でした。ギリギリ銀圏内でした。 ⚫ 金のボーターはPB0.80977でした。そこまで大きな差はありませんでした。 ⚫ 14 幸運にも113サブ中でベストのPBは選べました。いちおう力は出し切れました。
プログラミングコードについて 2つの提出したPublic ScoreとPrivate Scoreがそれぞれ高いコード を公開しました。バージョン1がPublic Scoreが高いコードで、 バージョン2がPrivate Scoreが高いコードです。 整ったコードとはとても言い難いのでお見苦しいところが あるかもしれません。以下リンク、Kaggle Codeへお進みください。 https://www.kaggle.com/toshihikok/113th-solution 15
まとめ ⚫ 自然言語問題でいくつかの新しい手法に触れ、経験、理解がさらに 深まりました。考えた時間は毎日3-4時間ほどで、3週間ぐらい掛けて 試行錯誤しました。 ⚫ 初の銀メダル獲得で最低限の結果は持ち帰ることができました。 ⚫ とはいえ、LBを過信してCVに傾倒できなかったことは悔いが残り 敗因の一つでした。 ⚫ 前処理にディープラーニングを取り入れた結果、終盤は思ったより 処理に時間がかかってしまい締め切りギリギリまで粘りました。 ⚫ 一を知ったら十を試す精神で、考え得る組み合わせを試しきれるかが 問題を解くカギとなると思っています。 16
謝辞 以上、取るに足らない内容ですがご覧くださりありがとうございました。 関係者ならびに応援してくださった方々にこの場を借りて御礼を 申し上げたいと思います。 17
Appendix 18
⚫ TfidfVectorizer 各ドキュメントの用語頻度カウントをスケーリングしています。 出力される行列をidfで重み付けしています。 ⚫ HashingVectorizer 各ドキュメントの用語頻度カウントにハッシュ関数を適用しています。 feature hashingという手法を使い、次元数が膨れ上がるのを抑制しています。 ⚫ Glove 高速かつ高性能な分散表現です。Word2Vec、SVDの良いとこ取りをした手法です。 ⚫ BertSequenceVectorizer BERTのpretrained modelを使って、文章をベクトル化する手法です。 19