10

ユーザーから提供された一連の単語を検証しようとしています。私は、一連の単語が実際に有効な単語である可能性を判断するスコアリングシステムを考え出そうとしています。

次の入力を想定します。

xxx yyy zzz

私が最初にすることは、私が持っている単語のデータベースに対して各単語を個別にチェックすることです。それで、それがデータベースにあったとしましょう。それで、xxxそれが有効な単語であると100%確信しています。次に、それyyyがデータベースに存在しないが、そのスペルの可能なバリエーションが存在するとします(たとえばyyyy)。100%のスコアは与えませんyyyが、おそらくもっと低いスコア(たとえば、90%)を与えます。そのzzz場合、データベースにはまったく存在しません。したがって、zzz0%のスコアを取得します。

したがって、次のようなものがあります。

xxx = 100%
yyy = 90%
zzz = 0%

さらに、ユーザーが次のいずれかに行くと仮定します。

  1. すべての有効な単語のリストを提供します(ほとんどの場合)
  2. すべての無効な単語のリストを提供する(可能性が高い)
  3. 有効な単語と無効な単語の組み合わせのリストを提供する(可能性は低い)

xxx yyy zzz全体として、一連の有効な単語である信頼スコアを決定するための優れたスコアリングシステムは何ですか?複雑すぎるものを探しているわけではありませんが、スコアの平均を取得するのは正しくないようです。単語リストの一部の単語が有効である場合、データベースにない単語も実際の単語である可能性が高くなると思います(特定の単語が含まれていないのはデータベースの制限にすぎません)。

注:入力は通常、最低2ワード(ほとんどの場合2ワード)ですが、3、4、5(場合によってはそれ以上)になることもあります。

4

6 に答える 6

14

編集単語グループを英語と英語以外のグループに区別することを検討する新しいセクションを追加しました。これは、特定の単語が英語であるかどうかを推定するセクションの下にあります。


ここで説明したスコアリングシステムは、この問題を完全に正当化するものではないことを直感的に理解していると思います。

辞書にある単語を見つけるのは素晴らしいことです-それらの単語はすぐに100%を与えて渡すことができますが、一致しない単語はどうですか?それらの確率をどのように決定できますか?これは、まったく同じ文字で構成される文を簡単に比較することで説明できます。

  1. Abergrandlyはwuzkindsを受け取りました
  2. Erbdnerye wcgluszaaindid vker

どちらの文にも英語の単語はありません、最初の文は英語に見えます。これは、いくつかのアイテム(wuzkinds)を受け取った(スペルミスがあった)誰か(Abergrandly)に関するものである可能性があります。2番目の文は明らかに私の幼児がキーボードを叩いているだけです。

したがって、上記の例では、英語の単語が存在しない場合でも、英語を話す人が話す可能性が高くなります。2番目の文は英語である確率が0%です。

違いを検出するのに役立つヒューリスティックをいくつか知っています。

文字の簡単な頻度分析

英語の文字の典型的な分布。 ウィキペディアから

どの言語でも、一部の文字は他の文字よりも一般的です。各文字の発生率を数え、それを言語の平均と比較するだけで、多くのことがわかります。

それから確率を計算する方法はいくつかあります。1つは次のようになります。

  1. 準備
    1. 適切な英語のコーパスの文字の頻度を計算または取得します。NLTKは始めるのに最適な方法です関連するPythonの自然言語処理の本は非常に有益です。
  2. テスト
    1. テストするフレーズの各文字の出現回数を数えます
    2. 各文字点の座標が 次の線形回帰を計算します。
      1. X軸:上記1.1からの予測頻度
      2. Y軸:実際のカウント
    3. データ に対して回帰分析を実行します
      1. 英語は1.0に近い正のrを報告する必要があります。これが英語である確率としてR^2を計算します。
      2. rが0以下の場合、英語との相関関係がないか、文字に負の相関関係があります。おそらく英語ではありません。

利点:

  • 計算が非常に簡単

短所:

  • 「ゼブラ、木琴」などの小さなサンプルではうまく機能しません
  • 「Rrressseee」はおそらく単語のように思われる
  • 私が上で与えた2つの例文を区別しません。

バイグラム頻度とトリグラム頻度

これは文字の頻度の拡張ですが、文字のペアまたはトリプレットの頻度を調べます。たとえば、auは99%の頻度でaqを追跡します(100%ではないのはなぜですか?dafuq)。繰り返しになりますが、NLTKコーパスは非常に便利です。

