私は、オブジェクトのメタデータ文字列 (テキストの説明など) を取得し、それを 1、2、および 3 グラムに分割するタグ推奨システムに取り組んでいます。
このシステムのデータは 3 つのテーブルに保持されます。
- 「オブジェクト」テーブル (例:記述されているもの)、
- 見つかったすべての 1、2、および 3 グラムで満たされた「トークン」テーブル (以下の例)、および
- (1) と (2) の間の関連付けと、これらの発生の頻度カウントを維持する「マッピング」テーブル。
したがって、LEFT JOIN を使用して、次のようなテーブルを作成できます。
SELECT mapping.object_id, mapping.token_id, mapping.freq, token.token_size, token.token
FROM mapping LEFT JOIN
token
ON (mapping.token_id = token.id)
WHERE mapping.object_id = 1;
object_id token_id freq token_size token
+-----------+----------+------+------------+--------------
1 1 1 2 'a big'
1 2 1 1 'a'
1 3 1 1 'big'
1 4 2 3 'a big slice'
1 5 1 1 'slice'
1 6 3 2 'big slice'
ここで、単一のオブジェクト ID のコンテキスト内で各用語の相対確率を取得できるようにしたいと考えています。これにより、それらを確率でソートし、どの用語が最も可能性が高いかを確認できます (例: ORDER BY rel_prob DESC LIMIT 25
)
行ごとに、の結果を与える列を追加することを想定していますfreq/sum of all freqs for that given token_size
。たとえば、「a big」の場合、それは1/(1+3) = 0.25
. 「a」の場合、それ1/3 = 0.333
は などです。
私の人生では、これを行う方法を理解することはできません。どんな助けでも大歓迎です!