RoBERTa(論文の詳細③ Training Procedure Analysis)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #16

f:id:lib-arts:20190818234338p:plain

言語処理へのDeepLearningの導入をご紹介するにあたって、#3〜#8においては、Transformer[2017]やBERT[2018]について、#9~#10ではXLNet[2019]について、#11~#12ではTransformer-XL[2019]について取り扱ってきました。

XLNet②(事前学習におけるAutoRegressiveとPermutation)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #10 - lib-arts’s diary

Transformer-XL(論文のAbstractの確認)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #12 - lib-arts’s diary

#13以降では2019年7月にリリースされたBERTベースでハイパーパラメータ(学習にあたってのlossやデータセット)のチューニングを行なった事前学習モデルであるRoBERTa[2019]について取り扱っていきます。

[1907.11692] RoBERTa: A Robustly Optimized BERT Pretraining Approach

#13では上記のAbstractをベースにRoBERTa[2019]の概要について、#14ではRoBERTa[2019]の論文のIntroductionとBackgroundについて、#15ではRoBERTa[2019]の論文のSection3のExperimental Setupについて確認しました。

RoBERTa(論文のAbstractの確認)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #13 - lib-arts’s diary

RoBERTa(論文の詳細① Introduction&Background)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #14 - lib-arts’s diary

#16ではRoBERTa[2019]の論文のSection4のTraining Procedure Analysisについて確認していきます。
以下目次になります。

1. Training Procedure Analysis(Section4 冒頭)
2. Static vs. Dynamic Masking(Section4.1)
3. Model Input Format and Next Sentence Prediction(Section4.2)
4. Training with large batches(Section4.3)
5. Text Encoding(Section4.4)
6. まとめ

 

1. Training Procedure Analysis(Section4 冒頭)
まずは冒頭部について確認していきます。

f:id:lib-arts:20190828212243p:plain

上記ではSection4の概要について言及されています。冒頭の文を和訳すると、「このSectionではBERTの事前学習を成功させるにあたってどの選択が重要かについて探索と定量化を行う。」となります。すなわち、BERTの学習における様々な設定を検討していくことを示唆しており、各サブセクションでそれぞれの視点から考察を行なっています。
基本的にはBERT_{BASE}のモデルからスタートしており、それぞれのパラメータとしてはL=12(隠れ層が12層)、H=768(隠れ層が768次元)、A=12(Attention Headが12)、1億1,000万のパラメータ数(VGG16と大体同じくらい)であることも示されています。


2. Static vs. Dynamic Masking(Section4.1)
Section4.1ではBERTの事前学習におけるマスキングについて話がまとまっています。

f:id:lib-arts:20190828221010p:plain

上記をパラグラフ単位で読解していきます。まず第一パラグラフについてまとめます。BERTの元論文で用いられているマスキングはデータの前処理の際に作成して静的(static)と表されているように学習の間は固定するとされています。同様のマスクの使用を防ぐために、学習データを10倍に複製し10通りのマスクを生成し、学習40エポックにおいて変更するとされています。これにより学習において4度のみの同じマスクの出現に抑えたとされています。
第二パラグラフではこれに対して、提案手法であるdynamic maskingを紹介しています。dynamic maskingではデータをモデルに入力するたびにマスクのパターンを生成するとされています。これによりより多くの学習ステップやデータセットを用いることができるようになったと記述されています。

f:id:lib-arts:20190828221945p:plain

結果の比較としては上記のTable1で示されています。大元のBERTとstatic、dynamicをそれぞれ比較を行なっています。実験結果としてdynamicの方が良いので以降はdynamic maskingを用いるとされています。


3. Model Input Format and Next Sentence Prediction(Section4.2)
Section4.2ではBERTの事前学習(pretraining)の際にMasked Language Modelと同様に用いられているNext Sentence Prediction(NSP)について記載されています。

f:id:lib-arts:20190828232006p:plain

結論から述べると、このNSPは用いないで実装する方が良いという結果になったため、RoBERTaでは用いないで実装がされています。以下パラグラフ単位で読解を行っていきます。第一パラグラフでは、オリジナルのBERTについて言及した上でその学習にあたってのlossの一つとしてNSP(Next Sentence Prediction)について言及しています。NSPは二つの文が連続した文かどうかの判定を行うタスクです。
第二パラグラフでは、BERTのオリジナル論文においてNSPの重要性について触れられた(実験においてNSPを用いないと大きく精度が下がったとされています)後に、逆接として直近の研究でNSPの必要性に疑問が投げかけられているとされています。
第三パラグラフでは、第二パラグラフで生じた不一致(NSPが必要か否か)をより理解するにあたって、下記でまとめる学習のフォーマットについて検討したとあります。

・Segment-Pair + NSP
・Sentence-Pair + NSP
・Full-Sentences
・Doc-Sentences

上記の4パターンで検証を行った結果が下記のTable2にまとめられています。

f:id:lib-arts:20190828233732p:plain

上記に対する本文の論述を確認します。

f:id:lib-arts:20190829154041p:plain

上記では、NSP lossを用いないケース(Doc-Sentences)とBERT_{base}を比較しており、NSP lossを取り去ることで少しながらもパフォーマンスの向上が図れたとされています。

f:id:lib-arts:20190829154059p:plain

また、上記ではDoc-SentencesとFull-Sentencesを比較し、多少ながらDoc-Sentencesが上回るものの、バッチサイズに着目して残りの実験ではFull-Sentencesを用いたとされています。

ここまでが論文に書かれている内容ですが、差自体が僅差なのでどちらが良いかの断言は行うべきではないものの、NSPを用いなくても用いた際と同様の結果が出ていることについては評価できるのではないかと思われました。


4. Training with large batches(Section4.3)
Section4.3では学習時のバッチサイズの増大について議論されています。

f:id:lib-arts:20190829155023p:plain

