クラスタリングにBERT埋め込みをどのように使用する必要がありますか(監視対象タスクのBERTモデルを微調整するのではなく)
まず、クラスタリングを行うためのドキュメント機能としてBERT埋め込みを使用することに興味があるので、この質問をしていると言いたいです。HuggingFaceライブラリのトランスフォーマーを使用しています。各ドキュメントが一意のベクトルを持つように、各ドキュメントのすべてのWordPiece埋め込みを平均化することを考えていました。次に、それらのベクトルをクラスタリングに使用します。これが良い考えではないと思う場合、または私が何かを見逃している、または何かを理解していない場合は、遠慮なくコメントしてください。
これで私が目にする問題はmax_length
、HuggingFaceライブラリで指定されている最初のN個のトークンのみを使用していることです。最初のN個のトークンがそのドキュメントに最適な表現ではない場合はどうなりますか?N個のトークンをランダムに選択する方が良いのではないでしょうか。それともランダムにN個のトークンを10回選択する方がよいのではないでしょうか。
さらに、WordPieceトークナイザーの使用は字句解析の代わりになるため、標準のNLP前処理がより簡単になるはずです。ただし、すでに最初のN個のトークンのみを使用しており、ストップワードを削除しない場合、最初のN個のトークンには役に立たないストップワードが含まれます。私が見た限りでは、Hugging Faceの例では、トークン化の前にこれ以上前処理を行う人は誰もいません。
[トークン化された(Hugging Faceからの)ドキュメントの最初の64トークンの以下の例を参照してください]
したがって、私はここでいくつかの質問をしています(1つだけに答えるか、私が読むことができる論文やリソースへの参照を提供してください):
- ランダムではなく、最初のN個のトークンが選択されるのはなぜですか?1a)おそらく複数回N個のトークンをランダムに選択するものはありますか?
- 質問1と同様に、トークンを選択するためのより良い方法はありますか?おそらく、トークンにTF-IDFを使用して、少なくとも特定の役に立たないトークンを除外しますか?
- 一般的に、Word Pieceトークナイザーを使用する前に、より多くの前処理を使用しますか?
- 選択は
max_length
パフォーマンスにどの程度影響しますか? - Hugging Faceライブラリに最大512の制限があるのはなぜですか?最長のドキュメントの長さだけを使用しないのはなぜですか?
- マトリックスを取得するためにWordPiece埋め込みを平均化することは良い考えですか(クラスタリングを実行したい場合)?
- 同様のドキュメントのグループを見つけるために、クラスター化できるドキュメントの機能を取得するためにBERT埋め込みを使用することは良い考えですか?それとも、もっと良い方法は他にありますか?
元の: 'Trump tries to smooth things over with GOP insiders. Hollywood, Florida (CNN) Donald Trump\'s new delegate guru told Republican Party insiders at a posh resort here on Thursday that the billionaire front-runner is recalibrating the part "that he\'s been playing" and is ready
トークン化:
['[CLS]',
'trump',
'tries',
'to',
'smooth',
'things',
'over',
'with',
'go',
'##p',
'insider',
'##s',
'.',
'hollywood',
',',
'florida',
'(',
'cnn',
')',
'donald',
'trump',
"'",
's',
'new',
'delegate',
'guru',
'told',
'republican',
'party',
'insider',
'##s',
'at',
'a',
'po',
'##sh',
'resort',
'here',
'on',
'thursday',
'that',
'the',
'billionaire',
'front',
'-',
'runner',
'is',
'rec',
'##ali',
'##bra',
'##ting',
'the',
'part',
'"',
'that',
'he',
"'",
's',
'been',
'playing',
'"',
'and',
'is',
'ready',
'[SEP]']
回答
答えは次のとおりです。
- シーケンスモデリングでは、文が順序付けられたシーケンスであると想定しているため、ランダムな単語を取得することはできません(単語のバッグとは異なり、実際には順序ではなく単語に煩わされます)。例:一言で言えば、「私はアイスクリームを食べました」と「アイスクリームは私を食べました」は同じですが、これは文全体を順序付けられたシーケンスとして扱うモデルには当てはまりません。したがって、ランダムな順序でN個のランダムな単語を選択することはできません。
- トークンの選択はモデルによって異なります。ストップワードや記号、数字などのコンテンツが情報よりもノイズとして機能する場合は、いつでも前処理して削除できます。
- 語彙化と単語部分トークン化は同じではないことを明確にしたいと思います。たとえば、レンマ化では、「playing」と「played」は「play」にレンマ化されます。ただし、単語部分のトークン化の場合、語彙に応じて、「play」+「## ing」または「play」+「ed」に分割される可能性があります。したがって、より多くの情報が保持されます。
max_length
あなたのほとんどの文章が完全に考慮されるように最適に選択されるべきです。(つまり、ほとんどの文はmax_length
トークン化後よりも短くする必要があります)。完全なシーケンス長を考慮したモデルがいくつかあります。例:Universal Sentence Encoder(USE)、Transformer-XLなど。ただし、小さいバッチサイズを使用することもできますmax_length
。これにより、トレーニング/微調整が高速になり、場合によってはより良い結果が得られます。- 事前トレーニング済みモデルは
MAX_LEN
512でトレーニングされています。これはモデルの制限です。 - 論文で主張されているように、BERTに固有の分類には、
[CLS]
トークンの埋め込みで十分です。注意ベースのモデルであるため、[CLS]
トークンは文全体の構成をキャプチャするため、十分です。ただし、すべてのトークンの埋め込みを平均化することもできます。私は両方を試しましたが、ほとんどの作品で、すべてのワードピーストークンの平均がより高いパフォーマンスをもたらしました。また、いくつかの作品では、最後の4つのレイヤーからの埋め込みの平均を取ることを提案しています。これは単なる設計上の選択です。 - 文の埋め込みを使用することは一般的に問題ありません。ただし、文献で確認する必要があります。より良いテクニックは常にあり得ます。また、文の埋め込みに固有のモデルがあり(USEはそのようなモデルの1つです)、それらをチェックすることができます。
あなたの質問の多くはすでに答えられているので、私はあなたの最後の質問と私の個人的な経験を共有するだけかもしれません:
7)BERT埋め込みを使用して、類似したドキュメントのグループを見つけるためにクラスター化できるドキュメントの機能を取得することは良い考えですか?それとも、もっと良い方法は他にありますか?
より単純なアプローチから始めるのが良い考えだと思います。特に、などのベクトライザーに依存する長いドキュメントを処理する場合tf-idf
は、複雑さが少なく、通常は解釈可能性が高いという利点がありながら、より良い結果が得られる可能性があります。
長いドキュメントのクラスター演習を終えたばかりで、同様の思考プロセスと実験を行いました。最終的に、私はtf-idf
機能で最高の結果を得ました。私が使用したパイプラインは次のもので構成されていました。
- プロセスデータ(ストップワードの削除、レンマタイズなど)
- tf-idfベクトライザーを適合させます(または、試すこともできます
doc2vec
)。 - ある種の次元削減アルゴリズム(私の場合はPCA)を実行します。
- (K-means)クラスタリング-最適なクラスター数を評価します。
ダウンストリームタスクで長いドキュメントでBERTを使用したい場合は、次の2つの主要なアプローチを検討してください。
切り捨て方法
- ヘッドのみ(最初の512トークン)
- テールのみ(最後の512トークン
- 頭と尾
ドメインによっては、たとえば、各ドキュメントがエグゼクティブサマリーで終了している場合、テールのみで結果が改善されることがあります。
階層的な方法
- プーリングを意味します
- 最大プーリング
ここで述べたように、切り捨てメソッドはBERTモデル(トークン)の入力に適用され、階層メソッドはBertモデルの出力(埋め込み)に適用されます。