でーたさいえんすって何それ食えるの?

JuliaとかRとかPythonとかと戯れていたい

2023.11.07 OpenAIリリース内容について

完全自分用の備忘メモ

GPTモデルの改善で、GPT-4, GPT-3.5が高機能化

  • GPT-4 Turbeがリリース
    • コンテクストに使えるトークン数が128Kに増加
    • 学習は2023年4月までのデータとなる
    • Function Callのアップデート
      • 1つのメッセージから複数のファンクションコールができるようになった
      • ファンクションコールの精度が向上した
    • インストラクションの改善とJSONモードの追加
      • XMLJSONフォーマットで出力せよ、といったリクエストにより正しく対応できるようになった
      • 特にJSONフォーマットでのレスポンスでは、有効なJSONかバリデーションされるように改善した
      • 加えて、APIパラメータにresponse_formatが追加され、有効なJSONで出力されるようコントロールすることも可能となる
    • 再現性の向上
      • seedパラメータにより、モデルの回答が固定できるようになる(OpenAIが内部的に利用していたものを開放した状態となる)
  • GPT-4 Turboに画像対応版のモデルが追加
    • 1080x1080pxの画像まで取り扱いが可能
  • GPT-4のファインチューニング・カスタムモデル作成
    • GPT-3.5と同様に、GPT-4でもファインチューニングが可能になる(ただし、実験的)
    • 特に大規模な内部データを活用するような一定規模以上の企業での利用を想定し、カスタムモデルプログラムを提供
  • GPT-3.5 Turboのアップデート
    • コンテクスト数は16K
    • JSONモードやFunction CallのアップデートはGPT-3.5 turboでも適用

新機能のリリース:Assistants API, Retrieval, Code Interpreterのリリース

  • Assistants API, Retrieval, Code Interpreterのリリース
    • Assistants APIアシスタントAIを構築するためのAPI
      • 会話のスレッド管理を開発者側が面倒見る必要がなくなり、Assistants APIの機能で対応が可能
      • GPT-4 Turboで追加された機能に加えてRetrieval、Code Interpreterの機能も内包されている
      • Retrieval:GPTへ独自データを持ち込むための仕組み。この機能によって、ドキュメントのエンベッディングの面倒を見る必要はなくなる。
      • Code Interpreterサンドボックス環境でPythonコードが実行できるようになる
  • Text-to-speech機能のリリース
  • DALL-E 3のリリース

既存APIに関連し、Whisper V3, Consistency Decoderのリリース

  • Whisper V3

    • large-v3のモデルを公開しており、近いうちにWhisperのAPIで提供できるようにする
  • Consistency Decoder

    • 生成モデルで利用するStable Diffusion VAEデコーダーの進化版

    Consistency Decoderにより、今まで生成が不自然だった顔、直線や文字がより自然な見た目になる

価格・Rate limitの変更

  • 従前のモデル利用料の1/2〜1/3程度に価格圧縮
  • Rate Limitは緩和

Copyrightシールドの提供

  • 著作権侵害に関する法的請求に対応。発生した費用をOpenAIが支払いを行う

 

出典

データ分析でコケないための進め方とは。。。?

比較的ポエミーな内容で、いつもとは毛色が違う内容を書いてみたいと思います。

というのも、データ分析PJTが多く実行されているにも関わらず、相変わらず燃えたり効果が得られず気まずくなったり、というPJTが少なくないと聞きます。

要因は様々あるとは思うものの、メジャーな要因として、PJTを進める中で肝要となる検討個所を抜かしているんじゃないかな、と最近思っています。

そして、その仮説に対する私なりのスタンスとして、こういうPJTの進め方をすればいいんじゃないかな、という考えの整理をいったんメモ書きがてら残しておこうと思います。

もしこれきっかけで議論がどこかで盛り上がったらいいなー、と思ってみたりしてます。

lightGBM, CatBoostの特徴概要

CatBoostのアルゴリズムを復習しているついでに、良く使うCatBoostとLightGBMがざっくりどんな特徴のアルゴリズムかぺら1枚で整理してみました。

読み/理解のし間違いがあるかもしれないので、これをそのまま鵜呑みにしちゃ危ないですからね!

Reference:

Ke, G., Meng, Q., Finley, T., Wang, T., Chen, W., Ma, W., Ye, Q., & Liu, T.-Y. (n.d.). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. Retrieved November 5, 2021, from https://github.com/Microsoft/LightGBM.
Dorogush, A. V., Ershov, V., & Gulin, A. (2018). CatBoost: gradient boosting with categorical features support. http://arxiv.org/abs/1810.11363
Prokhorenkova, L., Gusev, G., Vorobev, A., Dorogush, A. V., & Gulin, A. (2017). CatBoost: unbiased boosting with categorical features. http://arxiv.org/abs/1706.09516