40,000語までのサンプルに基づく有向グラフの頻度

上から: http: //www.math.cornell.edu/~mec/2003-2004/cryptography/subs/digraphs.jpg

このアプローチは、音声認識からソフトキーボードの予測テキストまで、業界全体で広く使用されています。

三重音字は特に便利です。'll'は非常に一般的な有向グラフであると考えてください。したがって、文字列'lllllllll'は一般的な有向グラフのみで構成され、有向グラフアプローチにより単語のように見えます。'lll'が発生しないため、三重音字はこれを解決します。

トリグラフを使用した単語のこの確率の計算は、単純な線形回帰モデルでは実行できません(トライグラムの大部分は単語に存在しないため、ポイントの大部分はx軸上にあります)。代わりに、マルコフ連鎖を使用して(バイグラムまたはトリグラムのいずれかの確率行列を使用して)、単語の確率を計算できます。マルコフ連鎖の紹介はここにあります。

まず、確率の行列を作成します。

  • X軸:すべてのバイグラム( "th"、 "he"、 "in"、 "er"、 "an"など)
  • Y軸:アルファベットの文字。
  • マトリックスメンバーは、バイグラフに続くアルファベットの文字の確率で構成されます。

単語の先頭から確率の計算を開始するには、X軸の有向グラフにスペース-a、スペース-bからスペース-zまでを含める必要があります。たとえば、有向グラフの「スペース」tはtで始まる単語を表します。

単語の確率の計算は、有向グラフを反復処理し、有向グラフが与えられた3番目の文字の確率を取得することで構成されます。たとえば、「彼ら」という単語は、次の確率に分類されます。

  • 「スペース」に続くht->確率x
  • e次のth->確率y
  • 彼に続くy->確率z

全体的な確率= x * y * z

この計算は、「wcgl」を0%の確率で強調表示することにより、単純な頻度分析の問題を解決します。

任意の単語の確率は非常に小さく、余分な文字ごとに10倍から20倍の間で統計的に小さくなることに注意してください。ただし、大きなコーパスからの3、4、5、6などの既知の英語の単語の確率を調べると、その単語がそれを下回る可能性が非常に低いカットオフを決定できます。非常にありそうもない三重音字はそれぞれ、英語である可能性を1〜2桁低下させます。

次に、単語の確率を正規化します。たとえば、8文字の英語の単語(以下の数字を作成しました)の場合です。

  • マルコフ連鎖からの確率:
    • 最高の英語の単語の確率=10^ -7(10%* 10%* .. * 10%)
    • カットオフ(最も可能性の低い英語の単語の確率)= 10 ^ -14(1%* 1%* .. * 1%)
    • テストワードの確率(「コートテール」など)= 10 ^ -12
  • 結果を「正規化」
    • ログを取る:ベスト= -7; テスト=-12; カットオフ=-14
    • ポジティブにする:ベスト= 7; テスト=2; カットオフ=0
    • 1.0から0.0の間で正規化:Best = 1.0; テスト=0.28; カットオフ=0.0
    • (たとえば、上限と下限を90%から10%の間で簡単に調整できます)

ここで、特定の単語が英語である確率を高める方法を検討しました。単語のグループを見てみましょう。

グループの定義では、最低2語ですが、3、4、5、または(少数の場合)それ以上にすることもできます。単語間にオーバーライド構造や関連性があるとは言わないので、私は次のことを想定していません。

  • どのグループもフレーズです。たとえば、「戦車長」、「赤い文字の日」などです。
  • グループが文または句であること。たとえば、「私は喉が渇いています」、「メアリーはメールが必要です」

ただし、この仮定が間違っていると、単語が英語の構文規則に準拠するため、問題はより大きな単語グループで扱いやすくなります。たとえば、NLTKを使用して句を解析し、より多くの洞察を得ることができます。


単語のグループが英語である確率を見る

OK、問題の感触をつかむために、さまざまなユースケースを見てみましょう。以下では:

  • すべての単語またはすべての非単語の場合は些細なことなので、無視します。
  • 奇妙な名前(例:Kardashian)、変わった製品名(例:stackexchange)など、辞書に載っているとは見なされない英語のような単語を検討します。
  • ランダムなジブリッシュが0%で、英語のような単語が90%であると仮定して、確率の単純平均を使用します。

二つの単語

  1. (50%)赤いajkhsdjas
  2. (50%)Hkdfs金曜日
  3. (95%)カーダシアン家のお騒がせプログラム
  4. (95%)Stackexchangeを使用

