Open GENZITSU opened 2 years ago
RoBERTa large を日本語 Wikipediaと 日本語 CC-100で事前学習したモデルが公開。
toknizerに入れる前にjuman++(. Juman++ 2.0.0-rc3)で分かち書きしておく必要があるとのこと。
from transformers import AutoTokenizer, AutoModelForMaskedLM
tokenizer = AutoTokenizer.from_pretrained("nlp-waseda/roberta-large-japanese")
model = AutoModelForMaskedLM.from_pretrained("nlp-waseda/roberta-large-japanese")
sentence = '早稲田 大学 で 自然 言語 処理 を [MASK] する 。' # input should be segmented into words by Juman++ in advance
encoding = tokenizer(sentence, return_tensors='pt')
...
メモ
google brainが2020年にpreprintで公開した「Meta Pseudo Labels」という論文の紹介。 Pseudo Labelを行う際に、教師モデルがどのようにラベルを出すべきかをサンプルを見ながら動的に決定できるような手法の提案。
教師モデルがラベルを出力する際は、出力分布をそのまま使う方法や、softmaxをかけてone-hot化する方法などに加えて、Labell smoothingやTemperature tuningなどのテクニックを使うことで学習を安定化させることができる。
ただし、これらはサンプル非依存で訓練中固定された分布を使うことになるのであまり柔軟ではない。
Meta Pseudo Labelsでは、教師モデルのラベル出力をそのまま生徒モデルのターゲットとするが、ラベルの出力の方法を、生徒モデルのvalidation lossとラベル付きデータに対する分類損失をもとに学習させていく。 (生徒モデルのvalidation lossだけだとすぐに過学習するらしい)
Meta Pseudo Labelsによっては訓練損失とvalidation損失が一致するようになり、汎化性能が向上することが確認されている。
また、定量的な評価でも、以下の通り当時のsotaを更新している
シンプルな手法ながらも、効果が高くて驚いた。 学習中に二つのモデルを動かす必要があるため、若干メモリに不安破残るが、Appendixに以下のような記載があった。
事前にでかいモデルを作っておいて、そいつが吐き出した分布にMLPを重ねて、そのMLPと一緒にstudentを訓練する方法
In Reduced Meta Pseudo Labels, we first train a large teacher model T to convergence. Next, we use T to pre-computeall target distributions for the student’s training data. Then, we parameterize a reduced teacher T0 as a small and efficient network, such as a multi-layered perceptron (MLP), to be trained the along with student. This reduced teacher T 0 takes as input the distribution predicted by the large teacher T and outputs a calibrated distribution for the student to learn. Intuitively, Reduced Meta Pseudo Labels works reasonably well because the large teacher T is reasonably accurate, and hence many actions of the reduced teacher T0 would be close to an identity map, which can be handled by an MLP. Meanwhile, Reduced Meta Pseudo Labels retains the benefit of Meta Pseudo Labels, as the teacher T0 can still adapt to the learning state of the student θT .
TL;DR — On average, Python 3.11 is 14% faster than Python 3.10. The new version is marginally slower on some benchmarks, but on the others, it’s up to 64% faster. I ran the benchmarks on M1 Pro MacBook Pro 16 with a 10-core CPU. Each Python version was installed in Docker, which utilized 5 logical CPU cores.
2022年10月リリース予定だそうだが、期待
MVTec社から新しい異常検知評価用のデータセットがCC BY-NC-SA 4.0ライセンスで公開。
MVTec ADでカバーされていた構造的な異常にくわて、論理的な異常(あるべきところにあるべき部品がない)データが収録されている。
MVTec ADでは評価指標が1に張り付いていたが、このデータセットだとこれまでのSOTAも1に遠く及ばない結果となる。
メモ
テーブルコンペかと思いきや、有望な特徴量をテキストとして連結してBERTで予測させているのが印象的
# from https://comp.probspace.com/competitions/bnb_price/discussions/ktr-Post81ef512263d91f310b73
sep_token = tokenizer.sep_token
input_text = "number of reviews, " + str(examples["number_of_reviews"]) + sep_token +\
"minimum nights, " + str(examples["minimum_nights"]) + sep_token +\
examples["room_type"] + sep_token + examples["neighbourhood"] + sep_token + examples["name"]
面白い
numpy配列からaxisにそって、上位K個の要素を取得する効率的なコードの紹介
# from https://hippocampus-garden.com/numpy_topk/
def topk_by_partition(input, k, axis=None, ascending=True):
if not ascending:
input *= -1
ind = np.argpartition(input, k, axis=axis)
ind = np.take(ind, np.arange(k), axis=axis) # k non-sorted indices
input = np.take_along_axis(input, ind, axis=axis) # k non-sorted values
# sort within k elements
ind_part = np.argsort(input, axis=axis)
ind = np.take_along_axis(ind, ind_part, axis=axis)
if not ascending:
input *= -1
val = np.take_along_axis(input, ind_part, axis=axis)
return ind, val
以下のようにナイーブにやると、o(n * log n)かかるところをnp.argpartitionを事前に噛ませることでo(n)に削減することができる。
# from https://hippocampus-garden.com/numpy_topk/
import numpy as np
def topk_by_sort(input, k, axis=None, ascending=True):
if not ascending:
input *= -1
ind = np.argsort(input, axis=axis)
ind = np.take(ind, np.arange(k), axis=axis)
if not ascending:
input *= -1
val = np.take_along_axis(input, ind, axis=axis)
return ind, val
ただし、nが10^3オーダーくらいだと、どっちでやってもあまり変わらない模様。
ちなみに、argpartitoinとはaxisにそって上位k版目で、配列を二つに分割するためのメソッド。
ただ単に分割しているだけなので、sortはされないことに注意
np.argpartitionというメソッドを初めて知った。nが10万とかいうオーダーでtopkを取らないといけない時に使っていきたい。 あとは、topkを返却するが順番までは気にしなくて良いときとか。
自然界に設置されたカメラで撮影した画像(camera trap iamge)がもつクラスインバランス問題を解決するためにCNNを2 phaseに分けて学習する方法を提案。
ちなみにカメラトラップが画像とはこんなイメージで、最近は砂漠の泉の水を飲みに来る動物をライブで流しているやつが流行っていたりする。
手法は以下のように至ってシンプル
Phase 1: a CNN fθ is trained on a more balanced dataset Dbal, obtained by any sampling method such as ROS, RUS or a combination thereof.
Phase 2: the convolutional weights3 of fθ are frozen, and the network is trained further on the full imbalanced dataset Dorg.
The 1st phase trains the convolutional layers with (more) equal importance allocated to minority classes, so they learn to extract relevant features for these classes as well. In
random minority oversampling (ROS) and random majority undersampling (RUS),
ぱっと見良さげな手法なのだが、評価データの性能向上幅は微妙...
もしかするとデータセットが難しすぎるのかもしれない
いちおうF1が向上しているクラスの方が多い模様
実は同じようなアイデアを提案している「 Plankton classification on imbalanced large scale database via convolutional neural networks with transfer learning」という論文が2016年時点で発表されている。
その論文ではmost minority classも4,000件はあるという設定で以下のような実験結果を得ている。またこの論文を引用して同様の結果を得ている論文がいくつかあるようなので、実際に効果がありそうだ。
日経電子版の開発現場におけるフロントエンド研修の資料
日経電子版の開発で用いられている技術要素がなぜ使用されているかが紹介されている。
フロンエンドで用いられている要素技術が端的にまとめられていてとても勉強になる
2022年4月にMeta AIから公開された新しい自己教師あり楽手手法の提案。 SwAV系列contrastive learningにmaskkingを加えた形で、low resourceな設定で効果を発揮するとのこと。
エントロピーを損失関数に入れるのはswav系だとよく用いられる方法とのこと。
We also incorporate the mean entropy maximization (ME-MAX) regularizer, also used in (Assran et al., 2021; Joulin & Bach, 2012), to encourage the model to utilize the full set of prototypes.
事故教師あり学習の普通の設定だとDINOとかと同じ感じだが、low resourceな時に効果を発揮するというのはコンペやimagenet使えない系の業務の時に力を発揮しそう。
全PMが知るべき「本当の課題」を知るユーザーヒアリング手順と失敗例まとめ
ユーザーヒアリングのアンチパターン及び高家庭な実施方法が紹介されている。
アンチパターン①: 「〜という課題はありますか?」とあるorないかを聞く
どれだけ課題を解決したいかを聞けるようにするべき
アンチパターン②: 「どうすれば解決しますか?」と直接聞こうとする
アンチパターン③: ヒアリング相手のペルソナがない、セグメント分けしていない
アンチパターン④: ファクト情報を集めようとしない
アンチパターン⑤: 課題を解決できない理由をヒアリングしない
ユーザーの課題を知るために効果的なユーザーヒアリングのやり方
① ヒアリングの目的を定める
② 仮説を作りペルソナを具体的にする
③ まずファクト情報を集める
④ ヒアリングをしファクトを元に課題を推測する
⑤ 課題を解決するためのプロダクト機能を考える
コメント
勉強になる
出典
全PMが知るべき「本当の課題」を知るユーザーヒアリング手順と失敗例まとめ