億の規模な量を達成するために、単一の試験

余談:技術記事、公共の数が主演するように設定されている見るのは初めてようこそ。私たちは、いつものように、良いテキスト選択技術は、貴重な読書を提供します。読者が貢献したい場合は、公共の記事、技術的なブロガー豊かな報酬の任意の数のメッセージを残すことができます。

著者:haolujun

cnblogs.com/haolujun/p/8399275.html

背景

大規模でどのように再受験する:最近の研究で問題が発生しましたか?蓄積の年後、我々は百万人 - 質問試験を持っていますが、様々な起源のトピックがつながるための試験は、計算の検索エンジンを増やすことに加えて、検索でこれらのトピックを繰り返し、リピートタイトルの多くを持っているが、改善されません。精度。

また、あまりにも多くの質問ので、検索エンジンは精度を撮影しても、落下の代わりの上昇は見られない、正しいタイトルをいくつかにつながるが、計算するだけでなく、計算の一部を対象とカットオフ戦略を採用する傾向があります。検索エンジンのためので、項目数の初期増加は、多くの場合、大幅に増加検索精度を取るが、時にある程度大量の主題が、正確なレートで計算結果の量ので追いつかないだろうことができますが。できるだけ重複したトピックを削除する方法は非常に重要です。

一部のプログラムの試み

MD5値の比較

MD5値は、署名として各質問のために算出された新たな被験者は、限りが決定される場合、そのように試験に同じMD5の値かどうか。

この方式は、正確に同じ2つのトピックに適用されますが、実際には、多くの場合、ちょうどこのトピックではありません。

  • 「B 10より大きい」及び「10よりも小さいB」

  • 「10冊の本を購入する暁明。」と「リトルレッドは10冊の本を買います」

  • 「今日、気温は10度である」と「10度の今日の気温。」

これらの質問は繰り返されるべきであるが、異なるMD5値と、重い行くことができません。

そして、最長共通部分列の最小編集距離アルゴリズムを使用して

類似性は、90%を超えるように、一定の割合よりも大きい場合、最長共通部分列アルゴリズム及び最小編集距離アルゴリズムの類似性2人の被験者を用いて、被験者が重複していると考えられます。

この方法は、理論的には可能であるが、あまりにも計算集約。O(N2 * M2):伝票番号がNである場合、平均文書長はM、おおよその次に、計算された量です。

百万N = 1000、M = 200、約4×1018を計算量、I、それほど計算電源線における機械の限られた利用可能性を想定。私たちは一緒に類似したトピックのトランスポートを入れて収集し、その後、同程度の2つのトピックのこの一握りを比較することができればしかし、これはまだ実現可能です。

ジャカード類似性

3.2および3.3節「ビッグデータ、インターネットデータマイニングや大規模分散処理」 - 「情報検索の概要」およびセクション19.6は、この目的を達成するために、私は特に2冊を見ました。2セットを計算する方法をジャカード類似性についてあります:|A∩B||A∪B|。この式は、金額の計算は非常に大きいので、卵と重い行くには何もありません。

完全な配列にランダム変換、確率的アルゴリズムのジャカードに基づいて近似値を計算する:したがって、これら二つの書籍も、具体的にそれと同等のアルゴリズムを説明しています。この記事では、プルーフの変換、これら二冊の本を見て、直接興味小さなパートナーにはなりません。しかし、また、最も重要なステップジャカード類似度を計算するために、興味深い問題があります:どのようにNのスーパーフルアレイのランダム0〜N-1を生成するために?私は、近似アルゴリズムを与えるためにここにいる後輩のパートナーは以下の定理には見知らぬ人はいけません初等数論を学びます。

定理:  Y =(A * X + B)MODN、もしnが素数(すなわち、最大の共通の除数nは1)xが引き継ぐ場合、0〜N-1は、yが実行時かけて0〜N- 1。

