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

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

[[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 を使用すると次元を非常に速く削減でき、次元削減後の機能は、その後の分類とクラスタリングの作業を完了するのに役立ちます。もちろん、分散コンピューティング フレームワークが存在するため、通常はメモリが不足する状況に遭遇することはありません。そのため、実際の仕事では特徴ベクトル化を使用します。

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

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

ブログ    

推薦する

2024年の人工知能とデジタルツインの開発動向

人工知能 (AI) とデジタル ツインは、複数の業界で重要な用途を持つ、よく議論される 2 つの技術...

...

絶対に対立なんかじゃない!短期的にはAIが人間に取って代わることができない5つの分野

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

今後 3 ~ 5 年で、機械学習のどの分野の人材が最も不足するでしょうか?

[[205598]]すでにこの業界にいる私としては、今後数年間で業界にどのような機械学習の才能が必...

APP はユーザーのプライバシーと顔認識生体認証情報を深く掘り下げ、「データ疫病」の到来に注意

315 Gala で摘発された企業は、業界内ではほんの少数派です。ユーザーのプライバシーを侵害するア...

10億ピクセル画像のマルチスケール特性評価のためのスタンフォード大学の新しいニューラルシーン表現方法がSIGGRAPHに選出されました

現在、ニューラル表現は、レンダリング、イメージング、幾何学モデリング、シミュレーション アプリケーシ...

2021 年の人工知能に関する詳細な研究: 機械学習は最終的に人間の医師に取って代わるのでしょうか?

[[377208]]これから議論する論文で採用されているアプローチは、これまでのどのアプローチより...

AIを使ってアニメーションを作成する方法と、さまざまなツールがあなたを待っています

生成 AI は、インターネット上の重要なコンテンツ ソースとなっています。AI によって生成されたテ...

...

...

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

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

...

鍵となるのは人工知能コンピューティングセンターを構築し、それを活用することだ

デジタル経済の発展に伴い、全国の各省市がコンピューティングインフラの構築を競って推進し、人工知能コン...

農家は収穫を祝い、秋分の日にドローンがその技を披露するのを見てください!

黄金の秋、収穫の季節です。また秋分の日を迎え、わが国では4回目の「農民収穫祭」を迎えます。畑や広場、...

...