1

私はRの初心者です。これは、いくつかのバイグラムの対数尤度を最大化するラムダを見つけるためにコーディングしようとしている式です。バイグラムが見つからない場合、P_b (バイグラム) 関数は失敗しますが、P_u (ユニグラム) 関数はユニグラムの結果 (ラムダ = 0) を提供する必要があります。

見つかったバイグラムに対して機能します。それらが見つからない場合、ユニグラムの結果ではなく、numeric(0) のみを取得します。

ここに画像の説明を入力

p.mix <- function(w2, w1) {

  (1-lambda) * uni.dfrm$prob[uni.dfrm$token==w2] + lambda * p.bi(w2,w1)

}

p.bi() 関数は、インデックス付けのために複雑に見えるので、投稿するのは気が進まないのですが、バイグラムが見つかった場合は機能します。w' が w の後に出現する回数を調べ、それを w が出現する回数で割るだけですが、別の語彙のベクトルを調べなければならないので、見苦しく見えます。

w' がゼロ カウントの代わりに w の後に発生することが見つからない場合、行がまったくないため、数値 (0) の結果が明らかに発生します。それが混合モデルが解決するはずのことですが、私はそれを機能させることができません。これがどのように機能するかについてのアイデアはありますか?

4

1 に答える 1

1

たとえば、次の場合のテストを追加できますw2numeric(0)

p.mix <- function(w2, w1) {
  if(length(w2)>0){
    res <- (1-lambda) * uni.dfrm$prob[uni.dfrm$token==w2] +
                lambda * p.bi(w2,w1)
  }else res <- 0

  res
}

編集

p.mix <- function(w2, w1) {
  if(length(w2) && length(uni.dfrm$prob[uni.dfrm$token==w2]) > 0)
    (1-lambda) * uni.dfrm$prob[uni.dfrm$token==w2] + lambda * p.bi(w2,w1)
  else 0
}
于 2013-04-01T07:28:13.497 に答える