対照学習によるクラスタリングのサポート (SCCL) テキスト クラスタリングの論文再現 [コードの修正と改善]


序文

最近、自分の研究方向に関連するいくつかの分野を探索したいと考えているため、画像クラスタリングからテキストクラスタリングまで、この記事を作成しました。この記事でのテキスト クラスタリングは、正確にはショート テキスト クラスタリング (ショート テキスト クラスタリング) であり、ホットな方向ではありません。この論文が 2 年前に出版されたものであり、SCCL が非常に優れた仕事であることがわかります。テキスト データの注目のトピックは、自己教師あり比較学習に基づく NLP です。クラスタリングは、下流のサブタスクとしてよく使用されます。テキスト データの主なタスクは、テキストの意味表現を学習することです。ただし、この方向は探求する価値のある方向ではなく (トレーニング時間が短い、グラフィックス カード リソースの要件が低い、アルゴリズムの安定性が高いという利点があります)、おそらくいつか比較学習のような春を迎えることになるでしょう。


1. はじめに

NAACL カンファレンスで発表された論文のタイトル: Supporting Clustering with Contrastive Learning は、NLP 分野のトップ会議とみなされます。
論文リンク: https://arxiv.org/abs/2103.12953
github アドレス: https://github.com/amazon-science/sccl
要約: 教師なしクラスタリングの目的は、データの意味論的なカテゴリ空間を発見することです。ただし、学習プロセスの開始時には、異なるカテゴリが表現空間内で互いに重なり合うことがよくあるため、距離ベースのクラスタリングで異なるカテゴリ間を適切に分離することが大きな課題となります。この目的を達成するために、この論文では、対照学習を活用してより適切な分離を促進する新しいフレームワークである、対照学習ベースのサポートされたクラスタリング (SCCL) を提案します。また、短テキスト クラスタリングにおける SCCL のパフォーマンスを評価しました。その結果、SCCL がほとんどのベンチマーク データ セットで SOTA に到達する結果が大幅に向上し、精度率 (ACC) が 3% ~ 11% 向上し、正規化された相互情報量 (NMI) が示されました。 )は4%から15%増加しました。さらに、定量的分析は、ボトムアップのインスタンス識別とトップダウンのクラスタリングの利点を活用する際の SCCL の有効性を実証し、その結果、グラウンド トゥルース ク​​ラスタリング ラベルを使用して評価すると、より優れたクラスタリングが得られます。

SCCLモデルのアーキテクチャ図

2. 再現手順

私の複製コードは github にリリースされました: https://github.com/Regan-Zhang/SCCL-EXEC
複製プロセスについては、sccl の github プロジェクトにある README.md ドキュメントを参照してください。通常、このセクションは次の場合に完了できます。問題ありません。次のステップ 1 はデータ セットのダウンロードと処理、ステップ 2 はデータの前処理、ステップ 3 は依存ライブラリのインストールです。

1. データセットのダウンロードと処理

ここに画像の説明を挿入
上の図は、データセットに関するSCCLオリジナル論文のデータセットテーブルのリストです。実行時間を考慮して、データ量が適度なAgNewsのテキストデータを選択し、以降はAgNewsを例にして説明します
⋅ \巨大 ·データセットの URL:
https://github.com/rashadulrakib/short-text-clustering-enhancement/tree/master/data
し、赤いボックスをクリックしてダウンロードします。これらのダウンロードはすべて生のテキスト データであり、処理または拡張されていません。
ここに画像の説明を挿入
⋅ \巨大 ·ダウンロード後、ファイル名は agnewsdataraw-8000.txt となり、サフィックスは csv に変更されます。もちろん、ここでは agnewsdataraw.csv に変更しました。名前は読者の好みに依存しますが、サフィックスは csv でなければなりません!
ここに画像の説明を挿入
⋅ \巨大 ·WPSやExcelでCSVファイルを開くと、何も事故がなければデータが1列しかなく、ラベルタグとテキストのテキストデータが混在しています。しかし、それは問題ではありません。これは、定義された形式をソースからインポートせずに、csv ファイルを直接開いたことが原因で発生します。ファイルを再インポートするだけです。インポート プロセスは次のとおりです (実際、空の CSV ファイルを作成してからソースをインポートすることもできます)。

