短いテキストメッセージのウィクフィケーション

この記事では、 読者の問題で定式化された質問に答えたいと思います。 天国はどこか近くにありますか? 。 一番下の行は次のとおりです。 テキストメッセージを受信するシステムがあり、各メッセージのテキストに関連する一連のウィキセージを作成する必要があります。 「バラク・オバマがプーチンと会った」というテキストがあるとしましょう。 出力には、Wikipediaページ「Barack Obama」および「Putin V.V」へのリンクが含まれている必要があります。 可能なアルゴリズムの1つを説明します。



そしてそうしましょう



freq(A)-Wikipediaページのテキスト内のフレーズAのリンクまたはプレーンテキストとしての出現頻度。 つまり、 A =“ Santa Claus”としましょう。 次に、 freq(「サンタクロース」)は、特定のテキストがWikipediaページに表示される回数です。 当然、さまざまな形式を考慮する必要があります。これには、レマタイズまたはステミングのアルゴリズムの1つを使用します。



リンク(A) -Wikipediaページ上のリンクとしてのフレーズAの出現頻度。 link(サンタクロース) -このフレーズがすべてのwikiページで何回リンクされているか。 リンク(A)<= freq(A) -これは明らかだと思います。



lp(A)=リンク(A)/周波数(A) -Aがリンクである確率。 つまり、一般的にAはテキスト内のWikificationの候補と見なされるべきです。



Pg(A) -テキストAリンクを持つリンク先のすべてのウィキペディアページ。



link(p、A) -ページAへのテキストAリンクを持つリンクの回数。



P(p | A)は、 Aがページpにリンクする確率です。 リンク(p、A)/ Pg(A)として計算されます。 テキストAの注釈は、確率P(p | A)に直接依存します



計算リンク(A)lp(A)でプレートを作成します。 次に、 link(A)<2またはlp(A)<0.1のすべての要素を破棄します。残った要素はlinkP辞書を形成します。 この辞書に基づいて、テキストからフレーズを選択します。 独自に設定できるしきい値。 しきい値が高いほど、バイクフィケーションの候補が少なくなります。 したがって、構築前に、すべてのAは初期形式に還元可能です。



しかし、 P(p | A)のみを操作する場合、意味はコンテキストに大きく依存するため、結果は疑わしくなります。 これを行うには、Wikipediaページの依存関係に関するデータが必要です。



すべてのページについて、Googleの距離に基づいて依存関係を計算します。



(p)には、 pにリンクするページのセットがあります| W | -ウィキペディアのページ数。 係数が特定のしきい値よりも大きいページのペアに対してこのデータを保存します。



前述のように、多くの点でフレーズに関連付けるページはコンテキストに依存するため、コンテキストの影響を計算します。



ここで、 B、AはWikiページで比較する必要があるテキストから抽出されたフレーズで、 pはWikiページ、 Aの一致オプションです 一般的な選択式は次のとおりです。



aがページpと一致なければならない可能性、At-テキストAの強調表示されたフレーズ(一致するページの候補)。



一般に、アルゴリズムの手順は次のとおりです。

  1. 結果のテキストはトークン化され、Steamになります。
  2. N個までのすべてのフレーズを割り当てます(リソースの可用性の計算から選択します)。
  3. linkP辞書でハイライトされたフレーズの存在を探します(Wikipediaで見つかったすべてのリンクテキストは、しきい値を超えている可能性があります)。 テキストから選択されたフレーズを形成し、 linkP辞書で見つけます。
  4. 辞書linkPと部分文字列bの両方で、a、bが顕著なフレーズである場合、 lp(a)<lp(b)であれば、 lp(a)lp(b)を比較します。 したがって、 a = "apple" b = "apple computers"の場合を取り除きます。 lp(a)> = lp(b)の場合、 freq(a)およびfreq(b)を見てくださいfreq(a)> freq(b)の場合、ほとんどの場合、 aは無意味な要素であり、それも取り除きます。
  5. 各フレーズに対して、 P(p | a)> 0 (合計確率、 aAtに属する)に基づいて、比較のための候補のセットを構築します。 つまり、利用可能なすべての一致オプションが見つかります。
  6. コンパイルされたセットに基づいてPr(p | a)を計算します。
  7. aに対して最大のPr(p | a)を持つpを選択ます。




このアルゴリズムを実装するには、次の表が必要です。



linkP-テキストからWikification候補を強調表示するのに役立ちます。





共通 -ページのコロケーションに一致するオプション、および基本式を計算するオプションを検索します。





関連 -基本的な数式を計算します。





おわりに



アルゴリズム自体は非常に単純ですが、実装が困難になります。 特に、保存されているデータのサイズは非常に大きいため、検索には最小限の時間がかかります。 実装の1つでは、luceneを使用したメモリインデックスの構築が満たされ、その後、これらのインデックスで検索が実行されました。 主な問題は、関連テーブルでの作業です。 データベースにデータを保存する場合、テキスト処理にはかなり長い時間がかかります。メモリに保存する場合、かなりの量のメモリが必要になります。



私が出会ったすべてのWikificationアルゴリズムは、上記の原則に基づいて構築されましたが、わずかな違いがあります。 ニューラルネットワークを使用した実装を見るのは面白いでしょうが、そのような仕事を見たことはありません。



All Articles