以下パラグラフ単位でリーディングしていきます。
第一パラグラフでは、従来のニューラル機械翻訳において学習率が適切に設定されれば大きなバッチを用いる学習では、最適化のスピードと精度(end-task performance)を向上させると述べた上で、BERTもそれは同様であるとしています。
第二パラグラフでは、バッチサイズとステップ数の関係性についてまとめています。バッチサイズが256の際のステップ数が1,000,000のケースは、バッチサイズが2,000の時は125,000ステップ、バッチサイズが8,000の時は31,000ステップに対応するとされています。この関係性を実際に計算してみると下記になります。

f:id:lib-arts:20190829160256p:plain

第三パラグラフでは、第二パラグラフで考えたケースにおけるパフォーマンスの検証をTable3でまとめています。

f:id:lib-arts:20190829160833p:plain

上記では、計算コストの効率自体は2K(2,000)の際が良いとされています。

f:id:lib-arts:20190829160856p:plain

とはいえ上記はあくまで同じ計算コストにおける話であり、最終文でバッチが大きい方が並列化なども行えることから以後の実験では8,000のバッチサイズを用いたとされています。
第四パラグラフでは、32K(32,000)のバッチサイズで行われた研究を参照しつつ、バッチサイズの大きさの限界については今後の研究トピックとする(leave further exploration)とされています。

通常のマシンスペックを考えるならバッチサイズが256の時点でかなり厳しいのですが、精度面でのSOTAを探索する研究のため、その辺の制約は取り払った上で様々な実験が行われています。


5. Text Encoding(Section4.4)
Section4.3では文書のEncodingについて議論されています。

f:id:lib-arts:20190829163422p:plain

以下パラグラフ単位でリーディングしていきます。
第一パラグラフでは、Byte-Pair Encoding(BPE)の紹介がされています。BPEは文字(character)レベルと単語(word)レベルの双方を考慮したエンコーディングで、単語全体だけを考慮するより、subwords unitsに着目することができるとされています。
これを少し具体的に考えると、英語の単語もいくつかの部分の組み合わせで出てきているので、必要な考察だと思われます。例えば"re"は「再」という意味、"bi"は「二つの」という意味、"cycle"は車輪という意味合いですが、"re"と"cycle"をくっつけるとrecycleでリサイクルの意味だし、"bi"と"cycle"をくっつけるとbicycleとなり、自転車の意味になります。このように英単語はいくつかの部分で構成される時もあるので、その際にこのsubwordsという考え方は有効です。
第二パラグラフでは、Byte-Pair Encoding(BPE)において用いられているunicodeでは今回の研究のように大きなコーパスを使用する際には不向きのため、bytesを用いたエンコードを用いることで回避する方法について言及されています。
第三パラグラフでは、これまでの話を受けて、characterを用いてBPEを行っているオリジナル論文のBERTに対し、この論文ではbyte-levelのBPEを用いたとされています。
第四パラグラフでは、両者の差異が現状はそれほど大きくないと述べた上で、詳細の研究は将来的な研究トピックとする(left to future work)とされています。


6. まとめ
#16ではRoBERTa[2019]の論文のSection4のTraining Procedure Analysisについて確認しました。Section4ではハイパーパラメータのチューニングに関して行われた様々な実験や各観点からの考察が行われていました。
#16ではSection5のRoBERTa以降について取り扱います。

 

↓また、当記事のシリーズの内容を元に再構成と少しだけ加筆を行い電子書籍化を行いました!pdf版が欲しいなどありましたら下記をご購入いただけたら大変嬉しいです!!

パブリック・リレーションズ、品質、景気後退期のマーケティング、リレーションシップ・マーケティング|『コトラーのマーケティング・コンセプト』読解メモ #17

f:id:lib-arts:20190722201224p:plain

課題本として、「コトラーマーケティング・コンセプト」を設定したので読み進めていきます。

コトラーのマーケティング・コンセプト | 東洋経済STORE

#1ではまえがきと序文について、#2以降では3~4トピックずつ取り扱っています。

#16ではポジショニング(Positioning)、価格(Price)、製品(Products)、利益(Profits)について取り扱いました。

#17ではパブリック・リレーションズ(Public Relations)、品質(Quality)、景気後退期のマーケティング(Recession Marketing)、リレーションシップ・マーケティング(Relationship Marketing)について取り扱います。
以下、目次になります。
1. パブリック・リレーションズ(Public Relations)
2. 品質(Quality)
3. 景気後退期のマーケティング(Recession Marketing)
4. リレーションシップ・マーケティング(Relationship Marketing)
5. 感想・まとめ

 

1. パブリック・リレーションズ_Public Relations(簡単な要約)
企業は広告費からパブリック・リレーションズ(PR)費用により多くの資金を振り向ける方が良いと思われる。広告はかつてほどに効果を発揮できなくなってきており、視聴者の細分化が進んでいることから大量の視聴者にメッセージを到達させるには困難になってきた。
企業は広告に支出し過ぎる一方で、PRには十分な資金を投じていない。その理由は、PR会社の9割が広告会社の傘下にあるためである。広告会社の収入源はPRではなく広告である。それに加えて広告キャンペーンはPRよりもはるかにコントロールしやすいという利点を備えている。
一方でPRは代金を支払う対象(pay for)というよりは、祈りの対象(pray for)といった方が良い。PRを通じて新たなブランドを確率するには長い時間と高い創造性を要求されるが、最終的には「ビッグバン並み」の広告よりも高い効果をあげることができる。PRには世間の注目を集め「価値ある話題」を創造するためのツールが数多く用意されているが、これらをPRのPENCILSと呼び、下記にまとめる。

・出版(Publications)
・イベント(Events)
・ニュース(News)
・地域活動(Community affairs)
アイデンティティ媒体(Identity media)
・ロビー活動(Lobbying)
・社会貢献投資(Social investments)

