以下、図面を参照して、本発明の実施の形態について説明する。
図1は、本発明の一実施の形態に係る推薦システム10の構成例を示すブロック図である。この推薦システムは、例えば、映像、音声などのデータからなるアイテムをユーザに推薦するようになされている。アイテムには、例えば、放送される番組などのコンテンツ、DVDなどに記録された映画などをダビングすることで得られたコンテンツなどが含まれるものとする。
同図に示される推薦システム10は、端末21、操作ログDB22、アイテムメタDB23、嗜好抽出エンジン24、ユーザ嗜好DB25、推薦エンジン26、基軸・反転要素抽出部27、および成熟度算出エンジン28により構成されている。同図における操作ログDB22乃至成熟度算出エンジン28は、例えば、1台または複数台のコンピュータ(サーバ)などにより推薦装置として構成され、端末21とネットワークなどを介して接続される。
あるいはまた、端末21と操作ログDB22乃至成熟度算出エンジン28の機能ブロックを有する推薦装置とをそれぞれ独立した機器として設けるのではなく、推薦システム10全体を1台または複数台のコンピュータなどの機器により実現することも可能である。
この推薦システム10においては、例えば、端末21からの要求に応じて、推薦装置が推薦すべきアイテムの一覧などを端末21に送信するようになされている。推薦システム10においては、例えば、各アイテムのメタ情報などに基づいて、ユーザの嗜好に合致するアイテムが推薦される。また、後述するように、推薦システム10においては、端末21からの要求に応じて、あえてユーザに意外性を感じさせるようなアイテムを推薦することができるようになされている。
同図において、ユーザは、端末21を操作して、例えば、端末21に記憶されているコンテンツのデータを再生するなどしてアイテムを視聴する。また、ユーザは、端末21を操作して、例えば、放送される番組などを録画するなどしてアイテムを録画する。さらに、ユーザは、端末21を操作して、例えば、端末21に記憶されているコンテンツのデータを携帯端末に送信するなどしてアイテムを転送する。あるいはまた、ユーザは、端末21を操作して、例えば、端末21に記憶されているコンテンツのデータを削除するなどしてアイテムを削除する。その他、ユーザは、端末21を操作して、アイテムに関する各種の処理を行うようになされている。
このような端末21によるアイテムに関する各種の処理の操作に関する情報が、操作ログとして出力され、操作ログに基づいて生成されるレコードが操作ログDB(データベース)22に蓄積されるようになされている。図2は、操作ログDB22に記憶されるデータの例を示す図である。
図2の例において、各行に示されるデータが操作ログDB22のレコードのそれぞれに対応する。この例では、操作ログDB22のレコードのそれぞれは、「ItemId」、「MemberId」、「LogType」、および「LogTime」の4つのフィールドにより構成されている。
同図におけるフィールド「ItemId」は、操作されて処理された対象のアイテムを特定する情報であるアイテムIDの値が格納されるフィールドである。この例では、「1001」、「1003」、「1009」、・・・の各値が各レコードのフィールド「ItemId」に格納されている。
同図におけるフィールド「MemberId」は、その操作を行ったユーザを特定する情報であるユーザ(メンバー)IDの値が格納されるフィールドである。この例では、「1」、「3」、「1」、・・・の各値が各レコードのフィールド「MemberId」に格納されている。
同図におけるフィールド「LogType」は、その操作の内容を特定する情報が格納されるフィールドである。この例では、「reserve」、「detail」、「good」、・・・などの情報が各レコードのフィールド「LogType」に格納されている。なお、フィールド「LogType」に格納されている情報は、例えば、アイテムの視聴、録画などの操作内容を予め設定された方式により変換した文字列などとされる。
同図におけるフィールド「LogTime」は、その操作が行われた日時を特定する情報が格納されるフィールドである。この例では、「2007−12−05 08:39:44(西暦2007年12月5日の8時39分44秒を表す)」などの情報が各レコードのフィールド「LogTime」に格納されている。
アイテムメタDB23には、各アイテムに付されたメタ情報に関する情報が格納されている。メタ情報は、例えば、放送される番組のEPGなどに基づいて得られる情報とされ、そのアイテム(コンテンツ)のジャンル、出演者、キーワードなどの情報により構成される。
図3は、あるアイテム(コンテンツなど)に付与されたアイテムメタ情報の例を示す図である。同図に示されるように、アイテムメタ情報は、アトリビュート、バリュー、およびスコアにより構成されている。アイテムメタ情報のアトリビュートは、「ジャンル」、「人物(例えば、コンテンツの出演者など)」、「キーワード」、・・・のような属性を表す項目により構成される。アイテムメタ情報のバリューは、アトリビュートを詳細に分類するものであり、この例では、アトリビュート「ジャンル」に含まれるバリューとして、「ドラマ」、「ニュース」、「ドキュメンタリー」、・・・が記述されている。アイテムメタ情報のスコアは、バリューのそれぞれに付与されたポイント(値)とされる。この例では、バリュー「ドラマ」のスコアは「5」、バリュー「ニュース」のスコアは「0」、バリュー「ドキュメンタリー」のスコアは「1」、・・・とされている。
図3の例におけるアイテムメタ情報に対応するアイテムは、例えば、そのジャンルがドラマに近いものであるが、ドキュメンタリーの要素も含むものであることが分かる。
また、図3の例では、アトリビュート「人物」に含まれるバリューとして、「ABC」、「DEF」、「GHI」、・・・が記述されている。この例では、バリュー「ABC」のスコアは「1」、バリュー「DEF」のスコアは「1」、バリュー「GHI」のスコアは「1」、・・・とされている。
図3の例におけるアイテムメタ情報に対応するアイテムは、例えば、そのコンテンツの出演者に「ABC」、「DEF」、「GHI」(いずれも架空の人物名)が含まれているものであることが分かる。
また、図3の例では、アトリビュート「キーワード」に含まれるバリューとして、「グルメ」、「旅行」、「音楽」、・・・が記述されている。この例では、バリュー「グルメ」のスコアは「3」、バリュー「旅行」のスコアは「5」、バリュー「音楽」のスコアは「1」、・・・とされている。アトリビュート「キーワード」のバリューは、例えば、そのアイテム(例えば、放送される番組など)を紹介するメッセージ(例えば、EPGの番組説明)に含まれる単語などであって、予め定められた単語とされる。例えば、EPGの番組説明の文章の中から「グルメ」、「旅行」、「音楽」、・・・など予め定められた単語が検出され、その単語の検出回数に対応してスコアが設定される。
図3の例におけるアイテムメタ情報に対応するアイテムは、例えば、「グルメ」、「旅行」、「音楽」に関連する内容のコンテンツであり、特に「旅行」について深い関連性のある内容であることが分かる。
アイテムメタDB23には、各アイテムのアイテムメタ情報を、バリュー単位に分割して得られるレコードが記憶される。図4は、アイテムメタDB23に記憶されるデータの例を示す図である。
図4の例において、各行に示されるデータがアイテムメタDB23のレコードのそれぞれに対応する。この例では、アイテムメタDB23のレコードのそれぞれは、「ItemId」、「AttributeId」、「ValueId」、「No/Times」および「Score」の4つのフィールドにより構成されている。
同図におけるフィールド「ItemId」は、当該レコードのアイテムを特定する情報であるアイテムIDの値が格納されるフィールドである。この例では、「2000114789142」、「200019580489」、「100024316163」、・・・の各値が各レコードのフィールド「ItemId」に格納されている。
同図におけるフィールド「AttributeId」は、当該レコードのアトリビュートを特定する情報であるアトリビュートIDの値が格納されるフィールドである。この例では、値「1」が各レコードのフィールド「AttributeId」に格納されている。例えば、「AttributeId」が「1」である場合、アトリビュート「ジャンル」に対応し、「AttributeId」が「2」である場合、アトリビュート「人物」に対応し、・・・のようにフィールド「AttributeId」の値により当該レコードのアトリビュートが特定される。なお、この例では、「AttributeId」の値が、全てレコードにおいて「1」とされているが、実際のアイテムメタDB23には、当然、「AttributeId」の値が「2」、「3」、・・・のレコードも存在する。
同図におけるフィールド「ValueId」は、当該レコードのバリューを特定する情報であるバリューIDの値が格納されるフィールドである。この例では、値「153144」が各レコードのフィールド「ValueId」に格納されている。例えば、「ValueId」が「153144」である場合、バリュー「ドラマ」に対応し、「ValueId」が「153145」である場合、バリュー「ニュース」に対応し、・・・のようにフィールド「ValueId」の値により当該レコードのバリューが特定される。なお、この例では、「ValueId」の値が、全てレコードにおいて「153144」とされているが、実際のアイテムメタDB23には、当然、「ValueId」の値が「153145」、「153146」、・・・のレコードも存在する。
同図におけるフィールド「No/Times」は、当該レコードが更新された回数を特定する数値を格納するフィールドである。なお、フィールド「No/Times」は、設けられないようにしてもよい。
同図におけるフィールド「Score」は、当該レコードのバリューのスコアを特定する値が格納されるフィールドである。すなわち、フィールド「Score」には、図3のスコアに対応する値が格納される。例えば、同図の第1番目のレコードは、アイテムIDが「2000114789142」のアイテムのアイテムメタ情報のバリュー「ドラマ」(「ValueId」が「153144」のバリュー)のスコアが記述されたレコードとなる。
このように、アイテムメタDB23が構成されている。アイテムメタDB23は、例えば、端末21の操作の対象となり得る各アイテムに対応するコンテンツのメタデータを事前に取得するなどして予め生成されているものとする。
図1に戻って、嗜好抽出エンジン24は、操作ログDB22のレコードと、アイテムメタDB23のレコードとに基づいてユーザ嗜好DB25にデータを記憶させるようになされている。
嗜好抽出エンジン24は、操作ログDB22のレコードに基づいて、ユーザが端末21を操作して処理を行ったアイテムのアイテムIDを特定し、また、その操作の内容を特定する。そして、嗜好抽出エンジン24は、特定されたアイテムIDに基づいて、アイテムメタDB23のレコードを検索し、特定されたアイテムIDのアイテムのアイテムメタ情報のアトリビュート、バリュー、スコアを特定する。
嗜好抽出エンジン24は、さらに、特定されたアトリビュート、バリュー、スコアを当該ユーザのメンバーIDと対応付けたレコードを生成する。このとき、嗜好抽出エンジン24は、スコアの値に操作の内容に応じて予め設定された係数を乗じるようになされている。例えば、操作ログDB22のレコードに基づいて、特定された操作の内容がアイテムの録画であった場合、アイテムメタDB23のレコードに基づいて、特定されたスコアの値に係数3が乗じられる。また、例えば、操作ログDB22のレコードに基づいて、特定された操作の内容がアイテムの視聴であった場合、アイテムメタDB23のレコードに基づいて、特定されたスコアの値に係数2が乗じられる。
そして、上述したように生成されたレコードがユーザ嗜好DB25のレコードとなる。図5は、ユーザ嗜好DB25の例を示す図である。
図5の例において、各行に示されるデータがユーザ嗜好DB25のレコードのそれぞれに対応する。この例では、ユーザ嗜好DB25のレコードのそれぞれは、「MemberId」、「AttributeId」、「ValueId」、および「Score」の4つのフィールドにより構成されている。
同図におけるフィールド「MemberId」は、図2の操作ログDB22の説明において上述したユーザを特定する情報である。また、同図におけるフィールド「AttributeId」、フィールド「ValueId」、フィールド「Score」は、それぞれ図4のアイテムメタDB23の説明において上述したアトリビュート、バリュー、スコアを特定する情報である。
図5の例では、ユーザ嗜好DB25は、バリュー単位に生成されている。すなわち、1人のユーザが行なった1回の操作に対応して複数のレコードが生成される。それらのレコードは、操作の対象となったアイテムのアイテムメタ情報のバリューの数だけ生成されることになる。
また、ユーザ嗜好DB25には、各ユーザが行なった操作に対応して、都度レコードが生成されて記憶される。すなわち、上述したような、操作の対象となったアイテムのアイテムメタ情報のバリューの数と同数のレコードが、1回の操作に対応して生成されることになる。
図1に戻って、推薦エンジン26は、ユーザ嗜好DB25のレコードに基づいてユーザ嗜好情報を生成する。また、推薦エンジン26は、アイテムメタDB23のレコードに基づいてアイテム嗜好情報を生成する。ここで、ユーザ嗜好情報およびアイテム嗜好情報は、それぞれアトリビュートの数と同数の要素を有するベクトルとされる。例えば、アイテムメタ情報のアトリビュートの数の合計が100であった場合、ユーザ嗜好情報およびアイテム嗜好情報は、それぞれ100次元(要素数が100)のベクトルとされる。
ユーザ嗜好情報における各要素の値は、例えば、次のようにして求められる。推薦エンジン26は、図5のユーザ嗜好DB25のレコードをチェックして、当該ユーザのメンバーIDに対応付けられたレコードを全て取得する。推薦エンジン26は、それらのレコードを、フィールド「AttributeId」の値によりソートし、フィールド「AttributeId」の値が同じレコードが複数あった場合、それらのレコードのフィールド「Score」の値を合計する。例えば、ユーザ嗜好情報のベクトルにおいて、アトリビュート「ジャンル」(「AttributeId」が「1」)に対応する要素の値は、バリュー「ドラマ」、「ニュース」、「ドキュメンタリー」、・・・のスコアの合計値とされる。このように、ユーザ嗜好情報は、各アトリビュートのスコアの合計値が各要素の値とされたベクトルとして生成される。
アイテム嗜好情報における各要素の値もユーザ嗜好情報の場合と同様にして求められる。アイテム嗜好情報を生成する場合、推薦エンジン26は、図4のアイテムメタDB23のレコードに基づいてベクトルの各要素の値を算出することになる。なお、1つのアイテムIDに対応して1つのアイテム嗜好情報のベクトルが生成されることになる。
基軸・反転要素抽出部27は、ユーザ嗜好情報のベクトル、またはアイテム嗜好情報のベクトルから基軸要素と反転要素を抽出する。ここで、基軸要素は、ユーザの嗜好を強く反映させるための要素とされ、反転要素は、ユーザにとっての意外性を強く反映させるための要素とされる。基軸・反転要素抽出部27は、例えば、次のようにして基軸要素と反転要素を抽出する。
基軸・反転要素抽出部27は、ユーザ嗜好情報のベクトルの要素毎に、後述する式(1)の重みwaを乗じて得られる値について占有率を算出する。説明を簡単にするために、例えば、ユーザ嗜好情報が3次元のベクトルであるものと仮定し、あるユーザのユーザ嗜好情報がベクトル(1,2,3)であったとする。なお、このときのベクトル(1,2,3)は、ユーザ嗜好情報のそれぞれの要素の本来の値に、後述する式(1)の重みwaが乗じられた値とされる。後で説明するが、重みwaは、ベクトルの各要素に対応して予め設定された係数とされるので、いまの場合w1乃至w3の3種類の重みが予め設定されていることになる。すなわち、本来のユーザ嗜好情報がベクトル(x,y,z)であったとすると、x×w1=1,y×w2=2,z×w3=3の関係を満たすことになる。
この場合、第1番目の要素の占有率は、次式により演算される。
1/(1+2+3)=0.1666≒17%
第2番目の要素の占有率は、次式により演算される。
2/(1+2+3)=0.3333≒33%
第3番目の要素の占有率は、次式により演算される。
3/(1+2+3)=0.5000=50%
基軸・反転要素抽出部27は、このようにして演算された占有率に基づいて基軸要素と反転要素を抽出する。例えば、ユーザ嗜好情報のベクトルの要素の中で占有率が最も高い要素は、基軸要素とされ、占有率が次に高い要素は、反転要素とされる。なお、ここからの説明では、ユーザ嗜好情報のベクトルは、N次元のベクトルとして説明する。
そして、基軸・反転要素抽出部27は、最初に基軸要素として抽出された要素の占有率との合計値が予め設定された値(例えば、50%)に達するまで、占有率が第3番目に高い要素、占有率が第4番目に高い要素、・・・を抽出し、それらの要素を基軸要素とする。
なお、ここで設定される値(例えば、50%)は、後述する成熟度算出エンジン28により算出される成熟度に対応して定まるものである。
例えば、占有率が第5番目に高い要素が抽出された時点で、基軸要素として抽出された要素の占有率の合計値が予め設定された値に達したものとする。その後、基軸・反転要素抽出部27は、占有率が第6番目に高い要素、占有率が第7番目に高い要素、・・・占有率が第N番目に高い要素を抽出する。そしてそれらの要素が、最初に反転要素として抽出された要素とともに反転要素とされる。このようにして、ユーザ嗜好情報のベクトルから基軸要素と反転要素が抽出される。
なお、上記において説明した基軸要素と反転要素の抽出方式は、1つの例であり、他の方式により基軸要素と反転要素が抽出されるようにしても構わない。
基軸・反転要素抽出部27は、基軸要素として抽出された要素のそれぞれに対応する「AttributeId」の値を基軸要素IDとして推薦エンジン26に通知する。また、基軸・反転要素抽出部27は、反転要素として抽出された要素のそれぞれに対応する「AttributeId」の値を反転要素IDとして推薦エンジン26に通知する。
推薦エンジン26は、基軸要素IDに基づいてユーザ嗜好情報のベクトルの中の基軸要素を特定し、また、アイテム嗜好情報のベクトルの中の基軸要素を特定する。そして、推薦エンジン26は、ユーザ嗜好情報のベクトルおよびアイテム嗜好情報のベクトルからそれぞれ基軸要素を抽出する。これにより、ユーザ嗜好情報の基軸ベクトルおよびアイテム嗜好情報の基軸ベクトルが生成される。
推薦エンジン26は、反転要素IDに基づいてユーザ嗜好情報のベクトルの中の反転要素を特定し、また、アイテム嗜好情報のベクトルの中の反転要素を特定する。そして、推薦エンジン26は、ユーザ嗜好情報のベクトルおよびアイテム嗜好情報のベクトルからそれぞれ反転要素を抽出する。これにより、ユーザ嗜好情報の反転ベクトルおよびアイテム嗜好情報の反転ベクトルが生成される。
推薦エンジン26は、例えば、アイテムの推薦を要求されたユーザのユーザ嗜好情報の基軸ベクトルと、アイテムメタDB23のレコードから生成された各アイテムのアイテム嗜好情報の基軸ベクトルとのマッチング処理を行う。マッチング処理は、例えば、ベクトルの内積を算出する方式、コサイン尺度を算出する方式、ユークリッド距離を算出する方式などにより行なわれる。
例えば、マッチング処理としてベクトルの内積を算出する方式が用いられる場合、マッチング処理の結果として得られるベクトルXとベクトルYの類似度sim(X,Y)は、式(1)により演算される。
ここで、Aは、例えば、基軸ベクトルの要素の集合とされ、aは、集合Aに含まれる1つの要素とされる。また、XaとYaは、それぞれベクトルXとベクトルYにおける要素aの値を表している。waは、上述したように、要素aに乗じられる係数であり、重みとも称される。なお、この重みwaは、例えば、要素毎に予め決められた値が用いられるようにしてもよいし、各ユーザに対応して予め設定されるものとしてもよい。
重みwaは、ベクトルの要素のそれぞれに対して個々に乗じられる係数であるから、実際には、ユーザ嗜好情報(またはアイテム嗜好情報)の各要素に対応した係数がそれぞれ存在する。従って、例えば、ユーザ嗜好情報がN個の要素を有するベクトルであった場合、重みwaはN次元ベクトルとして表現することもできる。
つまり、例えば、ユーザ嗜好情報(またはアイテム嗜好情報)の各要素が100個あった場合、それらの要素は、それぞれ第1番目のアトリビュート乃至第100番目のアトリビュートに対応する。この場合、重みwaは、第1番目のアトリビュート乃至第100番目のアトリビュートに対応した係数の集合となる。例えば、第n番目のアトリビュートに対応する係数をwnで表すと、重みwaを100個の要素からなるベクトルとして次のように表現することも可能である。
(w1,w2,w3,・・・w100)
上述した基軸ベクトル同士のマッチングにおいては、例えば、要素aが第5番目の要素である場合、式(1)のwaに、(w1,w2,w3,・・・w100)のうちのw5が代入されて類似度が演算されるのである。
推薦エンジン26は、例えば、式(1)の演算により、ユーザのユーザ嗜好情報の基軸ベクトルと、各アイテムのアイテム嗜好情報の基軸ベクトルとの類似度をそれぞれ算出する。そして、算出された類似度を基軸類似度として、それぞれ各アイテム(例えば、アイテムID)に対応付けて記憶するようになされている。
ここで、算出される基軸類似度は、その値が高いほど、ユーザの嗜好に合致したアイテムであることを表すものとなる。
推薦エンジン26は、例えば、上述した基軸類似度の高いアイテムを予め定められた数だけ抽出し、それらのアイテムを候補アイテムとする。そして、推薦エンジン26は、候補アイテムのそれぞれについて、次のように反転類似度を算出する。
推薦エンジン26は、例えば、式(1)の演算により、ユーザのユーザ嗜好情報の反転ベクトルと、候補アイテムのアイテム嗜好情報の反転ベクトルとの類似度をそれぞれ算出する。そして、算出された類似度を反転類似度として、それぞれ各アイテムに対応付けて記憶するようになされている。
ここで、算出される反転類似度は、やはりその値が高いほど、ユーザの嗜好に合致する可能性が高いアイテムであることを表すものとなる。
そして、推薦エンジン26は、上述した基軸類似度、および反転類似度に基づいて、各アイテムのそれぞれについて、意外性推薦評価値を算出する。ここで、意外性推薦評価値は、例えば、そのアイテムを推薦することにより、ユーザが肯定的な意外性を感じる可能性の高さを評価する値とされる。
例えば、アイテムAの意外性推薦評価値igaiDegree(A)は、アイテムAの反転類似度Hanten(A)により、次式のように演算される。
igaiDegree(A)=1−Hanten(A)
すなわち、アイテムAの反転類似度の値が小さいほど、アイテムAの意外性推薦評価値の値が大きくなるのである。
あるいはまた、アイテムAの基軸類似度Base(A)を用いて、アイテムAの意外性推薦評価値igaiDegree(A)は、次式により演算されるようにしてもよい。
igaiDegree(A)=αBase(A)−βHanten(A)
なお、上記の式におけるαとβは、それぞれ予め定められた係数とする。
推薦エンジン26は、例えば、このようにして算出された意外性推薦評価値の高い(大きい)ものから順に所定の数のアイテムを推薦するようになされている。例えば、推薦エンジン26は、意外性推薦評価値の高いものから順に所定の数のアイテムを特定し、それらのアイテムの一覧などとして構成される推薦リストを生成する。そして、推薦エンジン26は、推薦リストを端末21に送信する。
このように、本発明においては、最初に基軸類似度に基づいて候補アイテムを絞り込み、その後、反転類似度を用いた意外性推薦評価値が演算されて推薦すべきアイテムが特定される。
図1の成熟度算出エンジン28は、ユーザ嗜好情報の成熟度を算出するようになされている。例えば、成熟度は、次のようにして算出される。成熟度算出エンジン28は、ユーザ嗜好DB25に記憶されている当該ユーザのレコードを、最も新しいものから順に予め設定された数だけ抽出する。例えば、当該ユーザによる端末21の直近の3回の操作に対応して生成されたレコードが抽出される。
そして、成熟度算出エンジン28は、抽出されたレコードのフィールド「ValueId」の値をチェックし、フィールド「ValueId」の値が何種類あったかを表す値xvnを記憶する。例えば、当該ユーザのレコードが、最も新しいものから順に3個抽出されたものとする。例えば、それら3個のレコードのフィールド「ValueId」の値がそれぞれ、「11」、「22」、「33」であった場合、xvn=3となる。また、例えば、それら3個のレコードのフィールド「ValueId」の値がそれぞれ、「11」、「22」、「11」であった場合、xvn=2となる。
成熟度算出エンジン28は、ユーザ嗜好DB25に存在し得る「ValueId」の値の種類の合計を表す値yvnを求め、次式により成熟度Mを算出する。
M=1−(xvn/yvn)
なお、xvnの値は、当該ユーザによる当該ユーザによる端末21の操作1回あたりの、レコードのフィールド「ValueId」の値の種類の数の平均値とされるようにしてもよい。
すなわち、成熟度算出エンジン28は、ユーザ嗜好情報全体の中で直近の操作により更新される度合いに基づいて成熟度Mを算出するのである。
ユーザ嗜好情報全体の中で直近の操作により更新される度合いが大きいほど、すなわち、上記の(xvn/yvn)が大きいほど、当該ユーザの嗜好が大きく変化していると考えることができる。このように、直近の操作によって、当該ユーザの嗜好が大きく変化している場合、当該ユーザのユーザ嗜好情報は、未だ成熟していないと推定される。このようなユーザ嗜好情報は、今後の操作により、再度大きく変化する可能性が高いからである。
一方、直近の操作によって、当該ユーザの嗜好が大きく変化してない場合、当該ユーザのユーザ嗜好情報は、成熟していると推定される。このようなユーザ嗜好情報は、今後の操作により、大きく変化する可能性は低いからである。
なお、例えば、ユーザ嗜好DB25において当該ユーザのメンバーIDのレコードが最初に生成されてから、所定の期間が経過するまでは、当該ユーザのユーザ嗜好情報は未成熟であるとして成熟度Mの値が一律に0とされるようにしてもよい。また、例えば、当該ユーザによる操作の回数が予め設定された閾値未満であるなどの場合も、同様に当該ユーザのユーザ嗜好情報は未成熟であるとして成熟度Mの値が一律に0とされるようにしてもよい。
なお、上述した成熟度Mの算出方式は、あくまで例であり、成熟度は、他の方式で算出されるようにしてもよい。
上述したように、成熟度算出エンジン28により算出された成熟度Mの値に基づいて、基軸・反転要素抽出部27による基軸要素の抽出における、最初に基軸要素として抽出された要素の占有率との合計値の設定がなされることになる。なお、上述したように、占有率の算出にあたっては、本来のユーザ嗜好情報の要素の値に、それぞれ重みwaが乗じられて算出される。
例えば、成熟度が0%乃至40%までの範囲である場合、ユーザ嗜好情報が未成熟であるとされ、それぞれの基軸要素の占有率の合計が80%と設定される。未成熟なユーザ嗜好情報から抽出された反転要素は信頼性が低いと考えられるからである。
また、例えば、成熟度が41%乃至70%までの範囲である場合、ユーザ嗜好情報がやや成熟しているとされ、それぞれの基軸要素の占有率の合計が65%と設定される。
さらに、例えば、成熟度が71%乃至100%までの範囲である場合、ユーザ嗜好情報が成熟しているとされ、それぞれの基軸要素の占有率の合計が50%と設定される。成熟したユーザ嗜好情報から抽出された反転要素は信頼性が高いと考えられるからである。
このように、上述した基軸ベクトルと反転ベクトルは、ユーザ嗜好情報の成熟度に基づいてその要素が確定される。
このように、本発明においては、ユーザ嗜好情報の成熟度に基づいてその要素が確定される基軸ベクトルと反転ベクトルを用いた類似度の算出が行なわれる。そして、最初に基軸類似度に基づいて候補アイテムを絞り込み、その後、反転類似度を用いた意外性推薦評価値が演算されて推薦すべきアイテムが特定される。このようにすることで、ユーザに、肯定的な意外性を感じるアイテムを推薦することが可能となる。
ユーザに意外性を感じさせるためには、ユーザに分かりやすいつながりを持ちつつ、普段見ているアイテムとはどこか異なるコンテンツを提示することが重要であると考えられる。すなわち、全くユーザの嗜好と合致しないコンテンツが推薦されたとすれば、やはりユーザは満足しないものと考えられる。
例えば、従来の技術では、各属性の重みを変えることによって、マッチング結果へのその属性の寄与度を高くしようとするものもあるが、これでは、必ずしもユーザに分かりやすいつながりのあるコンテンツが推薦されるとは限らない。
単純に各属性の重みを変える方式では、例えば、ユーザ嗜好情報の中の特定の属性の重みを高く設定したとしても、コンテンツのメタデータに含まれる属性の値が小さいと、そのコンテンツが推薦される可能性は低くなってしまう。一方で、ユーザ嗜好情報の中の特定の属性の重みを低く設定したとしても、コンテンツのメタデータに含まれる属性の値が大きいと、そのコンテンツが推薦される可能性は高くなってしまう。
このように従来の方式では、例えば、普段見ているコンテンツのジャンルと異なるジャンルのコンテンツを推薦することができ、ユーザに意外性を感じさせることはできるものの、その意外性が必ずしも肯定的な意外性と感じられるかどうかは分からない。
本発明においては、最初に基軸類似度に基づいて候補アイテムを絞り込み、その後、反転類似度を用いた意外性推薦評価値が演算されて推薦すべきアイテムが特定されるようになされている。
そもそも、基軸類似度、反転類似度ともにユーザ嗜好情報とアイテム嗜好情報との類似度合いを表すものであり、基軸類似度も、反転類似度も値が大きいほどユーザの嗜好に合致している可能性は高くなる。また、一方で基軸類似度も、反転類似度も値が小さいほどユーザの嗜好に合致していない可能性は高くなる。
例えば、類似度の低いアイテムを推薦するようにすれば、確実にユーザに意外性を感じさせることはできる。しかしながら、このような推薦では、ユーザの嗜好に逆行するアイテムを選択して推薦することになってしまうので、ユーザに肯定的な意外性を感じさせることはできない。
そこで、本発明は、ユーザ嗜好情報のベクトルを基軸ベクトルと反転ベクトルの2つに分割したのである。そして、基軸ベクトルに基づく類似度(基軸類似度)の高いアイテムを絞り込んで、さらに、反転ベクトルに基づく類似度(反転類似度)の低いアイテムが選択されるようにしたのである。これにより、本発明では、確実に肯定的な意外性を感じさせるアイテムを推薦することができるのである。
次に、図6のフローチャートを参照して、図1の推薦システム10による推薦リスト生成処理について説明する。この処理は、例えば、端末21により、あえてユーザに意外性を感じさせるようなアイテムの推薦が要求されたとき実行される。
ステップS11において、成熟度算出エンジン28は、成熟度を算出する。
ステップS12において、基軸・反転要素抽出部27は、ステップS11で算出された成熟度に基づいて、基軸要素と反転要素の割合を設定する。このとき上述したように、例えば、成熟度の値が所定の閾値と比較され、ユーザ嗜好情報の成熟の度合い(例えば、未成熟、やや成熟、成熟)が判定される。そして、その成熟の度合いに応じた基軸要素と反転要素の割合が設定される。例えば、それぞれの基軸要素の占有率の合計が80%、65%、50%などのように設定される。
ステップS13において、基軸・反転要素抽出部27と推薦エンジン26は、図7を参照して後述するマッチング処理を実行する。これにより、ユーザ嗜好情報とアイテム嗜好情報の基軸ベクトル、反転ベクトルのマッチングがなされ、各アイテムのそれぞれについて基軸類似度と反転類似度が算出されて記憶される。また、ステップS13の処理により、推薦すべきアイテムの候補となる候補アイテムの特定もなされることになる。
ステップS14において、推薦エンジン26は、ステップS13の処理の中で特定された候補アイテムのそれぞれについて意外性推薦評価値を算出する。このとき、例えば、上述したように、アイテムAの意外性推薦評価値igaiDegree(A)は、アイテムAの反転類似度Hanten(A)により、次式のように演算される。
igaiDegree(A)=1−Hanten(A)
あるいはまた、アイテムAの基軸類似度Base(A)を用いて、アイテムAの意外性推薦評価値igaiDegree(A)は、次式により演算されるようにしてもよい。
igaiDegree(A)=αBase(A)−βHanten(A)
ステップS15において、推薦エンジン26は、推薦すべきアイテムを特定する。このとき、例えば、候補アイテムのうち、意外性推薦評価値の高いアイテムが予め設定された数だけ特定される。
ステップS16において、推薦エンジン26は、ステップS15において推薦すべきアイテムとして特定されたアイテムの一覧などとして構成される推薦リストのデータを生成する。ここで生成された推薦リストのデータは端末21に送信され、例えば、推薦リストが端末21のディスプレイに表示されるなどして、ユーザにアイテムが推薦されることになる。
このようにして、推薦リスト生成処理が実行される。このようにすることで、ユーザに、確実に肯定的な意外性を感じさせるアイテムを推薦することができる。
次に、図7のフローチャートを参照して、図6のステップS13のマッチング処理の詳細な例について説明する。
ステップS31において、基軸・反転要素抽出部27は、ユーザ嗜好情報から基軸要素を抽出する。
このとき、上述したように、基軸・反転要素抽出部27は、ユーザ嗜好情報のベクトルの要素毎に、式(1)の重みwaを乗じて得られる値について占有率を算出する。例えば、ユーザ嗜好情報のベクトルの要素の中で占有率が最も高い要素は、基軸要素とされ、占有率が次に高い要素は、基軸要素とされない。そして、最初に基軸要素として抽出された要素の占有率との合計値がステップS12の処理で設定された値に達するまで、占有率が第3番目に高い要素、占有率が第4番目に高い要素、・・・が抽出され、それらの要素を基軸要素とされる。そして、基軸要素として抽出された要素のそれぞれに対応する「AttributeId」の値に基づいてユーザ嗜好情報から基軸要素が抽出される。
ステップS32において、基軸・反転要素抽出部27は、アイテム嗜好情報から基軸要素を抽出する。このとき、ステップS31の処理で抽出された基軸要素に対応する要素がアイテム嗜好情報から抽出される。
ステップS33において、推薦エンジン26は、ステップS31の処理で抽出された基軸要素からなる、ユーザ嗜好情報の基軸ベクトルと、ステップS32の処理で抽出された基軸要素からなる、アイテム嗜好情報の基軸ベクトルとの類似度を算出する。類似度は、例えば、上述した式(1)により算出される。このとき、例えば、推薦の対象となるアイテムの数だけ類似度が算出され、それらの類似度は各アイテムのそれぞれに対応する基軸類似度とされる。
ステップS34において、推薦エンジン26は、ステップS33の処理により算出された類似度の高い順に予め定められた数のアイテムを、候補アイテムとして特定する。
ステップS35において、推薦エンジン26は、ステップS34の処理で特定された候補アイテムのそれぞれに対応付けて、ステップS33の処理で算出された基軸類似度を記憶する。
ステップS36において、基軸・反転要素抽出部27は、ユーザ嗜好情報から反転要素を抽出する。このとき、例えば、ステップS31の処理で基軸要素として抽出されなかった要素が反転要素として抽出される。
ステップS37において、基軸・反転要素抽出部27は、アイテム嗜好情報から反転要素を抽出する。このとき、ステップS36の処理で抽出された反転要素に対応する要素がアイテム嗜好情報から抽出される。
ステップS38において、推薦エンジン26は、ステップS36の処理で抽出された反転要素からなる、ユーザ嗜好情報の反転ベクトルと、ステップS37の処理で抽出された反転要素からなる、アイテム嗜好情報の反転ベクトルとの類似度を算出する。類似度は、例えば、上述した式(1)により算出される。このとき、例えば、推薦の対象となるアイテムの数だけ類似度が算出され、それらの類似度は各アイテムのそれぞれに対応する反転類似度とされる。
ステップS39において、推薦エンジン26は、ステップS34の処理で特定された候補アイテムのそれぞれに対応付けて、ステップS38の処理で算出された反転類似度を記憶する。
このようにして、マッチング処理が行われる。
なお、以上においては、推薦システム10において、主に、あえてユーザに意外性を感じさせるようなアイテムの推薦を行なう場合の例について説明したが、勿論、意外性を感じさせないようなアイテムの推薦を行なうことも可能である。推薦システム10において、意外性を感じさせないようなアイテムの推薦を行なう場合、例えば、推薦エンジン26が、ユーザ嗜好情報とアイテム嗜好情報とをそのままマッチングして、類似度を算出する。そして、算出された類似度の高いアイテムが推薦される。
ところで、以上においては、式(1)の重みwaは、例えば、要素毎に予め決められた値が用いられるようにしてもよいし、各ユーザに対応して予め設定されるものとしてもよいとして説明した。
従来、ユーザ嗜好情報とアイテム嗜好情報との類似度を算出する場合、重みは個人によらない共通の固定値が用いられている。しかし、実際にはユーザごとに重要視する属性は異なり、共通の固定値ではこの個人差を補えないため、共通の固定値である重みを用いて類似度を算出してアイテムを推薦しても、真にユーザの嗜好に合致したアイテムを推薦できないことがある。
また、例えば、予めユーザに自分が重要視する属性(アトリビュート)などを入力させ、その入力結果に応じて個人別に重みを調整する方式もが考えられる。この方式であれば、上述した個人差を補うことも可能である。
しかし、ユーザの嗜好は、極めて抽象的な概念であって本人であっても表現することは難しく、必ずしも自分が重要視する属性(アトリビュート)が簡単に見つかるとは限らない。
さらに、ユーザの嗜好は、時間とともに変化することもある。例えば、放送される番組やDVDのコンテンツなどを数多く視聴した結果、自分が最初に重要視すると考えていた属性よりも、さらに重要視すべき属性が見つかることもある。
そこで、本発明においては、個々のユーザにとって最適な重みを自動的に調整できるようにする。
図8は、個々のユーザにとって最適な重みを自動的に調整できるようにした推薦システム100の構成例を示すブロック図である。
同図に示される推薦システム100は、端末121、操作ログDB122、アイテムメタDB123、ユーザ嗜好DB125、推薦エンジン126、属性重み調整エンジン129、属性重みDB131、および属性重み調整DB132により構成されている。同図における操作ログDB122乃至属性重み調整DB132は、例えば、1台または複数台のサーバなどにより推薦装置として構成され、端末121とネットワークなどを介して接続される。
あるいはまた、端末121と操作ログDB122乃至属性重み調整DB132の機能ブロックを有する推薦装置とをそれぞれ独立した機器として設けるのではなく、推薦システム100全体を1台または複数台のコンピュータなどの機器により実現することも可能である。
図8の端末121、操作ログDB122、アイテムメタDB123、およびユーザ嗜好DB125は、図1の端末21、操作ログDB22、アイテムメタDB23、およびユーザ嗜好DB25と同様のものであるので、詳細な説明は省略する。操作ログDB122は、図2を参照して上述した場合と同様のレコードにより構成されている。アイテムメタDB123は、図4を参照して上述した場合と同様のレコードにより構成されている。ユーザ嗜好DB125は、図5を参照して上述した場合と同様のレコードにより構成されている。なお、同図には、図1の嗜好抽出エンジン24に対応する機能ブロックが記載されていないが、図1を参照して上述した場合と同様に、ユーザ嗜好DB125のレコードが生成されるものとする。
図9は、属性重みDB131の例を示す図である。図9の例において、各行に示されるデータが属性重みDB131のレコードのそれぞれに対応する。この例では、属性重みDB131のレコードのそれぞれは、「MemberId」、「AttributeId」、「Weight」、および「DefaultWeight」の4つのフィールドにより構成されている。
同図におけるフィールド「MemberId」は、図2の操作ログDB22の説明において上述したユーザを特定する情報が格納されるフィールドである。また、同図におけるフィールド「AttributeId」は、図4のアイテムメタDB23の説明において上述したアトリビュートを特定する情報が格納されるフィールドである。
同図のフィールド「Weight」は、フィールド「MemberId」によって特定されるユーザの重みの値が格納されるフィールドである。なお、上述したように、重みはアトリビュート(属性)ごとに設定されるようになされており、フィールド「Weight」には、フィールド「AttributeId」の値に対応するアトリビュートの重みの値が格納される。
フィールド「DefaultWeight」は、フィールド「MemberId」によって特定されるユーザの重みの値の初期値が格納されるフィールドである。重みの初期値は、予め決められた値が用いられるようにしてもよいし、各ユーザに対応して予め設定されるものとしてもよい。すなわち、当該ユーザの重みが自動的に調整される前は、フィールド「Weight」には、フィールド「DefaultWeight」の値が格納されることになる。
図9の例では、フィールド「MemberId」の値が「1」または「2」であるレコードがそれぞれアトリビュート毎に記憶されている。同図の例では、各レコードのフィールド「Weight」には、フィールド「DefaultWeight」の値が格納されており、当該ユーザの重みは、まだ自動的に調整されていない。
図8の属性重み調整エンジン129は、操作ログDB122に記憶されているレコードに基づいて属性重み調整DB132のレコードを生成するようになされている。属性重み調整DB132は、所定のユーザについて調整した重みを算出するために用いられる情報が記憶されるデータベースとされる。
図10は、属性重み調整DB132の例を示す図である。図10の例において、各行に示されるデータが属性重み調整DB132のレコードのそれぞれに対応する。この例では、属性重み調整DB132のレコードのそれぞれは、「MemberId」、「TargetScore」、「AttributeScore」、および「UpdateTime」の4つのフィールドにより構成されている。
同図におけるフィールド「MemberId」は、図2の操作ログDB22の説明において上述したユーザを特定する情報が格納されるフィールドである。
また、同図におけるフィールド「TargetScore」およびフィールド「AttributeScore」には、次のようにして得られた情報が格納される。
属性重み調整エンジン129は、操作ログDB122のレコードについて、各レコードのフィールド「LogType」に格納される情報をチェックする。上述したように、操作ログDB122のレコードのフィールド「LogType」には、「reserve」、「detail」、「good」、・・・などの情報が格納されている。そして、フィールド「LogType」に格納されている情報は、アイテムの視聴、録画などの操作内容を予め設定された方式により変換した文字列などとされる。
属性重み調整エンジン129は、フィールド「LogType」に格納される情報が予め設定された情報と同じであるレコードを、属性重み調整DB132のレコードの生成に用いるレコードとして取得する。ここで、属性重み調整DB132のレコードの生成に用いるレコードとは、対象となったアイテムに対してのユーザの評価を推測できる操作に対応して生成されたレコードとされる。
例えば、ユーザがあるアイテムを視聴、録画などする操作を行った場合、ユーザは、そのアイテムを肯定的に評価していると推測することができる。一方、例えば、ユーザがあるアイテムに対応するコンテンツのデータを削除する操作を行った場合、ユーザは、そのアイテムを否定的に評価していると推測することができる。
操作ログDB122のレコードについて、各レコードのフィールド「LogType」に格納される情報は、このように操作内容に対応するユーザの評価を推測できるように、予め設定された方式により変換した文字列などとされる。例えば、ユーザがあるアイテムを視聴、録画などする操作を行った場合、その操作に対応して生成されるレコードのフィールド「LogType」に格納される情報は、「good」となる。また、例えば、ユーザがあるアイテムに対応するコンテンツのデータを削除する操作などを行った場合、その操作に対応して生成されるレコードのフィールド「LogType」に格納される情報は、「bad」となる。
属性重み調整エンジン129は、例えば、フィールド「LogType」に格納される情報が「good」または「bad」であるレコードを、属性重み調整DB132のレコードの生成に用いるレコードとして取得する。
属性重み調整エンジン129は、上述のように取得したレコードのフィールド「ItemId」の値に基づいて、操作の対象となったアイテムを特定し、推薦エンジン126に、そのアイテムのアイテム嗜好情報を生成させる。ここで、アイテム嗜好情報は、上述したように、アトリビュートの数と同数の要素を有するベクトルとされ、アイテムメタDB123のレコードに基づいて生成される。また、属性重み調整エンジン129は、上述のように取得したレコードのフィールド「MemberId」の値に基づいて、操作を行ったユーザを特定し、推薦エンジン126に、ユーザ嗜好DB125のレコードに基づいてそのユーザのユーザ嗜好情報を生成させる。
そして、属性重み調整エンジン129は、推薦エンジン126に、アイテム嗜好情報とユーザ嗜好情報とのマッチング処理を実行させる。このとき、例えば、上述した式(1)の演算が行われることになる。属性重み調整エンジン129は、式(1)の│Xa・Ya│の値を、アトリビュートaの類似度として推薦エンジン126から取得し、各アトリビュートの類似度をアトリビュートIDに対応づけた情報を生成する。この情報が、フィールド「AttributeScore」に格納される情報になる。
例えば、図10の第1番目のレコードのフィールド「AttributeScore」には、「&1={6265.430664}&6={9245.234375}&7={255.272858}・・・」と記述されている。これは、アトリビュートIDが「1」であるアトリビュートの類似度が「6265.430664」であり、アトリビュートIDが「6」であるアトリビュートの類似度が「9245.234375」であり、アトリビュートIDが「7」であるアトリビュートの類似度が「255.272858」であり、・・・であることを表している。
フィールド「TargetScore」には、フィールド「LogType」に格納される情報に対応して定まる類似度の目標値が格納される。ここでの類似度の目標値は、アイテム嗜好情報とユーザ嗜好情報との類似度の目標値であり、式(1)のsim(X,Y)に対応する値となる。例えば、属性重み調整DB132のレコードの生成に用いるレコードのフィールド「LogType」に格納される情報が「good」である場合、フィールド「TargetScore」には、「100.0」が格納される。例えば、属性重み調整DB132のレコードの生成に用いるレコードのフィールド「LogType」に格納される情報が「bad」である場合、フィールド「TargetScore」には、「-100.0」が格納される。なお、「good」に対応する類似度の目標値(いまの場合、「100.0」)と「bad」に対応する類似度の目標値(いまの場合、「-100.0」)は、予め定められているものとする。
図10のフィールド「UpdateTime」には、例えば、そのレコードが生成された日時を特定する情報が格納される。
このようにして、属性重み調整DB132のレコードが生成されていく。すなわち、操作ログDB122のレコードのうち、属性重み調整DB132のレコードの生成に用いるレコードとして取得されたレコードの数に対応する数の属性重み調整DB132のレコードが生成されることになる。
属性重み調整エンジン129は、属性重み調整DB132のレコードに基づいて各ユーザの重みの調整を行う。ここで、重みの調整は、属性重み調整DB132のレコードのフィールド「TargetScore」から得られる類似度の目標値(目標類似度と称することにする)と属性重み調整DB132のレコードのフィールド「AttributeScore」から得られる各アトリビュートの類似度を用いた重回帰分析によりなされる。
すなわち、属性重み調整エンジン129は、目標類似度を従属変数とし、各アトリビュートの類似度を説明変数として重回帰分析を行なうことで、各アトリビュートに対応する重みの最適値の予測演算を実行するのである。
上述したように、重みwaは、それぞれの要素(アトリビュート)に対応して定まるので、例えば、図10の第1番目のレコードから、次のような線形一次式を得ることができる。
100.0=6265.430664×w1+9245.234375×w6+255.272858×w7+・・・
また、図10の第2番目のレコードから、次のような線形一次式を得ることができる。
100.0=336.787109×w1+334.451447×w6+720.280334×w7+・・・
このように、属性重み調整DB132のレコードのうちメンバーIDが「1」であるレコードのそれぞれに基づいて上述した線形一次式を生成する。そして、それらの線形一次式の左辺と右辺の各項を足しこんだ行列式を生成する。この行列式に基づいて、例えば、最小自乗法により(w1,w6,w7,・・・)の解を求めるのである。このようにして重回帰分析が行なわれる。
なお、ここでは、重みが、(w1,w6,w7,・・・)で表される例について説明したが、属性重み調整DB132のレコード数が充分に多ければ、例えば、w2,w3,w4,・・・などの値も求めることは可能である。属性重み調整エンジン129が、充分多くのレコードを取得して、目標類似度を従属変数とし、各アトリビュートの類似度を説明変数として重回帰分析を行なうことで、上述した式(1)の重みwaが求められる。例えば、ユーザ嗜好情報の要素数が100個存在する場合、w1,w2,w3,・・・w100が上述した重回帰分析により求められるのである。
このようにして、属性重み調整エンジン129は、各アトリビュートに対応する重みの最適値を求める。このようにして得られた重みを用いて式(1)の演算を行って類似度を求めれば、「LogType」に格納される情報が「good」であったアイテムのアイテム嗜好情報との類似度は、「100.0」に近い値となる。また、「LogType」に格納される情報が「bad」であったアイテムのアイテム嗜好情報との類似度は、「-100.0」に近い値となる。すなわち、ユーザの評価の高いアイテムの類似度が高くなり、ユーザの評価の高いアイテムの類似度が低くなるように、そのユーザの重みの調整を行うことができるのである。
属性重み調整エンジン129は、上述のようして得られた調整済みの重みの値のそれぞれを、当該ユーザのメンバーIDに対応するレコードとしてアトリビュート単位に生成された属性重みDB131のレコードのフィールド「Weight」に格納する。
推薦エンジン126は、ユーザに推薦すべきアイテムを特定するために、そのユーザのユーザ嗜好情報と各アイテムのアイテム嗜好情報との類似度を、属性重みDB131のレコードのフィールド「Weight」に格納された値を用いて演算する。このとき、例えば、属性重みDB131のレコードに基づいて特定された、当該ユーザの各アトリビュートに対応する重みの値のそれぞれが、式(1)のwaとして用いられ、類似度(sim(X,Y))が演算される。
推薦エンジン126は、例えば、このようにして演算された類似度の高い(大きい)ものから順に所定の数のアイテムを推薦するようになされている。例えば、推薦エンジン126は、類似度の高いものから順に所定の数のアイテムを特定し、それらのアイテムの一覧などとして構成される推薦リストを生成する。そして、推薦エンジン126は、推薦リストを端末121に送信する。
このようにして、推薦システム100におけるアイテムの推薦が行なわれる。ユーザごとに重要視する属性(アトリビュート)は異なるものなので、共通の固定値である重みを用いて類似度を算出してアイテムを推薦しても、真にユーザの嗜好に合致したアイテムを推薦できないことがある。
また、ユーザの嗜好は、極めて抽象的な概念であって本人であっても表現することは難しく、必ずしも自分が重要視する属性(アトリビュート)が簡単に見つかるとは限らない。さらに、ユーザの嗜好は、時間とともに変化することもある。
本発明においては、各ユーザの操作ログDBに基づいて、そのユーザのアイテムに対する評価を推定し、属性重み調整DB132のレコードの目標類似度が設定される。そして、目標類似度と、各アトリビュートの類似度とを用いて重回帰分析が行なわれることで、そのユーザの各アトリビュートに対応する重みが求められるようになされている。従って、個々のユーザにとって最適な重みを自動的に設定できるようにする。
次に、図11のフローチャートを参照して、図8の推薦システム100における属性重み調整DB生成処理について説明する。この処理は、属性重み調整DB132のレコードを生成するとき実行される。
ステップS101において、属性重み調整エンジン129は、操作ログDB122の解析範囲を設定する。解析範囲は、例えば、日時を表す情報として指定され、操作ログDB122のレコードのうち、指定された日時以降現在までのレコードが解析範囲とされる。
ステップS102において、属性重み調整エンジン129は、ステップS101で設定された解析範囲のレコードを取得する。なお、当該レコードが解析範囲のものであるか否かは、例えば、操作ログDB122のレコードのフィールド「LogTime」に記述された情報に基づいて特定される。
ステップS103において、属性重み調整エンジン129は、ステップS102の処理で取得されたレコードについて、予め定められたログタイプのレコードであるか否かを判定する。このとき、例えば、レコードのフィールド「LogType」に格納される情報が属性重み調整DB132のレコードの生成に用いるレコードとして予め定められたものであるか否かがチェックされる。例えば、フィールド「LogType」に格納される情報が「good」または「bad」である場合、処理は、ステップS104に進む。
ステップS104において、属性重み調整エンジン129は、当該レコードのメンバーIDとアイテムIDを特定する。
ステップS105において、属性重み調整エンジン129は、推薦エンジン126に、ステップS104の処理で特定されたメンバーIDに対応するユーザ嗜好情報と特定されたアイテムIDに対応するアイテム嗜好情報とをマッチングさせる。このとき、例えば、上述した式(1)の演算が行われることになる。ステップS105において、属性重み調整エンジン129は、式(1)の│Xa・Ya│の値を、アトリビュートaの類似度として推薦エンジン126から取得し、各アトリビュートの類似度をアトリビュートIDに対応づけた情報を生成する。これによりアトリビュート毎の類似度が算出されたことになる。なお、上述したように、各アトリビュートの類似度をアトリビュートIDに対応づけた情報は、属性重み調整DB132のレコードのフィールド「AttributeScore」に格納される情報になる。
ステップS106において、属性重み調整エンジン129は、ステップS105の処理で得られた情報と類似度の目標値とを対応付けて、図10を参照して上述したように、属性重み調整DB132のレコードを生成して属性重み調整DB132に記憶(登録)する。
なお、上述したように、例えば、属性重み調整DB132のレコードの生成に用いるレコードのフィールド「LogType」に格納される情報が「good」である場合、類似度の目標値は、「100.0」とされる。また、例えば、属性重み調整DB132のレコードの生成に用いるレコードのフィールド「LogType」に格納される情報が「bad」である場合、類似度の目標値は、「-100.0」とされる。
ステップS103において、ステップS102の処理で取得されたレコードについて、予め定められたログタイプのレコードではないと判定された場合、ステップS104乃至ステップS106の処理は、スキップされる。
ステップS107において、解析範囲の全てのレコードをチェックしたか否かが判定される。まだ、解析範囲の全てのレコードをチェックしていないと判定された場合、処理は、ステップS102に戻る。
そして、ステップS107において、解析範囲の全てのレコードをチェックしたと判定されるまで、ステップS102乃至ステップS107の処理が繰り返し実行される。
このようにして、属性重み調整DB生成処理が実行される。
次に、図12のフローチャートを参照して、図8の推薦システム100における属性重み算出処理について説明する。この処理は、例えば、端末121のユーザ単位に所定の周期で実行される。すなわち、例えば、ユーザAについての属性重み算出処理を最初に行ってから、所定の日数が経過したタイミングで、再度ユーザAについての属性重み算出処理が実行される。そして、その後、所定の日数が経過したタイミングで、再度ユーザAについての属性重み算出処理が実行されるようになされている。
あるいはまた、この処理は、例えば、ユーザにより指令される都度、実行されるようにしても構わない。
ステップS121において、属性重み調整エンジン129は、メンバーIDを特定する。すなわち、これから実行される処理によって、ステップS121の処理で特定されたメンバーIDに対応するユーザの各アトリビュートの重みが算出されることになる。
ステップS122において、属性重み調整エンジン129は、属性重み調整DB132に記憶されているレコードであって、ステップS121で特定されたメンバーIDのレコードをチェックする。
ステップS123において、属性重み調整エンジン129は、ステップS122の処理でチェックしたレコードがN個以上あったか否かを判定する。ここで、Nは、予め設定された値とされ、上述したように重回帰分析を行なうのに充分なレコード数が存在するか否かを判定するための閾値とされる。
ステップS123において、レコードがN個以上あったと判定された場合、処理は、ステップS124に進む。
ステップS124において、属性重み調整エンジン129は、ステップS122の処理でチェックした、属性重み調整DB132のレコードに基づいて当該ユーザの重みの調整を行う。ここで、重みの調整は、属性重み調整DB132のレコードのフィールド「TargetScore」から得られる目標類似度と属性重み調整DB132のレコードのフィールド「AttributeScore」から得られる各アトリビュートの類似度を用いた重回帰分析によりなされる。
ステップS125において、属性重み調整エンジン129は、ステップS124の処理の結果得られた重みを、ステップS121で特定されたユーザの各アトリビュートの重みとして特定する。
ステップS126において、属性重み調整エンジン129は、ステップS125の処理で特定されたユーザの各アトリビュートの重みを反映させるべく、属性重みDB131を更新する。具体的には、図9に示したような属性重みDB131のレコードの中から、ステップS121で特定されたメンバーIDのレコードが取得され、それらのレコードのフィールド「AttributeId」の値がチェックされる。そして、ステップS125の処理で特定されたユーザの各アトリビュートの重みのそれぞれが、当該アトリビュートを表す「AttributeId」の値を有するレコードのフィールド「Weight」の値として書き換えられていくのである。アトリビュートの数は、ユーザ嗜好情報の要素数に対応するので、例えばユーザ嗜好情報の要素数が100個存在する場合、ステップS126においては、属性重みDB131の中の100個のレコードのフィールド「Weight」の値が書き換えられることになる。
ステップS126の処理の後、ステップS127において属性重み調整エンジン129は、属性重み調整DB管理処理を実行する。この処理によって、属性重み調整DB132の中の不要なレコードが削除されることになる。属性重み調整DB管理処理の詳細については、図13乃至図15を参照して後述する。
このようにして、属性重み算出処理が実行される。
本発明においては、図11のフローチャートを参照して上述したように、各ユーザの操作ログDBに基づいて、そのユーザのアイテムに対する評価を推定し、属性重み調整DB132のレコードの目標類似度が設定される。そして、図12のフローチャートを参照して上述したように、目標類似度と、各アトリビュートの類似度とを用いて重回帰分析が行なわれることで、そのユーザの各アトリビュートに対応する重みが求められるようになされている。このようにすることで、個々のユーザにとって最適な重みを自動的に設定できる。
次に、図13のフローチャートを参照して、図12のステップS127の属性重み調整DB管理処理の詳細な例について説明する。
ステップS141において、属性重み調整エンジン129は、属性重み調整DB132のレコードのうち、ステップS121で特定されたメンバーIDのレコードのそれぞれの生成日時をチェックする。このとき、例えば、図10のフィールド「UpdateTime」の日時を特定する情報がチェックされる。
ステップS142において、属性重み調整エンジン129は、ステップS141の処理でチェックした生成日時の古い順に、X%のレコードを特定する。このとき、ステップS121で特定されたメンバーIDのレコードの総数のX%(例えば、50%)が特定される。なお、Xの値は予め定められているものとする。
ステップS143において、属性重み調整エンジン129は、ステップS142で特定された属性重み調整DB132のレコードを削除する。
このようにして、属性重み調整DB管理処理が実行される。このように、古いレコードが削除されるようにすることで、当該ユーザの各アトリビュートの重みを、例えば、当該ユーザの嗜好の変化に対応させるように適切に調整することが可能となる。
ところで、属性重み調整DB132のレコードは、上述したように、操作ログDB122のレコードに基づいて生成される。従って、ユーザが行なった端末121の操作の中で、古い操作に対応して生成された属性重み調整DB132のレコードは、その生成日時が古いものとなり、新しい操作に対応して生成された属性重み調整DB132のレコードは、その生成日時は新しいものとなる。
しかし、ユーザの操作の中でも、その操作の内容によってユーザの嗜好に対する重要性は異なるものと考えられる。例えば、ユーザがあるコンテンツのデータを削除不可となるようにプロテクトしたり、「お気に入り」のフォルダに登録するなどの操作を行った場合、そのコンテンツ(アイテム)に対する肯定的な評価がなされたと認識することができる。そして、このような操作には、そのコンテンツに対するユーザの強い嗜好性が感じられ、肯定的な評価を明示する操作ということができる。
一方、例えば、ユーザがあるコンテンツのデータを再生してコンテンツを視聴した場合、そのコンテンツ(アイテム)に対する肯定的な評価がなされたことを示唆するものであるが、この場合、そのコンテンツに対するユーザの強い嗜好性が感じられるとは断言できない。このような操作は、ユーザが単に、記録されているデータの内容を確認するために行われた可能性があるからである。
このように、ユーザの操作の中でも、その操作の内容によってユーザの嗜好に対する重要性は異なる。操作の内容によらず、一律に古いデータを削除するようにすると、ユーザの嗜好を適確に認識して重みを調整することができなくなる可能性がある。
そこで、図12のステップS127の属性重み調整DB管理処理において、操作の内容が考慮されるようにする。例えば、次のようにすることで、図12のステップS127の属性重み調整DB管理処理において、操作の内容が考慮されるようにすることができる。
図14は、属性重み調整DB132の別の例を示す図である。同図においては、図10を参照して上述した場合と同様に、各行に示されるデータが属性重み調整DB132のレコードのそれぞれに対応する。この例では、属性重み調整DB132のレコードのそれぞれは、「MemberId」、「TargetScore」、「AttributeScore」、「UpdateTime」、および「利用可能回数」の5つのフィールドにより構成されている。
図14の例におけるフィールド「MemberId」、フィールド「TargetScore」、フィールド「AttributeScore」、およびフィールド「UpdateTime」は、図10を参照して上述した場合と同様であるので、詳細な説明は省略する。
図14のフィールド「利用可能回数」は、例えば、当該レコードを、属性重み算出処理に何回利用できるかを表す数値が格納されるフィールドとされる。フィールド「利用可能回数」には、当該レコードが生成されるとき、操作ログDB122のレコードにより特定される操作の内容に対応して定まる値が格納される。
いまの場合、操作ログDB122の各レコードのフィールド「LogType」に格納される情報は、例えば、ユーザがあるアイテムの肯定的な評価を明示する操作を行った場合、「good3」となるものとする。そして、例えば、ユーザがあるアイテムの肯定的な評価を示唆する操作を行った場合、その操作に応じて「good2」、または「good1」となるものとする。
同様に、例えば、ユーザがあるアイテムに対応するコンテンツのデータを削除する操作などを行った場合、ユーザがあるアイテムの否定的な評価を明示する操作を行った場合、「bad3」となるものとする。そして、例えば、ユーザがあるアイテムの否定的な評価を示唆する操作を行った場合、その操作に応じて「bad2」、または「bad1」となるものとする。
そして、属性重み調整DB132のレコードが生成されるとき、例えば、操作ログDB122のレコードのフィールド「LogType」に格納される情報が「good3」であった場合、フィールド「利用可能回数」には、「3」が格納される。同様に、属性重み調整DB132のレコードが生成されるとき、例えば、操作ログDB122のレコードのフィールド「LogType」に格納される情報が「good2」または「good1」であった場合、フィールド「利用可能回数」には、「2」または「1」が格納される。
また、属性重み調整DB132のレコードが生成されるとき、例えば、操作ログDB122のレコードのフィールド「LogType」に格納される情報が「bad3」であった場合、フィールド「利用可能回数」には、「3」が格納される。同様に、属性重み調整DB132のレコードが生成されるとき、例えば、操作ログDB122のレコードのフィールド「LogType」に格納される情報が「bad2」または「bad1」であった場合、フィールド「利用可能回数」には、「2」または「1」が格納される。
なお、上で説明した操作ログDB122のレコードのフィールド「LogType」に格納される情報「good3」、「good2」、「good1」、「bad3」、「bad2」、「bad1」などは、あくまで説明のための例であり、実際に格納される情報はこれらとは異なるものであってもよい。要は、操作の内容に応じてフィールド「利用可能回数」に格納する値を特定することができればよいのである。
属性重み調整DB管理処理において、操作の内容が考慮されるようにする場合、属性重み調整DB132は、図14のように構成されているものとし、図14の属性重み調整DB132を用いて図11と図12の処理が実行されるものとする。
ここで、図15のフローチャートを参照して、図12のステップS127の属性重み調整DB管理処理の別の詳細な例について説明する。この処理は、属性重み調整DB管理処理において、操作の内容が考慮されるようにする場合の例である。
ステップS161において、属性重み調整エンジン129は、属性重み調整DB132のレコードのうち、ステップS121で特定されたメンバーIDのレコードのそれぞれの利用可能回数を更新する。このとき、例えば、ステップS121で特定されたメンバーIDの全レコードのそれぞれについて、図14のフィールド「利用可能回数」に格納された値が1だけデクリメントされる。
ステップS162において、属性重み調整エンジン129は、ステップS161の処理によって更新された利用可能回数が「0」となったレコードを特定する。例えば、図14の第3行目に記載のレコードは、現在の利用可能回数の値が「2」であるから、ステップS161の処理で更新された結果、利用可能回数の値は「1」となる。例えば、図14の第4行目に記載のレコードは、現在の利用可能回数の値が「3」であるから、ステップS161の処理で更新された結果、利用可能回数の値は「2」となる。
また、図14の第2行目、第5行目、第6行目、・・・に記載のレコードは、現在の利用可能回数の値が「1」であるから、ステップS161の処理で更新された結果、利用可能回数の値は「0」となる。ステップS162では、例えば、図14の第2行目、第5行目、第6行目、・・・に記載のレコードが特定されることになる。
ステップS163において、属性重み調整エンジン129は、ステップS162の処理で特定されたレコードを削除する。
このようにして、属性重み調整DB管理処理が実行される。このように、操作の内容に対応して定まる利用可能回数の値に基づいて、当該レコードを削除するか否かが判定されるようにしたので、属性重み調整DB管理処理において、操作の内容が考慮されるようにすることができる。その結果、ユーザの嗜好が常に適切に反映された、属性重み調整DB132を構築することが可能となり、当該ユーザの各アトリビュートの重みを、より適切に調整することが可能となる。
なお、上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。上述した一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば図16に示されるような汎用のパーソナルコンピュータ700などに、ネットワークや記録媒体からインストールされる。
図16において、CPU(Central Processing Unit)701は、ROM(Read Only Memory)702に記憶されているプログラム、または記憶部708からRAM(Random Access Memory)703にロードされたプログラムに従って各種の処理を実行する。RAM703にはまた、CPU701が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU701、ROM702、およびRAM703は、バス704を介して相互に接続されている。このバス704にはまた、入出力インタフェース705も接続されている。
入出力インタフェース705には、キーボード、マウスなどよりなる入力部706、CRT(Cathode Ray Tube)、LCD(Liquid Crystal display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部707、ハードディスクなどより構成される記憶部708、モデム、LANカードなどのネットワークインタフェースカードなどより構成される通信部709が接続されている。通信部709は、インターネットを含むネットワークを介しての通信処理を行う。
入出力インタフェース705にはまた、必要に応じてドライブ710が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア711が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部708にインストールされる。
上述した一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、インターネットなどのネットワークや、リムーバブルメディア711などからなる記録媒体からインストールされる。
なお、この記録媒体は、図16に示される、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク(フロッピディスク(登録商標)を含む)、光ディスク(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク(MD(Mini-Disk)(登録商標)を含む)、もしくは半導体メモリなどよりなるリムーバブルメディア711により構成されるものだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているROM702や、記憶部708に含まれるハードディスクなどで構成されるものも含む。
なお、本明細書において上述した一連の処理は、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
10 推薦システム, 21 端末, 22 操作ログDB, 23 アイテムメタDB, 24 嗜好抽出エンジン, 25 ユーザ嗜好DB, 26 推薦エンジン, 27 基軸・反転要素抽出部, 28 成熟度算出エンジン, 100 推薦システム, 121 端末, 122 操作ログDB, 123 アイテムメタDB, 125 ユーザ嗜好DB, 126 推薦エンジン, 129 属性重み調整エンジン, 131 属性重みDB, 132 属性重み調整DB