●●●株式会社殿TV 番組推薦デモシステム PORT 詳細設計
2003/10/10
株式会社 フュージョンシス

１．

画面推移
ログイン画面

お好み設定画面

メニュー画面

推薦結果表示画面

評価画面
追加キーワード設定画面
視聴ダミー画面
マイランキング検索画面
予約ダミー画面
各画面はＦｌａｓｈで作成される。
Ｆｌａｓｈによる画面作成は、●●●株式会社が行います。

1

２．

画面イメージ(1) ログイン画面
ログイン
ユーザ ID：

▽気分：

▽

時間帯：

▽
ログイン

ユーザ ID は、ユーザプロファイルに登録されているものから選ぶ。
気分は、連想ネット辞書内にあるものから選ぶ。
時間帯は、連想ネット辞書内にあるものから選ぶ。

2

(2) 推薦結果表示画面

メニュー画面

メニュー番組1

番組2

番組3

リスト表示

すぐ見る
予約する
評価する

一覧形式の推薦結果表示画面に切り替

番組名上でマウスの右ボタンクリックでメニュー表示

評価画面

予約ダミー画面

視聴ダミー画面3

(3) メニュー画面● お好み設定

お好み設定画面● おすすめ番組

推薦結果表示画面● キーワード検索

追加キーワード設定画面● マイランキング検索

マイランキング検索画面(4) お好み設定画面● ジャンル：▽● サブジャンル：▽● 特性ジャンル：▽● キーワード◎重要 ○ふつう ○参考 ○きらい

キーワードの重要度をラジオボタンで指定する◎重要 ○ふつう ○参考 ○きらい
◎重要 ○ふつう ○参考 ○きらい：
設定

推薦結果表示画面

4

(5) 追加キーワード設定画面● ジャンル：▽● サブジャンル：▽● 特性ジャンル：▽● キーワード

キーワードの重要度をラジオボタンで指定する◎重要 ○ふつう ○参考 ○きらい
◎重要 ○ふつう ○参考 ○きらい
◎重要 ○ふつう ○参考 ○きらい：

推薦結果表示画面

設定(6) マイランキング検索画面● キーワード：
検索推薦結果表示画面

5

(7) 評価画面
評価◎ 非常によい○ よい○ まあまあ○ だめ

番組に対する評価をラジオボタンで指定する

応援コメント

改善要望コメント

ＯＫキャンセル6

(8) 視聴ダミー画面
番組「xxxx」を見ると、ユーザプロファイル、及びコンテンツインデックス内のキーワードの重みが更新されます。

ＯＫキャンセル(9) 予約ダミー画面
番組「xxxx」を予約しました。推薦辞書の利用実績に予約履歴が出力されます。
ＯＫ7

３．

推薦システムの概要

推薦結果表示画面

マイランキングリスト

推薦結果リスト

マイランキング検索画面

マイランキング検索 cgi

お好み設定画面推薦 cgi
トークン情報

追加キーワード設定画面

キーワード設定 cgi

コンテンツインデックス

利用者プロファイル

評価画面

評価 cgi
推薦辞書

視聴ダミー画面視聴 cgi

予約ダミー画面

予約 cgi8

ＤＢとの連動が必要な Flash 画面は、対応する cgi を呼び出して処理を実行させる。
・ 推薦 cgi
利用者プロファイルの内容をもとにして番組を推薦し、推薦番組リストをＸＭＬファイルとして作成する。
・ キーワード設定 cgi
お好み設定画面、追加キーワード設定画面で指定した内容をパラメータとして受け取り、利用者プロファイルにセットする。
・ 評価 cgi
評価画面の指定内容をパラメータで受け取り、推薦辞書内の利用履歴にセットする。
また、利用者プロファイル内のキーワード重みを更新する。
・ 視聴 cgi
視聴した番組をパラメータとして受け取り、コンテンツインデックスと利用者プロファイル内のキーワードの重みを更新する。
・ 予約 cgi
予約した番組をパラメータとして受け取り、推薦辞書内の利用履歴にセットする。
・ マイランキング cgi指定された検索キーワードをパラメータとして受け取り、視聴済みの番組から検索する。検索結果リストは、ＸＭＬ形式で出力する。

9４．

コンテンツインデックス

コンテンツインデックスは、コンテンツ（番組）の情報を管理する。ACCESS を用いる。
初期データは●●●株式会社 デザイン研究所殿が作成します。
コンテンツインデックスは、２個のテーブルからなる。
(1) 番組マスタ
項目
番組 ID
番組名
情報源
番組説明文
推薦可能フラグ

カラム名

属性
int
VARCHAR(256)
VARCHAR(256)
VARCHAR(1024)
int
DATE
DATE

