SLMWord2ID

プロトタイプ

    #include <slm.h>

    double SLMGetBOProb(SLMNgram *ng, int len, SLMWordID *idarray, SLMBOStatus *status);

関数の解説

言語モデルを使って,N-gramの確率を計算する.ngは言語モデルへの ポインタ,lenは言語モデルの長さ(trigramの場合は3), idarrayは単語番号の配列,statusはn-gramの計算状況を 示すデータである.

SLMBOStatus型のデータは,次のように定義されている.


    typedef struct {
        unsigned char len;  /* 評価した n-gram の長さ */
        char hit[MAX_GRAM]; /* ヒット状況 */
        float ng_prob;      /* 単語の場合 P(w|w'),クラスの場合 P(c|c') */
        float ug_prob;      /* クラスの場合 P(w|c) */
   } SLMBOStatus;

lenは評価されたn-gramの長さである.SLMGetBOProb() では,与えた単語の組の長さよりも 短い言語モデルを利用することが可能であるが(例えば,長さ3のidarray をbigramモデルで評価することができる),この時には実際に計算された 長さがlenに格納される.hitはn-gramのヒット状況を 示す配列であり,この中には次の値のいずれかが格納される.
SLM_STAT_HITその長さのn-gramが存在した
SLM_STAT_BO_WITH_ALPHA その長さのn-gramが存在せず,back-offによって短いn-gramから確率を計算した
SLM_STAT_BO その長さのn-gramは利用されなかった
ng_probには,単語n-gramの場合にはその確率そのものが格納され, クラスn-gramの場合にはクラスの連鎖確率が格納される. ug_probはクラスn-gramの場合だけ意味をもつ.このとき, ug_probにはクラスから単語が生成される確率が格納される.

参照項目

evallmSLMReadLM