これらの例から、1。と2.は受け入れられない可能性が高いのに対し、3。と4.は受け入れられることに同意すると思います。単純な平均計算は、2つの単語グループの有用な識別器のように見えます。

三つの言葉

疑わしい言葉が1つあります。

  1. (67%)赤い夜明けのdskfa
  2. (67%)Hskdkc共産主義マニフェスト
  3. (67%)経済的なjasdfh危機
  4. (97%)カルダシアン15分
  5. (97%)stackexchangeのユーザーエクスペリエンス

明らかに4.と5.は許容範囲です。

しかし、1、2、または3はどうですか?1.、2。または3.の間に重要な違いはありますか?おそらくそうではなく、ベイジアン統計を使用して除外します。しかし、これらは英語として分類されるべきかどうか?それがあなたの呼びかけだと思います。

2つの疑わしい言葉で:

  1. (33%)赤いksadjak adsfhd
  2. (33%)jkdsfkdsajjdsマニフェスト
  3. (93%)StackexchangeがKardashiansにメールを送信
  4. (93%)StackexchangeKardashianアカウント

1.と2.は受け入れられないのですが、3。と4は間違いなく受け入れられます。(まあ、ここにアカウントを持っているカーダシアン家のお騒がせを除いて-それは良い前兆ではありません)。ここでも、単純な平均を単純な判別子として使用できます。67%を超えるか下回るかを選択できます。

4つの言葉

順列の数が増え始めているので、いくつか例を挙げます。

  1. 1つの疑わしい単語:
    1. (75%)今日のjhjasd言語のプログラミング
    2. (93%)絶望的なKardashianテレビシリーズ
  2. 2つの疑わしい言葉:
    1. (50%)今日のkasdhjkjhsaerのプログラミング
    2. (95%)Kasdashianフィルターを実装するStackexchange
  3. 3つの疑わしい言葉:
    1. (25%)プログラミングsdajf jkkdsf kuuerc
    2. (93%)StackexchangeがKardashianstweetdeckを噛み砕く

私の考えでは、2.1を除いて、どの単語グループが意味があるかは単純な平均と一致していることは明らかです。これもまたあなたの呼びかけです。

興味深いことに、4つの単語グループのカットオフポイントは3つの単語グループとは異なる可能性があるため、実装ではグループごとに構成設定を変えることをお勧めします。異なるカットオフを持つことは、2->3から3->4への量子ジャンプが、滑らかで連続的な確率の概念と一致しない結果です。

これらのグループに異なるカットオフ値を実装すると、直感に直接対応できます。「今のところ、私のxxx yyy zzzの例は実際には66.66%を超えるはずだという「直感」を感じていますが、数式として表現する方法がわかりません。 。」

5つの言葉

あなたはその考えを理解します-私はこれ以上ここで列挙するつもりはありません。ただし、5つの単語に到達すると、いくつかの新しいヒューリスティックが登場するのに十分な構造になり始めます。

  1. ベイズ確率/統計の使用(最初の2つがあったとすると、3番目の単語が単語である確率はどれくらいですか?)
  2. NLTKを使用してグループを解析し、文法的に意味があるかどうかを確認します

問題のあるケース

英語には非常に短い単語がたくさんあり、これが問題を引き起こす可能性があります。例えば:

  1. ジブリッシュ:r xu r
  2. これは英語ですか?私は

1文字と2文字の単語を具体的にテストするコードを作成する必要がある場合があります。

TL;DRの概要

  1. 非辞書の単語は、「英語」(またはフランス語やスペイン語など)が文字とトリグラムの頻度をどのように使用しているかをテストできます。英語のような単語を拾い上げ、それらに高いスコアを付けることは、英語のグループを区別するために重要です
  2. 最大4語まで、単純な平均には大きな識別力がありますが、2語、3語、および4語に異なるカットオフを設定することをお勧めします。
  3. 5語以上で、おそらくベイズ統計を使い始めることができます
  4. 長い単語グループが文または文の断片である必要がある場合は、NLTKなどの自然言語ツールを使用してテストできます。
  5. これはヒューリスティックなプロセスであり、最終的には交絡値(「私は」など)が存在します。したがって、完全な統計分析ルーチンを作成することは、多数の例外によって混乱する可能性がある場合、単純な平均と比較して特に有用ではない可能性があります。
于 2013-04-04T07:18:25.433 に答える
5

