テキストマイニング前処理におけるベクトル化とハッシュトリック

テキストマイニング前処理におけるベクトル化とハッシュトリック

[[201071]]

序文

「テキスト マイニングにおける単語分割の原理」では、テキスト マイニングの前処理の重要なステップである「単語分割」について説明しました。単語分割の後、テキスト分類とクラスタリングを行う場合、重要な特徴の前処理ステップにはベクトル化またはベクトル化の特殊なケースであるハッシュ トリックが含まれます。この記事では、ベクトル化と特殊なケースのハッシュ トリックの前処理方法についてまとめます。

バッグ・オブ・ワード・モデル

ベクトル化とハッシュトリックについて説明する前に、まず Bag of Words (BoW) モデルについて説明しましょう。バッグオブワードモデルでは、テキスト内の単語間の文脈上の関係は考慮せず、すべての単語の重みのみを考慮すると想定されています。重みは、テキストに出現する単語の頻度に関係します。

Bag-of-Words モデルは、まず単語の分割を実行します。単語の分割後、各単語がテキストに出現する回数を数えることで、テキストの単語ベースの特徴を取得できます。これらの単語と各テキスト サンプルの対応する単語の頻度をまとめると、ベクトル化と呼ばれるものになります。ベクトル化が完了したら、通常、TF-IDF を使用して特徴の重みを修正し、特徴を標準化します。 追加の機能エンジニアリングを行った後、データを機械学習アルゴリズムに送り込み、分類とクラスタリングを行うことができます。

Bag-of-Words モデルの 3 つのステップ:

  • トークン化;
  • 修正された単語特徴値をカウントします(カウント)。
  • 正規化;

Bag of Words モデルに非常によく似たモデルが Set of Words モデル (SoW) です。Bag of Words モデルとの最大の違いは、単語の出現頻度に関係なく、単語がテキストに出現するかどうかのみを考慮することです。つまり、テキスト内に 1 回出現する単語と複数回出現する単語の特徴処理は同じです。ほとんどの場合、bag-of-words モデルを使用します。以下の説明でも bag-of-words モデルに焦点を当てます。

もちろん、bag-of-words モデルには大きな制限があります。単語の頻度のみが考慮され、文脈上の関係は考慮されないため、テキストの意味の一部が失われます。しかし、ほとんどの場合、分類とクラスタリングが目的であれば、bag-of-words モデルはうまく機能します。

BoWのベクトル化