catboostのハイパーパラメータチューニング方針メモ

仕事上、KTする機会が意外と多いトピックなので備忘録として掲載。
あくまで、お気持ちを把握するための情報に留めてあり厳密情報は公式のDocumentと実装論文を読むのが一番良いです。

【参考】PDFの元となっているドキュメントへのリンク https://catboost.ai/en/docs/concepts/parameter-tuning

GBM系ライブラリの変数重要度計算ロジックメモ(特にcatboostについて)

Gradient Boosting Machine系のライブラリは予測の初手としてよく使われるアルゴリズムで、予測分析といったらとりあえずこれをつかうのではないかという程度に普及した手法です。

ところで、何気なく使っている説明変数重要度の値ですがアルゴリズム毎に計算ロジックが違うので、ここにまとめて読めるように情報を残しておこうと思います。

特に、私が好んで使っているcatboostについては、公式ドキュメントが細かくは書かれていない計算についてデバッグ用コードを仕込んでビルドし理解した内容も含めてメモしておきます。
※手計算で出した想定結果と実際の値と照らし合わせると大きく値が違ってて、なぜだ?とハマったのがこのメモ記事を書くメインモチベーションだったりします。。。

まず、各GBMライブラリで実装されているFeature Importanceの計算ロジックは次の画像の通りで、そもそも実装されているロジックが違うことがわかります。 f:id:masato_613:20201115025226p:plain

これらの計算ロジックは、ばっくり分けるならば3種類のタイプに分けられます。

  1. 不純度を計算するタイプ(Gain)
  2. Tree内で説明変数が分岐条件として使われる回数を基準とするタイプ(split, weight, cover)
  3. 出力結果への影響度を計算するタイプ(PredictionValuesChange)

説明変数重要度の計算ロジックが違うので、もちろん異なるモデル同士の説明変数重要度は比較しても意味が無いということになります。
説明力の強弱の相対関係を把握するだけに留めなければなりませんね。

さて、詳細説明について1はDecision treeの計算でも出てくるものですし、2はxgboostの説明記事がたくさんあるのでそれぞれ別な記事に任せるとして、 3の詳細を次に紹介したいと思います。

f:id:masato_613:20201115025919p:plain

公式の説明ページによるとLeaf pairsと書かれているので、Leaf nodeだけが算出対象になるのかな?とミスリーディングなワーディングですが、実際には全組み合わせパターンで網羅的に計算されています。
計算されるノードペアの選ばれる様子のイメージは図の右側の通りです。

また、catboostの説明変数重要度は全説明変数重要度の総和が100になるようリスケールされている点にも取り扱いに注意が必要です。 つまり、同じcatboostのモデル同士でもその説明変数重要度の絶対値では比較できないということです。

※ 参考リンク

sklearn: 3.2.4.3.5. sklearn.ensemble.GradientBoostingClassifier — scikit-learn 0.23.2 documentation

xgboost: Python API Reference — xgboost 1.3.0-SNAPSHOT documentation

lightgbm: lightgbm.Booster — LightGBM 3.0.0.99 documentation

catboost: Feature importance - CatBoost. Documentation

f:id:masato_613:20201115025234p:plain

ROC曲線とPR曲線を直観的に把握するウェブアプリをつくった

機械学習で二値分類タスクのモデル評価時によく使うROC曲線と、特に不均衡データの評価時に使うPR曲線、そして混同行列
これらは元をたどれば予測とその結果の正誤について別々な表現方法で見ているので、相互に関係しあった評価方法です

しかし、これらを横串に理解でいるリソースが見当たらないので、自分でつくってみたので調節部分の補足説明を残しておきます。

ウェブアプリのURLはこちら https://masato.shinyapps.io/ROC_exp/

補足説明の画像はこちら f:id:masato_613:20201101000421p:plain

補足:最適閾値の計算方法

ROC曲線を用いた分析については次の論文をとりあえず読んでおくと良い。

[PDF] Basic principles of ROC analysis. | Semantic Scholar

もしTP, TN, FP, FNそれぞれのコストがわかっているのであれば、The foundations of Cost-Sensitive Learningで説明あれている通り
混同行列の各要素とそれに対応するコストの掛け算の総和を最小化すれば良い。
しかし、実際に予測結果を活用する上では
1. 施策を実施する上でそこまで決まっていない
2. コストが複雑すぎてすぐには把握できない
といった理由で、とりあえず実行効率が最も良い閾値を置いてほしいというケースがある。

