GENZITSU / UsefulMaterials

34 stars 0 forks source link

almost weekly useful materials - 11/10 - #116

Open GENZITSU opened 1 year ago

GENZITSU commented 1 year ago

月5ドルの自作サービスで最初の500人を集めるまでにやったこと

InkdropというMarkdownノートアプリを個人開発している筆者が500人長の課金ユーザを獲得するまでに実施した施策の紹介。

特に勉強になったものだけ抜粋

1. 大きな広告に頼らない

自身の日頃の発信を広告塔にしつつ、既存ユーザーのサポートに集中

広告も一度も使ったことがありません。それらには頼らず、専ら既存ユーザをより喜ばせることに集中しました。並行して、自分のプロダクトやフリーランス生活での上手く行った戦略をブログに書き綴りました。これらの活動が功を奏して徐々に口コミを生みました。

緩やかな成長だからこそ、個人で見れる範囲内のサポートでサービス品質を落とさずに済む

エンゲージメントはほぼ自分自身から作り出しました。その成長は穏やかで安定していて、振り返れば大きなメディアでバズらせるよりもずっと良いやり方でした。バズるとユーザの流入数が超短期的に跳ね上がります。そしてサーバ負荷を急激に高める上に、捌ききれない量の問い合わせが殺到します。サービスは不安定になり、ユーザサポートはボロボロになっていたでしょう。

3. ユーザフォーラム運営に時間をかける

フォーラムの質疑を丁寧にこなすことで、将来のユーザーサポートにかかる手間を削減できる。

立ち上げ期は特にユーザサポートに力を入れるべきだと以前にも書きました。それは成長期になっても変わりません。

ユーザフォーラムの運営に多くの時間を割くことは、無駄ではありません。投稿の数が増えるにつれて、それはFAQとして機能するようになり、また自分の意見・考えの記録になります。ユーザは疑問や提案、質問があったらまずググります。そしてフォーラムの該当トピックにたどり着きます。彼らはすぐに回答を得ることができるし、僕は同じ回答を何度もする必要がなくなります。最終的には手間が減って他の事に沢山集中できるようになる訳です。

4. ロードマップを公開する

ロードマップを公開することでユーザーのを期待を掻き立てる。

個人開発プロジェクトなので、ユーザがサービス終了を危惧するのは仕方のないことです。その不安を少しでも和らげる方法がサービスの未来、次に何が来るのかについて語ることです。 ロードマップを公開するのはサービス購読をより長続きさせる効果もあるようです。彼のように、欲しい機能が実装されるまで期待して待てるからです: それはアプリそのものをより長生きさせます。だってこういう期待のコメントは僕のモチベーションになりますから :)

5. 課金ユーザを特別扱いする

以下のようなことを実施したとのこと。

フォーラムをカスタマイズして、課金ユーザにのみ星型のバッジをアイコンに表示するようにしました。そうすれば課金ユーザかトライヤル中かがひと目で見分けられて、星のついている人を優先的に取り扱えます

フォーラムには課金ユーザしか入れないカテゴリが設けてあります。そこで次のロードマップについて意見を募って議論しました。これは彼らが特別だと感じてもらえるとても良い方法です。その上、彼らは既にコンセプトを理解しているので、とても有意義に議論できます。

新しいモバイル版を作っていた時、課金ユーザにだけベータテストにお誘いしました。彼らはその扱いをとても楽しんでいるように見えましたし、沢山のフィードバックをくれました。驚いたのは、ベータテストに参加するためにトライヤルを手動で終わらせて課金ユーザになった人が数人いたことです。

6. 戦略を語る

作者自身がプロダクトの一部であることを理解して振る舞う

個人開発では、作者自身もプロダクトの一部です。作者が多くの人に知られれば、プロダクトも使われる機会が増えます。ブログはあなたのプロダクトを使いそうな人にリーチするための強力な方法です。

作者はプロダクトの一部です。なので、ブログの記事はあなた自身のストーリーである必要があります。すると記事を読んだ人は、あなたに興味を持ちます。数人のユーザさんが言っていました — 彼らは僕のプロダクトというよりもむしろ僕自身を応援したいのだと。

自身のストーリーを語ることは、プロダクトの価値を高めます。

7. 競合をすべて無視する

自分自身が解決したい問題に集中する

もし競合を気にしてばかりいると、彼らに影響を受けてしまうし、彼らに負けないことが目的になってしまいます。最初のモチベーションを思い出してください。それはもともと自分の問題を解決するために作ったものだし、別に相手を打ち負かすために作ったのではありません。

8. 不完全を受け入れる