おそらく、ベイズの式を使用できます。

各単語が実在する確率については、すでに数値による推測があります。

次のステップは、リスト全体が良い、悪い、または混合である確率について知識に基づいた推測を行うことです(つまり、「最も可能性が高い」、「可能性が高い」、「可能性が低い」を数値に変換します)。

于 2013-04-03T18:20:47.553 に答える
3

ベイズ階層モデルソリューションを提供します。手作業で設定する必要のあるパラメータがいくつかありますが、以下のシミュレーションが示すように、これらのパラメータに関しては非常に堅牢です。また、単語リストのスコアリングシステムだけでなく、単語を入力したユーザーの推定分類も処理できます。扱いは少し技術的かもしれませんが、最終的には、リスト内の単語数、データベース内で完全に一致する単語数、および3つの数値の関数としてスコアを計算するルーチンがあります。部分的に一致するものの数(のようにyyyy)。ルーチンはRで実装されていますが、使用したことがない場合は、インタープリターをダウンロードし、コードをコピーしてコンソールに貼り付けるだけで、ここに結果が表示されます。

ところで、英語は私の母国語ではないので、我慢してください... :-)

1.モデル仕様:

ユーザーには、I、II、IIIという3つのクラスがあります。各単語リストは1人のユーザーによって生成され、ユーザーはユーザーの世界からランダムに抽出されると想定しています。この宇宙は70%がクラスI、25%がクラスII、5%がクラスIIIであると言います。もちろん、これらの番号は変更できます。これまでにあります

確率[ユーザー=I]= 70%

確率[ユーザー=II]= 25%

確率[ユーザー=III]= 5%

ユーザーが与えられた場合、条件付き独立を想定します。つまり、ユーザーは前の単語を参照して、有効な単語と無効な単語のどちらを入力するかを決定しません。

ユーザーIは有効な単語のみを与える傾向があり、ユーザーIIは無効な単語のみを与える傾向があり、ユーザーIIIは混合されています。だから私たちは設定しました

Prob [Word = OK | User = I] = 99%

Prob [Word = OK | ユーザー=II]= 0.001%

Prob [Word = OK | ユーザー=III]= 50%

ユーザーのクラスを考えると、単語が無効である確率は補完的です。タイプライターの前にいるサルでさえ、最終的に有効な単語を入力するため、クラスIIユーザーが有効な単語を入力する確率は非常に小さいですがゼロではないことに注意してください。

モデル仕様の最後のステップはデータベースに関するものです。単語ごとに、クエリの結果は、完全一致、部分一致(のようにyyyy)、または一致なしの3つであると想定しています。確率的には、

確率[一致| 有効]=98%(すべての有効な単語が見つかるわけではありません)

確率[部分的| 有効]=0.2%(まれなイベント)

確率[一致| INvalid] = 0(データベースは不完全である可能性がありますが、無効な単語はありません)

確率[部分的| 無効]=0.1%(まれなイベント)

単語が見つからない確率は補完的であるため、設定する必要はありません。以上で、モデルが設定されました。

2.表記と目的

離散確率変数Uがあり、{1、2、3}の値と、それぞれサイズn(=単語の数)の2つの離散確率ベクトルWとFがあります。ここで、W_iは、単語が有効な場合は1、2は単語が無効な場合、F_iは、単語がデータベースで見つかった場合は1、部分一致の場合は2、見つからなかった場合は3です。

ベクトルFのみが観測可能であり、他は潜在的です。ベイズの定理とモデル仕様で設定した分布を使用して、次のように計算できます。

(a)Prob [User = I | F]、

つまり、観測されたマッチングが与えられた場合に、ユーザーがクラスIに入る事後確率。

(b)確率[W=すべて有効| F]、

つまり、観測された一致が与えられた場合に、すべての単語が有効である事後確率。

目的に応じて、スコアリングソリューションとしていずれかを使用できます。たとえば、実際のユーザーとコンピュータプログラムを区別することに関心がある場合は、(a)を使用できます。単語リストが有効であることにのみ関心がある場合は、(b)を使用する必要があります。

次のセクションで理論を簡単に説明しようとしますが、これはベイズ階層モデルのコンテキストでの通常の設定です。参照はGelman(2004)、「BayesianDataAnalysis」です。

必要に応じて、コードを使用してセクション4にジャンプできます。

3.数学

この文脈ではいつものように、表記法を少し乱用して、

