Open GENZITSU opened 2 years ago
実務で役に立つ100超の最適化問題に対する定式化とPython言語を用いた解決法を紹介しているページ
最適化マスターになれそう
日本語テキストから時間情報をルールベースで抽出するja-timexをいかに実装したかが紹介されているスライド
テストケースを大量に用意した後に、それを通すように実装するというアプローチは実はAI開発と相性がいいのかもと思った。
JX通信社でサービス展開されているFASTALERTというリスク情報検知サービスにどのようなAIが使われているかの紹介記事。
FASTALERTでは、Deep Learningを使ってSNSの投稿をリアルタイムに解析し、火事や事故などのリスク情報の検知を行っています。
FASTALERTでは、リスク情報を検知して配信するだけでなく、カテゴリー(災害、事件、事故などの区分)まで解析 リスク度の判定+リスクのカテゴリー予測を1つのモデルでマルチタスクで予想させると、ビジネス的な要件を満たすだけでなく、リスクの検知力自体を上げる効果もあります。
すなわち、入力データはテキストと画像になっており、出力データはリスク検知とカテゴリー(災害、事件、事故などの区分)
SNSを扱う際は絵文字の情報も重要な手がかりになることがおおいので、前処理で消さないようにしているとのこと
詳細な技術の説明は省きますがFASTALARTのAIはこれらの絵文字の情報も取りこぼすことなくリスク検知に役立てることで、情報の検知漏れがないようにしています。
このモデルにはなぜリスクと判定仕方の説明可能性が求められており、attentionを用いた解釈性を提供している
だいぶ綺麗にattentionがかかっているのに驚いた。 どういうツイートがリスクと判定されているかの定義がきになるところ。
jupyter nbconvert --to notebook --execute mynotebook.ipynb \
--output mynotebook2.ipynb --ExecutePreprocessor.timeout=2678400 \
--allow-errors --debug
--ExecutePreprocessor.timeout は各セルごとの実行時間の許容値
--allow-errorsは途中でエラーがあっても最後まで実行してくれるやつ
--debugはどのセルマで実行したかがわかるようになる
例えば以下のようなnotebook
に対して以下を実行してみると
jupyter nbconvert --to notebook --execute test.ipynb --output out.ipynb --ExecutePreprocessor.timeout=30 --allow-errors --debug
以下のように、timeoutに引っかかってout.ipynbすらでない。 timeoutに引っかかったら次のセルに行ってくれるという挙動はしない。
nbclient.exceptions.CellTimeoutError: A cell timed out while it was being executed, after 30 seconds.
The message was: Cell execution timed out.
Here is a preview of the cell contents:
-------------------
time.sleep(60)
-------------------
気を取り直して、timeoutをのばすと (-1やNoneを渡すと無制限になる)
jupyter nbconvert --to notebook --execute test.ipynb --output out.ipynb --ExecutePreprocessor.timeout=90 --allow-errors --debug
こんなのができる
ちなみにtimeoutが発生した場合に次のセルに飛んでもらうこともできる
jupyter nbconvert --to notebook --execute test.ipynb --output out.ipynb --ExecutePreprocessor.timeout=30 --allow-errors --debug --ExecutePreprocessor.interrupt_on_timeout=True
知らんかった
notebook形式での定期実行というMLEの怠慢が発動できるかもしれない笑
本記事では、HybridNetsと呼ばれる機械学習手法を用いて、交通物体検出、運転可能エリアのセグメンテーション、車線検出する方法をご紹介します。
メモ
元ツイートから適宜抜粋
Pretraining is ≈SoTA for domain adaptation: just do contrastive learning on all unlabeled data + finetune on source labels. Features are NOT domain-invariant, but disentangle class & domain info to enable transfer.
Conventional methods and theory for UDA focus on learning domain-invariant features. However, we find that contrastive pre-training produces features that are very different for the source and target (easy to distinguish). Why do the features generalize well to the target?
Key insight: though the learned features vary from source to target, they shift along a domain direction—relative positions between features of two classes are invariant. The geometric locations of subpopulations’ embeddings capture their semantic relationship. See Figure.
Key assumption for contrastive learning: the probability that an augmentation changes only the domain of an image (e.g., sketch butterfly -> real butterfly) is higher than the prob. of changing both the domain and the class (e.g., sketch butterfly -> real clock).
メモ
huggingfaceをベースに作成された音声処理用ライブラリHuggingSoundを用いて日本語音素認識を試してみた記事。
HuggingSound自体はhuggingfaceの公式ではなくリオデジャネイロ大学のGrosmanが個人的に開発しただけの模様。
日本語の音声認識モデルはGrosman氏がこのライブラリを使ってCommon Voice、 CSS10、 JSUTをfine-tuningしたものを公開してくれています
学習には声庭という1000フレーズが収録されているオープンなデータを用いており、 wav2vec2-largeをfinetuningすることで、cec 0.22, wer 0.28程度のスコアを出している (あまり高くない)
ただ、huggingface hubに公開されているctcモデルならなんでも使えるらしく、取り回しは聞きやすそう。
For speech recognition you can use any CTC model hosted on the Hugging Face Hub. You can find some available models here.
複数の音声系のモデルを一挙に扱えるライブラリは聞いたことがなかったので、便利そう
日本語の日常会話が映像+音声+テキストの形式で200時間分収録されたコーパスが国立国語研究所から公開
以下は会話の例
アノテーション形式
お値段
相場感しらないが、2年間で50万円は安くないか?
相関係数やカッパ係数などの2変数の関連度を評価する指標が網羅的に解説されている資料。
相関係数が高い ≠ 因果関係がある
相関係数が0 ≠ 独立
また、サンプルサイズが小さい時の相関係数の信頼区間は思ったよりも大きいものになることに注意
例)日本全国の男性から40人をランダムにピックアップし、身長と体重の相関係数を算出した結果0.7だった。この時の母相関係数の95%信頼区間を求めよ その95%信頼区間は0.48 - 0.83程度
現在の自分の値が将来の値にどの程度寄与するかの係数
以下のようなコレログラムをって分析することが多い
特定の分布を仮定しないノンパラメトリックな手法であり、場合によってはよりロバストな指標と言えます。以下、順序尺度を基に算出される指標を挙げていきます。
色々派生系がある スピアマンのρ: 通常の積率相関係数を大きさ順に並び替えた順位を用いて計算する
グッドマン・クラスカルのγ
ケンドールのτ
カッパ係数
両群の特性がどれだけ関連しているかを偶然の一致率から求めるもの
重み付けカッパ係数
各尺度に何らかの順位性がある場合に用いるもの (AをBとまちがえるより、AをCと間違えるのが問題であるとき)
クラメールのν
ユールのQ
リスク比とオッズ比
オッズ比にはサンプリングにバイアスがかかっている場合でも正しく比較できるという特性がある
イメージとしては本来ものすごくCTR(クリックレート)が低いような状況下において、クリックした人100人とクリックしなかった人100人という全くの同数(現実には即さないような割合)でサンプリングしてしまった場合に計算される広告Aのリスク比は本来のものとかけ離れがちなのに対し、オッズ比はそう遠く離れないといった具合です。これはオッズ比が行・列どちらを起点に見ても値が変わらないという便利な性質が大きく関わっています。
非線形な相関関係を求めるために生み出された指標
上記のように局所的にデータの偏りが見られた場合、例えそれが非線形の関係性であってもMICは高くなる傾向があります。MICは今までの指標のような数式計算ではなくコンピューターを用いた計算が必要になります。計算方法ですが散布図の座標系に対し、相互情報量という数値が最大となるようなグリッドの区切り方を求め、その時の最大値を求めたのち0-1の範囲になるよう標準化した値になります。
順位相関係数にいろいろな種類があるようだが、何かしらの使い分けはあるのだろうか...?
Node2vecの実装ではsnapというのが有名だが、メモリ効率があまり良くない
大体実装としてPecanPyというものがあり、実際に試した記事
結果
メモリ効率は1/36以下になっており、計算時間も短い
downstream taskの性能はトントンだが、ネガティブサンプリングの挙動が異なるためにembeddingの出力が異なるようだ
メモ
DeepLやgoogle翻訳を超える精度(?)の翻訳が可能なmetaという翻訳アプリをいかにして個人開発したかの連続記事の一つ
Teacher-forcingはseq2seqモデルの学習を行う際に、学習を安定化するためのテクニックとして用いられるが、推論時は必ずしも正しい単語列が入力されないことからexposure biasというものが発生してしまう。
Bridging the Gap between Training and Inference for Neural Machine Translationという論文ではこれを緩和するために、訓練時にteacher forcingとモデルの出力を1-p : pの確率で行う手法を提案。
oracleの選出にはword levelとsentence levelの方法が提案されていて、sentenceの方が良い結果を出している
この手法により、BLEUが0.5%向上し、導入されたとのこと
このような現象は、経験則の範囲内では「ある単語の訳をしない方が翻訳として自然になる」場合に起こりがちな印象ですが、本論文の提案手法の採用により、このエラーの割合が現象しました。meta翻訳で使用しているテストケースにおけるBLEUもおよそ0.5向上し、meta翻訳への導入を決定しました。
比較的単純なアイデアなのに、効果が出ていてすごい。 音声系の学習にも転用できたりする?
論文自体は2019年のものなので少し古め。
Beam Searchを行う際に常に、top-kだけを探すのではなく、top k * p まで保持した上で、beam searchを行う手法の提案
これを行うことで、探索範囲と探索終了条件を分離することができるとのこと。
We introduce the patience factor ( Line 13 , Fig. 1) that relaxes this assumption and separates the stopping criterion from the search breadth.
翻訳タスクにおいては終了条件は大き目に取った方がよく、ようやくタスクにおいては小さめにとる方が良いらしい。
2022年4月の論文とは思えないシンプルなアイデアですごい改善につながっていて驚く。
似たような手法が提案されているような気もするが、どうなんだろう...?
次世代AIドライブレコーダーとしてサービス開発されているDRIVE CHARTで用いられているCV技術の紹介
検出した消失点の使い所
人手で消失点をアノテーションするのではなく、レーンの交差点を消失点とするアプローチ
このように作成された消失点を2Dガウシアンヒートマップにすることで、回帰モデルを作成
そのほかの手法よりもこのアプローチが良かったとのこと
量子化では、元々の値の範囲が大きくなるほど、丸め誤差も大きくなってしまう
YOLO V5 バージョン
相変わらず勉強になる発表ばかり。
物体検出系は量子化しても2倍も早くならないのは、興味深い。
とくに Data-Centric AI competitionの解法共有が面白かったので抜粋
Clusters are colored based on their true labels. As can be seen, clustering follows their native label patterns more so with cropping than without and also results in more precise decision boundaries between labels.
augmentation周り
The first augmentation stage included camera distortion methods that allowed us to generate unique shapes by mapping a numeral’s regular, 2D grid onto a grid that is skewed Some other data augmentation techniques we used included scaling and shearing the numerals, and adjusting the gray boundaries around the numerals to simulate brush strokes with varied pressures.
データのクオリティチェック
Data cleanup was done at the following levels – – Manual inspection to correct labels on raw data. – Remove similar shaped cases among data-augmented images from section 3.1. – Remove ambiguous cases using manual inspection among noise overlaid images from section 3.2.
データのセット内の特徴量がバランスしていることが重要だった模様
そこで各クラスをembeddingベースでサブクラスにクラスタリングして、比率が同じになるようにaugmentationを実施
The two submissions contained the same data, just split differently between training and validation (80:20 and 88:12 respectively). We saw that the addition of 800 images to the training set actually reduced the accuracy on the test set by about 1.5%. After this, our approach shifted from “more data” to “more balanced data.”
We then further explored clusters within each uppercase and lowercase subset. We subdivided each case into 3 clusters using K-means clustering on the PCA-reduced ResNet-50 embeddings. Once we had these clusters (shown below), we simply balanced each of the sub-clusters with augmented images resulting from translation, scale and rotation.
エッジケースをvalidationとtrainに均等に入れ込むためのテクニックが印象的である
we studied the histogram distribution of the difficulty score for each class in the training dataset, and matched its distribution in the validation set. Matching the training and validation difficulty scores was the best way to avoid over- or underfitting to the training dataset, and ensure optimal model performance.
テストデータにしかない文字スタイルを訓練に入れるために、テストデータの一部をコピペしてデータを作成する
paper形式でもまとめられている (A Data-Centric Approach for Training Deep Neural Networks with Less Data)
For data augmentation, we used random rotation with a factor of 0.05, random contrast change with a factor of 0.5, random translation with a range of 20% of image dimensions, random pen-stroke like black spots, random white spots, and finally, random dashed lines with various lengths and orientations.
別のブログ記事に詳説がある模様([How I Won Andrew Ng’s First Data-Centric AI Competition ]https://medium.com/@johnson.h.kuan/how-i-won-andrew-ngs-very-first-data-centric-ai-competition-e02001268bda?sk=e239d8bc2a219a269e8939a0d14f6290)
ベースラインモデルの学習結果をspreadsheet形式にするプログラムを作成して目視チェックの効率を向上
validationデータの中でミスったデータと似た画像をaugmentationした画像から探すことの有用性は以下の2次元マップから確認できる
特別賞2と同じでspreadsheetでデータチェックを行っている。
可視化系のツールをふんだんに使った面白い解放
どの上位チームもデータの目視確認をしていたのだが、その方法自体はまだまだ効率化されていない印象がある。
特別賞1位の解法は、iterativeにデータの目視確認をしていくという意味では効率的な部類に入るのかも。
今回は画像分類のコンペだったけど、今後自然言語や、マルチラベルとかのコンペも開かれるのを切に願う
awsのsagemaker studio labのconda環境はmini-forgeで構築されているのでanacondaの商用利用ライセンスには抵触しないとのこと
メモ
地方自治体などが都市や地形の3Dデータをオープンソース化し、無料公開する例が増えていますが、その“大本山”とも言えるのが、国土交通省が開発し2021年3月に公開した3D都市モデル「PLATEAUプラトー」です。
このほか、PLATEAUの都市データの利用やデータ登録をスムーズに行うために、ビューワーの機能追加や、UnityやUnreal Engineなどのゲームエンジン向けのSDKの開発も行われます。
メモ
もうちょい運用に深く関わるようになったらちゃんと読みたい
効果的で継続される1on1のコツ【2022年版】
(電通国際情報サービス(ISID))にて部長(?)をしている小川さんによる、効果的な1on1を行うためのtipsまとめ
分量が多いので要点だけ抜粋
コメント
とてもためになる。
出典
効果的で継続される1on1のコツ【2022年版】