この記事は、私たちが Open Data Foundation のために Fantom と UNICEF のある期間に受け取った助成金の申請データを分析したものです。私たちは、いくつかのアルゴリズムを使用して助成金の有効性を自動的に識別できることを発見しました。
この文章では、助成金申請の背後にある隠れたパターンを探ることを主に試みます。具体的には、データ収集 / マイニング、クラスタリング、半教師あり学習などの基本的および高度な技術を使用して、助成金申請の適格性を自動的に判断しようとします。それでは、始めましょう!
データ前処理#
フォーマット#
Open Data Foundation (ODF) は、私たちが探求するための 2 つの助成金申請を提供しました:Fantom の助成金申請と UNICEF の助成金申請。2 つの申請は異なるフィールドを持っているため(例:Fantom の助成金申請にはprevious_fundingフィールドがありますが、UNICEF の助成金申請にはありません)、まずこれら 2 つの申請を同じフォーマットに整形します。具体的には、後の分析のためにtitle、description、website、github_user、およびproject_githubfieldsのみが必要です。
関連性検出#
助成金申請を行う際、タイトルと説明は、レビュアーがプロジェクトとその潜在的な価値を理解するために重要です。したがって、タイトルと説明は理解しやすく、プロジェクトに関する十分な情報を提供する必要があります。この小節では、提供されたタイトルと説明の関連性をどのように検出するかを示します。これは、機械学習と事前学習された大規模な自然言語処理(NLP)モデルを使用して、無意味またはスパムの申請をフィルタリングするために使用される可能性があります。
プロジェクトの説明が非常に長くなることがあるため、後の分類にとって良くないことを観察し、非常に長い説明を比較的短い説明に要約するために要約器を使用します。ここでは、Facebook によって訓練されたbart-large-cnnモデルを使用します。bart-large-cnnは、トランスフォーマーに基づくシーケンス・ツー・シーケンスモデルの事前学習用のデノイジングオートエンコーダーである BART に基づいています。bart-large-cnnの実験結果は、cnn-newsデータセットで非常に高い精度を達成することを示しています。
次に、タイトルと説明の関連性を判断するために別のモデルを使用します。助成金申請におけるプロジェクト説明の質を評価するタスクは、通常の対話における応答の質を評価するタスクとして見ることができるため、tinkoff-aiによって訓練されたresponse-quality-classifier-largeモデルを使用します。私たちのタスクを応答の質評価タスクに変換するために、プロジェクトタイトルとプロジェクト説明を使用してクエリを構築する必要があります:
したがって、上記のクエリをモデルに入力することで、モデルは質問に基づいてPROJECT_DESCRIPTIONがどれだけ関連しているかを判断します。評価のコードは以下のように示されます:
私たちの実装では、関連性が < 0.1 のプロジェクトは、さらなる検討なしにデスク却下されます。
ウェブサイトチェック#
私たちはWHOISを使用してウェブサイトが接続可能かどうかを確認し、ウェブサイトの情報を照会します。
提供されたウェブサイトの whois 情報を取得した後、ウェブサイトが以下のいずれかであるかどうかを確認します:
- すでに期限切れ。
- 90 日以内に期限切れになる。
- 1 年以内に期限切れになる。
さらに、一部のプロジェクトが外部リンクをウェブサイトとして使用していることに気づいたため(例:github.io、twitter.com、youtube.com、notion.so など)、提供されたウェブサイトが外部であるかどうかをパターンマッチングを使用して判断する簡単な分類器を使用します。
GitHub チェック#
個人については、彼(彼女)の過去 1 年間の貢献を確認します。この指標は、オープンソースコミュニティにおける彼(彼女)の活動を反映しています。
組織については、過去 1 年間に組織のすべての公開リポジトリのコミットの合計数を確認します。この指標は、オープンソースコミュニティにおける組織の活動を反映しています。
クラスタリング#
データ前処理の後、後の分析のために 7 つのフィールドが残ります:
つまり、私たちのデータセットは現在 7 つの次元を持っており、3 次元の世界に住んでいる私たちにとって分析が難しいです。したがって、クラスタリングの前に、データセットの次元を減らしましょう。まず、MinMaxScaler()を使用してデータセットを正規化します:
次に、可能なパターンを探るために、現在の最先端の手法の 1 つであるT-SNEを使用して次元を減らします。
図からわかるように、助成金は異なるグループに分かれています。それでは、DBSCANアルゴリズムを使用してクラスタリングを行いましょう。ここでは、DBSCANが外れ値を検出できる密度ベースのクラスタリングアルゴリズムであり、ハイパーパラメータkを指定する必要がないため、K-MEANSの代わりにDBSCANアルゴリズムを使用します。
図に示されているように、各助成金にはそのクラスタを示すラベルが適切に割り当てられています。注意すべきは、-1ラベルはDBSCANアルゴリズムが助成金を外れ値と見なしていることを意味します。明らかに、クラスタリングの結果は、処理されたデータセットの有効性を検証しており、私たちが発見するのを待っている隠れたパターンがいくつかあります。
「適格」の定義#
異なる申請間の関係がわかったので(クラスタリングが示すように)、クラスタリング内のグループにラベルを割り当てて、申請がどのグループに属するかを計算することで分類できるようにしたいと考えています。実際、私たちの分類器が申請が適格かどうかを教えてくれれば十分ですので、ラベルは助成金が適格かどうかを示すブール値のようにシンプルであればよいのです。これを達成するために、まず適格とは何かを定義する必要があります。したがって、このセクションでは、手動で小さな適格プロジェクトのセットを収集します(おそらく 10 プロジェクト)、その後、半教師あり学習を使用してデータセット内の助成金申請を自動的に分類する方法を学習します。
Uniswap、AAVE、Curve、Gnosis Safe などの 10 の有名なプロジェクトが、ポジティブデータとして手動で収集されました。データセットは再現のために以下のように提供されています:
Fantom および UNICEF データセットと同じ方法でポジティブデータセットを前処理した後、すべてのデータサンプルの可視化は以下の図に示されています。ここで、ラベル 0 はラベル付けされていないデータを、ラベル 1 はポジティブデータを表します。
ご覧のとおり、ポジティブデータは他のグループと比較して明らかにいくつかのグループに近いことが示されており、これらは機械学習モデルがどのような申請が適格であるべきか、またはそうでないべきかを理解するのに役立てることができます。
ポジティブデータとラベルなしデータからの学習(PU 学習)#
このセクションでは、いくつかのポジティブデータを使用してラベルなしデータを分類するためのシンプルな分類器を訓練します。実際、ラベルなしデータと少数のポジティブデータから学習するために提案された多くのアルゴリズムがあります。しかし、次元削減後にかなり良いクラスタリングが得られたため、ラベル伝播と多数決を使用して独自のシンプルな分類器を作成できます。具体的には、まず各ポジティブサンプルと各クラスタの中心点との L2 距離を計算します。次に、各ポジティブサンプルは、自身に最小距離のクラスタに投票します。最後に、投票結果に対して top-k を適用して、ラベルなしデータの推定を取得します。実装は以下のようになります:
推定結果は以下の図に示されており、ラベル 0 は私たちが手動で収集したポジティブデータ、ラベル 1 はラベルなしデータから推定されたネガティブ申請、ラベル 2 はラベルなしデータから推定されたポジティブ申請を意味します。
推定されたネガティブ申請は以下のように示されています。ご覧のとおり、プロジェクト 114、116、および 117 は明らかにテストアプリケーションであり、私たちのアルゴリズムはそれらをネガティブ申請として正しく分類し、提案されたアルゴリズムの有効性を検証しています。さらに、他の推定されたネガティブプロジェクトを手動で検査した結果、ほとんどが低い GitHub 活動と非公式 / 外部ウェブサイトを持っていることが示されており、助成金レビュアーはそれらにもっと注意を払う必要があるかもしれません。