GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials -05/18- #52

Open GENZITSU opened 3 years ago

GENZITSU commented 3 years ago

テレビ局のAI活用 ~Interop Tokyo 2021~「テレビ局におけるAI活用事例」レポート

日本テレビ

ロードレース中継での選手の距離測定 + ユニフォームによるチーム識別

選手の移動距離などの把握は以前から要望としてあったらしい。

スクリーンショット 2021-05-15 22 13 24

顔写真→CG生成を高速に行うことにも活用

スクリーンショット 2021-05-15 22 13 24

AIキャッチャー + 得点率予測

スクリーンショット 2021-05-15 22 13 24

OCRからの字幕翻訳

スクリーンショット 2021-05-15 22 13 24

提供元テロップとの文字かぶり防止
どうも1秒でも文字被りが発生すると放送事故扱いになるとのこと

スクリーンショット 2021-05-15 22 13 24

その他にも、大量のアーカイブ素材から特定人物の登場シーンを検索するシステムやドラマと連動したチャットボット、字幕制作、視聴率の予測にもAIを活用している。

TBS

文字起こし スクリーンショット 2021-05-15 22 13 24スクリーンショット 2021-05-15 22 13 24

そのほかにも

感想

技術進歩によりやる気とデータさえあればそれなりの案件ができてしまうようになった。
AIの専門家としての優位性はデータ(?) → ビジネス目標のギャップを埋めることのうち。
泥臭い部分になる気もする...

出典リンク

GENZITSU commented 3 years ago

Table data用のTransformer

2020年12月にひっそりとawsから出ていたtableデータ向けtransformerの論文とgithub実装。

この論文では数多のtableデータ向けNNと違って、LGBMに僅かながらも辛勝しているのが特筆するべきところ。

スクリーンショット 2021-05-15 22 13 24

利点としては

pretrainの方法は2種類ある

実験結果など

精度面ではMLPよりも1%程度良さげ。

スクリーンショット 2021-05-15 22 13 24

解釈性の面ではMLPよりもかなりよい。(Attentionを通すことで、似た意味のcolumnが同じようなところに配置される。)

スクリーンショット 2021-05-15 22 13 24

labelなしデータが大量にあるケースだと、LGBM系よりも精度が良くなる傾向。
普通の教師ありの設定だと、同じくらい(多分負けてるくらい)

スクリーンショット 2021-05-15 22 13 24

補足

pretrainingアプローチは、ラベルなしデータが大量にある場合にしか役立たなかったとのとこ。

We do not find much benefit in using it when the entire data is labeled. Its benefit is evident when there is a large number of unlabeled examples and a few labeled examples. Since in this scenario the pre-training provides a representation of the data that could not have been learned based only on the labeled examples.

出典論文 githubリンク

GENZITSU commented 3 years ago

styleganを使って無限のデータセットを得るDataset GAN (CVPR2021)

この図が手法の全てを表している。

StyleGanの各AdaIN層には高次元のなんらかの意味を保持しているのでは?
ということで、各層の特徴量をupsampleして特徴量マップを画像っぽく整形し、
少量(10 ~ 20 ~ 40オーダー)のデータで学習したMLPをかませることで、無限にアノテーションデータを生成する。。。

スクリーンショット 2021-05-15 22 13 24

StyleGANはどうもゴミデータを生成してしまうことがあるようで、フィルタリングが必要。
StyleGANの識別機はあんまり役に立たないが、MLPの出力でJS距離つかって、ゴミデータを識別するとのこと

Naturally, StyleGAN also fails occasionally which introduces noise in the synthesized dataset. We noticed that the StyleGAN’s discriminator score is not a robust measure of failure and we found that utilizing our ensemble of classifiers to measure the uncertainty of a synthesized example is a more robust approach. We follow [30], and use the Jensen-Shannon (JS) divergence [2, 39] as the uncertainty measure for a pixel. To calculate image uncertainty, we sum over all image pixels. We filter out the top 10% most uncertain images.

annotationの比較

134時間 vs 5時間(提案手法) !?

Crowdsourcing labels on the same scale (10k images) for one dataset would take over 3200 hours (134 days), and, we hypothesize, would be extremely noisy since annotating an image to that level of detail requires both skill and immense patience.

In our case, human-annotation time for a dataset was roughly 5 hours, affording us to leverage a single skilled annotator. This is described next.

生成した結果

スクリーンショット 2021-05-15 22 13 24

特徴点の方

スクリーンショット 2021-05-15 22 13 24

感想

詳細な部位ごとのsegmentationベースだけど、普通に猫/車的なsegmentationもできるんだろうか?

出典リンク

GENZITSU commented 3 years ago

単語分散表現を扱う上でmagnitudeが有用らしい

なんかmagnitudeなるものを使うと、word2vecの読み込みがめちゃくちゃ早くなるらしい。

スクリーンショット 2021-05-15 22 13 24

元ネタ

ということで、magnitudeを少し調べてみた。

