2つの単語の類似性


15

2つの単語または文の類似性を識別するのに役立つPythonライブラリを探しています。

私は音声からテキストへの変換を行って、英語の辞書または辞書にない単語を作成します(これは人名または会社名の場合があります)その後、既知の単語と比較する必要があります。

例:

オーディオ結果への1)テキスト:アメリカの拡張を呼び出すためのおかげ と比較されますアメリカンエクスプレス

両方の文は何らかの形で似ていますが、同じではありません。

共有する文字数を調べる必要があるようです。どんなアイデアも素晴らしいでしょう。Google検索の「あなたが言った」機能のような機能に見えます。

回答:


14

最も近いのは、Janが彼の答えであるLevenstein の距離(一般に編集距離とも呼ばれる)に言及したようになります。

情報理論およびコンピューターサイエンスでは、レーベンシュタイン距離は、2つのシーケンス間の差を測定するための文字列メトリックです。非公式には、2つの単語間のレーベンシュタイン距離は、1つの単語を他の単語に変更するために必要な単一文字の編集(挿入、削除、または置換)の最小数です。

同様の単語を識別するために非常に一般的に使用されるメトリックです。Nltkには既に編集距離メトリックの実装があり、次の方法で呼び出すことができます。

import nltk
nltk.edit_distance("humpty", "dumpty")

上記のコードはを返します1。2つの単語で異なるのは1文字のみです。


1
Lavenshtienの距離は、NLPが目的の場合に使用できる最悪のアルゴリズムです。2つのシノニムの文字セットが異なる場合、これらの場合のLDのパフォーマンスは非常に低くなります。
それはトラップです

9

ここでの非常に良い応答とは別に、difflib pythonライブラリでSequenceMatcherを試すことができます。

https://docs.python.org/2/library/difflib.html

import difflib

a = 'Thanks for calling America Expansion'
b = 'Thanks for calling American Express'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d) 
### OUTPUT: 87.323943

次に、以下のコードを検討してください。

a = 'Thanks for calling American Expansion'
b = 'Thanks for calling American Express'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 88.88888

これで、d値を比較して類似性を評価できます。


1
あなたが)(そのseq.ratioを感じる遅い場合は、seq.quick_ratio()を使用することができます
Nabin

7

辞書が大きすぎない場合、一般的なアプローチはレーベンシュタイン距離を取ることです。これは基本的に、ある単語から別の単語に到達するために必要な変更の数をカウントします。変更には、キャラクターの変更、キャラクターの削除、キャラクターの追加が含まれます。ウィキペディアの例:

lev(子猫、座っている)= 3

  • k itten-> s itten
  • sitt 電子のn - > sitt 私は n個
  • 座っ->座っg

Wikibookに実装されているPythonを次に示します。

ただし、これらの距離を計算するアルゴリズムは安価ではありません。これを大規模に行う必要がある場合、一度に多くの単語の一致を見つける必要がある場合に、より高速で配布が簡単なバイグラムベクトルでコサイン類似性を使用する方法があります。ただし、これらはこの距離の近似値にすぎません。


(+1)レフ。距離メトリック。nltkには既製の実装が付属しています。コサイン類似度は、文字列類似度の指標としては適切ではありません。私見:)
Dawny33

私はそれがレーベンシュタイン距離よりもはるかに悪いことに同意しますが、数百万の2つのデータセット間でファジーマッチングが必要な場合は、いくつかのトリックと行列乗算が必要なため、実際に合理的な時間でそれを行うことができます
ヤン・ファン・Vegtデア・

1
@ Dawny33私は反対だろう。コサインの類似性は私にとって非常に迅速に機能しただけでなく、適切なn-gramが使用されていることを考えると非常に正確でもありました。
モヒトモトワニ

3

比較のための古くからよく知られている手法は、Soundexアルゴリズムです。アイデアは、単語自体ではなく、それらが発音される方法の近似値を比較することです。これが実際にどの程度まで結果の品質を向上させるかはわかりません。

ただし、Soundexのようなものを音声テキスト認識エンジンの結果に適用するのは少し奇妙に感じます。最初に、単語の発音方法に関する情報を捨ててから、再度追加しようとします。これらの2つのフェーズを組み合わせることをお勧めします。

したがって、私はこの分野の最先端技術がそれを行うことを期待しており、例えばニューラルネットワークに基づいた何らかの形の適応分類であると考えています。Googleは、ニューラルネットワークを使用した音声認識に関する最近の調査結果を返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.