- はじめに
- Translating Embeddings for Modeling Multi-relational Data
- 固有表現抽出のサーベイ
- Confident Learning
- BERT CRF
- Model Evaluation, Model Selection
- Human-in-the-Loop
- Active Clean
- 巨大言語モデルのプロンプトエンジニアリング
- Algorithm Selection
- ヘフティングの不等式を用いた適切なテストデータセットサイズの決定
- おわりに
はじめに
こんにちは、Uzabase Saas Product Teamの野中です。今年の5月からUzabaseにジョインし、主にSPEEDAやMIMIR, FORCASといったプロダクトにおいて、機械学習を用いた機能部分の開発を担当しております。
Uzabaseには、NewspicksとSaas事業の2つに機械学習・統計技術を扱うチームがあります。それらに所属するデータサイエンティスト・エンジニアは、Uzabaseの豊富なデータ資産をいかに活用するか?機械学習の価値をどのようにユーザーに届けるか?といった問題に取り組んでいます。例えば、過去のテックブログでは、BtoB Saasにおけるノイズ検出手法の検討やNewspicksにおけるSageMakerを用いた機械学習システムの構成を扱いました。
そんなエンジニア達がカジュアルに知見を共有する場として、機械学習・データサイエンスに関する勉強会を今年の下期から週次ベースで開催しております。発表の内容は様々で、業務レベルで必要になった知見の共有から、サーベイ論文・本で学んだことの共有、また、トップカンファレンスに採録された論文の読み会などを行いました。本稿では、この勉強会(全10回)の内容を概説することで、Uzabaseでの統計・機械学習技術の関心がどこにあるかを少しでも知っていただければ幸いです。
目次としては、以下の通りです。 各発表の技術的詳細に踏み込むよりは、ユーザベースにおける機械学習の実践上課題意識との関連性を主に説明していきたいと思います。もし、詳細が気になる方は、ソースのリンクを埋め込んでありますので、適宜参照いただければと思います。
- Translating Embeddings for Modeling Multi-relational Data
- 固有表現抽出のサーベイ
- Confidence Learning
- BERT-CRF
- Model Evaluation, Model Selection
- Human-in-the-Loop
- Active Clean
- 巨大言語モデルのプロンプトエンジニアリング
- Algorithm Selection
- ヘフティングの不等式を用いた適切なテストデータセットサイズの決定
Translating Embeddings for Modeling Multi-relational Data
第一回は、私野中が発表しました。知識グラフの埋め込み表現の手法のうち、比較的シンプルな手法であるTransEの原著論文を読んできました。
Uzabaseには、企業のニュースや概要文、専門家の意見など、自然言語処理の課題として取り扱いやすい言語データを多く存在し、特にBtoB SaaS領域のデータサイエンティスト達は、自然言語データを業務中に格闘しています。一方で、ユーザベースに蓄積されているデータはグラフ、特に知識グラフの形で捉えられるだろうという考えから、この論文を読んでいました。例えば、企業情報一つとっても、「企業A」が「業界B」に「所属している」、「専門家C」が「企業D」の「従業員である」などの結びつきのデータとしても処理できるのです。従来から取り組んでいる自然言語処理技術に加えて、このような知識グラフの処理技術を導入することで、自然言語だけを取り扱っているだけでは見えてこない関係性をシステムに取り入れることができそうだと考えました。
固有表現抽出のサーベイ
第二回は、NewspicksのCTOである高山さんが、固有表現抽出技術についてのサーベイ論文を読んできてくださいました。固有表現抽出とは、文章の中から特定の単語に対してラベルをつける技術です。社内の文脈に照らせば、ニュースやレポートの中からユーザーが関心のある特定の単語(会社名、製品名など)を抜き出したいときに活用することができます。
高山さんからは、固有表現抽出に関する以下二本のサーベイ論文の要約を聞きました。
- Named Entity Recognition: A Literature Survey, Sharnagat
- A Survey on Recent Advances in Named Entity Recognition from Deep Learning models, Yadav & Bethard
深層学習全盛の現在でも、古典的なConditional Random Field手法が重要であること、また、精度を挙げていくためには、Semi-Supervised LearningやActive Learningなどの他の分野のテクニックと組み合わせていく必要があることを学びました。
Confident Learning
第三回は、Confident Learningというデータセット中におけるラベル誤りの検出手法について勉強しました。この論文は、Data-centric AIを提唱する研究チームが出している論文です。Gaoさんが過去にブログに書いたラベルのノイズ検出のブログにも近い問題設定です。機械学習の対象となるデータセットの多くは、人手によるアノテーションを前提としています。正しくアノテーションできている場合は、問題が無いのですが、一方で、間違えてラベリングしてしまう場合も散見されます。その場合、モデルの真の分布に対する推定精度が下がってしまうため、その間違いを是正する必要があります。社内においても、アナリストの方と共同でデータセットを作成する場合などもあり、人間が行うからにはその間違いを前提とした仕組みを作っていく必要があります。Confident Learningは、機械学習モデルが予測したラベルから、学習データセット内の誤りを見つけることができる手法です。レポジトリも公開されており、簡単に使用することができるため、実務上使う機会がでてきたときに是非使って行きたい技術になりました。
BERT CRF
第四回は、第二回に引き続き固有表現抽出の手法を高山さんに発表していただきました。固有表現抽出手法として、従来からあるCRF(Conditinal Random Field)と、巨大言語処理モデルとして有名なBERTを組み合わせた手法で、F1-scoreを(従来手法の0.81や0.82付近から)0.83にして、当時のSOTAを達成した論文です。学習データ数が相対的に少ない中でSOTAを達成しているというのもポイントのようです。
議論があったのは、このような比較的最近の論文でも、改善度合いが小数点第二位のオーダーであることを考えると、モデル自体の改善で実用的なレベルに精度を挙げていくことは困難なのではないかという点でした。むしろ、第三回で紹介したConfident Learningなどの手法により、データ自体を改善していくアプローチの方がより筋が良いのではないかといった仮説がでてきたのも印象的でした。
Model Evaluation, Model Selection
第五回は、二木さんが「Model Evaluation, Model Selection, and Algorithm Selection in Machine Learning」を読んで、発表してくださいました。これは、『Python機械学習プログラミング』で有名なSebastian Raschka氏が執筆した論文で、機械学習モデルやアルゴリズムの評価・選択手法に関するベストプラクティスを学べるものとなっています。Model Evaluationはアルゴリズム固定ハイパーパラメータ固定でモデルの評価を行う話、Model Selectionはアルゴリズムを固定しハイパーパラメタを最適化する話です。Algorithm Selectionは、複数のアルゴリズムから最適なものを得る方法を議論しています。
かなりのボリュームだったので、第五回では、Model EvaluationとModel Selectionにスコープを区切って、ホールドアウト法や交差検証法についての実装や詳細を議論しました。それぞれの手法をModel Evaluationの場合と、Model Selectionの場合とに分けて話していただいたので、基本的な事項が整理されてとても学びになりました。また、実務においても、論文で紹介されているベストプラクティスをSaas Product TeamのMLパイプラインに取り入れていこうという議論にもなり、実りの多い回でした。
Human-in-the-Loop
第六回は、高山さんが機械学習の学習ループに人間の作業を組み込んだHuman-in-the-Loopというアイデアをまとめた本について話していただきました。第四回の固有表現抽出の回でも、問題意識が出ていたとおり、モデル自体の改善の方向性だと、どうしても精度改善がサチってきてしまい、データ自体の質・量の向上が必要になってきます。Human-in-the-Loopは、人間と機会の協調によって、より良い機械学習システムを作り上げていこうというテーマであり、具体的には、Active LearningやHCI(Human Computer Interaction)などの知見を活用した研究が進められています。
個人的には、以下の図が印象的でした。左上の『知っていることを知っている』領域、つまり、サンプル数十分でラベルがちゃんと付いているデータを正しくモデルが学習している場合には、Human-in-the-Loopの出番はありません。一方で、他の領域では、Human-in-the-Loopの知見が生きてきます。右上の『知っていることを知らない』場合、Uncertainty Samplingの出番であり、分類境界に近い、モデルの信頼度が低い部分のデータを人手でアノテーションすることで対処できます。右下の『知らないことを知らない』場合、Diversity Sampling手法が用いることができ、分類モデルがそもそも考えていなかった空間からデータをサンプリングして、アノテーションします。左下の『知らないことを知っている』場合、つまり、現在のモデルが知らないことが他のドメインを学習したモデルが知っているときに、後者のモデルからの転移学習を考えると良いといった整理です。
Active Clean
第七回は、私が「Active Clean; Interactive Data Cleaning for Statistical Modeling」を読んで、発表しました。この論文は、第六回のHuman-in-the-Loopで挙げられていたActive Learning(Uncertainty SamplingやDiversity Sampling)の問題設定と非常に似ていますが、異なる部分は、新たに学習したいデータにアノテーションを行うという話ではなく、学習データセットの汚れたラベルを見つけ出すという問題設定です。第三回のConfidence Learningとも似ていますが、この手法では、ラベルの誤りだけではなく、特徴量自体にもノイズが挟まっていることを前提にしているところがポイントです。
巨大言語モデルのプロンプトエンジニアリング
第八回は、Newspicksの中村さんが、ICML2022で発表された自然言語モデルのプロンプトエンジニアリングに関する論文(Langage Model Cascades)を読んできてくださいました。最近の巨大自然言語処理モデル(GPT-3など)は、限られた計算資源しかもたない企業や個人は、中々自前で学習させることが難しいです。プロンプトエンジニアリングは、そのようなモデルの学習自体には焦点を当てず、モデルの入出力のみを工夫することによって、眼の前のタスクを精度高く解こうとする考え方です。Langage Model Cascadesは、言語モデルを文字列上の確率分布のサンプラーとみなして、プロンプトエンジニアリング手法をグラフィカルモデルとして統一的に記述できることを主張しています。個人的には、このようなプロンプトエンジニアリングがICMLなどのトップカンファレンスでまじめに研究されていることを始めて知り、最新の機械学習技術に関するのキャッチアップが不足していたことを自覚できた良い回でした。
Algorithm Selection
第九回は、第五回の続編で、「Model Evaluation, Model Selection, and Algorithm Selection in Machine Learning」のうち、残っていたAlgorithm Selectionについて二木さんに発表していただきました。BtoB Saasの機械学習システムでも、複数のアルゴリズムの候補がある場合に、どの候補を本番環境に用いれば良いか?モデルの評価値が多少良くなったから新しいモデルをデプロイしてよいのか?と迷うことがあります。Algorithm Selectionの考え方では、統計的な検定手法を用いて、統一的にアルゴリズムのリプレイスの意思決定を行うことができます。具体的には、複数のアルゴリズムの推論結果のデータをもとにして、McNemar検定やCochranのQ検定を用いて、帰無仮説を「モデルの推論結果に違いはない」、対立仮説を「モデルの推論結果に違いがある」として、帰無仮説を棄却する形で、Model Selectionを行います。機械学習の文脈では、伝統的な検定論はともすれば軽視されがちです。一昔前は、ベイズ統計vs検定論を中心とした伝統的統計学の論争もありました。しかしながら、Algorithm Selectionでも使われるように、あくまで目的に応じてより良い手段を採用すべきであり、伝統的な統計学に対する知見も身に着けていかなければいけないと感じました。
ヘフティングの不等式を用いた適切なテストデータセットサイズの決定
第十回は、適切なデータセットサイズを図る方法として、ヘフティングの不等式を用いた手法について私が解説しました。この発表は、業務中に生まれた疑問を解決するために行ったことです。手元に、学習済みのモデルのみが存在し、テストデータセットがなく、テストデータを一から作る必要があったのですが、そのときにどの程度のサンプル数をテストデータとして用意すればよいかわかりませんでした。
英語のブログ記事で、ヘフティングの不等式を用いてテストデータセットのサイズを決める試みがあったため、これを参考に実際の業務で必要なテストデータ数を算出し、意思決定をすることができたという話です。詳細の議論は、このブログにまとめてありますので、よろしければ是非ご覧ください。
おわりに
各発表に踏み込んだ説明はできませんでしたが、ユーザベースのデータサイエンティスト・機械学習エンジニアが普段どのような問題に興味を持って仕事をしているのかお伝えすることができたかと思います。業務が立て込んでいる中で、週次で発表を回していくのはさすがに骨が折れました。しかし、自分が発表する側であれば特定のトピックに関して普段よりも深く広く考えることができ、また、発表を聞く側としては他のデータサイエンティストの興味関心を知ることができ、とても良かったと思っています。
ユーザベースでは、データサイエンティストを含め多種多様なエンジニアの成長機会があると感じています。ご興味のある方いらっしゃいましたら、ぜひご応募いただければと思います。