開始時刻
終了時刻

備考
番組を一意に識別する番号システムでは使用しない=1：推薦対象=0：推薦対象にしない
放映開始日時放映終了日時(2) 所属カテゴリ
項目

カラム名

番組 IDカテゴリー
サブカテゴリー
ランキング

属性
int
VARCHAR(256)
VARCHAR(256)int

備考
番組を一意に識別する番号番組のカテゴリ
番組のサブカテゴリ
このサブカテゴリ内での番組のランキング

注）番組は複数のカテゴリに属することがある。
(3) 番組キーワード
項目番組 ID
キーワード
総合重み Wi

カラム名

属性
int
VARCHAR(256)
int
10

備考
番組を一意に識別する番号
総合重み=基本重み+拡張重み基本重み WSi
拡張重み W e i
キーワード種別

int
int
int

0:標準キーワード
1:拡張キーワード

11

５．

利用者プロファイル

利用者プロファイルは、利用者属性と、キーワードを管理する。ACCESS を用いる。
利用者プロファイルは、２個のテーブルからなる。
(1)利用者マスタ
項目
カラム名
属性
利用者 ID
int
利用者名
VARCHAR(256)
アドレス
VARCHAR(256)
生年
int
性別
int
視聴者条件
int

備考
利用者を一意に識別する番号

0:男性 1:女性
連想ネット辞書でキーワードを拡張するときに使用する(2)キーワード
項目

カラム名

属性

利用者 ID
キーワード

int
VARCHAR(256)

ジャンルVARCHAR(256)サブジャンル
総合重み Wu
基本重み WS u
拡張重み Weu
キーワード種別VARCHAR(256)
int
int
int
int

キーワード重要度

int

12

備考
利用者を一意に識別する番号
このキーワードを適用するジャンル
このキーワードを適用するサブジャンル
総合重み=基本重み+拡張重み0:標準キーワード(お好み設定画面で指定したキーワード)
1:拡張キーワード
2:追加検索用キーワード(追加キー
ワード設定画面で指定したキーワード)
3:特性ジャンル
1:重要
2:普通
3:参考

-1:きらいキーワード種別=0 または 2 の場合のみ値が入る。それ以外は NULL。

６．

推薦辞書

(1) 推薦履歴表
項目

カラム名

利用者 ID
番組 ID
推薦順位
推薦日時

属性
int
int
int
DATE

備考

先頭は 1

(2) 利用実績表
項目
利用者 ID
番組 ID
利用開始日時
利用終了日時
利用種別

カラム名

属性
int
int
DATE
DATE
int

備考

今回は利用開始日時と同じ=0：最後まで視聴した=1：視聴したが途中でやめた=2：録画予約評価

int

応援コメント
改善要望コメント

VARCHAR(1024)
VARCHAR(1024)

13

今回は 1 はない
評価画面で評価した結果=10：非常によい=8：よい=5：まあまあ=1：だめ
評価画面で入力した応援コメント
評価画面で入力した改善要望コメント７．

トークン情報(1) トークンワード辞書
項目
トークンワード ID

カラム名

属性
int

備考
トークンワードを一意に識別する
番号

VARCHAR(256)int
int

トークンワード
重み
目標重み
種別
他の種別

VARCHAR(256)

意味再確認(2) トークン
項目
利用者 ID
トークンワード ID
累計重み
特性ジャンルフラグ

カラム名

属性
int
int
int
int

備考

=0：特性ジャンルにはなっていない=1：特性ジャンルになった

14

(3) 連想ネット辞書
項目
キーワード
連想キーワード
サブジャンル
時間帯
視聴者条件
気分

カラム名

属性
VARCHAR(256)
VARCHAR(256)
VARCHAR(256)
int
int
int

備考

番組のサブジャンル、利用者マスタの「視聴者条件」、ログイン時に指定した「時間帯」、「気分」が一致するレコードを使ってキーワードを拡張する。
例）次の２レコードがあり、ユーザの視聴者条件=6、時間帯=3、気分=1、処理対象番組のサブジャンル=”映画” なら、キーワード「猫」の拡張後キーワードは「犬」となる。
”猫” , “犬” , “映画” , 3 , 6 , 1”猫” , “動物” , “ニュース” , 3 , 6 , 5

15

８．

キーワード設定 cgi の処理詳細

