1. 序章

2つのテキストドキュメント間の類似性の計算は、NLPの一般的なタスクであり、いくつかの実用的なアプリケーションがあります。 これは一般的に、たとえば、検索エンジンで結果をランク付けしたり、読者に同様のコンテンツを推奨したりするために使用されてきました。

テキストの類似性は大まかに定義された用語であるため、最初にこの記事の範囲で定義する必要があります。 その後、類似性を計算する2つの異なる方法と、それらの長所と短所について説明します。

2. テキストの類似性とは何ですか?

最初のステップは、類似性の意味を定義することです。 これを行うには、2つの例から始めます。

文を考えてみましょう:

  • 先生は空の部屋にスピーチをしました
  • 教授が話していたときはほとんど誰もいませんでした

それらは非常によく似た意味を伝えますが、まったく異なる方法で書かれています。 実際、2つの文には共通する1つの単語(「the」)があり、それほど重要な単語ではありません。

それでも、このペアに対して高いスコアを返す理想的な類似性アルゴリズムが必要であると言っても過言ではありません。

それでは、文を少し変更しましょう。

  • 先生は空のa満員の部屋にスピーチをしました
  • 教授が話していたときはほとんど誰もいませんでした

2つの単語を変更しただけですが、2つの文の意味は逆になっています。

意味に基づいて類似性を計算する場合、それをセマンティックテキスト類似性と呼びます。 自然言語は複雑であるため、これを実行するのは非常に複雑な作業であり、現在も活発な研究分野です。 いずれにせよ、類似性を計算するための最新の方法のほとんどは、セマンティクスをある程度考慮に入れようとします。

ただし、これは必ずしも必要ではありません。 従来のテキスト類似性手法は、語彙レベルでのみ機能します。つまり、文中の単語のみを使用します。これらは主に深層学習が登場する前に開発されましたが、現在でも使用できます。 これらは実装と実行が高速であり、ユースケースに応じてより良いトレードオフを提供できます。

この記事の残りの部分では、きめ細かい意味的類似性を計算できる高度なメソッド(たとえば、否定の処理)については説明しません。 代わりに、最初に、従来のドキュメント類似性アルゴリズムの基本的な側面について説明します。 次に、第2部では、少なくともいくつかの意味上の考慮事項を統合するために使用できる単語の埋め込みを紹介します。

3. ドキュメントベクトル

ドキュメント間のテキストの類似性を計算する従来のアプローチは、入力ドキュメントを実数値のベクトルに変換することで計算します。目標は、選択したものに応じて、類似したドキュメントが「近い」ベクトル空間を持つことです。類似度。

このアプローチはベクトル空間モデルの名前を取り、単純な線形代数を使用して類似性を計算できるため、非常に便利です。 2つのことを定義する必要があります。

  1. ドキュメントをベクトルに変換する方法
  2. ベクトルの類似度

それでは、テキストドキュメントをベクトルに変換するための可能な方法を見てみましょう。

3.1. ドキュメントベクトル:例

テキストからベクトルを作成する最も簡単な方法は、単語数を使用することです。 3つの例文を使用してこれを行い、それらの類似性を計算します。 その後、ドキュメントベクトルの計算に使用できる実際のメソッドについて説明します。

3つの文を考えてみましょう:

  1. 私たちはピザ屋に行きました、そしてあなたはピザを全く食べませんでした
  2. 昨日家で一緒にピザを食べました
  3. 我が家に勝る所はありません

ベクトルを作成するために、文内の各単語の出現をカウントします。

この例ではそれを行いませんでしたが、単語は通常、スパース性を減らすためにステム化またはレンマ化されています。

ベクトルを取得したら、この状況にデファクトスタンダードの類似度を使用できます。コサイン類似度。 コサイン類似度は、2つのベクトル間の角度を測定し、-間の実際の値を返します。 1と1。

私たちの場合のように、ベクトルが正の値しかない場合、出力は実際には0と1の間にあります。 2つのベクトルが直交している場合、つまりドキュメントに類似性がない場合は0を返し、2つのベクトルが平行である場合、つまりドキュメントが完全に同一である場合は1を返します。

これをサンプルベクトルに適用すると、次のようになります。

ご覧のとおり、最初の2つのドキュメントは、3つの単語を共有しているため、最も類似性が高くなっています。 ピザという単語は2回出現するため、「at」、「ate」、「you」に比べて類似性が高くなることに注意してください。

4. TF-IDFベクトル

今見た単純化された例では、単純な単語数を使用してドキュメントベクトルを構築しています。 実際には、このアプローチにはいくつかの問題があります。

まず第一に、最も一般的な単語は通常、それほど重要ではない単語です。 実際、ほとんどのドキュメントは、「the」、「is」、「of」などの単語の多くの出現を共有し、類似性の測定に悪影響を及ぼします。

これらの単語は一般にストップワードと呼ばれ、前処理ステップで削除できます。 それでも、 TF-IDFのようなより洗練されたアプローチを使用すると、コーパス内の頻繁な単語の重みを自動的に減らすことができます。

TF-IDFの背後にある考え方は、最初に単語が出現するドキュメントの数を計算することです。 単語が多くのドキュメントに表示されている場合、類似性の計算との関連性は低くなり、その逆も同様です。 この値を逆ドキュメント頻度またはIDFと呼び、次のように計算できます。