製品について人から伝え聞く話は、広告よりもはるかに強い影響力を持つ。PRキャンペーンはコストがはるかに安く、成功すれば長く語り継がれるような話題を生む可能性もある。


2. 品質_Quality(簡単な要約)
品質の良し悪しに責任を持つのは誰であろうか。マネジメント側は労働者の責任というが、実は労働者には責任はない。品質マネジメントの大家のW・エドワーズ・デミング(W. Edwards Deming)は「品質問題の85%は、マネジメントに責任がある」と明言している。
また、品質はどのくらいのレベルに上げる必要があるのだろうか。この答えとしては適正な品質のレベルは顧客と製品によって決まる。「顧客が我々の品質水準を決定する。我々の務めは、その水準を満たすものである。(ブレンダン・パワー; Brendon Power)」、「品質は企業がサービスや製品の中に埋め込むものではない。それはクライアントや顧客がサービスや製品から取り出すものである(ピーター・ドラッカー; Peter Drucker)」のように、多くの関連する論述がある。

 

3. 景気後退期のマーケティング_Recession Marketing(簡単な要約)
景気が後退すると、ほとんどの企業が出費を切りつめようとする。最大の標的となるのは広告費である。経営トップは予想される収益の一部をマーケティング予算に充てるというやり方を取っているため、収益予想が下がると、マーケティング予算を削って当然だと考える。だが、収益予想に基づいてマーケティング予算を組むというのは非論理的な話で、原因と結果が逆であり注意が必要である。根本的な問題は、企業が好況時に無駄な贅肉をたっぷりとつけてしまうことで、本来は倹約する必要がある。
景気後退期に入ると、性急にコスト削減策を打ち出す企業が多いが、どんな対策を打ち出したとして以下の2つのルールだけは守らなくてはならない。

1) 顧客に対する価値提案を損なってはならない
-> 顧客は購入にあたって、製品の品質やサービスになんらかの期待を抱いているので、彼らが期待している経験の質を落としてはならない。

2) パートナーに対する価値提案を損なってはならない
-> 事前の相談なしに供給業者やディーラーにコスト負担を押しつけてはならない。

景気後退期においては、一時的な値下げに踏み切ることも検討してみると良い。もちろんそうなると粗利益は減少するが、みすみす競合他社に乗り換えられるくらいなら値下げしてでも顧客を自社に引き止めておいたほうが良い。抜け目のない企業の中には、予算を削減した競合他社から市場シェアを奪おうと、コスト削減策を取るどころか予算を維持・増強するところもある。さらに賢明な企業になると、景気後退期のみならず、常日頃からコスト意識の強い風土づくりを目指している。


4. リレーションシップ・マーケティング_Relationship Marketing(簡単な要約)
企業にとって最も高い価値を持つのは、顧客、社員、供給業者、流通業者、ディーラー、小売業者とのリレーションシップである。企業のリレーションシップ資本とは、顧客、社員、供給業者、流通業者と行ったパートナーとともに築き上げた知識、経験、信頼の蓄積のことである。こうしたリレーションシップの価値は、企業の物的資産の価値を上回ることも多い。
リレーションシップに関する失策は全ての企業の業績に悪影響を及ぼす。企業はリレーションシップ・スコアカードを準備し、リレーションシップに関する強み、弱み、機会、脅威を把握しておく必要がある。重要なリレーションシップが弱まりつつあるとわかったら、即刻行動を起こし、関係を修復しなければならない。
リレーションシップ・マーケティング(Relationship Marketing)は、マーケティングの世界に一大パラダイム・シフトをもたらした。それはもっぱら競争と対立を中心にすえた考え方から、相互依存と協力を基盤とする考え方へのシフトとなった。これによって、標的顧客に最高の価値を提供するには、様々な関係者(供給業者、社員、流通業者、ディーラー、小売業者)の協力が欠かせないという認識が生まれた。
リレーションシップ・マーケティングの主な特徴は以下の通りである。

・自社製品よりも、パートナーや顧客に焦点を合わせる。
・顧客を獲得することよりも、顧客を維持し、育成していくことを重視する。
・部署単位の活動よりも、部門横断型チームによる活動が求められる。
・話すことよりも聴くことと学ぶことを重視する。


5. 感想・まとめ
#17ではパブリック・リレーションズ(Public Relations)、品質(Quality)、景気後退期のマーケティング(Recession Marketing)、リレーションシップ・マーケティング(Relationship Marketing)について取り扱いました。興味深かったのはPublic RelationsとRelationship Marketingです。Public Relationsについては広告が重視されがちのところで、その理由やPRの重要性について論述されており、非常に興味深い内容でした。Relationship Marketingに関しては企業が単体で生み出す成果だけではなく、その他諸々との関係性をもって価値の分析を行うというものでこちらも非常に興味深い内容でした。
#18では小売業者とベンダーについて取り扱います。

【入門者向け】クラスの概要とPythonにおける実装|Python入門 #7

f:id:lib-arts:20190804170008p:plain

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2以降では#1で触れた基本文法をそれぞれもう少し丁寧に解説を行なっていきます。基本的には下記のPythonのドキュメントのチュートリアルなどを元にして解説していきます。

Python チュートリアル — Python 3.7.4 ドキュメント
#2ではPythonにおける四則演算・文字列について、#3ではリスト・タプル・辞書について、#4ではPythonの制御構文について、#5ではPythonの入出力に関して、#6ではPythonの関数の実装について取り扱いました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

【入門者向け】Pythonの入出力の実装|Python入門 #5 - lib-arts’s diary

#7ではSection9を中心にPythonにおけるクラスの実装について取り扱います。

9. クラス — Python 3.7.4 ドキュメント

以下目次になります。
1. クラスの概要
2. クラス定義の構文とクラスオブジェクト(9.3.1、9.3.2)
3. まとめ