Prob [X = x | Y = y]の場合はp(x | y)、Prob [X = x、Y = y]の場合はp(x、y)。

目標(a)は、u = 1の場合にp(u | f)を計算することです。ベイズの定理の使用:

p(u | f)= p(u、f)/ p(f)= p(f | u)p(u)/ p(f)。

p(u)が与えられます。p(f | u)は次から取得されます。

p(f | u)= \ prod_ {i = 1} ^ {n} \ sum_ {w_i = 1} ^ {2}(p(f_i | w_i)p(w_i | u))

p(f | u)= \ prod_ {i = 1} ^ {n} p(f_i | u)

= p(f_i = 1 | u)^(m)p(f_i = 2 | u)^(p)p(f_i = 3)^(nmp)

ここで、m =一致の数、p=部分一致の数です。

p(f)は次のように計算されます。

\ sum_ {u = 1} ^ {3} p(f | u)p(u)

これらはすべて直接計算できます。

目標(b)は次の式で与えられます

p(w | f)= p(f | w)* p(w)/ p(f)

どこ

p(f | w)= \ prod_ {i = 1} ^ {n} p(f_i | w_i)

p(f_i | w_i)はモデル仕様で指定されています。

p(f)は上で計算されたので、必要なのは

p(w)= \ sum_ {u = 1} ^ {3} p(w | u)p(u)

どこ

p(w | u)= \ prod_ {i = 1} ^ {n} p(w_i | u)

したがって、すべてが実装の準備が整います。

4.コード

コードはRスクリプトとして記述され、定数は上記で説明した内容に従って最初に設定され、出力は関数によって提供されます。

(a)p.u_f(u、n、m、p)

(b)p.wOK_f(n、m、p)

入力が与えられた場合、オプション(a)および(b)の確率を計算します。

u =目的のユーザークラス(u = 1に設定)
n=単語
の数m=一致の
数p=部分一致の数

コード自体:

### Constants:

# User:

# Prob[U=1], Prob[U=2], Prob[U=3]

Prob_user = c(0.70, 0.25, 0.05)

# Words:

# Prob[Wi=OK|U=1,2,3]

Prob_OK = c(0.99, 0.001, 0.5)

Prob_NotOK = 1 - Prob_OK

# Database:

# Prob[Fi=match|Wi=OK], Prob[Fi=match|Wi=NotOK]:

Prob_match = c(0.98, 0)

# Prob[Fi=partial|Wi=OK], Prob[Fi=partial|Wi=NotOK]:

Prob_partial = c(0.002, 0.001)

# Prob[Fi=NOmatch|Wi=OK], Prob[Fi=NOmatch|Wi=NotOK]:

Prob_NOmatch = 1 - Prob_match - Prob_partial


###### First Goal: Probability of being a user type I, given the numbers of matchings (m) and partial matchings (p).


# Prob[Fi=fi|U=u]
#
p.fi_u <- function(fi, u)
{
    unname(rbind(Prob_match, Prob_partial, Prob_NOmatch) %*% rbind(Prob_OK, Prob_NotOK))[fi,u]
}

# Prob[F=f|U=u]
#
p.f_u <- function(n, m, p, u)
{
    exp( log(p.fi_u(1, u))*m + log(p.fi_u(2, u))*p + log(p.fi_u(3, u))*(n-m-p) )
}

# Prob[F=f]
#
p.f <- function(n, m, p)
{
    p.f_u(n, m, p, 1)*Prob_user[1] + p.f_u(n, m, p, 2)*Prob_user[2] + p.f_u(n, m, p, 3)*Prob_user[3]
}

# Prob[U=u|F=f]
#
p.u_f <- function(u, n, m, p)
{
    p.f_u(n, m, p, u) * Prob_user[u] / p.f(n, m, p)
}

# Probability user type I for n=1,...,5:

for(n in 1:5) for(m in 0:n) for(p in 0:(n-m))
{
    cat("n =", n, "| m =", m, "| p =", p, "| Prob type I =", p.u_f(1, n, m, p), "\n")
}

##################################################################################################

# Second Goal: Probability all words OK given matchings/partial matchings.

p.f_wOK <- function(n, m, p)
{
    exp( log(Prob_match[1])*m + log(Prob_partial[1])*p + log(Prob_NOmatch[1])*(n-m-p) )
}

p.wOK <- function(n)
{
    sum(exp( log(Prob_OK)*n + log(Prob_user) ))
}

