0

私のアプリケーションには、ユーザーがさまざまなソーシャルネットワークに接続して友達のリストを取得できる機能があります。たとえば、LinkedInやFacebookから友達を取得できます。

さまざまなソーシャルネットワークからのさまざまなリストを組み合わせた結果である友人の単一のリストを提示したいと思います。問題は、異なるリストの名前がおそらく同じ人物であるかどうかをどのように判断するかです。たとえば、Facebookは「JimSmith」と言い、LinkedInは「JimSmith、Phd」と言うかもしれませんが、私のアプリで彼らが同じ人物であることを検出したいと思います。

文字列のレーベンシュタイン距離関数を見てきましたが、75%の信頼度で、2つの名前がおそらく同じであると見なす前に、しきい値を設定する方法もわかりません。

これが私がやろうと思っていることです:

  • すべての比較を小文字で行います
  • レーベンシュタイン距離を計算する前に、比較されている2つの名前からすべての空白を削除します
  • levenshtienの距離を短い名前の長さのパーセンテージに変換します
  • パーセンテージが0の場合、完全に一致します
  • パーセンテージがx未満の場合、おそらく同じです

Leventstienの計算にapachecommonsStringUtils.getLevenshteinDistance()を使用することを計画しています。

xの適切な値は何ですか?10%、20%、30%...など?これは良いアルゴリズムですか?私の数学のスキルはかなり錆びており、これが機能するかどうかはわかりません。

より良いアプローチはありますか?このようなものに使用する必要のある標準ライブラリはありますか?

4

1 に答える 1

2

しきい値を決定する自動アルゴリズムを選択します。

  1. 一連の例を(手動で)作成します。同等のものとそうでないものがあります。
  2. さまざまなしきい値を使用してアルゴリズムを実行します。
  3. 結果を最大化するしきい値を選択しました。私はF-Measureを使用します。これは、精度(あなたが「同等」であると言った数が実際にある)と想起(正しい人の何人がそのようにラベル付けされているか)を考慮に入れます。
  4. 統計ツールを使用して、さまざまなしきい値の間に統計的有意性があるかどうかを判断します(より多くの例が必要か、セットが適切かどうかを知るのに役立ちます)。ウィルコクソン検定は、ほとんどの場合、デファクトスタンダードです。

検討したい代替案は、機械学習の分野、つまり分類アルゴリズムです。ここでは、calssifyする必要が(user1,user2)あり、答えはtrueuser1がuser2と同じであるかどうかです。
同じツール(統計テスト、および相互検証の使用)を使用して、このアプローチの精度を推定できます。

(免責事項:私は経験豊富なML開発者だと思っていますが、このアプローチでこのようなことをしようとしたことはありません)。

于 2012-12-01T08:22:42.330 に答える