1. クラスの概要
1節ではクラスの概要についてまとめます。関数とは違い、クラスはちょっとわかりにくい考え方なので、概念の補足から入ります。

f:id:lib-arts:20190829214031p:plain

クラス (コンピュータ) - Wikipedia

上記はWikipediaの解説なのですが、クラス、オブジェクト、インスタンスなどと難しい言葉が並んでいます。難しく解説するとわけがわからなくなるので、以下ざっくりとした直感的な解説のみとし、具体的には実装を見ながら確認していくという形で話を進めていければと思います。
まず、クラスとインスタンスに関してですが、それぞれ設計図と組み上がった物体と考えます。具体的に車を想定するなら、クラスは車の設計図、インスタンスは実際に製造された車となります。設計図を用意することで、同じインスタンスを生成することができ、再現性が取れます。プログラミングにおいては、車とは違い原材料などがないので再現性が取れれば再利用できたも同然となります。従って、一度クラスを実装しておけば、関数と同様に使い回すことができるようになります。
また、クラス、インスタンスは関数と比較して何が違うかですが、関数は単に処理手順のみを記述しているのに対し、クラスから生成されるインスタンスはデータと処理手順の二つを持っているので、関数よりもより高機能な振る舞いをすることができます。

これ以上見ていくと大変なので、クラスは設計図、インスタンスは設計図から作られたデータと処理手順を持つもので、関数よりもより高機能な実装が可能になるとだけ把握した上で次に進みましょう(実際にコードを動かしながらでないとイメージがつかめないと思います)。


2. クラス定義の構文とクラスオブジェクト(9.3.1、9.3.2)
2節ではクラスの定義にあたって構文と実装例を見ていきます。まずは、9.3.1よりクラス定義の構文を見ていきます。

f:id:lib-arts:20190829215620p:plain

上記がクラス定義の構文です。一旦"class ClassName"でclassを定義するとだけ抑えてください。これを実際に実装した例が下記になります。

f:id:lib-arts:20190829220047p:plain

上記では実際にMyClassというクラスにデータのiとメソッドのfを実装しています。見ているだけではわかりづらいので、実際に動かしてみます。

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart

x = Complex(3.0, -4.5)
x.r, x.i

上記を実際に動かすと下記のような結果が得られます。

f:id:lib-arts:20190829225155p:plain

上記ではComplexというクラスを定義し、rとiという形で内部に変数を持ちます。Complexは複素数という意味で、rは実部(Real part)、iは虚部(Imaginary part)をそれぞれ意味しています。Complex(3.0, -4.5)で複素数インスタンスを生成し、xに代入しています。最終文で、x.rとx.iという形式でそれぞれの値を取り出しています。生成したインスタンスの値はこのようにすることで確認することができます。

上記で、クラス定義の構文とクラスオブジェクトについては確認できたので2節はここまでとします。


3. まとめ
#7ではクラスの概要とPythonにおける実装について取り扱いました。
#8では少々難しいですがクラスの継承とオブジェクト指向について見ていければと思います。

 

ポジショニング、価格、製品、利益|『コトラーのマーケティング・コンセプト』読解メモ #16

f:id:lib-arts:20190722201224p:plain

課題本として、「コトラーマーケティング・コンセプト」を設定したので読み進めていきます。

コトラーのマーケティング・コンセプト | 東洋経済STORE

#1ではまえがきと序文について、#2以降では3~4トピックずつ取り扱っています。

#15では機会(Opportunity)、組織(Organization)、アウトソーシング(Outsourcing)、業績評価(Performance Measurement)について取り扱いました。

#16ではポジショニング(Positioning)、価格(Price)、製品(Products)、利益(Profits)について取り扱います。
以下、目次になります。
1. ポジショニング(Positioning)
2. 価格(Price)
3. 製品(Products)
4. 利益(Profits)
5. 感想・まとめ

 

1. ポジショニング_Positioning(簡単な要約)
「ポジショニング」という言葉がマーケティングの世界にもたらされたのは、1982年のアル・ライズ(Al Ries)とジャック・トラウト(Jack Trout)の"Positioning: The Battle for Your Mind"によってである。ポジショニングとは製品をどこに置くかという話ではなく、見込み客のマインドの中にどう位置付けるかという話である。つまり、ボルボが「最も安全な車」、BMWが「究極のドライビング・マシン」、ポルシェが「世界最高の小型スポーツカー」を謳っていること、それがポジショニングである。
企業は様々な観点から自社製品の特徴や利点を訴えることができる。具体的には、より速い、より安全、より安い、より便利、より長持ち等、挙げだしたらきりがない。だが、ライズとトラウトは購入者のマインドに強いインパクトを与えるにはそのうちの1つに集中する必要があると強調する。彼らはポジショニングを何よりもコミュニケーションの問題として捉えている。特定の顧客グループが自分たちの重視する観点に照らして最高のものとみなさない限り、製品のポジショニングは不十分であり、人々の記憶に残ることもできない。
企業が(企業規模その他の属性に照らして)市場でナンバーワンに位置していなくても心配する必要はない。別の属性に着目し、そこでナンバーワンになれば良い。この際に多くの属性を取り上げる必要はない。いくつもの属性を取り上げその優秀性を訴えたとしても消費者は覚えきれないし信用もしない。
マイケル・トレーシー(Michael Treacy)とフレッド・ウィアセーマ(Fred Wiersema)はポジショニングを大きく3つに分類している。すなわち製品リーダーシップ、オペレーションの卓越性、カスタマー・インティマシー(顧客との親密さ)である。トレーシーとウィアセーマはこれら3つの価値基準の1つにおいてリーダーとしての定評を獲得し、残り2つに関しては少なくとも十分とみなされるレベルに達するようにアドバイスしている。
最も効果的なポジショニングは、独特で容易に模倣できないポジションを占めることである。これまでのところ、イケア、ハーレー・ダビッドソン、サウスウェスト航空、ニュートロジーナを模倣して成功した企業はない。とはいえどんなポジショニングであれ、その効果は永久的なものではない。そのため企業は、消費者、競合他社、テクノロジー、経済情勢の変化に応じて主要ブランドのポジショニングを見直す必要がある。