p.wOK_f <- function(n, m, p)
{
    p.f_wOK(n, m, p)*p.wOK(n)/p.f(n, m, p)
}

# Probability all words ok for n=1,...,5:

for(n in 1:5) for(m in 0:n) for(p in 0:(n-m))
{
    cat("n =", n, "| m =", m, "| p =", p, "| Prob all OK =", p.wOK_f(n, m, p), "\n")
}

5.結果

これは、n = 1、...、5の結果、およびmとpのすべての可能性です。たとえば、3つの単語、1つの一致、1つの部分一致、および1つが見つからない場合、クラスIユーザーであると66.5%確信できます。同じ状況で、すべての単語が有効であるとスコアを42.8%と見なすことができます。

オプション(a)は、すべての一致の場合に100%のスコアを与えるわけではありませんが、オプション(b)は100%のスコアを与えることに注意してください。データベースに無効な単語がないと仮定したため、これは予想されます。したがって、それらがすべて見つかった場合、それらはすべて有効です。OTOH、クラスIIまたはIIIのユーザーがすべての有効な単語を入力できる可能性はわずかですが、この可能性はnが増加するにつれて急速に減少します。

(a)

n = 1 | m = 0 | p = 0 | Prob type I = 0.06612505 
n = 1 | m = 0 | p = 1 | Prob type I = 0.8107086 
n = 1 | m = 1 | p = 0 | Prob type I = 0.9648451 
n = 2 | m = 0 | p = 0 | Prob type I = 0.002062543 
n = 2 | m = 0 | p = 1 | Prob type I = 0.1186027 
n = 2 | m = 0 | p = 2 | Prob type I = 0.884213 
n = 2 | m = 1 | p = 0 | Prob type I = 0.597882 
n = 2 | m = 1 | p = 1 | Prob type I = 0.9733557 
n = 2 | m = 2 | p = 0 | Prob type I = 0.982106 
n = 3 | m = 0 | p = 0 | Prob type I = 5.901733e-05 
n = 3 | m = 0 | p = 1 | Prob type I = 0.003994149 
n = 3 | m = 0 | p = 2 | Prob type I = 0.200601 
n = 3 | m = 0 | p = 3 | Prob type I = 0.9293284 
n = 3 | m = 1 | p = 0 | Prob type I = 0.07393334 
n = 3 | m = 1 | p = 1 | Prob type I = 0.665019 
n = 3 | m = 1 | p = 2 | Prob type I = 0.9798274 
n = 3 | m = 2 | p = 0 | Prob type I = 0.7500993 
n = 3 | m = 2 | p = 1 | Prob type I = 0.9864524 
n = 3 | m = 3 | p = 0 | Prob type I = 0.990882 
n = 4 | m = 0 | p = 0 | Prob type I = 1.66568e-06 
n = 4 | m = 0 | p = 1 | Prob type I = 0.0001158324 
n = 4 | m = 0 | p = 2 | Prob type I = 0.007636577 
n = 4 | m = 0 | p = 3 | Prob type I = 0.3134207 
n = 4 | m = 0 | p = 4 | Prob type I = 0.9560934 
n = 4 | m = 1 | p = 0 | Prob type I = 0.004198015 
n = 4 | m = 1 | p = 1 | Prob type I = 0.09685249 
n = 4 | m = 1 | p = 2 | Prob type I = 0.7256616 
n = 4 | m = 1 | p = 3 | Prob type I = 0.9847408 
n = 4 | m = 2 | p = 0 | Prob type I = 0.1410053 
n = 4 | m = 2 | p = 1 | Prob type I = 0.7992839 
n = 4 | m = 2 | p = 2 | Prob type I = 0.9897541 
n = 4 | m = 3 | p = 0 | Prob type I = 0.855978 
n = 4 | m = 3 | p = 1 | Prob type I = 0.9931117 
n = 4 | m = 4 | p = 0 | Prob type I = 0.9953741 
n = 5 | m = 0 | p = 0 | Prob type I = 4.671933e-08 
n = 5 | m = 0 | p = 1 | Prob type I = 3.289577e-06 
n = 5 | m = 0 | p = 2 | Prob type I = 0.0002259559 
n = 5 | m = 0 | p = 3 | Prob type I = 0.01433312 
n = 5 | m = 0 | p = 4 | Prob type I = 0.4459982 
n = 5 | m = 0 | p = 5 | Prob type I = 0.9719289 
n = 5 | m = 1 | p = 0 | Prob type I = 0.0002158996 
n = 5 | m = 1 | p = 1 | Prob type I = 0.005694145 
n = 5 | m = 1 | p = 2 | Prob type I = 0.1254661 
n = 5 | m = 1 | p = 3 | Prob type I = 0.7787294 
n = 5 | m = 1 | p = 4 | Prob type I = 0.988466 
n = 5 | m = 2 | p = 0 | Prob type I = 0.00889696 
n = 5 | m = 2 | p = 1 | Prob type I = 0.1788336 
n = 5 | m = 2 | p = 2 | Prob type I = 0.8408416 
n = 5 | m = 2 | p = 3 | Prob type I = 0.9922575 
n = 5 | m = 3 | p = 0 | Prob type I = 0.2453087 
n = 5 | m = 3 | p = 1 | Prob type I = 0.8874493 
n = 5 | m = 3 | p = 2 | Prob type I = 0.994799 
n = 5 | m = 4 | p = 0 | Prob type I = 0.9216786 
n = 5 | m = 4 | p = 1 | Prob type I = 0.9965092 
n = 5 | m = 5 | p = 0 | Prob type I = 0.9976583 