証明:二つの数X1とX2、例えばY1 =(*×1 + Bことがある場合 )MODN = Y2 =(*×2 + B)MODN、 次いで(*×1 + B)% N =(*×2 +がB)得られた%Nは、(*×1 + B- *×2-B)%N = 0、 次に*(X1-X2)%を得 n = 0です。nは、1の最大公約数、得られたX1-X2 = K×n個、すなわち、X1 = X2 +のk * nの素数からです。X1及びX2がNよりも小さい場合、kが0、すなわち、X1 = X2と等しくすることができます。このことから、Xが結論が証明されているように残りは、範囲0〜N-1であるので、残りは確かに、繰り返すことがされていない場合、N-1〜0上で動作します。

我々は、nを知っていればこのように、ちょうど偶数ラインのnまでの素数を持つ100または200番号を見つけ、100個のまたは200素数のn未満(プライムふるいあなたが百度を所有)が発見され、その後、無作為に100を生成し、 200 Bは、そのような多くの機能を構築することができるであろう。

例えば、A = 3、B = 4、N = 8

x = 0 y = 4
x = 1 y = 7
x = 2 y = 2
x = 3 y = 5
x = 4 y = 0
x = 5 y = 3
x = 6 y = 6
x = 7 y = 1

このアルゴリズムは、計算のいくつかの量の確率を減らすことができますが、私はまだ受け入れることはできませんが。私たちが今しているので重要な問題は、ブランケットの一握りを見つけるために、どのように、この一握りで政策を決定する際に類似した、より洗練された一握りのを見つけることですか?

サインオンライン検索ログマイニングを使用します

いわゆる特定の条件、ハイテクは、現実世界の条件を無視追求することはできません。例えば、Baiduはまた、戦略を再する必要がありますが、ないジャカード類似ラインへの最終的なアプリケーションが、いくつかの文書に最も長い文章を見つけるために、裁判官、および精度などこれらの文章を繰り返すかどうか二つの文書かどうかに応じて驚くほど良いです。そこで、我々は、特定の問題の具体的な分析を持っています。

その後、私はこれらの文書を信じることができ、いくつかの試合での文書IDの最高度にすべての検索結果を記録するログを取得し、検索プロセスを見てみましょうが小さいクラスタで、再クラスタ化する必要はありません。また、非常に多くの検索最適化戦略は、私自身よりも簡単かつ効果的であることが再発明のクラスタリングアルゴリズムである極めて高精度、ショットので。手にこのような良いジャーナルがありますが、我々はそれらをフルに活用する必要があります。それから私は、私は、デデュプリケーション戦略を実装する方法を詳細に説明します。

次のようにログの形式は次のとおりです。

[[1380777178,0.306],[1589879284,0.303],
[1590076048,0.303],[1590131395,0.303],
[1333790406,0.303],[1421645703,0.303],
[1677567837,0.303],[1323001959,0.303],
[1440815753,0.303],[1446379010,0.303]]

これは、各アレイは、問題のIDとそのスコアを持って、JSON配列です。

ログを選択します

候補ログログのような比較的高いスコアのタイトルIDを選択します。画像認識を選択して行を取り出す間の差も大きく、コンテンツのタイトル、おそらくいないクラスを識別するためによると、その後、画質が悪い場合は特に、正確百パーセントを保証するものではありませんので、そうです。

クラスタ化

設立の初期セット

各ログのために、第1のセルID、要素のクラスタのような他の要素としてIDをランク付けしました。

そして、一連の要件

次の例を見てください:

A -> B,C,D
E -> C,D,F

二組が同じIDを持っているので、我々はこれらの2つのコレクションが実際にクラスタに属していると推測し、そしてどのように二組?互いに素セットアルゴリズム(プログラムはジュニアパートナーの競争に参加し、自己Baiduは、なじみのないべきではありません。)を使用します

私は、以下のサンプルコードを書き、チェックセットは、マージ操作の優れたコレクションを完了することができます。例えば、結合操作の互いに素セットを使用して2つのログの合併を完了します。

https://github.com/haolujun/Algorithm/tree/master/union_find_set

union_find_set.join(A,B)
union_find_set.join(A,C)
union_find_set.join(A,D)