不完全な部分を受け入れて定期的にリリースを行う。

プロダクトはまるで生き物みたいです。いつまでも完成しません。どんどん育つほど、やることも増えていきます。まだ完璧じゃないと思っていても、区切りをつけてリリースしましょう。なぜならリリースしてみないと何もわからないからです。リリースするたびに、いつも何かしらユーザから予期せぬ発見が得られます。

コメント

学びが多い。

出典

月5ドルの自作サービスで最初の500人を集めるまでにやったこと

GENZITSU commented 1 year ago

(SNLP2022)DiffCSE: Difference-based Contrastive Learning for Sentence Embeddings

BERTのデファクトな事前学習手法であるSimCSEを改良したDiffCSEの論文解説資料。

提案手法に至る背景からablation studyまでわかりやすくまとめられている良資料。

以下重要そうな部分の抜粋。

背景

スクリーンショット 2022-11-03 23 55 14

スクリーンショット 2022-11-03 23 55 29

手法

スクリーンショット 2022-11-03 23 55 42

スクリーンショット 2022-11-03 23 56 45

スクリーンショット 2022-11-03 23 57 11

スクリーンショット 2022-11-03 23 57 20

結果

スクリーンショット 2022-11-03 23 58 04

ablation

スクリーンショット 2022-11-03 23 58 26

スクリーンショット 2022-11-03 23 58 42

スクリーンショット 2022-11-03 23 58 48

コメント

DiffCSEをJSTSデータセットで検証したレトリバのブログによると、若干ながらDiffCSEによる学習の方が良かったとのこと。

使用した、エンコーダのモデルはcl-tohoku/bert-base-japanese(表中のv1)とcl-tohoku/bert-base-japanese-v2(表中のv2)を使用しています。Generatorはbert-base-japaneseを用いる場合は、DistilBERTを用いており、bert-base-japanese-v2を使用する場合は、bert-base-japanese-v2を使用しました。

スクリーンショット 2022-11-04 0 01 51

マスクプレディクションの箇所を予測する以上に効果の高い別タスクがなんかあるような気がする。

出典

(SNLP2022)DiffCSE: Difference-based Contrastive Learning for Sentence Embeddings

GENZITSU commented 1 year ago

A Contrastive Framework for Learning Sentence Representations from Pairwise and Triple-wise Perspective in Angular Space

BERTで文表現を得る際の事前学習手法SimSCEに角度マージンロスとトリプレットロスを導入した手法ArcCSE(@ACL2022)の解説資料

同勉強会で発表されたDiffCSEの解説資料と同様にとてもわかりやすいが、チューニング項目が多いからか精度はDiffCSEの方が良さげ

以下重要そうな部分の抜粋。

背景

スクリーンショット 2022-11-04 15 03 50 スクリーンショット 2022-11-04 15 04 16 スクリーンショット 2022-11-04 15 04 25

手法

スクリーンショット 2022-11-04 15 04 44 スクリーンショット 2022-11-04 15 04 57 スクリーンショット 2022-11-04 15 05 22

結果

スクリーンショット 2022-11-04 15 05 32 スクリーンショット 2022-11-04 15 05 49

ablation

スクリーンショット 2022-11-04 15 05 49 スクリーンショット 2022-11-04 15 05 58 スクリーンショット 2022-11-04 15 06 05 スクリーンショット 2022-11-04 15 06 42 スクリーンショット 2022-11-04 15 06 53

コメント

DiffCSEと比べて考えなければならないパラメータが多いのが難点だが、DiffCSEと異なりgenerator無しで良いのは良さげ。

角度マージンだけだと精度がどっと下がるのは、DiffCSEの背景と同じでdropoutだけの正例負例の作成に限界があるかということを物語っていそう。

出典

A Contrastive Framework for Learning Sentence Representations from Pairwise and Triple-wise Perspective in Angular Space

GENZITSU commented 1 year ago

A Closer Look at How Fine-tuning Changes BERT

ACL2022に採択されたfine-tuningによってBERTの潜在空間がどう変化するかを分析した論文の解説スライド

以下重要なところの抜粋

スクリーンショット 2022-11-04 20 48 35

スクリーンショット 2022-11-04 20 48 45

スクリーンショット 2022-11-04 20 49 30

スクリーンショット 2022-11-04 20 49 53

スクリーンショット 2022-11-04 20 50 15

スクリーンショット 2022-11-04 20 50 44

スクリーンショット 2022-11-04 20 51 16

スクリーンショット 2022-11-04 20 52 21

コメント

実務で何か使えるかというわけではないがBERTの性質が今後も解明されていくとよいっすね。

出典

