GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 05/18 - #99

Open GENZITSU opened 2 years ago

GENZITSU commented 2 years ago

全PMが知るべき「本当の課題」を知るユーザーヒアリング手順と失敗例まとめ

ユーザーヒアリングのアンチパターン及び高家庭な実施方法が紹介されている。

アンチパターン①: 「〜という課題はありますか?」とあるorないかを聞く

何がまずいかと言うと「ありますか?」と聞かれたら、だいたいの人が「あります」と答えるからです。しかし、本当に知りたいのは「その課題の大きさ・深さ」なのでYes/Noだけで測ろうとするのは非常に危険です。

どれだけ課題を解決したいかを聞けるようにするべき

アンチパターン②: 「どうすれば解決しますか?」と直接聞こうとする

ユーザーは自分が置かれている状況を客観的に把握しているわけではないので、ものすごく主観だけで意見を言うもの。それなのに、解決策を相手に聞いて思考が引っ張られるのは非常に危険です。

ユーザーは本当に自分が欲しいものは分かっていないものです。早い馬ではなく車を考えるのが仕事なので、難しい仕事ですがここから逃げてはいけません。

アンチパターン③: ヒアリング相手のペルソナがない、セグメント分けしていない

自分たちのプロダクトのお客様が誰なのか、ここをヒアリング前に定義しないと、正しい質問内容も決められません。ユーザーの定義とヒアリングはワンセットで行うものと理解しておきましょう。

アンチパターン④: ファクト情報を集めようとしない

相手の意見を聞くことがユーザーヒアリングではありますが、その前に相手の定量情報・ファクトを知ることはとても大事です。なぜなら、ファクトがあるかどうかで、同じ情報の「解釈」が大きく変わるからです。

アンチパターン⑤: 課題を解決できない理由をヒアリングしない

大きな課題があるのに行動にできていない場合は、何かしらの阻害要因がある可能性が高いのです。 この背景を知らずにプロダクトを作っても、同じ轍を踏むだけです。課題があるとしても、それがなぜ解決できていないか、まで深くヒアリングすることが大事です。

ユーザーの課題を知るために効果的なユーザーヒアリングのやり方

① ヒアリングの目的を定める

  1. お客様の課題を知る
  2. 他にもっと大きな課題がないか知る
  3. 課題の深さを知る
  4. ファクト情報が足りないから集める などなど、目的は状況によって変わります

② 仮説を作りペルソナを具体的にする

目的を定めたら、次に「誰に聞くか」を決めます。セグメントに分け、ペルソナを具体的にイメージしていきましょう。

③ まずファクト情報を集める

ヒアリングする前にできるだけファクト情報を集めておきましょう。アポの前に、Googleフォームなどで定量情報を集めておくと効果的なヒアリングがしやすくなるのでおすすめです。

④ ヒアリングをしファクトを元に課題を推測する

ヒアリングでは、相手の定量データだけでは答えられない意見・感想を集めます。ここで、ファクトを背景に「課題を推測する」ことが求められます。

⑤ 課題を解決するためのプロダクト機能を考える

課題とその解決策の推測ができたら、それを機能としてどう提供するか要件に落とし込みます。 ただ大事なのは、最初から機能ありきで考えないこと、課題をしっかり把握し、それが解決しきれるような機能を考えることが大事です。

コメント

勉強になる

出典

全PMが知るべき「本当の課題」を知るユーザーヒアリング手順と失敗例まとめ

GENZITSU commented 2 years ago

nlp-waseda / roberta-large-japanese

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')
...

コメント

メモ

出典

nlp-waseda / roberta-large-japanese

GENZITSU commented 2 years ago

【論文紹介】Meta Pseudo Labels

google brainが2020年にpreprintで公開した「Meta Pseudo Labels」という論文の紹介。 Pseudo Labelを行う際に、教師モデルがどのようにラベルを出すべきかをサンプルを見ながら動的に決定できるような手法の提案。

教師モデルがラベルを出力する際は、出力分布をそのまま使う方法や、softmaxをかけてone-hot化する方法などに加えて、Labell smoothingやTemperature tuningなどのテクニックを使うことで学習を安定化させることができる。
ただし、これらはサンプル非依存で訓練中固定された分布を使うことになるのであまり柔軟ではない。

Meta Pseudo Labelsでは、教師モデルのラベル出力をそのまま生徒モデルのターゲットとするが、ラベルの出力の方法を、生徒モデルのvalidation lossとラベル付きデータに対する分類損失をもとに学習させていく。 (生徒モデルのvalidation lossだけだとすぐに過学習するらしい)

スクリーンショット 2022-05-11 17 13 30

スクリーンショット 2022-05-11 17 13 45

Meta Pseudo Labelsによっては訓練損失とvalidation損失が一致するようになり、汎化性能が向上することが確認されている。

スクリーンショット 2022-05-11 17 16 10

