Palmkit reference --- SLMGetBOProb ---

# SLMGetBOProb

## プロトタイプ

        #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`にはクラスから単語が生成される確率が格納される．

## 参照項目

evallm， SLMReadLM