A Closer Look at How Fine-tuning Changes BERT

GENZITSU commented 1 year ago

論文紹介:On the Importance of Gradients for Detecting Distributional Shifts in the Wild

NeurIPS 2021に採択されたsoftmaxの出力分布と一様分布とのKL距離の勾配情報(GradNorm)から Out Of Distribution 検出を行う論文の解説資料。

分布内データの方が分布外データよりも勾配ノルムが大きくなることを利用して検出を行う。

スクリーンショット 2022-11-08 10 45 00

スクリーンショット 2022-11-08 10 46 47

スクリーンショット 2022-11-08 10 45 37

スクリーンショット 2022-11-08 10 45 59

コメント

正解ラベル無しでOOD検出を実施できるのは実務的にありがたそう。

出典

GENZITSU commented 1 year ago

組織の生産性を高める意思決定の構造と方法

組織の生産性を高めるために意思決定のスピードと質をどのように上げていくかを解説したGMOペパボのマネージャー研修資料(2022年9月27日)。

以下重要そうなものを抜粋

生産性は仕事量 → 期待付加価値 → 実現付加価値の3 layerに分かれている

スクリーンショット 2022-11-09 9 51 30

多くの場合、意思決定のスピードと質が生産性を下げる大きなボトルネックになる

スクリーンショット 2022-11-09 9 52 07

集団が大きくなるにつれて個々人のアウトプットの総和よりも集団のアウトプットの方が低くなってしまうというリンゲルマン効果が存在

スクリーンショット 2022-11-09 9 52 40

また個々人のへの期待が不明瞭である場合に社会的手抜きが発生することも

スクリーンショット 2022-11-09 9 52 49

対処法

意思決定をする方法や場を明確に規定する

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

意思決定に関するロジックや情報を意識し、意思決定の質を高めていく

スクリーンショット 2022-11-09 9 53 51

スクリーンショット 2022-11-09 9 54 00

コメント

リンゲルマン効果や社会的手抜きという概念を初めて知った。
各mtg参加者それぞれがなんらかの意思決定を常に実施できるような体制を組んでいきたいところ。

出典

組織の生産性を高める意思決定の構造と方法

GENZITSU commented 1 year ago

Compact word vectors with Bloom embeddings

単語ベクトルを複数のハッシュidから得られるベクトルのsumで表現するBloom embeddingsを解説している資料。 Bloom embeddingsをfastTextに応用したfloretというツールも作成しており、気概がすごい。

通常の単語ベクトルとの違い

通常の単語ベクトルは各々の単語にIDを割り当て、そのIDに格納されているベクトルを取り出すが、Bloom embeddingsでは単語をハッシュ化しそのidから得られるベクトルを利用する。

スクリーンショット 2022-11-09 11 32 39

ハッシュ化なので当然、別単語なのにIDが被るということが発生するが、ハッシュ化を複数回適用しそれらの足し合わせを最終的な単語ベクトル見なすことで別単語なのに同じベクトルになるということを避けられる。

スクリーンショット 2022-11-09 11 39 03

MultiHashEmbed

spacyにはこれを活用したHashEmbeddingがそなわっており、単語をORTH, PREFIX, SUFFIX, SHAPEの4要素に分解してbloom embeddingsを得ることで、ベクトルテーブルの大幅な省メモリ化を達成している。

スクリーンショット 2022-11-09 11 41 56

floret

floretはこのbloom embeddingsをfastTextに活用したもので通常単語本体とサブワードで分割して保持しているテーブルを合体させhash trickを活用することで大幅な省メモリ化を行っている。

2M word vectors and 2M subword vectors with 300 dimensions, you’re looking at 4GB+ data, which is definitely prohibitive in many cases. with the hashing trick, it’s possible to both greatly reduce the size of the vector table and also support subwords. We can have performant vectors with subword support in under 100MB with just two small changes to fastText:

スクリーンショット 2022-11-09 11 42 51

スクリーンショット 2022-11-09 11 43 00

そしてこのようなembedding手法を用いると、未知後やスペルミスに対してロバストになる上に、文字列長が長いような単語で構成される言語系におけるタスクの性能が上がってリモするらしい。

スクリーンショット 2022-11-09 11 23 45

コメント

単語ベクトルをエッジマシンや低リソースマシンで利用するさいに省メモリというのかなり大きな利点。

チュートリアルをみるとベクトルの類似度に若干の不安を覚えるが、どんな単語を入れても何かしらのベクトルが帰ってくるというのは使い勝手良さそう。

スクリーンショット 2022-11-09 11 48 12

スクリーンショット 2022-11-09 11 48 18

出典