magnitudeって何よ

元々は単語ベクトルのOOV対策のためのツールらしい。
単語ベクトルのOOV対策としてランダムな割り当てを行うのだが、文字列的に似ている単語動詞のベクトル表現を近づけるような付与を行う。

magnitudeというPythonパッケージにおいて特徴的なOOV対策がされているのを見つけました。基本的にはOOVにはランダムなベクトル表現を付与するのですが、下記の2つの工夫が入っています。

文字列的に似ているOOVの単語同士には、なるべく似たベクトル表現を付与したい e.g. uberの車種であるuberxとuberxlは、似た文字列であるから似たランダムベクトルになってほしい (OOVだけど意味的に似ていると想定される)

OOVと文字列的に似ている単語が語彙中の中にあれば、そのベクトル表現と似たベクトル表現を付与したい e.g. uberxというOOVは、uberが分散表現の語彙の中にあれば、それに近いランダムベクトル表現であってほしい (単語を構成する部分文字列の意味と似ていると想定される)

アルゴリズム的には、未知語の単語ベクトルを、未知語の3gram-6gramから作成されるランダムベクトルと文字列的に近い既存単語にtop3のベクトルを用いて作成するみたい。

スクリーンショット 2021-05-15 22 13 24 スクリーンショット 2021-05-15 22 13 24

解説記事

デジタル広告の出稿を決める上でのセグメンテーションにも活用されている。

fasttextとmagnitiudeの比較
magnitudeを用いることでOOVでありながらカメラに近いベクトルを取得できている。

スクリーンショット 2021-05-15 22 13 24スクリーンショット 2021-05-15 22 13 24

解説記事

使い方

学習済みの単語ベクトルにmagnitude converterをかければ良いっぽい python -m pymagnitude.converter -i <PATH TO FILE TO BE CONVERTED> -o <OUTPUT PATH FOR MAGNITUDE FILE>

どうも日本語の計算済みmagnitudeベクターもあるみたい(*参考記事)

感想

magnitude自体は計算済みのベクトルへのOOV対応が主目的っぽい。副産物として読み込み速度が爆速になる模様。
読み込み速度が早くなるってことはメモリーとの兼ね合いとかどうなるんだろうか...

GENZITSU commented 3 years ago

教師なしで音声認識を行う手法

非常にざっくりなことをいうと、音声データをベクトル化して音素に分ける。
リアルなテキストデータから生成される音素と音声から生成される音素を見分けるGANを用いて、生成器(つまり音声認識器)を訓練する。

スクリーンショット 2021-05-15 22 13 24

それぞれのstepに血の滲むような努力がありそう。

1. audioデータのベクトル化

Convolutional layerにaudioデータを噛ませた後に24層transformerを通したベクトル表現を用いる。
事前学習としてはmaskされた箇所のベクトル表現を当てるcontrastive learning。

スクリーンショット 2021-05-15 22 13 24

実験ではここのモデルはpretrainedモデルを使ったとのこと

we use the publicly available English model pre-trained on 53k hours of Libri-Light (Kahn et al., 2020b) as well as XLSR-53 which was pre-trained on nearly 60k hours of speech audio in 53 languages (Conneau et al., 2020). Both use Large transformers with 24 blocks, model dimension 1,024

どうやら、24層あるそれぞれの層のうち、最初の方と最後の方は、speech recognitionに有用な表現ではないらしい。 教師あり学習で確かめたところ、英語以外の言語も含めて15層目を使うのがいいらしい。

スクリーンショット 2021-05-15 22 13 24

audioデータのsegmentation

上述のencoderでベクトル化しものをK(=128)-meansクラスタリングを行って、segmentに分ける。
データ量がやばいのでFAISS+GPUを使ったとのこと。

流石にK-meansで精度が高いものはできないので、以下のことを実施。

  1. audio全体でPCAを学習。
  2. 対象segment+隣接segmentにPCAをかけて、平均化して、そのsegmentのベクトルとみなす。

これを行うことで、そこそこの音素列になるっぽいが、彼らはこの後viterbiアルゴリズムを適用して予測行っている。 (詳細は正直不明)

スクリーンショット 2021-05-15 22 13 24 スクリーンショット 2021-05-15 22 13 24

テキストデータの音素化

何らかの音素化機を用いて音素化を行う。TIMITデータに関しては元々音素化がされているらしい。(しかも沈黙トークンも付与されている。)
その他のデータについては、G2P phonemizer (Park and Kim, 2019)なるものを使って音素化するとのこと。

ただし、音声データには沈黙している期間があるので、最初と最後に沈黙記号を付与しつつ、25%の確率でランダムに沈黙記号を入れるなどの工夫が必要。

スクリーンショット 2021-05-15 22 13 24

教師なし音声認識

unlabelテキストデータ由来のものか, 音声データ由来のものかを見分けるGAN

スクリーンショット 2021-05-25 16 55 15

結果

スクリーンショット 2021-05-25 16 57 26

出典リンク