(b)

n = 1 | m = 0 | p = 0 | Prob all OK = 0.04391523 
n = 1 | m = 0 | p = 1 | Prob all OK = 0.836025 
n = 1 | m = 1 | p = 0 | Prob all OK = 1 
n = 2 | m = 0 | p = 0 | Prob all OK = 0.0008622994 
n = 2 | m = 0 | p = 1 | Prob all OK = 0.07699368 
n = 2 | m = 0 | p = 2 | Prob all OK = 0.8912977 
n = 2 | m = 1 | p = 0 | Prob all OK = 0.3900892 
n = 2 | m = 1 | p = 1 | Prob all OK = 0.9861099 
n = 2 | m = 2 | p = 0 | Prob all OK = 1 
n = 3 | m = 0 | p = 0 | Prob all OK = 1.567032e-05 
n = 3 | m = 0 | p = 1 | Prob all OK = 0.001646751 
n = 3 | m = 0 | p = 2 | Prob all OK = 0.1284228 
n = 3 | m = 0 | p = 3 | Prob all OK = 0.923812 
n = 3 | m = 1 | p = 0 | Prob all OK = 0.03063598 
n = 3 | m = 1 | p = 1 | Prob all OK = 0.4278888 
n = 3 | m = 1 | p = 2 | Prob all OK = 0.9789305 
n = 3 | m = 2 | p = 0 | Prob all OK = 0.485069 
n = 3 | m = 2 | p = 1 | Prob all OK = 0.990527 
n = 3 | m = 3 | p = 0 | Prob all OK = 1 
n = 4 | m = 0 | p = 0 | Prob all OK = 2.821188e-07 
n = 4 | m = 0 | p = 1 | Prob all OK = 3.046322e-05 
n = 4 | m = 0 | p = 2 | Prob all OK = 0.003118531 
n = 4 | m = 0 | p = 3 | Prob all OK = 0.1987396 
n = 4 | m = 0 | p = 4 | Prob all OK = 0.9413746 
n = 4 | m = 1 | p = 0 | Prob all OK = 0.001109629 
n = 4 | m = 1 | p = 1 | Prob all OK = 0.03975118 
n = 4 | m = 1 | p = 2 | Prob all OK = 0.4624648 
n = 4 | m = 1 | p = 3 | Prob all OK = 0.9744778 
n = 4 | m = 2 | p = 0 | Prob all OK = 0.05816511 
n = 4 | m = 2 | p = 1 | Prob all OK = 0.5119571 
n = 4 | m = 2 | p = 2 | Prob all OK = 0.9843855 
n = 4 | m = 3 | p = 0 | Prob all OK = 0.5510398 
n = 4 | m = 3 | p = 1 | Prob all OK = 0.9927134 
n = 4 | m = 4 | p = 0 | Prob all OK = 1 
n = 5 | m = 0 | p = 0 | Prob all OK = 5.05881e-09 
n = 5 | m = 0 | p = 1 | Prob all OK = 5.530918e-07 
n = 5 | m = 0 | p = 2 | Prob all OK = 5.899106e-05 
n = 5 | m = 0 | p = 3 | Prob all OK = 0.005810434 
n = 5 | m = 0 | p = 4 | Prob all OK = 0.2807414 
n = 5 | m = 0 | p = 5 | Prob all OK = 0.9499773 
n = 5 | m = 1 | p = 0 | Prob all OK = 3.648353e-05 
n = 5 | m = 1 | p = 1 | Prob all OK = 0.001494098 
n = 5 | m = 1 | p = 2 | Prob all OK = 0.051119 
n = 5 | m = 1 | p = 3 | Prob all OK = 0.4926606 
n = 5 | m = 1 | p = 4 | Prob all OK = 0.9710204 
n = 5 | m = 2 | p = 0 | Prob all OK = 0.002346281 
n = 5 | m = 2 | p = 1 | Prob all OK = 0.07323064 
n = 5 | m = 2 | p = 2 | Prob all OK = 0.5346423 
n = 5 | m = 2 | p = 3 | Prob all OK = 0.9796679 
n = 5 | m = 3 | p = 0 | Prob all OK = 0.1009589 
n = 5 | m = 3 | p = 1 | Prob all OK = 0.5671273 
n = 5 | m = 3 | p = 2 | Prob all OK = 0.9871377 
n = 5 | m = 4 | p = 0 | Prob all OK = 0.5919764 
n = 5 | m = 4 | p = 1 | Prob all OK = 0.9938288 
n = 5 | m = 5 | p = 0 | Prob all OK = 1 
于 2013-04-05T05:50:51.660 に答える
2

