Open GENZITSU opened 2 years ago
分野と時間と文脈を考慮したembedding DCWEを提案した論文の紹介。 分野の情報はなくても精度が悪化しないものの、時間の情報を入れると下流タスクの性能も上がるらしい。
分野情報を入れるのは結構手間なので、どうしたものかと思っていたが、なくてもなんとかなるようでよかった。 実務で使うとなると、年/月ごとにembedderを変える必要が出てくるのが難点かも
犬や猫のペットの画像 + csvメタデータを用いてPawpularityという0~100の指標を予測するコンペの振り返り記事。
データセットサイズは9,912枚
面白かったアプローチだけ抜粋
クラス分類系のタスクであれば、出力が確率になっているため、例えば、別データに対して推論した結果、確率 0.9 以上のデータを採用する、といったように、比較的推論結果が合っていると思われるデータを利用すること
これは分類系でしか使えないので、今回はTensorFlow Speech Recognition Challenge 3rd place solution](https://www.kaggle.com/c/tensorflow-speech-recognition-challenge/discussion/47722) を参考にした手法をとった。
Discussion の中で2つの方法が紹介されています。 1つ目は、学習データとして「100% of training data + 20%-35% of test data selected per epoch」を利用する方法、 2つ目は「100% of test data」を利用する方法です。 どちらも試した結果、精度向上が出来た2つ目の方法を採用しました。
0~100 の値を 100 で割り、0~1 に変換し、BCE Loss(Binary Cross Entropy Loss)を計算するという手法が主流になっていました。Loss を変更しただけで精度向上が確認できたので、これは応用範囲の広い手法だと思いました。
Pawpularity を Rice Ruleで分割した bin で、Stratified KFold しているものがありました。またしても、コードの内容はほぼ同じで、 bin のところだけが異なり精度が高いという現象が起きていたため、私も bin に変更しました。 Rice Rule は、正規分布のデータに対して bin 数を算出する式であり、他にも Sturges’ Rule や、Square-root Rule 等があります。どれを選ぶかは分布の形と、試行錯誤というところでしょうか。
ちなみにこんな方法で分割するとのこと
なぜにBCE Lossにした方が精度が高くなったのかが謎ではある。
BCEとRMSEは仮定している誤差分布が異なるとか、ネットワーク的に相性の良いロスだからなんだろうか...?
rice ruleが聞いたと言うことは分布自体は正規分布のはずなので、RMSEでも十分な気がするので、やはりネットワークとの愛用かなぁ。
犬や猫のペットの画像 + csvメタデータを用いてPawpularityという0~100の指標を予測するコンペの振り返り記事 (上位解法)。
面白かったアプローチだけ抜粋
1st Solutionでは OpenAI CLIPから得られるMetaデータを使用していました。 OpenAI CLIPのサンプルコードが公開されています。Sleeping dog、PoodleといったYOLO以上の情報が得られるので、いい特徴量が得られる
- Metaデータをinputではなくoutputに使い、Multi-taskingさせる手法があるようです。
- 今回、犬猫情報をinputとして与えても精度があがりませんでしたが、Outputに加えて犬猫判定もタスクに加えることで、モデル全体が賢くなり、結果的にPawpularityの精度も改善したようです
回帰問題を順序付きの分類問題にする手法
Loss : (KLDivLoss and HuberLoss) or (FocalLoss and HuberLoss)
CPMPさんが使っていた解法。
コードはこれだが、何をやってるのかがよくわからない。
dropoutの派生系の手法
dropoutは一つのニューロンを完全に消し去ってしまうが、mixoutでは元々の値とdropoutした値を確率pで混ぜる。
面白い手法が多い。
ordinal regressionはランキング学習とかでも使えそうな感じがしているが、理論が不明...
今までpandasのdatetime型から月とかを取り出すとき df['datetime].map(lambda x: x.month) でやっていたけど df['datetime'].dt.month が圧倒的に速いのか(そりゃそうか)
確かに
これはNode.jsのコードです。ユーザーIDのサフィックスをつけたファイルにセッションを書き出している。AWS環境の構築をしている方は、これを見れば笑うと思います。「こんなことしたら、Load BalancerのスティッキーセッションをONにしないとうまくいかないじゃん」
基本中の基本らしいが「3. 安全に停止できない」「8. “Readレプリカ”を使えない」は意識したことがなかった。
375×300ピクセルの画像を4倍の1500×1200ピクセルに拡大したときにどれくらい元の画像を復元できているかを争いました
公開されている001_classicalSR_DF2K_s64w8_SwinIR-M_x4.pthを初期値として、3モデルを学習させた出力を平均
公式の学習データ60枚中54枚(90%)と、外部データから作成した学習データ477枚、合計533枚を学習に使用 今回は練馬区が公開している航空写真のデータセットを用いました。
低解像度の画像を64×64にCropし、それを256×256に超解像するような学習を実施
2300Epochまでは上記の533枚で学習、そこから3000epochまでは公式の学習データのみで学習
超解像度タスクに取り組んだことがないので、ケースとしてとても参考になる。
従来のプロトタイピング手法で模擬できない行動認識器を作成し,短期間で実証実験を実施する価値検証プロセスを提案
既存の特定用途向け認識器を複数組み合わせ, 計算コストの小さい一部の認識器のみを学習対象にすることで,少量のデータかつ短期間で行動認識器を学習で きる.仮想の新規サービス案に対し提案プロセスを適用することで,一から認識器を学習する従来のプロセスよ り短期間で実証実験が可能であることを示す
第1に,認識器を一から学習するプロセスと 同様に学習データを作成するが,これまでの使用実績から, データ量は認識器を一から学習する場合の1/10~1/100程度 である 第3に,1日程度の短時間で認識器を学習する.
学習対象である認識器は,行動ラベルを出力する直前の 計算コストの小さい認識器のみ したがって,再学習認識器の入力は低次元 のベクトルであり,浅いニューラルネットワーク,あるい は,サポートベクターマシン[12]やXGBoost[13]などの機械 学習手法が利用できる
どのような学習済み認識機を使うかは、判定したいタスクに応じて変えればよい。
学習データ作成に関して,提案プロセスの学習に必要なデータは少量であり,スクワットとスク ワット以外を認識する易しい認識タスクの場合は20個程度 の動画,複数の行動を認識する場合は50個程度の動画が学 習データとして必要である. 一方,一から認識器を学習する プロセスの場合,約1000個以上の動画が必要となる.デー タセット[6][7]の10000個以上の動画で事前学習をした場合 でも,第2図で示すディープニューラルネットワークを学習するためには,多数のデータが必要である.
動画認識あんまりやったことないので参考になる。
世界中のボランティアの音声データが収録された音声認識用データベースCommon Voiceの紹介記事
Common Voiceは音声認識サービスを誰でも開発できるようになることを目的としてMozillaが立ち上げた音声データ収集プロジェクトです。ボランティアによる協力でデータは作成されており、貢献はテキストの読み上げによる音声データの収集だけでなく、音声データを相互に聞くことでその質の検証も行われています。
現在公開されている音声コーパスは中流階級の男性の音声で作成されていることが多く、女性の音声や非ネイティブ話者の音声が少なくそれらの音声認識が難しくなっているという問題があり、その対応として多様な話者の音声を収集することも目的としています。実際に日本語の音声データをいくつか聞いてみたところ、確かに非ネイティブ話者による読み上げが多く行われていました。
本記事執筆時点では言語数87、検証済み録音データは14122時間分集まっており、日々その種類・量は更新されています。 ちなみに2022-01-19更新の最新版であるCommon Voice Corpus ver.8では日本語データは検証済みの音声が40時間分とまだまだ少量です
これらのデータセットはクリエイティブ・コモンズのパブリックドメインライセンス(CC0)で提供されており、利用者は商用利用を含めて自由に利用することができます。PythonであればHugging Faceの提供するdatasetライブラリを利用することで簡単にアクセスすることができます。
データセットの利用方法は以下のような感じ
# from https://www.ai-shift.co.jp/techblog/2512
from datasets import load_dataset
cv_data = load_dataset("common_voice", "ja")
# メタ情報と音声データが以下のような構造で取得できる
cv_data['train'][0]
{'client_id': '51e9ed35447037faf8743d586cdb3e1ec9f5c36145456d83cad5e923288fd71278ff6fc1d932eb62a8693da3a224ac54418f66c8577dfa57bbc8a4f3497fe700',
'path': 'common_voice_ja_19779220.mp3',
'audio': {'path': 'cv-corpus-6.1-2020-12-11/ja/clips/common_voice_ja_19779220.mp3',
'array': array([ 0. , 0. , 0. , ..., -0.00034094,
-0.00028092, -0.00025344], dtype=float32),
'sampling_rate': 48000},
'sentence': '午後は、溜った書類に目を通して返す。',
'up_votes': 2,
'down_votes': 0,
'age': 'twenties',
'gender': 'male',
'accent': '',
'locale': 'ja',
'segment': "''"}
データセットへの貢献はwebから簡単に行うことができる模様。
しらんかった。
データセット貢献用のUIが整っているのがすごい。
OpenAIが新しく公開したGPT-3のembeddings endpoint (paper)がその他のembeddingモデルと比べてどうかを検証した記事。
GPT-3のembeddingは現状、推論コスト(速度/時間)に対して、性能があまり良くないという結果になっている。
現状のラインナップ
- Ada (1024 dimensions)
- Babbage (2048 dimensions)
- Curie (4096 dimensions)
- Davinci (12288 dimensions)
ちなみに同じような検証をするには1億円以上のコストをかける必要があるとのこと
Running the tests now would costs $1,000,000+.
prompt learning や コード生成など様々な文脈で活躍しているGPT-3だが、embeddingではあまり成果が出ないのは面白い
Developing Web-Based Real-Time Video/Audio Processing Apps Quickly with Streamlit
streamlitによるwebカメラからの入力を利用したアプリの作り方が紹介されている。
streamlitの拡張ライブラリである
streamlit-webrtc
を使うのが肝コメント
メモ
出典
元記事