Bag-of-Words モデルで単語の頻度をカウントするステップでは、テキスト内のすべての単語の単語頻度を取得します。単語頻度を使用して、単語ベクトルを使用してテキストを表すことができます。ここで例を示します。この例は、scikit-learn の CountVectorizer クラスを使用して直接完成します。このクラスは、単語の頻度統計とテキストのベクトル化を完了するのに役立ちます。コードは次のとおりです。

  1. sklearn.feature_extraction.textからCountVectorizer をインポートします
  2. corpus=[ "私は旅行するために中国に来ました" ,
  3. 「これは中国で人気のある車です
  4. 「私はお茶とリンゴが大好きです
  5. 「仕事は科学の論文をいくつか書くことです
  6. vectorizer.fit_transform(corpus) を印刷します。

上記の 4 つのテキストの処理出力を次に示します。

  1. (0, 16)1
  2. (0、3)1
  3. (0、15)2
  4. (0、4)1
  5. (1、5)1
  6. (1、9)1
  7. (1、2)1
  8. (1、6)1
  9. (1、14)1
  10. (1、3)1
  11. (2、1)1
  12. (2、0)1
  13. (2、12)1
  14. (2、7)1
  15. (3、10)1
  16. (3、8)1
  17. (3、11)1
  18. (3、18)1
  19. (3、17)1
  20. (3、13)1
  21. (3、5)1
  22. (3、6)1
  23. (3、15)1

4 つのテキストの単語の頻度がカウントされていることがわかります。出力では、左括弧の最初の数字はテキストのシーケンス番号、2 番目の数字は単語のシーケンス番号です。単語のシーケンス番号はすべてのドキュメントに基づいていることに注意してください。 3 番目の数字は単語の頻度です。

さらに、各テキストの単語ベクトルの特徴と、各特徴によって表される単語を調べることができます。コードは次のとおりです。

  1. vectorizer.fit_transform(corpus).toarray() を印刷します。
  2.  
  3. vectorizer.get_feature_names() を印刷する

出力は次のようになります。

  1. [[0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0]
  2.  
  3. [0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0]
  4.  
  5. [1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0]
  6.  
  7. [0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1]]
  8.  
  9. [u 'and' 、u 'apple' 、u 'car' 、u 'china' 、u 'come' 、u 'in' 、u 'is' 、u 'love' 、u 'papers' 、u 'polupar' 、u 'science' 、u 'some' 、u 'tea' 、u 'the' 、u 'this' 、u 'to' 、u 'travel' 、u 'work' 、u 'write' ]

合計 19 個の単語があり、4 つのテキストは 19 次元の特徴ベクトルであることがわかります。ベクトルの各次元は、次の 19 個の単語に順番に対応します。さらに、「I」という単語は英語ではストップワードなので、単語頻度統計には含まれません。

ほとんどのテキストでは語彙のごく一部の単語しか使用されていないため、単語ベクトルには多くのゼロが含まれます。つまり、単語ベクトルはスパースです。実際のアプリケーションでは、スパース行列が一般にストレージに使用されます。テキストの単語の頻度をカウントした後、通常はTF-IDFを通じて単語の特徴値を修正します。

ベクトル化法は非常に便利で直接的ですが、いくつかのシナリオでは使いにくいです。例えば、単語分割後の語彙は非常に大きく、100万以上に達します。このとき、ベクトル化法を直接使用して対応するサンプルの対応する特徴マトリックスをメモリにロードすると、メモリが爆発する可能性があります。この場合、どうすればよいでしょうか?最初の反応は、特徴の次元を削減する必要があるということです。その通りです!そして、Hash Trickは、非常によく使用されるテキスト特徴の次元削減方法です。

ハッシュトリック

大規模なテキスト処理では、特徴の次元が単語分割語彙のサイズに対応するため、次元が非常に大きくなる可能性があります。このとき、次元削減が必要であり、前節のベクトル化手法を直接使用することはできません。最も一般的に使用されるテキスト次元削減方法は、ハッシュ トリックです。ハッシュについて言えば、それはまったく神秘的なものではありません。データ構造を勉強した学生なら知っています。ここでのハッシュの意味も同様です。

Hash Trick では、特徴ハッシュに対応するハッシュ テーブルのサイズを定義します。このハッシュ テーブルの次元は語彙の特徴次元よりもはるかに小さくなるため、次元削減と見なすことができます。具体的な方法は、任意の特徴名に対して、ハッシュ関数を使用して対応するハッシュ テーブルの位置を見つけ、特徴名に対応する単語の頻度統計をハッシュ テーブルの位置に追加します。数学的な言葉で表現すると、ハッシュ関数 h が i 番目の特徴を位置 j にハッシュする場合、つまり h(i)=j の場合、i 番目の元の特徴の単語頻度値 φ(i) はハッシュ後の j 番目の特徴の単語頻度値 φ¯ に累積され、次のようになります。

しかし、上記の方法には問題があります。2 つの元の特徴のハッシュ位置が一緒に配置され、単語頻度の累積特徴値が突然増加する可能性があります。この問題を解決するために、ハッシュ トリックの変種である符号付きハッシュ トリックが登場しました。この場合、ハッシュ関数 h に加えて、もう 1 つのハッシュ関数があります。

これの利点は、ハッシュ化された特徴は依然として偏りのない推定値であり、一部のハッシュ位置の値が大きくなりすぎることがないことです。

scikit-learn の HashingVectorizer クラスには、署名付きハッシュ トリックに基づくアルゴリズムが実装されています。ここでは、HashingVectorizer を使用してハッシュ トリックを実践します。簡単にするために、上記の 19 次元の語彙を使用して、6 次元にハッシュします。もちろん、実際のアプリケーションでは、19 次元データに Hash Trick はまったく必要ありません。ここではデモンストレーションを示します。コードは次のとおりです。

  1. sklearn.feature_extraction.textからHashingVectorizer をインポートします
  2. vectorizer2 = HashingVectorizer(n_features = 6, norm = None) を印刷 vectorizer2.fit_transform(corpus)

出力は次のようになります。

  1. (0、1)2.0
  2.  
  3. (0、2)-1.0
  4.  
  5. (0, 4)1.0
  6.  
  7. (0、5)-1.0
  8.  
  9. (1、0)1.0
  10.  
  11. (1、1)1.0
  12.  
  13. (1、2)-1.0
  14.  
  15. (1、5)-1.0
  16.  
  17. (2、0)2.0
  18.  
  19. (2、5)-2.0
  20.  
  21. (3, 0)0.0
  22.  
  23. (3、1)4.0
  24.  
  25. (3、2)-1.0
  26.  
  27. (3、3)1.0
  28.  
  29. (3、5)-1.0

PCA と同様に、Hash Trick を使用して次元を削減した後は、特徴の名前と意味がわからなくなります。この時点では、前のセクションのベクトル化時のように各列の意味を知ることはできないため、ハッシュ トリックはあまり説明的ではありません。

まとめ

機能を前処理する場合、一般的な意味でのベクトル化はいつ使用し、Hash Trick はいつ使用するのでしょうか。標準も非常にシンプルです。

一般的に言えば、語彙の機能がメモリに収まらないほど大きくない限り、一般的なベクトル化を使用する方が間違いなく優れています。ベクトル化方法は解釈性が高いため、特徴の各次元がどの単語に対応するかがわかり、TF-IDF を使用して各単語特徴の重みを変更し、特徴表現をさらに改善することができます。

Hash Trick は大規模な機械学習で使用されます。現時点では、語彙が非常に大きく、ベクトル化手法を使用する場合、メモリが不足しています。ただし、Hash Trick を使用すると次元を非常に速く削減でき、次元削減後の機能は、その後の分類とクラスタリングの作業を完了するのに役立ちます。もちろん、分散コンピューティング フレームワークが存在するため、通常はメモリが不足する状況に遭遇することはありません。そのため、実際の仕事では特徴ベクトル化を使用します。

<<:  「何千人もの人々の何千もの顔」を解読し、ユーザーのポートレートを深く解釈する方法

>>:  賢くなる方法: 神経科学にヒントを得た人工知能

ブログ    

推薦する

単一画像超解像におけるディープラーニングの応用: SRCNN、知覚損失、SRResNet

[[209375]]単一画像の超解像度では、品質の低下を最小限に抑えながら小さな画像のサイズを拡大...

...

ビッグデータが地球を救う10の方法

近年、多くの物事の成功はテクノロジーの進歩によるものと言えます。その一つは、気候変動のリスクから地球...

...

AIと5Gを組み合わせてIoTの収益を最大化する方法

[[402984]]研究によると、人工知能と 5G テクノロジーを組み合わせることで、通信会社は I...

100万個のニューロンをリアルタイムでスキャンできるようになりました。脳細胞活動の画像化における新たなブレークスルーです。

数年前なら、コンピューターが 10,000 個のニューロンの活動を同時に記録していたらニュースになっ...

機械学習は増加傾向にありますが、そのアルゴリズムの結果は公正なのでしょうか?

アルゴリズムは驚くべき方法で私たちの生活をコントロールしています。地元のデリのカウンターで番号を受け...

...

Redis のソースコードを読んで、キャッシュ除去アルゴリズム W-TinyLFU を学びましょう

[[433812]]この記事は董澤潤氏が執筆したWeChat公開アカウント「董澤潤の技術ノート」から...

メタバース、ドローン、5G…は2022年に投資する価値のあるテクノロジーになるでしょうか?

2022年は活気に満ちた春のニュースとともにやって来ます。新年はどんな機会と課題をもたらすでしょう...

待望のWeb顔認識ログインのフルバージョンが登場しました。気に入っています

[[436944]]この記事はWeChatの公開アカウント「Programmer Insider T...

...

データマイニングアルゴリズムと実際の応用例

[[149735]]武漢に比べると北京の秋の訪れはとても早く、9月の夕方には少し肌寒さを感じるように...

人工知能における多様性と不確実性: 世界中の 2,778 人の AI 専門家を対象とした調査の解釈

人工知能は社会を変えようとしています。民間企業、学界、政府を問わず、国レベルおよび国際レベルを問わず...

C# 暗号化におけるハッシュ アルゴリズムの適用に関する簡単な分析

ハッシュ アルゴリズムは C# 暗号化でよく使用される方法ですが、ハッシュ アルゴリズムとは何でしょ...