2. 価格_Price(簡単な要約)
製品の価格の設定において、価格をあまりにも安く設定すると売上は伸びるが利益はほとんどあげることができない。その上、望ましくない顧客(少しでも安く買おうと他社製品にスイッチする顧客)を惹きつけることになる。逆に価格が高すぎる場合は売上も顧客も逃してしまう可能性がある。またピーター・ドラッカー(Peter Drucker)が指摘するように、「プレミアム価格をありがたがる企業は、競合他社のために市場を創造している」ことにもなりかねない。
一般的な価格設定の方法はコストを決定し利益を加算するというものであるが、コストは顧客が製品に価値を認めるかどうかとは全く無関係な要素である。コストとはそもそも当該製品に着手するかどうかを決定する際の判断材料にすぎない。価格を設定したからといって価格を売り物にしてはならず、価値を売り物にすべきである。
グローバル化、ハイパーコンペティション、インターネットが市場とビジネスの枠組みを大きく変えようとしている。この3つはいずれも価格引き下げに拍車をかける要因となっている。こうしたマクロトレンドの中にあって、いかにして価格と収益性を維持していくか、この方法を探ることこそマーケティングの課題である。その答えとしては、より適切な市場細分化、より強固なブランディング、より卓越した顧客関係のマネジメントということになると思われる。


3. 製品_Products(簡単な要約)
ハーバード大学の教授のセオドア・レビット(Theodore Livitt)は、製品にこだわり根本的なニーズを見落とすことの危険性を以前より指摘していた。レビットは鉄道業界を引き合いに出し、彼らが自らを輸送産業と位置付けることができず、トラックや航空機の脅威を見落とすという「マーケティング・マイオピア(近視眼)」に陥っていたと述べている。
では企業は自社の販売物をどのようにして決定するのであろうか。決定の方法には以下の4つがある。

1) すでに存在するものを販売する
2) 顧客の求めるものを作る
3) 顧客が将来求めるものを予測する
4) 誰も求めていないが購入者に大きな喜びを与えるであろうものを作る

最後の方法をとった場合、リスクは極めて大きくなるが、大きな利益をあげるチャンスでもある。
単に製品を売るのではなく、経験を売らなくてはならない。ハーレー・ダビッドソンが売っているものは単なるオートバイ以上のもので、ハーレーのオーナーになるという経験である。同社は会員制のオーナー交流会やアドベンチャーツアーなども企画しており、ライフスタイルを売っている。同社のトータルプロダクトはオートバイそのものをはるかに凌駕する。
また、経済成長が鈍化した時期には少数の強力なブランドに資源を集中的に投入する必要がある。強力なブランドとは、プレミアム価格を設定できる、市場シェアがトップの高ロイヤルティ・ブランドで、関連するカテゴリーへの拡張が可能なブランドのことである。例えばユニリーバも1,600あったブランドを整理し、莫大な広告予算とプロモーション予算を400の強力ブランドに集中させるという決断を下している。
製品ポートフォリオが貧弱極まりない企業は実に多い。そのような企業は自分たちが支配的な地位を得たいと考える市場の様々な部門へ進出すると良い。

4. 利益_Profits(簡単な要約)
企業が当面の利益の最大化を目指すべきかどうかと考えると答えはノーである。ゼロサム思考は誤りであり、ゼロサムの競争ではやがて企業は疲弊していく。
今日勝利を収めている企業は、マーケティングのポジティブサム理論を実践している企業である。彼らは優秀な供給業者、優秀な社員、優秀な流通業者、優秀なディーラーと契約を結ぶ。そしてそれぞれの関係者にとって有利な結果を得るためにチームとなって動く。これによって企業はより一層の成功を手にすることができる。


5. 感想・まとめ
#16ではポジショニング(Positioning)、価格(Price)、製品(Products)、利益(Profits)について取り扱いました。元々知ってはいましたが、ポジショニングについてが一番興味深く、意識することの多い考え方だと思いました。何にフォーカスするかをはっきりすることで、どういう印象を顧客に与えていくかというのは非常に重要だと思います。
#17ではパブリック・リレーションズ以降を取り扱っていきます。

【入門者向け】Pythonの関数の実装|Python入門 #6

f:id:lib-arts:20190804170008p:plain

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2以降では#1で触れた基本文法をそれぞれもう少し丁寧に解説を行なっていきます。基本的には下記のPythonのドキュメントのチュートリアルなどを元にして解説していきます。

Python チュートリアル — Python 3.7.4 ドキュメント

#2ではPythonにおける四則演算・文字列について、#3ではリスト・タプル・辞書について、#4ではPythonの制御構文について、#5ではPythonの入出力に関して取り扱いました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

#6ではSection4.6、Section4.7を中心にPythonの関数の実装について取り扱います。

4. その他の制御フローツール — Python 3.7.4 ドキュメント

以下目次になります。
1. 関数を定義する(4.6)
2. 関数定義についてもう少し(4.7)
3. まとめ


1. 関数を定義する(4.6)
関数とは入力になんらかの処理を施し、出力を行う箱のようなものだと考えるのが良いです。

f:id:lib-arts:20190828122615p:plain

数学における関数と同様で、単に入力に対応した出力を返すものとなっており、直感的には上図のイメージで捉えておければ十分です。

抽象的な話よりも実際に動かして見た方が早いので、早速下記を実行してみましょう。

def fib(n):   # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b

# Now call the function we just defined:
fib(2000)

上記はフィボナッチ数を計算する関数をプログラミングしています。実行結果は下記のようになります。

f:id:lib-arts:20190828164828p:plain