そういった場合Youden-index(Youden's J statistics)を用いて設定するのがまずは手っ取り早い。 この指標のコンセプトは単純で、ROC曲線で見たときに曲線とAUC=0.5の直線との距離が最大となるポイントを探せばよく、TPRとFPRの差を最大とする値閾値にとることになる。 PR曲線で見るとPR曲線の最の最も高い部分で閾値を取るのと同義となる。

一方、ROC曲線の左上(0, 1)のポイントから最も距離が最も短くなるポイントを探す方法も採ることができる。 これは実質的にYouden-indexとほぼ同じ値をとることになるので説明の仕方次第となる。

他にも目的に応じて取り得る指標はいろいろあり
* LR+:Positive likelihood ratio (TPR/FPR)
* LR-:Negative likelihood ratio (FNR/TNR)
* DOR:Diagnostic Odds Ratio (LR+/LR-)
といった指標で決めることもできる。

「戦略がすべて」の読書メモ

新潮新書から出版されている瀧本 哲史 著「戦略がすべて」を読んで、主に自分で再利用するためのアウトプットです。

この本は、コンサルティング講師やYouTubeでの発信で活躍なされている髙松さんがおすすめ本として紹介されていた中にあった本

www.kanataw.com

の内の1冊です。

この本は日経プレミアPLUSで連載されていた「瀧本哲史の時事評論」や新潮45連載「逆張り(コントラリアン)日本論」をもとにしたものということで、瀧本氏を通して社会をどう体系立てて戦略的に考えたか、をオムニバス的にまとめた本という印象を受けた。

特に頭に入れておくべき章は、
1.「戦略」を持てない日本人のために
2. コケるリスクを排除する―AKB48の方程式
の2箇所だと感じた。

1. 「戦略」を持てない日本人のために

いちばん最後の章ですが、この章で戦略とは何であり、なぜ戦略が必要なのか私にとって腹落ちする書き方で説明されていたので覚えておきたいと思った。
もう少し卑近な肉付けすると次の画像の通りかな、というイメージ。 f:id:masato_613:20201024231720p:plain

2. コケるリスクを排除する―AKB48の方程式

AKB48の方程式では、あとの章でも何度も使われているプラットフォーマーの考え方が書かれている。
つまり、まずはプラットフォーマーとなり、その土俵の上でいかに価値を創発させるようネットワークを作り出すか、が競争で勝つ上での要諦であるという考え方が紹介されていている。
この考えを踏まえた上で読みすすめると、後の章は同様のロジックが普遍的に使えそうである、というケーススタディをたくさん経験するような読み方ができると感じた。

この普遍的な考え方とは別に、AKB48の方程式で語られていた「3つの壁」は個人的な背景もあって印象深かった。 私自信、労働市場価値については組織を動かす側はどういうロジックで考えているか探っていたためでもあるが。。。 この「3つの壁」はより生々しく表現するなら3つの壁は「利益をあげる上での3つの不確実点」と言い換えられると感じた。私はこの「3つの壁」を組織に属する側の視点で次のように咀嚼してみた。

1.誰が売れるか不明
自然淘汰による選別とまとめ売りシステムによる提供サービスの均質化で対応
⇒マーケットの反応と各人の成長努力により自然と選別が進み、競争が起こるのは必然となる

2.稼働率による頭打ちが起きる
→客に対して魅せる必要があるワークと客からは隠れて見えないワークを分離し、スタープレイヤーを客魅せワークに集中させる
⇒必ずスタープレイヤーとそれ以外でキャリアの歩み方が変わる組織とならざるを得ない
これはBarabasiが"The Formula: The Universal Laws of Success" www.amazon.co.jp

でも述べている通りでスタープレイヤー側になる程、さらにスター度を押し上げるダイナミクスが組織として働くと言及されていた部分にも通じるな、と感じた

3.契約/被契約関係パワーバランスが崩れる
→所属する組織からのブランディングレバレッジする仕組でパワーバランスが常に保たれるようにする
⇒組織ブランドがある前提の戦い方しか知らないと、労働市場へ出た時に組織ブランドを使う前提の領域へ戦場が狭まってしまう

この本、このコケるリスクを排除するの章で見える通り別の立場での視点からカットし直すと別な味が出そうな本なので、少し時間をおいて内容を反芻しようと思います。