新規作成しない場合は、元のcsvファイル操作の先頭ユニットにカーソルを置く必要があります。
ここに画像の説明を挿入
⋅ \巨大 ·「データ」 --> 「データのインポート」 --> 「データのインポート」をクリック --> 「データ ファイルを直接開く」を選択 --> 「データ ソースの選択」を選択し、インポートする agnewsdataraw.csv を選択します。
ここに画像の説明を挿入
⋅ \巨大 ·エンコーディングを選択します。他のエンコーディングは試していません。最も一般的なエンコーディングは GBK と UTF-8 ですが、ここでは間違いにくい UTF-8 を選択します。
ここに画像の説明を挿入
⋅ \巨大 ·次のステップである区切り文字を選択します。
ここに画像の説明を挿入
⋅ \巨大 ·⋅Tab キーを選択します。このステップは非常に重要です。ソース データは Tab で区切られます。
ここに画像の説明を挿入
⋅ \巨大 ·次のステップに進んで完了です。次の結果は、インポートが成功したことを示しています:
ここに画像の説明を挿入
⋅ \huge ·元のカーソル位置にさらに 2 行あることがわかり、元の列を削除します。
最初の行にラベルとテキストの列名を追加します。
ここに画像の説明を挿入
最後に保存すれば、データセットの処理は完了です。

2. データの前処理

ドキュメントの要件に従って、テキスト データセットに対してテキスト データの前処理、データ拡張 (データ拡張) が実行されます。
データ拡張コードは ./Augdata ディレクトリにあり、パスとデータセット名を変更することで実行できます。詳細については、私が公開したソースコードをご覧ください[近々個人の github に公開されます]。ソースをエクスポートし、フォルダー AgNews を再構築したことがわかります。
ここに画像の説明を挿入

3. 依存ライブラリをインストールする

pytorch==1.6.0. 
sentence-transformers==2.0.0. 
transformers==4.8.1. 
tensorboardX==2.4.1
pandas==1.1.5
sklearn==0.24.1
numpy==1.19.5

これはソース プロジェクトによって提供される依存ライブラリですが、重要なライブラリの 1 つである nlpaug が欠落しています。このライブラリは、略語を確認することで NLP フィールドのデータ拡張に使用されます。pip install を使用して直接インストールできます。

pip install nlpaug

コードを実行した後、誰もがさまざまな問題に遭遇するかもしれませんが、私の個人的な状況では、次の図に示すように、プロト プロトコルのバージョンが高すぎるため、このライブラリのバージョンを下げる必要があるという問題に遭遇しました。 。まずアンインストールしてから、インストールするバージョンを指定します。
ここに画像の説明を挿入

pip uninstall protobuf
pip install protobuf==3.19.0

エラーメッセージに従って、バージョン3.19.0をインストールしてください。実際、どんな問題が発生しても、エラー メッセージを理解し、対応する解決策を検索するだけで、兵士たちが問題をカバーしてくれるでしょう。
ここに画像の説明を挿入
たとえば、上図に示すエラー レポートでは、文変換ライブラリを最新バージョンに更新する必要があります。

pip install -U sentence-transformers

3. コードの修正

ここに画像の説明を挿入
作者が意図したのかタイプミスなのかはわかりませんが、対応する位置を distilbert に変更するだけです。
ここに画像の説明を挿入
上の図の範囲外エラーは、SCCL プロジェクト全体で最大のエラーですが、コードを 1 行追加するだけで簡単に変更できます。
エラーの理由は、agnewsdataraw.csv のラベルが 1 から始まり、agnews に 4 つのカテゴリがあり、ラベルが[ 1 、 2 、 3 、 4 ] [1,2,3,4]であるためです。[ 1 2 3 4 ]、プログラミングの世界での番号付けは 0 から始まり、ラベルは[ 0 , 1 , 2 , 3 ] [0,1,2,3][ 0 ,1 2 3 ]なので、対応する位置を見つけてラベル値− 1 -11で十分です (図に示すように)。
ここに画像の説明を挿入
なお、コード実行時にBERTの事前学習重みをgithubから自動的にダウンロードするため、科学的にインターネットをサーフィンする必要があるため、読者はこれを理解し、自分で解決する必要があります。

4. 走行結果

再生は Nvidia GeForce RTX3090 (24G ビデオ メモリ) で実行されます。元のプロジェクトのパラメータ構成によると、実行後のビデオ メモリは 15G+ です。グラフィック カードに非常に優しく、実行速度は非常に速いので、必要がありません。軽量化のため、走行時間は約40分程度です。リーダーのグラフィックス カード リソースがそれほど十分でない場合は、グラフィックス カードの構成に適応するためにバッチ サイズやその他のスーパー パラメーターを減らすことができます。
ここに画像の説明を挿入
ここに画像の説明を挿入
上の図は論文で報告された結果であり、2 つのデータ拡張 (charswap 文字の交換と単語の削除) を使用して AgNews データセットを再現した効果は次のとおりです。

農業ニュース NMI ACC
チャースワップ 66.9 87.3
単語の削除 67.5 87.5

最良の結果 (つまり、単語の行の削除) は論文のレポートとは少し異なりますが、かなり近いものであり、これはモデルと論文の信頼性と実現可能性も証明しています。


おすすめ

転載: blog.csdn.net/weixin_43594279/article/details/131250346