上記において、フィボナッチ数はx_{n+2}=x_{n+1}+x{n}という計算を行なっており、これは直前の二項の足し算で次の項を作成しています。これを実装するにあたって、aとbの二つの変数を用意し、それぞれに0と1を与え、随時値を置き換えて数列を生成しています。
ここまでがフィボナッチ数列の計算の実装の話ですが、ここからはPythonにおける関数の実装の話になります。関数の実装にあたっては定義する必要があるので、"def fib(n)"部分で関数の定義をしていることを明示しています。この説明ではわかりづらいと思うので、関数の必要性についてもっと詳しく見ていきましょう。
もともと上記のフィボナッチ数列を生成するプログラムは下記のように実装することができます。

a, b = 0, 1
n=2000

while a < n:
    print(a, end=' ')
    a, b = b, a+b

上記を実行すると同様に下記のようなフィボナッチ数列を得ることができます。

f:id:lib-arts:20190828165814p:plain

さて、なぜこのようにシンプルに実装することができるのに、わざわざ"def fib(n)"などを書いて行数を増やしてまで関数の実装を行ったのでしょうか。それは再利用性にあります。
例えば、2,000までのフィボナッチ数列を生成するという問題を解くだけなら関数を使わない実装で良いです。が、300、500、1,000、2,000、5,000、10,000までそれぞれ求める必要があるとなった場合はどうでしょうか。この際に関数を用いない実装だと、nの値を何度も変えてコピペのコードを実行する形になりなかなか見づらいです。

f:id:lib-arts:20190828170402p:plain

このようなコードは小規模で動かすうちは良いですが、段々と慣れてきたり後から見返したりする際に整理が難しくなります。ここで関数を使うと、下記のように実装できます。

f:id:lib-arts:20190828170738p:plain

このように関数を定義すると記述量を減らせたり、実装したコードの再利用性を高めたりすることができます。

関数の必要性についての説明はできたと思いますので、次に関数において重要となる引数と戻り値についてご紹介します。簡単に言うと、引数は関数の入力(Input)にあたり、戻り値は関数の出力(output)になります。引数の値に応じてなんらかの処理を行い、出力が必要な際は戻り値を返します。(関数内で処理を行い、戻り値は設定しない際もあります。


抽象的な話が続くと難しくなるので、こちらも書きコードを実際に動かしてみましょう。

def fib2(n): # return Fibonacci series up to n
    """Return a list containing the Fibonacci series up to n."""
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a) # see below
        a, b = b, a+b
    return result

f100 = fib2(100) # call it
print(f100) # write the result

実行結果は下記になります。

f:id:lib-arts:20190828172859p:plain

ここで関数名はfib2、引数はn、返り値はreturnの次に記述されているresultであることに注意です。
上記までで関数について一通り確認できたので、1節はここまでとします。


2. 関数定義についてもう少し(4.7)
2節ではSection4.7の内容を元に関数定義についてもう少し詳しく確認していきます。
関数の実装において可変個の引数を設定した上で定義を行うこともできます。引数の定義方法には3 つの形式があり、それらを組み合わせることが可能です。
・デフォルトの引数値(Section4.7.1)
デフォルトの引数値の説明に関してはドキュメントの説明がわかりやすいのでキャプチャします。

f:id:lib-arts:20190828173502p:plain

実装において引数の値のデフォルト値を"="を用いて設定することで、定義されている引数よりも少ない個数の引数で関数を呼び出すことができます。この書き方は便利なのと用いられているケースが多いので、最初から使いこなせなかったとしてもこういう機能があるとだけ抑えておくと良いかと思います。

 

・キーワード引数(Section4.7.2)
こちらもドキュメントの説明がわかりやすいのでキャプチャします。

f:id:lib-arts:20190828173926p:plain

上記のようにキーワード引数を用いて関数に引数を与える方法もあります。こちらもよく用いるので覚えておくと良いです。
また、詳しく説明するとわかりにくくなるのでしませんが、下記のように引数の実装を行うこともできます。

f:id:lib-arts:20190828174529p:plain

こちらについては実際に使用できる必要はないと思いますが、OSSのライブラリコードではこのような実装を見ることが多いので、見たな程度の認識だけ持っておいていただけると良いと思います。

 

・任意引数リスト(Section4.7.3)
あまり使わないとのことなので、下記の実行例だけ確認しておくと良いかと思います。

f:id:lib-arts:20190828174816p:plain


3. まとめ
#6では関数の説明やPythonにおける実装についてご紹介しました。
#7ではクラスについての概要とPythonでの実装について説明していきます。

機会、組織、アウトソーシング、業績評価|『コトラーのマーケティング・コンセプト』読解メモ #15

f:id:lib-arts:20190722201224p:plain

課題本として、「コトラーマーケティング・コンセプト」を設定したので読み進めていきます。

コトラーのマーケティング・コンセプト | 東洋経済STORE

#1ではまえがきと序文について、#2以降では3~4トピックずつ取り扱っています。

#14では市場(Markets)、媒体(Media)、ミッション(Mission)、新製品開発(New Product Development)について取り扱いました。

#15では機会(Opportunity)、組織(Organization)、アウトソーシング(Outsourcing)、業績評価(Performance Measurement)について取り扱います。
以下、目次になります。
1. 機会(Opportunity)
2. 組織(Organization)
3. アウトソーシング(Outsourcing)
4. 業績評価(Performance Measurement)
5. 感想・まとめ

 