union_find_set.join(E,C)
union_find_set.join(E,D)
union_find_set.join(E,F)

操作を呼び出した後、我々はA、B、C、D、Eを見つけるだろう、Fは、同じコレクションに属しています。

要素の制限のコレクション

実際の試験のトピックの特定のセットの数は偏差の計算は、クラスタリング処理によって引き起こされるので、これは起こる何百万人に達することができることを見出しました。例えば、AはBと同様であり、CとBは、我々は、Aは、B、1つのクラスタにCが、実際には、クラスタリング処理は問題に非常に傾向があり、AとCと同様ではないかもしれないので、類似しています。

総会以上のクラスタコンピューティングは、大きな試験に重い行くよりもやや単純な問題である背中の細かい計算の量が増加し、それはまた、非常に困難です。被写体を考慮すると、あまり繰り返し試験ではなく、各セットのサイズの要素の数を制限することができる2つの要素の総数が上限より組をマージする場合、設定も、これら二組、互いに素なセットの使用をマージしていません実装が容易。

ファイン計算

2つのタイトルリピートするかどうかを確認する方法

今、検索結果の重合を介してクラスタショットがあり得るが、シュートは必然的に認識エラーになりますOCR認識によって生成された取得するために使用されるテキスト、との問題、検索エンジンは、このようなエラーを許容することができるようにした、参加しましたクラスタの結果につながるいくつかのファジー戦略は、全く似ていないので、罰金を計算することが必要です。

それでは、どのように2つの質問を比較しないことと重複しているのですか?特に数学の問題な数字や演算子、混合タイトル文字、ためにどのように行うの?長い分析した後、同じことは、数字、文字と文字を比較することはできません。数字は、文字は、同じ文字の説明セクションには、いくつかの相違点を許す可能性がある場合、その差は大きすぎるではありません。数字は、文字は、等しくない場合は、おそらくこれら二つの質問が異なっています。

この最後は私が罰金戦略に重いました:抽出タイトル文字と正確に等しい部分(最小編集距離を用いてもよいし、最長共通数字、文字、演算子、数字、文字、および類似のオペレータ文字ですシーケンス)の80%より大きく、それが同じ2つの質問を考えることができます。

“A比B大10"与"B比A小10”  -- 数字与字母组成的字符串不相等,不认为重复
“小红买10本书”与“小明买10本书”   -- 数字字母相同,汉字相似度大于80%,认为重复
“今天空气温度为10度”与“今天的空气温度为10度”  -- 数字字母相同,汉字相似度大于80%,认为重复

この戦略は百パーセントはすべての重複質問を重い行くが、それは重要な部分は、質問を繰り返して行くことができることを保証することはできませんが。

どの科目維持するとどのタイトルを削除するには?

考慮に入れストレージに反転サーチエンジンは、トピックIDの種類のサイズ(記憶されたIDとIDとの間の差)に応じた、従って小さなIDのIDを残して、これは達成することは困難ではないが、大を除去する必要があります。

周期的反復

当社のアルゴリズムは重いログインする重複排除機能をベースに、あなたは体重のすべての部分に移動し、重い行く時間の期間にわたってオンライン・ログを得るため、一定の反復することができます。

また、偉大な計算?

スタンドアローンの量の計算によると、重いログへの魚の一定数の後、スタンドアロン完了することができ、何のクラスタは、全く分散しません。

エピローグ

スマート小さなパートナーは私に日和見を見つけるかもしれません。私は、再試験をするためにまっすぐ強引に行きませんでしたが、最初からステップにより、検索ログ、増分ステップを撮影する試験の量を達成するために、限り、十分な反復回数として最終的にはすべての重いテーマを行くために、それぞれが本当の重い行くことができます実際には、我々はそれが簡単にポリシーの詳細を調整する効果を参照してください。だから、別の角度から問題に直面して単純なアプローチがあるかもしれません。

おすすめ

転載: blog.csdn.net/jiahao1186/article/details/91374734