利用者プロファイルの「キーワード」テーブルに以下のようにレコードを insert する。
(1) お好みキーワードの場合
・ 利用者 ID
ユーザの ID（cgi のパラメータ）をセット
・ キーワード
指定したキーワード（cgi のパラメータ）をセット
・ 総合重み、基本重み「重要」Æ300「ふつう」Æ200「参考」Æ100
・ 拡張重み0 をセット・ キーワード種別
0 をセット・ キーワード重要度「重要」Æ1「ふつう」Æ2「参考」Æ3「きらい」Æ-1(2) 追加キーワードの場合
・ 利用者 ID
ユーザの ID（cgi のパラメータ）をセット
・ キーワード指定したキーワード（cgi のパラメータ）をセット
・ 総合重み、基本重み200 をセット・ 拡張重み0 をセット・ キーワード種別
2 をセット・ キーワード重要度
NULL をセット16

９．

推薦 cgi の処理詳細
START
ユーザプロファイルから、キーワード重要度 = -1 のキーワードリストを作成
Æbad_kw_lst
ユーザプロファイルから、キーワード重要度 ≠ -1 のキーワードリストを作成
Ægood_kw_lst
総合重みの降順にソートしておく

cont のキーワードをコンテンツインデックスから取得
Yes

Æcon_kw_lst
Yes

番組マスタ内の、推薦可能フラグ=1の全コンテンツ cont に対して。

good_kw_lst 内の各キーワード

ランキングの昇順に

g_kw に対して

ｇ_kw のジャンル、サブジャンル

con_kw_lst と bad_kw_lst にとcont のジャンル、サブジャンル共通のキーワードがあるか？

は一致するか？
または、g_kw のキーワード種別

cont を推薦リストに出力=3（特性ジャンル）か？

ある

EXIT_CONg_kw は con_kw_lst

推薦辞書の「推薦履歴表」に出力内にあるか(部分一致)？
NEXT_CON
連想ネット辞書内にYes
推薦リスト内で、ランキングが同じ

ｇ_kw のキーワード種別 = 2

EXIT_CON

拡張キーワードあり？

最大推薦個数に到達？

で、ヒットしたキーワードも同じ番組が複数あったら、番組の放映開始日時の昇順にソート

NEXT_CON

拡張キーワード
Æe_g_kw

cont を推薦リストに出力ある

e_g_kw は con_kw_lst
END

NEXT_CON内にあるか？
e_g_kw を再拡張して同じ処理を行う

17

NEXT_CONWS u = WS u + WSi/ N S p

１０． 視聴 cgi の処理詳細

kw は 番組のキーワードに含まれるか（部分一致）

START
kw の 重要度 ≠ －１

WS u = WS u - WS u / N S p

W u = WS u + Weu
kw は 標準キーワード
該当ユーザの全キーワード kw に対して

Weu = Weu + WSi/ N e p1 + W e i/ N e p2

または

kw は 番組のキーワード

追加検索用キーワードに含まれるかkw は 拡張キーワード

Weu = Weu - Weu / N e p3

W u = WS u + Weu
ここで、N S p = 14400
N e p1 = 2N e p2 = 8
N e p3 = 3600

WSi = WSi + WS u / N S p
kw は 該当ユーザのキーワードに含まれるかkw は 標準キーワード

WSi = WSi - WSi / N S p

Wi = WSi + W e i

W e i = W e i + WS u / N e p1 + Weu / N e p2
kw は 該当ユーザの番組の全キーワード kw に対してキーワードに含まれるかkw は 拡張キーワード

W e i = W e i - W e i / N e p3

Wi = WSi + W e i①

該当ユーザの全標準キーワード kw に対して②

番組の全標準キーワード kw に対してkw を番組の拡張キーワードとして登録
WSi = 0W e i = WS u / N e p1 + Weu / N e p2
Wi = W e i

kw は 番組の拡張キーワードにはなっていない

kw を該当ユーザの拡張キーワードとして登録
WS u = 0
Weu = WSi/ N e p1 + W e i/ N e p2
W u = Weu

kw は 該当ユーザの拡張キーワードにはなっていない

１

18

１
「トークン」テーブルを以下のように更新
・累計重み = 累計重み + tw の重み「トークン」テーブルの特性ジャンルフラグ＝1

tw は番組の説明文にトークンワード辞書内の全ワード tw に対して含まれるか？（完全一致）
tw は該当ユーザで「トークン」テーブルに登録されているか？

累計重み >= tw の利用者プロファイルの 「キーワード」に

目標重み

以下のように tw を登録

推薦辞書の「利用実績表」に以下のように 利用履歴を登録

・

利用者ID = 該当ユーザのID
キーワード = tw
ジャンル、サブジャンル = NULL

・

利用者ID = 該当ユーザのID・・

番組ID = 該当番組のID・・

利用開始日、利用終了日= 現在日時

・

総合重み = 200・

利用種別 = 0・

基本重み = 200・