1. 機会_Opportunity(簡単な要約)
世界は機会に満ちあふれており、大きな機会もあれば小さな機会もある。まずは問題を見つけることが肝心で、人々は様々な不満を訴えており、こうした問題がきっかけとなってなんらかの解決策がひらめくこともあり得る。問題というものは全て、巧みに姿を変えた機会であると考えることができる。問題以外にもトレンドも機会として捉えることができる。
機会について語るだけで終わってはならず、成功は準備と機会が遭遇したところに生まれるものである。競合他社よりも著しく安い価格設定で、なおかつ利益をあげられれば、今日における最大の機会を捉えたことになる。これこそウォルマートサウスウエスト航空、イケア、ダラー・ゼネラルの成功の秘密である。彼らは競合他社よりも著しく安い価格設定ができるよう、それぞれの産業を再定義した。これによって、低所得世帯が増加の一途をたどる中、ロイヤルティの高い顧客を多数獲得した。
いまこの瞬間はあらゆる瞬間と同じく、どう対処すべきかさえわかっていれば、またとない機会なのである(Ralph Waldo Emerson)。


2. 組織_Organization(簡単な要約)
本社スタッフの役割は、現場の人間が最大限能力を発揮できるように支援することである。「事業部長は、各事業部の予算を使って、本社スタッフのサービスに対する支払いを行っている。彼らが、サポート・スタッフに対する支払いが多すぎると考えるとしたら、やることは1つ。(本社スタッフの)仕事を減らすだけだ」とモンサント・ケミカルの元社長のロバート・ポッターは述べている。
企業組織は垂直に構成されているが、プロセスは水平に進行する。この不一致こそ、リエンジニアリングが、組織横断型チームに主要プロセスを管理させることで解消させようとしたものである。複数事業部制をとっている企業は製品志向に傾きがちで、業界思考や顧客志向はどちらかと言えば弱い。だが、複数の事業部の製品が同一の業界や顧客を対象としている可能性があるので注意する必要がある。
販売部門だけで会社が成り立っているわけではないが、会社全体が販売部門的になることが望ましい。また同様に、全ての社員がマーケティングマネージャーというわけではないが、全員がマーケティングマネジメントという業務に携わるべきである。


3. アウトソーシング_Outsourcing(簡単な要約)
1つの企業が真に秀でることのできる領域はわずかしかない。それ以外の領域に関しては、自分たちよりも優れた能力を発揮する人たちに委託すべきである。初期のアウトソーシングは、オフィスの清掃や美化などの企業の非中核的業務に限られていたが、現在では他社の方がより効果的、効率的に実施できる業務は全てアウトソースすべきと言われている。これにはマーケティング業務も含まれる。
企業はマーケティング活動のうち、どれを自社に残し、どれをアウトソースするかを把握する必要がある。このうち最も多いのが、広告サービスやマーケティング・リサーチのアウトソーシングである。最近ではダイレクトメール・サービスや、テレマーケティングを外部に委託するところも出てきた。
ただし、アウトソーシングが行き過ぎてしまう場合も考えられる。優れた企業というのは、複数のコア・コンピテンシーを独特な形で絡み合わせて他社には模倣できない強みを形成している。こうした企業が優れた企業であれるのは、容易に他社が真似できない相互に関連し合ったコンピテンシーや能力を自社の手元に留めているからである。


4. 業績評価_Performance Measurement(簡単な要約)
マーケターは目標設定や業績評価にあたって、伝統的に売上、市場、シェア、粗利益に注目してきた。だが、市場シェアの伸びは望ましいものとはいえ、詳細な検討を加える必要がある。
目標を設定し業績を評価するには、従来の指標に加え様々な評価基準を設定する必要がある。下記に目標達成度と業績の評価基準についてまとめる。

・平均顧客数に対する新規顧客数の割合
・平均顧客数に対する離反顧客数の割合
・平均顧客数に対する再獲得顧客の割合
・満足度調査での回答の割合(5段階評価など)
・再購入したいと回答する顧客の割合
・自社のことを他の人に推薦したいと答える顧客の割合
・当該カテゴリーにおいて、自社製品を最も好むと答える顧客の割合
・自社の意図したポジショニングや差別化要因を正しく認識している顧客の割合
・自社製品の品質が主要競合他社の製品品質に比べて、どの程度と知覚されているか(平均値)
・自社サービスの品質が主要競合他社のサービス品質に比べてどの程度と知覚されているか(平均値)

企業は達成目標ごとに、それぞれ適切なインセンティブを用意する必要がある。短期的な利益には貢献するが、長期的には顧客喪失につながってしまうようなインセンティブは絶対に用いるべきではない。インセンティブ・システムは十分に監視し、乱用を阻止する必要がある。


5. 感想・まとめ
#15では機会(Opportunity)、組織(Organization)、アウトソーシング(Outsourcing)、業績評価(Performance Measurement)について取り扱いました。機会の分析というのはなかなか難しい反面重要で、SWOT分析の機会(Opportunity)ではなく脅威(Threat)に目がいきがちなので常にチャンスを見抜く姿勢が重要だと思われます。また、アウトソーシングの所の複数のコアコンピテンシーの組み合わせのところについては「ポーターの競争戦略」の「適合性」だと捉えておくのが良さそうです。「適合性」により競争優位を構築するところは自社に残し、主要でないところをアウトソースしていく形が良さそうです。また、インセンティブの設定として先を見据えたインセンティブ・システムが必要で乱用を阻止する必要があるというのは非常に参考になりました。
#16ではポジショニング以降について取り扱います。

RoBERTa(論文の詳細② Experimental Setup)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #15

f:id:lib-arts:20190818234338p:plain

言語処理へのDeepLearningの導入をご紹介するにあたって、#3〜#8においては、Transformer[2017]やBERT[2018]について、#9~#10ではXLNet[2019]について、#11~#12ではTransformer-XL[2019]について取り扱ってきました。

XLNet②(事前学習におけるAutoRegressiveとPermutation)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #10 - lib-arts’s diary

Transformer-XL(論文のAbstractの確認)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #12 - lib-arts’s diary

#13以降では2019年7月にリリースされたBERTベースでハイパーパラメータ(学習にあたってのlossやデータセット)のチューニングを行なった事前学習モデルであるRoBERTa[2019]について取り扱っていきます。
https://arxiv.org/abs/1907.11692
#13では上記のAbstractをベースにRoBERTa[2019]の概要について、#14ではRoBERTa[2019]の論文のIntroductionとBackgroundについて確認しました。