データベースに単語がないために「平均」が解決策ではない場合、私は言うでしょう:データベースを拡張する:)

別のアイデアは、例として、結果を「重み付け」して、調整された平均を軽くすることです。

100% = 1.00x weight
90%  = 0.95x weight
80%  = 0.90x weight
...
0%   = 0.50x weight

したがって、あなたの例では、次のようになります。

(100*1 + 90*0.95 + 0*0.5) / (100*1 + 100*0.95 + 100*0.5) = 0.75714285714
 => 75.7%
regular average would be 63.3%
于 2013-03-26T21:53:26.353 に答える
2

説明では語順は重要ではないため、独立変数は有効な単語の割合です。分数が完全に1である場合、つまりすべての単語がDBと完全に一致していることがわかった場合、すべて有効な結果が得られることは間違いありません。それがゼロの場合、つまりすべての単語がDBで完全に欠落している場合は、完全に無効な結果になるはずです。あなたが.5を持っているなら、他の2つはどちらも不可能なので、これはありそうもない混乱した結果であるに違いありません。

あなたは、2つの極端なことがもっとそうですが、混合された結果はありそうもないと言います。あなたはすべての有効な結果の可能性を求めています。

有効な単語の割合(一致の「確実性」の合計/単語の数)をfとし、したがって、すべての有効な結果の望ましい可能性をL(f)とします。これまでの説明では、0 <= f <= 1/2の場合はL(1)= 1およびL(f)=0であることがわかります。

混合結果がすべて有効(およびすべて無効)の結果よりも可能性が低いという情報を尊重するには、Lの形状が1/2から1に向かって単調かつ迅速に上昇し、f=1で1に到達する必要があります。

これはヒューリスティックであるため、この文字を使用して適切な関数を選択できます。賢い場合は、ステップの急勾配を制御するパラメーターと、おそらくその場所の別のパラメーターがあります。これにより、真ん中のケースで「可能性が低い」とはどういう意味かを微調整できます。

そのような関数の1つは、1/2 <= f <=1の場合です。

L(f) = 5 + f * (-24 + (36 - 16 * f) * f) + (-4 + f * (16 + f * (-20 + 8 * f))) * s

0 <=f<1/2の場合はゼロ。毛むくじゃらのように見えますが、(1 / 2,0)と(1,1)が交差し、f = 1で勾配0、f=0で勾配sと交差する最も単純な多項式です。

0 <= s <= 3に設定すると、ステップ形状を変更できます。これがs=3のショットで、おそらくあなたが望むものです。関数プロットのスクリーンショット

s> 3に設定すると、落ち着く前に1を超えてシュートしますが、私たちが望むものではありません。

もちろん、他にも無限の可能性があります。これが機能しない場合は、コメントしてください。別のものを探します。

于 2013-03-30T05:19:38.850 に答える
1

もちろん、平均化はごみです。個々の単語の確率が正確である場合、すべての単語が正しい確率は、平均ではなく、単なる積です。個々の確率の不確実性の推定値がある場合は、すべての個々の確率に対して限界に達したそれらの積を計算することができます。

于 2013-04-04T21:45:11.677 に答える