式では、はコーパス、はその中のドキュメントの総数、分母は私たちの単語を含むドキュメントの数です。 たとえば、前の3つの文をコーパスとして使用すると、「ピザ」という単語のIDFは次のようになります。

「昨日」という言葉は:

常用対数を使用すると仮定します。 3つのドキュメントすべてに単語が表示される場合、そのIDFは0になることに注意してください。

前処理ステップとして、コーパス内の各単語に対してIDFを1回だけ計算でき、 it は、その単語がコーパス自体で重要であるかどうかを示します。

この時点で、生の単語数を使用する代わりに、IDFで重み付けしてドキュメントベクトルを計算できます。 ドキュメントごとに、各単語のカウントを計算し、それを頻度に変換して(つまり、カウントをドキュメント内の単語の総数で割って)、IDFを掛けます。

その場合、各単語の最終スコアは次のようになります。

4.1. TF-IDFの長所と短所

この方法で提供される重み係数は、生の単語頻度を使用する場合に比べて大きな利点であり、その有用性はストップワードの処理に限定されないことに注意することが重要です。

単語ごとに重みが異なり、単語の使用法はディスカッションのトピックによって異なるため、この重みは入力コーパスの内容に応じて調整されます。

たとえば、「弁護士」という単語は、法律文書のコレクションでは重要性が低く(2つの間の類似性を確立するという点で)、代わりに一連のニュース記事では重要性が高い可能性があります。 ほとんどの法律文書は弁護士について話しますが、ほとんどのニュース記事はそうではないので、直感的にこれは理にかなっています。

説明したこの方法の欠点は、セマンティックな側面が考慮されていないことです。 「teacher」と「professor」のような2つの単語は、意味は似ていますが、結果のドキュメントベクトルの2つの異なる次元に対応し、全体的な類似性に0をもたらします。

いずれにせよ、この方法またはそのバリエーションは、たとえば検索エンジンの結果のランキングを実装する場合など、依然として非常に効率的で広く使用されています。 このシナリオでは、入力クエリと結果ドキュメントの類似性を使用して、非常に類似しているドキュメントを上位にランク付けできます。

5. 単語の埋め込み

単語の埋め込みは、単語を表す高次元のベクトルです。 単語が出現するすべてのコンテキストを分析することにより、一般にニューラルネットワークを使用して、ドキュメントのコレクションから教師なしの方法でそれらを作成できます。

これにより、類似したコンテキストで表示される単語に対して類似した(コサイン類似性による)ベクトルが生成され、したがって類似した意味を持ちます。 たとえば、「教師」と「教授」という単語は交換可能に使用されることがあるため、それらの埋め込みは互いに接近します。

このため、単語の埋め込みを使用するを使用すると、類似性の計算で同義語または類似した意味を持つ単語を処理できます。これは、単語の頻度を使用する場合には実行できませんでした。

ただし、単語の埋め込みは単語の単なるベクトル表現であり、テキストの類似性の計算にそれらを統合するために使用できるいくつかの方法があります。 次のセクションでは、これを行う方法の基本的な例を示します。

5.1. ドキュメント重心ベクトル

単語の埋め込みを使用して2つのドキュメント間の類似性を計算する最も簡単な方法は、ドキュメントの重心ベクトルを計算することです。これは、ドキュメント内のすべての単語ベクトルの平均であるベクトルです。

単語の埋め込みのサイズは固定されているため、ドキュメントごとに同じサイズの最終的な重心ベクトルが作成され、コサイン類似度で使用できます。

特に長いドキュメントの場合、すべての単語を平均化すると、情報が失われるため、この方法は最適ではありません。 ただし、場合によっては、たとえば小さなドキュメントの場合、異なるが類似した単語を処理する際の以前のアプローチの問題を解決する優れたソリューションになる可能性があります。

重心ベクトルの計算に重み係数を統合することもできます。これは、上記と同じTF-IDF重み付け戦略である可能性があります。 これを行うには、重心を計算するときに、各単語埋め込みベクトルにそのTF-IDF値を掛けてから、加重平均を実行します。

5.2. 単語埋め込みの長所と短所

単語の埋め込みには、単語自体を使用するよりもはるかに強力な、単語の豊富な表現を提供するという利点があります。 ただし、テキスト類似性アルゴリズムの観点からは、直接的な解決策は提供されませんが、既存のアルゴリズムを改善するのに役立つツールです。

これらは基本的な字句レベルを超えることができるので便利ですが、複雑さが増すため、これが必要かどうかを評価する必要があります。

6. 結論

テキストの類似性は非常に活発な研究分野であり、技術は継続的に進化し、改善されています。 この記事では、ベクトル空間モデルと単語の埋め込みに焦点を当てて、テキストの類似性を実装するための可能な方法の概要を説明しました。

TF-IDFのようなメソッドが用語の適切な重み付けにどのように役立つかを見てきましたが、意味的な側面は考慮されていません。 一方、単語の埋め込みは、セマンティクスの統合に役立ちますが、独自の欠点があります。

これらの理由から、使用する方法を選択するときは、常にユースケースと要件を慎重に検討することが重要です。