RoBERTa(論文のAbstractの確認)|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #13 - lib-arts’s diary

#15ではRoBERTa[2019]の論文のSection3のExperimental Setupについて確認していきます。
以下目次になります。

1. Experimental Setup(Section3 冒頭)
2. Implementation(Section3.1)
3. Data(Section3.2)
4. Evaluation(Section3.3)
5. まとめ

 

1. Experimental Setup(Section3 冒頭)

f:id:lib-arts:20190825173307p:plain

1節ではSection3の冒頭を確認します。上記のように一文のみとなっているので和訳します。

In this section, we describe the experimental setup for our replication study of BERT.

和訳:『このsectionでは、我々のBERTの追加研究の実験的な設定について記述する。』
#14でまとめたSection2のBackgroundにBERTのオーソドックスな情報がまとめてありましたが、それとの対比としてSection3では実験的な設定についてまとめられています。
2節以降で各サブSectionについて確認していきます。


2. Implementation(Section3.1)
2節ではSection3.1のImplementationについて確認していきます。基本的にはBERTの設定を踏襲しているようですが、何点か変更点などについても言及されています。以下、パラグラフ単位で確認していきます。

f:id:lib-arts:20190825173707p:plain

f:id:lib-arts:20190825173727p:plain

第一パラグラフでは、再実装にあたっては基本的にSection2の最適化の設定を踏襲した一方で、peak learning rateやnumber of warmup stepsは例外としたとあります。また、それに加えて、学習はAdamのepsilon termに影響を受けやすいことがわかり、同様に\beta_{2}=0.98と設定することで学習の安定性を図ることができるともされています。

f:id:lib-arts:20190825174341p:plain

第二パラグラフでは、配列のMAXの長さをT=512で設定し、学習データの加工などについて言及されています。

f:id:lib-arts:20190825174544p:plain

第三パラグラフでは、学習に用いたマシンについてまとまっています。


3. Data(Section3.2)
3節ではSection3.2について見ていきます。パラグラフ単位で見ていきます。

f:id:lib-arts:20190825175434p:plain

第一バラグラフでは、データセットの規模について論述されています。BERTのような(BERT-styleの)事前学習は、学習に用いる大規模なテキストデータに大きく依存し、Baevski et al. (2019)ではデータサイズを大きくさせることでend-task(ここではfinetuningと考えて良さそう)におけるパフォーマンスを向上させたとされています。しかしながら、全ての追加したデータセットが公開されているわけではないので、可能な限り多くのデータを用意しようとしたとされています。

f:id:lib-arts:20190825175455p:plain

第二パラグラフでは、実際にデータセットとして5つの英語のコーパスを用意し、160GBを超えるデータセットとしたとされています。
データセットについて以降でまとまっているので、箇条書きの形式でまとめます。

・BOOK CORPUS plus English WIKIPEDIA(16GB)
・CC-NEWS(76GB)
・OPEN WEB TEXT(38GB)
・STORIES(31GB)

上記の合計で160GB超えのデータを用いたとされています。5つのデータセットとあったのは、BOOK CORPUS、English WIKIPEDIA、CC-NEWS、OPEN WEB TEXT、STORIESの5つだと解釈して良いと思われます。

4. Evaluation(Section3.3)
4節ではSection3.3のEvaluationについて見ていきます。GLUE、SQuAD、RACEの3つのデータセットに分けて論述されているので、それぞれのデータセット単位で見ていきます。
・GLUE(The General Language Understanding Evaluation)
まずはGLUEについて見ていきます。

f:id:lib-arts:20190825181255p:plain

GLUEは、The General Language Understanding Evaluationの略で、汎用的な言語理解を示すベンチマークとして設定されています。第一パラグラフではGLUEについての説明がなされています。第二パラグラフでは、Section4において、事前学習後のモデルをGLUEのタスクでfinetuningした結果について言及されているとされています。結果については学習データ(development sets)結果とされています。学習においてはmulti-taskやensembleを用いないで学習したとあり、また、finetuningの手順はoriginalのBERTの論文を踏襲したとされています。第三パラグラフでは、Section5においてはpublicなleaderboardからテストデータ(test set)での検証を行なったことについて言及されています。


・SQuAD(The Stanford Question Answering Dataset)
次にSQuADについて見ていきます。

f:id:lib-arts:20190825200126p:plain

f:id:lib-arts:20190825195920p:plain

SQuADは、The Stanford Question Answering Datasetの略で、Question Answeringを行うにあたってのデータセットです。第一パラグラフではデータセットの概略についてまとまっています。文章(分脈; context)のパラグラフと質問が与えられたデータセットで、文章を読解し、質問に回答するタスクであるとされています。Version1.1とVersion2.0の二つがあるとも言及されています。第二パラグラフでは評価に関してまとめられています。


・RACE(The ReAding Comprehension from Examinations)
最後にRACEについて見ていきます。

f:id:lib-arts:20190825200632p:plain

RACEはThe ReAding Comprehension from Examinationsの略で、読解(Reading Comprehension)タスクについてのデータセットです。28,000節の文章と約100,000の質問からなる大規模な読解に関するデータセットで、中国の中高の英語の試験からデータセットは作成されています。1つの節の文章に対し、いくつかの質問文があり、その四択問題を解くとされています。RACEはその他のよく用いられている文書読解のデータセットよりも長い分脈の読解が必要とされるタスクとなっているとされています。


5. まとめ
#15ではRoBERTa[2019]の論文のSection3のExperimental Setupについて確認しました。Section3では実装、データセットの概略と、評価に用いるベンチマークの説明が行われていました。
#16ではSection4のTraining Procedure Analysisについて取り扱います。