他のカラム = NULL・

拡張重み = 0・

キーワード種別 = 3・

キーワード重要度 = NULL

END
「トークン」テーブルに以下のようにinsert①②

元々の嗜好・意図

元々の関連キーワード・
情報特性

拡張された嗜好拡張された情報特性：キーワード

19・

利用者ID = 該当ユーザのID・

トークンワードID = tw のID

・

累計重み = tw の重み・特性ジャンルフラグ = 0

１１． 評価 cgi の処理詳細
仮想視聴回数 vn = 5START

WS u = WS u + vn * WSi/ N S p

評価は「非常によい」
kw は 番組のキーワード

仮想視聴回数 vn = 1に含まれるか（部分一致）

WS u = WS u – vn * WS u / N S p

kw の 重要度 ≠ －１

W u = WS u + Weu
kw は 標準キーワード
該当ユーザの全キーワード
kw に対して

Weu = Weu + vn * WSi/ N e p1 + vn * W e i/ N e p2

またはkw は 番組のキーワード

追加検索用キーワードに含まれるかWeu = Weu - vn * Weu / N e p3

kw は 拡張キーワード

W u = WS u + Weu
WSi = WSi + vn * WS u / N S p
kw は 該当ユーザのキーワードに含まれるか評価は「非常によい」
OR

番組の全キーワード

kw は 標準キーワード

WSi = WSi – vn * WSi / N S p

Wi = WSi + W e i

W e i = W e i + vn * WS u / N e p1 +vn * Weu / N e p2

kw は 該当ユーザのkw に対してキーワードに含まれるか「よい」

ここで、N S p = 14400
N e p1 = 2N e p2 = 8N e p3 = 3600

W e i = W e i - vn * W e i / N e p3

kw は 拡張キーワード

Wi = WSi + W e iWSi = WSi – 50 * WSi / N S p
番組の全キーワード
評価は「だめ」

kw に対してWi = WSi + W e i
kw は 標準キーワード

推薦辞書の「利用実績表」の以下の条件を満たすレコードの、評価、応援コメント、改善要望コメントをセットする。
・

利用者ＩＤ，番組ＩＤが該当する

・

利用種別が0、または 1・レコードが複数あったら、すべてのレコードに同じ内容をセット

ＥＮＤ

W e i = W e i - 50 * W e i / N e p3
kw は 拡張キーワード

Wi = WSi + W e i20１２． 予約 cgi の処理詳細
推薦実績の「利用実績表」テーブルに、以下のようにレコードを insert する。
・ 利用者 ID
ユーザの ID（cgi のパラメータ）をセット
・ 番組 ID
番組の ID（cgi のパラメータ）をセット
・ 利用開始日時、利用終了日時
現時日時をセット
・ 利用種別2 をセット・ 評価、応援コメント、改善要望コメント
NULL をセット

21

１３． マイランキング検索 cgi の処理詳細
START指定されたキーワードのリストを作成
Ækw_lst推薦辞書の「利用実績表」テーブルから、このユーザが視聴した(理容種別=0 or 1)番組リストを作成
Æcont_lst
cont_lst をキーワードの総合重みの平均の降順にソート

cont のキーワードをコンテンツインデックスから取得
Æcon_kw_lst
kw_lst 内の各キーワード
cont_lst 内の全コンテンツ
EXIT_CON

kw に対してcont を推薦リストに出力
拡張キーワード

cont に対して

kw は con_kw_lst にNEXT_CON

Æe_kw

NEXT_CONcont を推薦リストに出力ある含まれるか（部分一致）？
連想ネット辞書内にe_kw は con_kw_lst

拡張キーワードあり？

内にあるか？

NEXT_CONe_kw を再拡張してYes同じ処理を行う
EXIT_CON

最大推薦個数に到達？

END22

１４． 各 cgi の外部仕様(1) キーワード設定 cgi(a) 名称set_keywords(b) パラメータ
・ kind=0：お好み設定=1：追加キーワード
省略不可
・ user_id
利用者 ID。省略不可
・ genreジャンル名称。省略不可
・ sub_genre
サブジャンル名称。省略不可
・ sp_genre
特性ジャンル名称。省略可・ keyword_ n (n=1,2,・・・)
キーワード（n 個）。特性ジャンル名称が省略された場合は少なくとも一個は必要。特性ジャンル名称が指定されている場合は省略可。
・ weight_ n (n=1,2,・・・)
キーワードの重要度。
=0：重要
=1：普通
=2：参考
=3：きらい(c) 出力Content-type:text/plain で以下のようなテキストファイルを返す。
n
ここで、
n：リターンコード
n=0：正常終了
それ以外：エラー
23