また、定量的な評価でも、以下の通り当時のsotaを更新している

スクリーンショット 2022-05-11 17 17 09

スクリーンショット 2022-05-11 17 17 21

スクリーンショット 2022-05-11 17 17 53

コメント

シンプルな手法ながらも、効果が高くて驚いた。 学習中に二つのモデルを動かす必要があるため、若干メモリに不安破残るが、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 .

出典

GENZITSU commented 2 years ago

Python is About to Become 64% Faster — Python 3.10 vs. Python 3.11 Benchmark

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-05-11 18 47 10

コメント

2022年10月リリース予定だそうだが、期待

出典

GENZITSU commented 2 years ago

画像異常検知の新展開!MVTec LOCO AD Dataset

MVTec社から新しい異常検知評価用のデータセットがCC BY-NC-SA 4.0ライセンスで公開。

MVTec ADでカバーされていた構造的な異常にくわて、論理的な異常(あるべきところにあるべき部品がない)データが収録されている。

スクリーンショット 2022-05-11 20 37 36

MVTec ADでは評価指標が1に張り付いていたが、このデータセットだとこれまでのSOTAも1に遠く及ばない結果となる。

スクリーンショット 2022-05-11 20 38 50

コメント

メモ

出典

GENZITSU commented 2 years ago

民泊サービスの宿泊料金予測 1st place solution

テーブルコンペかと思いきや、有望な特徴量をテキストとして連結して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"]

コメント

面白い

出典

GENZITSU commented 2 years ago

Fast Way to Get Top-K Elements from Numpy Array

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オーダーくらいだと、どっちでやってもあまり変わらない模様。

スクリーンショット 2022-05-16 17 36 21

ちなみに、argpartitoinとはaxisにそって上位k版目で、配列を二つに分割するためのメソッド。

スクリーンショット 2022-05-16 17 38 30

ただ単に分割しているだけなので、sortはされないことに注意

スクリーンショット 2022-05-16 17 39 06

コメント

np.argpartitionというメソッドを初めて知った。nが10万とかいうオーダーでtopkを取らないといけない時に使っていきたい。 あとは、topkを返却するが順番までは気にしなくて良いときとか。

出典

GENZITSU commented 2 years ago

Two-phase training mitigates class imbalance for camera trap image classification with CNNs

自然界に設置されたカメラで撮影した画像(camera trap iamge)がもつクラスインバランス問題を解決するためにCNNを2 phaseに分けて学習する方法を提案。

ちなみにカメラトラップが画像とはこんなイメージで、最近は砂漠の泉の水を飲みに来る動物をライブで流しているやつが流行っていたりする。

スクリーンショット 2022-05-16 19 48 03

手法は以下のように至ってシンプル

  1. 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.

  2. 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),

ぱっと見良さげな手法なのだが、評価データの性能向上幅は微妙...
もしかするとデータセットが難しすぎるのかもしれない

スクリーンショット 2022-05-16 19 51 59

いちおうF1が向上しているクラスの方が多い模様

スクリーンショット 2022-05-16 19 55 09

コメント

実は同じようなアイデアを提案している「 Plankton classification on imbalanced large scale database via convolutional neural networks with transfer learning」という論文が2016年時点で発表されている。

その論文ではmost minority classも4,000件はあるという設定で以下のような実験結果を得ている。またこの論文を引用して同様の結果を得ている論文がいくつかあるようなので、実際に効果がありそうだ。

FSfI62nXIAA45pC

出典

GENZITSU commented 2 years ago

Webフロントエンド基礎研修 \~歴史から学ぶ、現場のスタンダードな開発\~

日経電子版の開発現場におけるフロントエンド研修の資料

日経電子版の開発で用いられている技術要素がなぜ使用されているかが紹介されている。

スクリーンショット 2022-05-16 20 38 23

コメント

フロンエンドで用いられている要素技術が端的にまとめられていてとても勉強になる

出典

GENZITSU commented 2 years ago

【DL輪読会】"Masked Siamese Networks for Label-Efficient Learning"

2022年4月にMeta AIから公開された新しい自己教師あり楽手手法の提案。 SwAV系列contrastive learningにmaskkingを加えた形で、low resourceな設定で効果を発揮するとのこと。

スクリーンショット 2022-05-16 21 56 07

スクリーンショット 2022-05-16 21 56 27

エントロピーを損失関数に入れるのは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.

スクリーンショット 2022-05-16 21 56 43

スクリーンショット 2022-05-16 21 56 54

スクリーンショット 2022-05-16 21 57 01

スクリーンショット 2022-05-16 21 57 11

スクリーンショット 2022-05-16 21 57 35

コメント

事故教師あり学習の普通の設定だとDINOとかと同じ感じだが、low resourceな時に効果を発揮するというのはコンペやimagenet使えない系の業務の時に力を発揮しそう。

出典