(57)【特許請求の範囲】
【請求項１】
コンテンツを利用する利用者における、コンテンツに対する利用状況に関する情報である利用情報を受信し、前記利用情報を用いて、利用者間の類似度を計算する利用者情報処理装置において、
所定の時点までに受信した前記利用情報に基づいて、各コンテンツに対する利用頻度を示す数値である利用頻度値の２乗を利用者ごとに加算した値を用いて算出されたノルム関連値を格納するノルム格納部と、
前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの利用者ごとの前記ノルム関連値の変化量を示すノルム２乗補正値を計算する第１の補正値計算部と、
前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記新規ノルム関連値を用いて、利用者のうちの任意の２人の間の類似度を計算する類似度算出部と
を備えることを特徴とする利用者情報処理装置。
【請求項２】
前記受信した利用情報に基づいて、利用者を識別するユーザ識別情報と、コンテンツを識別するコンテンツ識別情報と、前記利用者の前記コンテンツに対する利用の有無を少なくとも示す利用頻度値とを関連付けて格納する嗜好情報格納部を更に備え、
前記嗜好情報格納は、前記所定の時点における利用頻度値である第１の利用頻度値と、前記第１の利用頻度値が前記所定の時点以降に値が更新された場合の更新後の利用頻度値である第２の利用頻度値と、前記所定の時点では格納されておらず、それ以降に新たに追加された利用頻度値である第３の利用頻度値とをそれぞれ格納し、
前記第１の補正値計算部は、
前記嗜好情報格納部に格納されている利用頻度値の内から各利用者の前記第３の利用頻度値を抽出し、前記第３の利用頻度値の２乗を利用者ごとに加算した追加ノルム２乗補正値を計算する追加ノルム２乗補正値算出部と、
前記嗜好情報格納部に格納されている利用頻度値の内から各利用者の前記第２の利用頻度値と、それに対応する前記第１の利用頻度値とを抽出し、前記第２の利用頻度値の２乗を利用者ごとに加算した値から前記第１の利用頻度値の２乗を利用者ごとに加算した値を減算した値である更新ノルム２乗補正値を計算する更新ノルム２乗補正値算出部と、
前記追加ノルム２乗補正値と前記更新ノルム２乗補正値とを加算して前記ノルム２乗補正値を算出する第１の統合補正値計算部とを有することを特徴とする請求項１に記載の利用者情報処理装置。
【請求項３】
前記２人の利用者の前記利用頻度値の内積値を計算する通常内積算出部を更に備え、
前記類似度算出部は、前記内積値と、前記新規ノルム関連値とを用いて前記２人の利用者の間の類似度を計算することを特徴とする請求項１または請求項２に記載の利用者情報処理装置。
【請求項４】
前記所定の時点までに受信した前記利用情報に基づく前記利用頻度値を用いて、前記通常内積算出部により算出された内積値である利用者間内積値を格納する内積値格納部と、
前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの前記２人の利用者の前記利用者間内積値の変化量を示す内積補正値を計算する第２の補正値計算部とを更に備え、
前記類似度算出部は、前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記利用者間内積値と前記内積補正値とを加算した値を用いて新規内積値を計算すると共に、前記新規ノルム関連値と前記新規内積値とを用いて、前記２人の利用者の間の類似度を計算することを特徴と請求項３に記載の利用者情報処理装置。
【請求項５】
前記受信した利用情報に基づいて、利用者を識別するユーザ識別情報と、コンテンツを識別するコンテンツ識別情報と、前記利用者の前記コンテンツに対する利用の有無を少なくとも示す利用頻度値とを関連付けて格納する嗜好情報格納部を更に備え、
前記嗜好情報格納部は、前記所定の時点における利用頻度値である第１の利用頻度値と、前記第１の利用頻度値が前記所定の時点以降に値が更新された場合の更新後の利用頻度値である第２の利用頻度値と、前記所定の時点では格納されておらず、それ以降に新たに追加された利用頻度値である第３の利用頻度値をそれぞれ格納し、
前記第２の補正値計算部は、
前記嗜好情報格納部に格納されている利用頻度値の内から各利用者の前記第３の利用頻度値を抽出し、前記２人の利用者の利用頻度値の内積値であり、その少なくとも一方の利用者の利用頻度値が前記第３の利用頻度値の内積値である追加内積補正値とをそれぞれ計算する追加内積補正値算出部と、
前記嗜好情報格納部に格納されている利用頻度値の内から各利用者の前記第２の利用頻度値と、それに対応する前記第１の利用頻度値とを抽出し、前記２人の利用者の利用頻度値の内積値であり、その一方の利用者の利用頻度値が前記第２の利用頻度値であり、かつ他方の利用者の利用頻度値が前記第１の利用頻度値または前記第２の利用頻度値である内積値から、前記２人の利用者の前記第１の利用頻度値の内積値を減算した値である更新内積補正値とをそれぞれ計算する更新内積補正値算出部と、
前記追加内積補正値と前記更新内積補正値を加算して前記内積補正値を算出する第２の統合補正値計算部とを有することを特徴とする請求項４に記載の利用者情報処理装置。
【請求項６】
前記所定の時点までに前記２人の利用者の両方が利用したコンテンツの前記コンテンツ識別情報と、前記２人の利用者の前記第１の利用頻度値の積である内積算出補助値とを関連付けて格納する内積算出補助情報格納部を更に備え、
前記更新内積補正値算出部は、前記嗜好情報格納部を参照しながら、前記２人の利用者の利用頻度値の内積値であり、その一方の利用者の利用頻度値が前記第２の利用頻度値であり、かつ他方の利用者の利用頻度値が前記第１の利用頻度値または前記第２の利用頻度値である第１の内積値を算出すると共に、前記第１の内積値を算出する際に用いたコンテンツに対応する前記内積算出補助値を前記内積算出補助情報格納部から読み出して、それらの総和である第２の内積値を算出し、前記第１の内積値から前記第２の内積値を減算した値を更新内積補正値とすることを特徴とする請求項５に記載の利用者情報処理装置。
【請求項７】
前記２人の利用者の両方が利用したコンテンツの前記コンテンツ識別情報と、前記２人の利用者の前記利用頻度値の積である内積算出補助値とを関連づけて格納する内積算出補助情報格納部をさらに備え、
前記内積算出補助情報格納部は、前記２人の利用者の前記第１の利用頻度値の積である第１の内積算出補助値と、前記２人の利用者の内の一方の利用者の前記利用頻度値が前記第２の利用頻度値であり、かつ他方の利用者の利用頻度値が前記第１の利用頻度値または前記第２の利用頻度値である場合の利用頻度値の積である第２の内積算出補助値と、前記２人の利用者の内の少なくとも一方の利用者の前記利用頻度値が前記第３の利用頻度値である場合の利用頻度値の積である第３の内積算出補助値とを識別可能なように格納し、
前記追加内積補正値算出部は、前記第３の内積算出補助値の総和である前記追加内積補正値を計算し、
前記更新内積補正値算出部は、前記第２の内積算出補助値の総和から前記第１の内積算出補助値の総和を減算した値を前記更新内積補正値として計算することを特徴とする請求項５に記載の利用者情報処理装置。
【請求項８】
前記類似度算出部は、前記新規内積値を新たな利用者間内積値として前記内積値格納部に格納させることを特徴とする請求項４〜請求項７のいずれか一項に記載の利用者情報処理装置。
【請求項９】
前記類似度算出部は、前記新規ノルム関連値を新たなノルム関連値として前記ノルム格納部に格納させることを特徴とする請求項１〜請求項８のいずれか一項に記載の利用者情報処理装置。
【請求項１０】
前記ノルム格納部は、所定の条件を満たすコンテンツを対象にして算出された前記ノルム関連値を格納し、
前記第１の補正値計算部は、前記所定の条件を満たすコンテンツを対象にして、前記ノルム２乗補正値を計算することを特徴とする請求項１〜請求項９のいずれか一項に記載の利用者情報処理装置。
【請求項１１】
利用者を識別するユーザ識別情報と、ユーザ属性情報とを対応させて格納するユーザ情報格納部と、
前記類似度算出部で計算された前記一の利用者との前記類似度が所定値以上の他の利用者、または前記類似度が高い順に所定数の他の利用者の前記ユーザ識別情報を選択する類似ユーザ情報選択部と
を更に備えることを特徴とする請求項１〜請求項１０のいずれか一項に記載の利用者情報処理装置。
【請求項１２】
コンテンツを識別するコンテンツ識別情報と、コンテンツ属性情報とを対応させて格納するコンテンツ情報格納部と、
前記類似度算出部で計算された前記一の利用者との前記類似度が所定値以上の他の利用者、または前記類似度が高い順に所定数の他の利用者の前記ユーザ識別情報を選択する類似ユーザ情報選択部と、
前記類似ユーザ情報選択部で選択されたユーザ識別情報と対応する前記利用頻度値が利用ありの状態を示すコンテンツを対象にして所定個数の前記コンテンツ識別情報を選択する推薦コンテンツ選択部と、
を更に備えることを特徴とする請求項１〜請求項１１のいずれか一項に記載の利用者情報処理装置。
【請求項１３】
コンテンツを識別するコンテンツ識別情報と、コンテンツ属性情報とを対応させて格納するコンテンツ情報格納部と、
前記類似度算出部で計算された前記一の利用者との前記他の利用者との類似度が大きいほど、かつ前記他の利用者の利用頻度値が大きいほど大きな値となる適合度をコンテンツごとに計算すると共に、前記適合度が所定値以上のコンテンツの前記コンテンツ識別情報、または前記適合度が大きな順に所定個数の前記コンテンツ識別情報を選択する推薦コンテンツ選択部と、
を更に備えることを特徴とする請求項１〜請求項１１のいずれか一項に記載の利用者情報処理装置。
【請求項１４】
コンテンツを利用する利用者における、コンテンツに対する利用状況に関する情報である利用情報を受信し、前記利用情報を用いて、利用者間の類似度を計算する情報処理装置が実行する利用者情報処理方法において、
所定の時点までに受信した前記利用情報に基づいて、各コンテンツに対する利用頻度を示す数値である利用頻度値の２乗を利用者ごとに加算した値を用いて算出されたノルム関連値をノルム格納部に格納させるノルム格納ステップと、
前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの利用者ごとの前記ノルム関連値の変化量を示すノルム２乗補正値を計算する第１の補正値計算ステップと、
前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記新規ノルム関連値を用いて、利用者のうちの任意の２人の間の類似度を計算する類似度算出ステップと
を有することを特徴とする利用者情報処理方法。
【請求項１５】
コンテンツを利用する利用者における、コンテンツに対する利用状況に関する情報である利用情報を受信し、前記利用情報を用いて、利用者間の類似度を計算する利用者情報処理装置のコンピュータを、
所定の時点までに受信した前記利用情報に基づいて、各コンテンツに対する利用頻度を示す数値である利用頻度値の２乗を利用者ごとに加算した値を用いて算出されたノルム関連値をノルム格納部に格納させるノルム格納手段、
前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの利用者ごとの前記ノルム関連値の変化量を示すノルム２乗補正値を計算する第１の補正値計算手段、
前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記新規ノルム関連値を用いて、利用者のうちの任意の２人の間の類似度を計算する類似度算出手段、
として機能させることを特徴とする利用者情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテンツに対する利用者の利用情報を用いて、利用者間の類似度を計算する利用者情報処理装置、利用者情報処理方法、及び利用者情報処理プログラムに関する。
【背景技術】
【０００２】
近年、デジタル技術やネットワーク技術の進展により、ネットワークを使って配信、提供される文書、音楽、画像、映像等のコンテンツが非常に増えている。これに伴い、ユーザの嗜好に合ったコンテンツを推薦するサービスのニーズが高まってきている。このようなニーズに対応する技術として、コンテンツに関するユーザの利用履歴や評価履歴などの行動履歴を用いて、ユーザの嗜好を推定し、ユーザの嗜好に合ったコンテンツを推薦する技術の開発が行われている。
【０００３】
例えば、ユーザの嗜好に合ったコンテンツを推薦する技術の一つに、協調フィルタリング方式の推薦技術が存在する。一般的な協調フィルタリング方式では、まず、多くのユーザ行動履歴を蓄積する。次に、その行動履歴を用いて、コンテンツを推薦するユーザと類似した嗜好をもつユーザを選定する。そして、選定した複数のユーザの行動履歴から推薦コンテンツを決定することで、ユーザの嗜好に合ったコンテンツの推薦を実現する。
【０００４】
また、コンテンツ推薦に必要な処理時間を短縮するための技術の開発も行われている。
例えば、コンテンツ推薦処理に使用する行動履歴データの量を制限することにより、処理時間を短縮する装置が、特許文献１に開示されている。この装置は、まず、指定された推薦対象のユーザ数と行動履歴データの数に基づいて、推薦処理に要する時間の推定値を算出する。そして、処理時間の推定値が目標時間内に収まるように推薦対象のユーザ数と行動履歴データの数を制限した後、協調フィルタリング方式の推薦処理を行っている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−３０２０９７
【発明の概要】
【発明が解決しようとする課題】
【０００６】
協調フィルタリング方式の推薦処理では、大量の行動履歴データを対象に処理を行う場合、計算量が膨大になるという問題があった。このため、演算能力の高いシステムが必要になる場合や、実用的な時間で推薦処理を行うことが難しい場合があった。一方、特許文献１の装置では、行動履歴データ全体のなかから一部のデータを抽出し、一部のデータのみを用いてコンテンツ推薦処理を行っている。このため、計算量を減らして処理時間を短縮することはできるが、コンテンツ推薦処理において必要なユーザ間類似度が、必ずしも十分な精度では得られないという問題がある。この結果、コンテンツ推薦の精度も低下するという問題がある。
【０００７】
そこで、本発明は、少ない計算量で、かつ精度良くユーザ間の類似度を計算することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は上述した従来の技術の課題を解決するため、コンテンツを利用する利用者における、コンテンツに対する利用状況に関する情報である利用情報を受信し、前記利用情報を用いて、利用者間の類似度を計算する利用者情報処理装置において、所定の時点までに受信した前記利用情報に基づいて、各コンテンツに対する利用頻度を示す数値である利用頻度値の２乗を利用者ごとに加算した値を用いて算出されたノルム関連値を格納するノルム格納部（１９）と、前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの利用者ごとの前記ノルム関連値の変化量を示すノルム２乗補正値を計算する第１の補正値計算部（１５２）と、前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記新規ノルム関連値を用いて、利用者のうちの任意の２人の間の類似度を計算する類似度算出部（１５，２１５）とを備えることを特徴とする利用者情報処理装置を提供する。
また、本発明は上述した従来の技術の課題を解決するため、コンテンツを利用する利用者における、コンテンツに対する利用状況に関する情報である利用情報を受信し、前記利用情報を用いて、利用者間の類似度を計算する情報処理装置が実行する利用者情報処理方法において、所定の時点までに受信した前記利用情報に基づいて、各コンテンツに対する利用頻度を示す数値である利用頻度値の２乗を利用者ごとに加算した値を用いて算出されたノルム関連値をノルム格納部に格納させるノルム格納ステップと、前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの利用者ごとの前記ノルム関連値の変化量を示すノルム２乗補正値を計算する第１の補正値計算ステップと、前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記新規ノルム関連値を用いて、利用者のうちの任意の２人の間の類似度を計算する類似度算出ステップとを有することを特徴とする利用者情報処理方法を提供する。
また、本発明は上述した従来の技術の課題を解決するため、コンテンツを利用する利用者における、コンテンツに対する利用状況に関する情報である利用情報を受信し、前記利用情報を用いて、利用者間の類似度を計算する利用者情報処理装置のコンピュータを、所定の時点までに受信した前記利用情報に基づいて、各コンテンツに対する利用頻度を示す数値である利用頻度値の２乗を利用者ごとに加算した値を用いて算出されたノルム関連値をノルム格納部に格納させるノルム格納手段、前記所定の時点以降に受信した前記利用情報に基づいて、前記所定の時点からの利用者ごとの前記ノルム関連値の変化量を示すノルム２乗補正値を計算する第１の補正値計算手段、前記ノルム関連値と前記ノルム２乗補正値とを用いて新規ノルム関連値を利用者ごとに計算し、前記新規ノルム関連値を用いて、利用者のうちの任意の２人の間の類似度を計算する類似度算出手段、として機能させることを特徴とする利用者情報処理プログラムを提供する。
【発明の効果】
【０００９】
本発明では、ユーザ間の類似度を算出する際に、直近の類似度計算時に算出した類似度から値が変化しているユーザの組合せを正確に抽出し、再計算が必要なユーザに対してのみ再計算を行っている。さらに、再計算を行う場合にも、必要最低限のデータ、すなわち直近の類似度算出以降に蓄積された行動履歴データのみを用いることに加え、直近の類似度算出時の計算過程で算出されたデータを記憶し再利用している。このため、ユーザ間の類似度を非常に少ない計算量で計算することができる。また、行動履歴データの一部のみを抽出して使用し他のデータを無視するような処理とは異なり、計算量削減の代償として計算精度が低下することは生じない。このため、行動履歴データの量が多い場合であっても、実用的な時間で精度良くユーザ間の類似度を計算することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態におけるシステム全体の構成図である。
【図２】本発明の第１の実施形態における嗜好情報格納部１８での嗜好情報の格納形式を示す図である。
【図３】本発明の第１の実施形態におけるｓｔａｔｅの値と嗜好情報の状態との対応を示す表である。
【図４】本発明の第１の実施形態におけるノルム格納部１９の格納状態の一例を示す図である。
【図５】本発明の第１の実施形態における類似度格納部２０の格納状態の一例を示す図である。
【図６】本発明の第１の実施形態におけるユーザ情報格納部２１の格納状態の一例を示す図である。
【図７】本発明の第１の実施形態におけるコンテンツ情報格納部２２の格納状態の一例を示す図である。
【図８】本発明の第１の実施形態における類似度算出部１５の構成を示すブロック図である。
【図９】本発明の第１の実施形態における端末装置３より、利用情報を受信した際の、サーバ装置１による嗜好情報を記憶する処理フローを示すシーケンス図である。
【図１０】本発明の第１の実施形態における類似度算出部１５による類似度算出処理の動作を示すフローチャートである。
【図１１】本発明の第１の実施形態におけるステップＳ２０１のノルム算出処理の動作を示すフローチャートである。
【図１２】本発明の第１の実施形態におけるステップＳ３０４の通常ノルム算出処理の動作を示すフローチャートである。
【図１３】本発明の第１の実施形態におけるステップＳ３０５における補正ノルム算出処理の動作を示すフローチャートである。
【図１４】本発明の第１の実施形態におけるステップＳ５０４の追加ノルム２乗補正値算出処理の動作を示すフローチャートである。
【図１５】本発明の第１の実施形態におけるステップＳ５０７の更新ノルム２乗補正値算出処理の動作を示すフローチャートである。
【図１６】本発明の第１の実施形態におけるステップＳ２０２の内積算出処理の動作を示すフローチャートである。
【図１７】本発明の第１の実施形態におけるステップＳ８０４の通常内積算出処理の動作を示すフローチャートである。
【図１８】本発明の第１の実施形態におけるステップＳ８０５における補正内積算出処理の動作を示すフローチャートである。
【図１９】本発明の第１の実施形態におけるステップＳ１００４の追加内積補正値算出処理の動作を示すフローチャートである。
【図２０】本発明の第１の実施形態におけるステップＳ１００７の更新内積補正値算出処理の動作を示すフローチャートである。
【図２１】本発明の第１の実施形態におけるステップＳ２０３の類似度算出処理の動作を示すフローチャートである。
【図２２】本発明の第１の実施形態における端末装置３より類似ユーザ情報の取得を要求する取得要求を受信した際の、サーバ装置１による類似ユーザ情報提供処理フローを示すシーケンス図である。
【図２３】本発明の第１の実施形態における推薦コンテンツの決定方法が異なる、端末装置３より推薦コンテンツの取得を要求する取得要求を受信した際の、サーバ装置１によるコンテンツ推薦処理の第１の方法を示すシーケンス図である。
【図２４】本発明の第２の実施形態におけるサーバ装置４の構成を示すブロック図である。
【図２５】本発明の第２の実施形態における内積算出補助情報格納部２２３での内積算出補助情報の格納状態を示す図である。
【図２６】本発明の第２の実施形態における類似度算出部２１５の構成を示すブロック図である。
【図２７】本発明の第２の実施形態における類似度算出部２１５による類似度算出処理の動作を示すフローチャートである。
【図２８】本発明の第２の実施形態におけるステップＳ１６０１の内積算出処理の動作を示すフローチャートである。
【図２９】本発明の第２の実施形態におけるステップＳ１７０１の内積算出補助値算出処理の動作を示すフローチャートである。
【図３０】本発明の第２の実施形態におけるステップＳ１７０４の通常内積算出処理の動作を示すフローチャートである。
【図３１】本発明の第２の実施形態におけるステップＳ１７０５の補正内積算出処理の動作を示すフローチャートである。
【図３２】本発明の第２の実施形態におけるステップＳ２００４の追加内積補正値算出処理の動作を示すフローチャートである。
【図３３】本発明の第２の実施形態におけるステップＳ２００７の更新内積補正値算出処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の利用者情報処理（サーバ装置）、利用者情報処理方法、利用者情報処理プログラムについて、添付図面を参照して説明する。なお、各実施形態において、コンテンツとは、楽曲コンテンツ、映像コンテンツ、ソフトウェア、種々の商品等を意味するものとする。また、「コンテンツを利用する」とは、楽曲コンテンツや映像コンテンツを再生すること、楽曲コンテンツ、映像コンテンツ、ソフトウェア等をダウンロードすること、楽曲コンテンツ、映像コンテンツ、種々の商品等を購入すること、などを意味するものとする。また、各実施形態において、利用者情報処理装置をサーバ装置とした例について説明する。
【００１２】
＜第１の実施形態＞
以下に、本発明の実施形態について、図を用いて詳細に説明する。
図１は、本発明の第１の実施形態におけるシステム全体の構成図である。サーバ装置１、端末装置３、ネットワーク２により構成されている。
【００１３】
ネットワーク２は、外部の機器と接続するための手段であり、例えばインターネット等の外部ネットワークである。ネットワーク２は、サーバ装置１と端末装置３との間の情報のやり取りを仲介する。
サーバ装置１は、ネットワーク２を通じて、複数の端末装置３（３ａ〜３ｎ）より受信したコンテンツの利用情報を用いて、ユーザごとに推薦コンテンツを決定し、端末装置３の取得要求に応じて、推薦コンテンツに関する情報を送信する装置である。尚、コンテンツの利用情報には、少なくとも端末装置３を利用中のユーザを識別するためのユーザ識別情報（利用者識別子）と、そのユーザが利用したコンテンツを識別するためのコンテンツ識別情報（コンテンツ識別子）が含まれている。また、取得要求には、少なくとも端末装置３を利用中のユーザを識別するためのユーザ識別情報が含まれている。尚、本実施形態においては、ユーザを識別するユーザ識別情報を用いて処理を行う場合を説明するが、ユーザ識別情報の代わりに端末装置３を識別する端末識別情報を用いて処理を行なっても良い。
【００１４】
サーバ装置１は、制御部１０、利用情報受信部１１、取得要求受信部１２、要求情報送信部１３、利用頻度値算出部１４、類似度算出部１５、類似ユーザ情報選択部１６、推薦コンテンツ選択部１７、嗜好情報格納部１８、ノルム格納部１９、類似度格納部（内積値格納部）２０、ユーザ情報格納部２１、コンテンツ情報格納部２２から構成される。
サーバ装置１は、ＣＰＵ、ＲＡＭ、ＲＯＭ、ハードディスクドライブ（ＨＤＤ）、ネットワークインタフェース等を備えるコンピュータを用いて、ソフトウェア（プログラム）処理として実施することも可能である。
制御部１０は、サーバ装置１を構成する各部に対して全体的な制御を行なう。
【００１５】
利用情報受信部１１は、ネットワーク２を通じて、端末装置３より、ユーザ識別情報とコンテンツ識別情報を含む利用情報を受信する。そして、利用頻度算出部１４に、受信した利用情報を送信する。以下では、ユーザ識別情報をｕｓｅｒ＿ｉｄ、コンテンツ識別情報をｃｏｎｔｅｎｔ＿ｉｄと表わす。
【００１６】
取得要求受信部１２は、ネットワーク２を通じて、端末装置３より、ユーザ識別情報を含む取得要求を受信する。そして、受信した取得要求に応じて、類似ユーザ情報選択部１６、または推薦コンテンツ選択部１７に、受信したユーザ識別情報を含む取得要求を送信する。尚、取得要求は、類似ユーザの情報、または、推薦コンテンツの情報の取得を要求する情報である。
【００１７】
要求情報送信部１３は、類似ユーザ情報選択部１６、または、推薦コンテンツ選択部１７より、ユーザ識別情報と要求情報を受信する。そして、ネットワーク２を通じて、受信したユーザ識別情報に対応する端末装置３に、受信した要求情報を送信する。尚、要求情報は、共に受信したユーザ識別情報に対応する類似ユーザの情報、または、ユーザの嗜好に応じた推薦コンテンツに関する情報である。
【００１８】
利用頻度値算出部１４は、利用情報受信部１５より、ユーザ識別情報とコンテンツ識別情報を含む利用情報を受信し、受信した利用情報を用いて利用頻度値を算出する。そして後述するようなデータ形式で、利用頻度値を嗜好情報格納部１８に格納する。利用情報には、少なくともユーザ識別情報とコンテンツ識別情報が含まれているが、この他に、利用回数、利用日時、ユーザがコンテンツに対して行なった評価の情報（評価値）が含まれていても良い。
利用頻度値は、例えば、ユーザがコンテンツを１回以上利用した場合には「１」、１回も利用していない場合を「０」として算出すれば良い。
【００１９】
また、利用情報に、コンテンツが音楽なら再生回数、映画なら視聴回数といったような、コンテンツの利用回数が含まれる場合は、その利用回数を用いて利用頻度値を算出しても良い。例えば、利用回数そのものを利用頻度値としても良いし、利用回数が多くなるほど値が大きくなるような所定の計算式により利用頻度値を算出しても良い。例えば、利用回数の平方根、あるいは（利用回数＋１）の対数値を利用頻度値としても良い。利用回数を用いて利用頻度値を算出する場合、嗜好情報格納部１８に、受信したユーザ識別情報とコンテンツ識別情報とに対応する嗜好情報が存在する場合は、その嗜好情報の中の利用頻度値と利用回数を用いて利用頻度値を算出する。
さらに、利用情報に利用日時が含まれる場合は、同じ利用回数ならば利用日時が新しい場合ほど利用頻度値が大きくなるように算出しても良い。
また、利用情報に、ユーザのコンテンツに対する評価の情報が含まれている場合は、その評価情報を用いて利用頻度値を算出する。
【００２０】
嗜好情報格納部１８は、ＨＤＤなどの記憶装置を用いて、嗜好情報を複数記憶する。嗜好情報格納部１８における嗜好情報の格納形式として、図２（ａ）〜（ｃ）に示すように、３種類の格納形式を用いることができる。
嗜好情報の第１の格納形式は、ユーザ識別情報であるｕｓｅｒ＿ｉｄと、コンテンツ識別情報であるｃｏｎｔｅｎｔ＿ｉｄと、類似度算出部１５において直近の類似度算出が行なわれた際に使われた利用頻度値であるｖａｌｕｅと、直近の類似度算出が行われたとき以降に利用頻度値算出部１４によって算出された最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅと、嗜好情報の状態を示すフラグであるｓｔａｔｅとを関連付けたものであり、図２（ａ）に示すテーブル形式で格納されている。このテーブルにおいて、（ｕｓｅｒ＿ｉｄ，ｃｏｎｔｅｎｔ＿ｉｄ）の組合せはユニーク（一意）であり、この組合せを指定することにより、テーブルのデータが特定できる。
【００２１】
嗜好情報の第１の格納形式における、嗜好情報の状態を示すｓｔａｔｅについて、図３の対応表を用いて説明する。図３に示すように、ｓｔａｔｅが「０」の場合は、ｖａｌｕｅにのみ値が記憶されている状態である。これは、直近の類似度算出が行われた際に、すでに嗜好情報格納部１８に、嗜好情報が記憶されており、その後一度も利用頻度値の更新がないことを示している。ｓｔａｔｅが「１」の場合は、ｖａｌｕｅ、ｎｅｗ＿ｖａｌｕｅ共に値が記憶されている状態である。
これは、直近の類似度算出が行われた際に、すでに嗜好情報格納部１８に、嗜好情報が登録されており、かつ、その後に少なくとも１回は、利用頻度値算出部１４によって、その嗜好情報に含まれるユーザ識別情報とコンテンツ識別情報に対して、利用頻度値が算出され、嗜好情報の利用頻度値が更新されたことを示す。ｓｔａｔｅが「２」の場合は、ｎｅｗ＿ｖａｌｕｅにのみ値が記憶されている状態である。これは、直近の類似度算出が行われたとき以降に、利用頻度値算出部１４が、あるユーザ識別情報とコンテンツ識別情報に対して、利用頻度値を算出して嗜好情報として記憶する際に、嗜好情報格納部１８に、そのユーザ識別情報とコンテンツ識別情報に対応する嗜好情報が存在しなかったことを示している。尚、利用頻度値を算出して嗜好情報として記憶する際に、そのユーザ識別情報とコンテンツ識別情報に対応する嗜好情報のｓｔａｔｅが「２」である場合は、ｓｔａｔｅを「２」のままにして、ｎｅｗ＿ｖａｌｕｅを更新する。本実施形態ではこのようなｓｔａｔｅを用いて処理を行なうが、ｓｔａｔｅを用いる代わりに、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無を用いて、同様に嗜好情報の状態を判定することも可能である。
【００２２】
嗜好情報の第２の格納形式は、図２（ｂ）に示すように、ユーザ識別情報であるｕｓｅｒ＿ｉｄと、コンテンツ識別情報であるｃｏｎｔｅｎｔ＿ｉｄと、類似度算出部１５において直近の類似度算出が行なわれた際に使われた利用頻度値であるｖａｌｕｅと、直近の類似度算出が行われた際に、すでに利用頻度値が計算されておりかつ、それ以降に利用頻度値算出部１４によって再び算出された最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅ＿１と、直近の類似度算出が行われたとき以降に初めて算出された最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅ＿２とを関連付けたものである。このテーブルにおいて、（ｕｓｅｒ＿ｉｄ，ｃｏｎｔｅｎｔ＿ｉｄ）の組合せはユニーク（一意）であり、この組合せを指定することにより、テーブルのデータが特定できる。第２の格納形式においては、利用頻度値算出部１４より、嗜好情報格納部１８に、はじめて格納された場合は、利用頻度値がｎｅｗ＿ｖａｌｕｅ＿２にのみ記録された状態となる。
【００２３】
さらに、ｎｅｗ＿ｖａｌｕｅ＿２にのみ利用頻度値が記憶されている状態で、再び、利用頻度値算出部１４より、利用頻度値が算出された場合は、ｎｅｗ＿ｖａｌｕｅ＿２の値を、再び算出された利用頻度値で置き換える。さらに、類似度算出が行われるまでこの状態を維持し、類似度算出直後に、類似度算出部１５より、ｖａｌｕｅにｎｅｗ＿ｖａｌｕｅ＿２の値が記録され、ｎｅｗ＿ｖａｌｕｅ＿２の値が削除される。
【００２４】
また、ｖａｌｕｅにのみ利用頻度値が記憶されている状態で、利用頻度値算出部１４より、新たに利用頻度値が算出された場合は、算出された利用頻度値をｎｅｗ＿ｖａｌｕｅ＿１に記録する。さらに、ｖａｌｕｅに直近の類似度算出時に用いた利用頻度値が記憶され、ｎｅｗ＿ｖａｌｕｅ＿１に最新の利用頻度値が記憶されている状態で、再び、利用頻度値算出部１４より、利用頻度値が算出された場合は、ｎｅｗ＿ｖａｌｕｅ＿１の値を、再び算出された利用頻度値で置き換える。さらに、類似度算出が行われるまでこの状態を維持し、類似度算出直後に、類似度算出部１５より、ｖａｌｕｅの値がｎｅｗ＿ｖａｌｕｅ＿１の値で置き換えられ、ｎｅｗ＿ｖａｌｕｅ＿１の値が削除される。尚、第２の格納形式において、ｖａｌｕｅにのみ値が入っている状態は、第１の格納形式における、ｓｔａｔｅの値が「０」の状態と等しい。また、第２の格納形式において、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅ＿１にのみ値が入っている状態は、第１の格納形式における、ｓｔａｔｅの値が「１」の状態と等しい。また、第２の格納形式において、ｎｅｗ＿ｖａｌｕｅ＿２にのみ値が入っている状態は、第１の格納形式における、ｓｔａｔｅの値が「２」の状態と等しい。
【００２５】
嗜好情報の第３の格納形式は、図２（ｃ）に示すように、ユーザ識別情報であるｕｓｅｒ＿ｉｄと、コンテンツ識別情報であるｃｏｎｔｅｎｔ＿ｉｄと、利用頻度値であるｖａｌｕｅと、利用頻度値の種類を表すｔｙｐｅとを関連付けたものである。このテーブルにおいて、（ｕｓｅｒ＿ｉｄ，ｃｏｎｔｅｎｔ＿ｉｄ，ｔｙｐｅ）の組合せはユニーク（一意）であり、この組合せを指定することにより、テーブルのデータが特定できる。ｔｙｐｅの値により、記録された利用頻度値の種類を判別できる。ｔｙｐｅの値が「０」の場合は、ｖａｌｕｅに記憶された利用頻度値が、直近の類似度算出時に使用されたものであることを示す。また、ｔｙｐｅの値が「１」の場合は、ｖａｌｕｅに記憶された利用頻度値が、直近の類似度算出以降に、再度算出されたものであることを示す。このとき、嗜好情報格納部１８には、同じｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応するｔｙｐｅの値が「０」であるデータも格納されている。
【００２６】
また、ｔｙｐｅの値が「２」の場合は、ｖａｌｕｅに記憶された利用頻度値が、直近の類似度算出以降に、はじめて算出された利用頻度値であることを示す。このとき、直近の類似度算出時に、同じｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応する利用頻度値は計算されていなかったため、ｔｙｐｅの値が「０」であるデータは格納されていない。また、嗜好情報格納部１８に、あるｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応するデータのうち、ｔｙｐｅの値が「０」であるデータのみが格納されている状態で、利用頻度値算出部１４により、そのｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応する利用頻度値が算出された場合は、そのｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄと持ち、ｖａｌｕｅの値が算出された利用頻度値であり、ｔｙｐｅの値が「１」であるデータを、嗜好情報格納部１８に新たに格納する。また、嗜好情報格納部１８に、あるｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応するデータにおいて、ｔｙｐｅの値が「１」、または、「２」であるデータが格納されている状態で、利用頻度値算出部１４により、そのｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応する利用頻度値が算出された場合は、そのｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄに対応するｔｙｐｅの値が「１」、または、「２」であるデータのｖａｌｕｅの値を、算出された利用頻度値に置き換える。
【００２７】
また、類似度算出直後に、ｔｙｐｅの値が「１」であるデータは、類似度算出部１５より、同じｕｓｅｒ＿ｉｄとｃｏｎｔｅｎｔ＿ｉｄとを有し、ｔｙｐｅの値が「０」のデータが削除された後で、ｔｙｐｅの値が「０」に置き換えられる。また、類似度算出直後に、ｔｙｐｅの値が「２」であるデータは、類似度算出部１５より、ｔｙｐｅの値が「０」に置き換えられる。また、第３の格納形式において、嗜好情報格納部１８に、ｔｙｐｅの値が「０」であるデータのみ格納されている状態は、第１の格納形式における、ｓｔａｔｅの値が「０」の状態と等しい。また、第３の格納形式において、嗜好情報格納部１８に、ｔｙｐｅの値が「０」であるデータと、ｔｙｐｅの値が「１」であるデータが共に格納されている状態は、第１の格納形式における、ｓｔａｔｅの値が「１」の状態と等しい。このとき、ｔｙｐｅの値が「０」であるデータにおけるｖａｌｕｅが、第１の格納形式のｖａｌｕｅと等しく、ｔｙｐｅの値が「１」であるデータのｖａｌｕｅが、第１の格納形式におけるｎｅｗ＿ｖａｌｕｅと等しい。また、第３の格納形式において、嗜好情報格納部１８に、ｔｙｐｅの値が「２」であるデータのみが格納されている状態は、第１の格納形式におけるｓｔａｔｅの値が「２」の状態と等しい。
【００２８】
以下、本実施形態においては嗜好情報の第１の格納形式を用いるものとして説明を行う。
ノルム格納部１９は、ＨＤＤなどの記憶装置を用いて、ユーザ識別情報と、そのユーザ識別情報に対応するノルムの２乗と、そのユーザ識別情報に対応するノルムとを関連付けて複数記憶する。図４は、ノルム格納部１９の格納状態の一例を示す図である。図４に示すように、ユーザ識別情報であるｕｓｅｒ＿ｉｄと、そのユーザ識別情報に対応するノルムの２乗であるｎｏｒｍ＿ｓｑｕａｒｅと、そのユーザ識別情報に対応するノルムであるｎｏｒｍとを関連付けて、テーブル形式で記憶する。
【００２９】
類似度格納部２０は、ＨＤＤなどの記憶装置を用いて、２ユーザ分のユーザ識別情報と、そのユーザ識別情報に対応する２ユーザ間の内積と、その２ユーザ間の類似性を示す類似度を関連付けて複数記憶する。図５は、類似度格納部２０の格納状態の一例を示す図である。図５に示すように、記憶している類似度に対応する２ユーザのうちの一方に対応するユーザ識別情報であるｕｓｅｒ＿ｉｄ＿１と、記憶している類似度に対応する２ユーザのうちの他方に対応するユーザ識別情報であるｕｓｅｒ＿ｉｄ＿２と、２ユーザ間の内積であるｉｎｎｅｒ＿ｐｒｏｄｕｃｔと、２ユーザ間の類似度であるｓｉｍｉｌａｒｉｔｙとを関連付けて、テーブル形式で記憶する。このテーブルにおいて、（ｕｓｅｒ＿ｉｄ＿１，ｕｓｅｒ＿ｉｄ＿２）の組合せはユニーク（一意）であり、この組合せを指定することにより、テーブルのデータが特定できる。
【００３０】
本実施形態における類似度の算出方法は、類似度算出対象の一方のユーザの利用頻度値をベクトル要素とする嗜好ベクトルと、類似度算出対象の他方のユーザの利用頻度値をベクトル要素とする嗜好ベクトルとのコサイン距離を用いるものとする。類似度が高ければ高いほど、２ユーザ間の類似性が高くなるという性質を持つ。また、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を入れ替えて一致するものが重複して記憶されないように、ユーザ識別情報に大小関係を設け、常に、ｕｓｅｒ＿ｉｄ＿１＜ｕｓｅｒ＿ｉｄ＿２が成り立つようにするか、または、常に、ｕｓｅｒ＿ｉｄ＿１＞ｕｓｅｒ＿ｉｄ＿２が成り立つようにするとよい。
【００３１】
ユーザ情報格納部２１は、ＨＤＤなどの記憶装置を用いて、ユーザ識別情報と、ユーザ属性情報とを関連付けて記憶する。ユーザ属性情報とは、例えば、ユーザの氏名、年齢、性別、居住地域、趣味、電子メールあるいは電話番号などのコンタクト情報などである。また更に、ユーザが希望する「紹介相手の条件」を含んでいても良い。図６は、ユーザ情報格納部２１の格納状態の一例を示す図である。図６に示すように、ユーザ識別情報であるｕｓｅｒ＿ｉｄと、ユーザ識別情報に対応するユーザの情報であるｕｓｅｒ＿ｉｎｆｏとを関連付けて記憶する。
コンテンツ情報格納部２２は、ＨＤＤなどの記憶装置を用いて、コンテンツ識別情報と、コンテンツ属性情報とを関連付けて記憶する。コンテンツ属性情報とは、例えば、コンテンツの名称、制作者、制作年、ジャンル、価格、コンテンツを利用するのに適したユーザの条件、などの情報である。図７は、コンテンツ情報格納部２２の格納状態の一例を示す図である。図７に示すように、コンテンツ識別情報であるｃｏｎｔｅｎｔ＿ｉｄと、コンテンツ識別情報に対応するコンテンツの情報であるｃｏｎｔｅｎｔ＿ｉｎｆｏとを関連付けて記憶する。
【００３２】
類似度算出部１５は、同一コンテンツに対する嗜好情報を有する２ユーザ間の類似度を所定のタイミングで算出する。所定のタイミングとは例えば、利用情報を一定回数受信するごととしてもよいし、２４時間ごとなど、一定の時間経過ごととしてもよい。また、月曜日〜金曜日までは３時間ごと、土曜日は６時間ごと、日曜日は１２時間ごと、というように時間間隔が変動しても良い。また、夏は時間間隔を短くして、冬は時間間隔を長くするなど、季節に応じて時間間隔を変えても良い。また後述するように、端末装置３から、類似ユーザ情報の取得を要求する取得要求、または推薦コンテンツの取得を要求する取得要求を受信したタイミングでも良い。
ここで、類似度算出部１５の構成を図８のブロック図を用いて説明する。図８に示すように、類似度算出部１５は、コサイン類似度算出部１５０、通常ノルム算出部１５１、補正ノルム算出部１５２、追加ノルム２乗補正値算出部１５３、更新ノルム２乗補正値算出部１５４、通常内積算出部１５５、補正内積算出部１５６、追加内積補正値算出部１５７、更新内積補正値算出部１５８との構成である。なお、補正ノルム算出部１５２は、第１の補正値計算部や第１の統合補正値計算部としての機能を有する。また、補正内積算出部１５７は、第２の補正値計算部や第２の統合補正値計算部としての機能を有する。
【００３３】
コサイン類似度算出部１５０は、通常ノルム算出部１５１、補正ノルム算出部１５２、通常内積算出部１５５、補正内積算出部１５６とデータのやり取りを行いながら、嗜好情報格納部１８に記憶されている複数の嗜好情報や、ノルム格納部１９に記憶されているユーザ識別情報に対する嗜好ベクトルのノルムや、類似度格納部２０に記憶されている２ユーザ間の類似性を数値化した類似度等を用いて、コサイン距離を用いた類似度を算出する。そして、類似度格納部２０に、類似度算出対象の２ユーザに対応する２つのユーザ識別情報と、算出した類似度とを関連付けて記憶する。そして、全類似度算出対象の２ユーザ間の類似度算出が終わると、嗜好情報格納部１８において、ｓｔａｔｅが「１」、または、「２」の全ての嗜好情報に対して、ｖａｌｕｅの値をｎｅｗ＿ｖａｌｕｅの値に置き換え、ｎｅｗ＿ｖａｌｕｅの値を消去し、ｓｔａｔｅを「０」とする。また、ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｖａｌｕｅを消去するだけでよい。
通常ノルム算出部１５１は、一度もノルムを算出したことのないユーザのノルムの２乗と、ノルムを算出するためのものである。
【００３４】
補正ノルム算出部１５２は、追加ノルム２乗補正値算出部１５３、更新ノルム２乗補正値算出部１５４とデータのやり取りを行いながら、以前ノルムの２乗とノルムを算出したユーザにおいて、以前算出したノルムの２乗（ノルム関連値、以前算出したノルムもノルム関連値となる）との変化量をノルム２乗補正値として算出し、以前算出したノルムの２乗にそのノルム２乗補正値を加えることで、新たなノルムの２乗（新規ノルム関連値）を算出し、ノルム２乗補正値を用いて算出したノルムの２乗の平方根をとってノルムを算出（こちらも新規ノルム関連値）するものである。尚、ノルム２乗補正値は後述する追加ノルム２乗補正値と更新ノルム２乗補正値の和である。また、追加ノルム２乗補正値は、追加ノルム２乗補正値算出部１５３にて算出される。また、更新ノルム２乗補正値は、更新ノルム２乗補正値算出部１５４にて算出される。
【００３５】
追加ノルム２乗補正値算出部１５３は、ノルム算出対象のユーザにおいて、前回類似度を算出した際に、嗜好情報を有していないコンテンツであり、前回類似度算出以降に、新たに嗜好情報が追加されたコンテンツにおける嗜好情報のみを用いて、追加ノルム２乗補正値を算出するためのものである。
更新ノルム２乗補正値算出部１５４は、ノルム算出対象のユーザにおいて、前回類似度を算出した際に、嗜好情報を有するコンテンツにおいて、その嗜好情報における利用頻度値に対して更新が行われた場合に、そのコンテンツにおける嗜好情報のみを用いて、更新ノルム２乗補正値を算出するためのものである。
通常内積算出部１５５は、一度も内積を算出したことのない２ユーザ間の内積を算出するためのものである。
【００３６】
補正内積算出部１５６は、追加内積補正値算出部１５７、更新内積補正値算出部１５８とデータのやり取りを行いながら、以前内積を算出した２ユーザにおいて、以前算出した内積（利用者間内積値）との変化量を内積補正値として算出し、以前算出した内積にその内積補正値を加えることで、新たな内積（新規内積値）を算出するものである。尚、内積補正値は、後述する追加内積補正値と更新内積補正値の和である。また、追加内積補正値は追加内積補正値算出部１５７にて算出される。また、更新内積補正値は更新内積補正値算出部１５８にて算出される。
追加内積補正値算出部１５７は、類似度算出対象の２ユーザにおいて、前回類似度を算出した際に、少なくとも一方が、嗜好情報を有していないコンテンツであり、新たに嗜好情報が追加されたことにより、両ユーザが共に嗜好情報を有することなったコンテンツにおける両ユーザの嗜好情報のみを用いて、追加内積補正値を算出するためのものである。
更新内積補正値算出部１５８は、類似度算出対象の２ユーザにおいて、前回類似度を算出した際に、両ユーザが共に嗜好情報を有する同一のコンテンツにおいて、その少なくとも一方の嗜好情報における利用頻度値に対して更新が行われた場合に、その同一コンテンツにおける両ユーザの嗜好情報のみを用いて、更新内積補正値を算出するためのものである。
以上が、類似度算出部１５における構成の説明である。
【００３７】
類似ユーザ情報選択部１６は、取得要求受信部１２より、ユーザ識別情報を含む取得要求を受信した後、類似度格納部２０に記憶されているデータを用いて、１つ以上の類似ユーザのユーザ識別情報を選択する。そして、ユーザ情報格納部２１より、選択したユーザ識別情報に対応するユーザ属性情報を取得する。そして、要求情報送信部１３に、取得した１つ以上のユーザ属性情報を要求情報として送信する。
推薦コンテンツ選択部１７は、取得要求受信部１２より、ユーザ識別情報を含む取得要求を受信した後、嗜好情報格納部１８、類似度格納部２０に記憶されているデータを用いて、１つ以上の推薦するコンテンツのコンテンツ識別情報を選択する。そして、コンテンツ情報格納部２２より、選択したコンテンツ識別情報に対応するコンテンツ情報を取得する。そして、要求情報送信部１３に、取得した１つ以上のコンテンツ情報を要求情報として送信する。
【００３８】
端末装置３は、ネットワーク２を通じて、サーバ装置１に、コンテンツの利用情報を送信したり、サーバ装置１より、要求情報を受信したりする装置である。
端末装置３は、利用情報送信部３１、取得要求送信部３２、要求情報受信部３３、入力部３４、表示部３５から構成される。
端末装置３は、ＣＰＵ、ＲＡＭ、ＲＯＭ、ハードディスクドライブ（ＨＤＤ）、ネットワークインタフェース等を備えるパーソナルコンピュータ等を用いて、ソフトウェア（プログラム）処理として実施することも可能である。
【００３９】
利用情報送信部３１は、入力部３４より、コンテンツの利用履歴、例えば、コンテンツが音楽であれば、再生を行ったという履歴であり、コンテンツが映画であれば、視聴したという履歴を受信する。そして、受信した利用履歴と端末装置３を利用中のユーザを識別するためのユーザ識別情報と、利用されたコンテンツに対応するコンテンツ識別情報より、利用情報を作成する。そして、ネットワーク２を通じて、サーバ装置１に、作成した利用情報を送信する。
【００４０】
取得要求送信部３２は、入力部３４より、類似ユーザの情報を要求するような操作、例えば、表示部３５に類似ユーザ情報取得ボタンを予め表示し、その類似ユーザ情報取得ボタンの選択を受信する。そして、サーバ装置１に、ユーザ識別情報と類似ユーザ情報の要求を含む取得要求を送信する。また、入力部３４より、コンテンツの推薦を要求するような操作、例えば、表示部３５に推薦コンテンツ取得ボタンを予め表示し、その推薦コンテンツ取得ボタンの選択を受信する。そして、サーバ装置１に、ユーザ識別情報と推薦コンテンツの要求を含む取得要求を送信する。尚、取得要求は、ユーザ識別情報と取得要求の種類を示す情報のみでもよいし、推薦数を制限する情報等を含ませても良い。推薦数を制限する情報等を含んだ場合は、サーバ装置１にてその制限情報が反映される。
要求情報受信部３３は、サーバ装置１より、要求情報を受信する。そして、受信した要求情報を描画し、表示部３５に表示する。
【００４１】
入力部３４は、例えば、端末装置３がＰＣ（Ｐｅｒｓｏｎａｌ Ｃｏｍｐｕｔｅｒ）であれば、マウスやキーボード、携帯電話であれば、ボタンといったように、ユーザが端末装置３を操作するためのインタフェースである。入力部３４は、利用情報送信部３１に、コンテンツの操作履歴を送信する。また、取得要求送信部３２に、類似ユーザ情報を要求するような操作や、コンテンツの推薦を要求するような操作を送信する。
表示部３５は、例えば、ディスプレイといったように、様々な情報を表示し、ユーザに視覚的に示すためのインタフェースである。表示部３５は、要求情報受信部３３によって描画された要求情報を表示する。
【００４２】
次に、上記構成におけるサーバ装置１の動作を説明する。
第１の実施形態におけるサーバ装置１は、ネットワーク２を通じて、複数の端末装置３との情報のやり取りを行いながら、主に、嗜好情報の記憶、類似度の算出、類似ユーザ情報の提供、コンテンツの推薦を行う。
図９は、端末装置３から送信された嗜好情報をサーバ装置１が受信して記憶する処理フローを示すシーケンス図である。
【００４３】
まず、端末装置３の利用情報送信部３１が、入力部３４より、利用履歴を受信し（ステップＳ１０１）、ステップＳ１０１にて受信した利用履歴と、端末装置３を利用中のユーザを識別するユーザ識別情報と、利用したコンテンツに対応するコンテンツ識別情報とを用いて、利用情報を作成し（ステップＳ１０２）、ネットワーク２を通じて、サーバ装置１に、ステップＳ１０２にて作成した利用情報を送信する（ステップＳ１０３）。
次に、サーバ装置１の利用情報受信部１１が、端末装置３から送信された利用情報を受信し（ステップＳ１０４）、利用頻度値算出部１４に、ステップＳ１０４にて受信した利用情報を送信する（ステップＳ１０５）。
次に、利用頻度値算出部１４が、利用情報受信部１１より、利用情報を受信し（ステップＳ１０６）、ステップＳ１０６で受信した利用情報を用いて利用頻度値を算出する（ステップＳ１０７）。
【００４４】
次に、利用頻度値算出部１４が、嗜好情報格納部１８に、ステップＳ１０６にて受信した利用情報に含まれるユーザ識別情報とコンテンツ識別情報に対応する嗜好情報が存在するか否かを確認する。嗜好情報が存在する場合は、嗜好情報格納部１８において、その嗜好情報のｎｅｗ＿ｖａｌｕｅを、ステップＳ１０７で算出した利用頻度値と置き換え、その嗜好情報のｓｔａｔｅの値が「０」のときのみ「１」に置き換える。また、嗜好情報が存在しない場合は、嗜好情報格納部１８に、ステップＳ１０６にて受信した利用情報含まれるユーザ識別情報をｕｓｅｒ＿ｉｄとし、コンテンツ識別情報をｃｏｎｔｅｎｔ＿ｉｄとし、ステップＳ１０７にて算出した利用頻度値をｎｅｗ＿ｖａｌｕｅとし、ｓｔａｔｅを「２」とした嗜好情報を記憶し（ステップＳ１０８）、ステップＳ１０１からステップＳ１０８までの一連の処理を終了する。
【００４５】
尚、嗜好情報格納部１８に記憶する嗜好情報を所定の条件を満たすコンテンツに対応する嗜好情報のみに制限することもできる。例えば、嗜好情報を記憶するの制限の基準をコンテンツ識別情報で判定することができる。このとき、予め図示しないコンテンツ識別情報のリストをサーバ装置１側に記憶し、そのコンテンツ識別情報のリストに、嗜好情報におけるコンテンツ識別情報が含まれているか否かを判定し、リストに含まれたコンテンツ識別情報に対応する嗜好情報のみを記憶することができる。また、図示しないコンテンツ識別情報のリストを端末装置３に記憶し、利用情報としてサーバ装置１に送信するか否かを判定し、リストに含まれたコンテンツ識別情報に対応する利用情報のみを送信することでも同様に制限することができる。
【００４６】
また、サーバ装置１や、端末装置３に、コンテンツ識別情報のリストを記憶する代わりに、コンテンツ属性情報のリストを記憶し、リストに含まれたコンテンツ属性情報を有するコンテンツに対応する嗜好情報のみを記憶することで、嗜好情報格納部１８に記憶する嗜好情報を制限することもできる。例えば、特定の制作者と特定のジャンルとをコンテンツ属性情報のリストに登録し、特定の制作者と特定のジャンルを共に満たすコンテンツに対応する嗜好情報のみ記憶してもよいし、特定の制作者と特定のジャンルの何れかを満たすコンテンツに対応する嗜好情報のみ記憶してもよい。以上のように、所定の条件を満たすコンテンツに対応する嗜好情報のみを嗜好情報格納部１８に記憶することで、より高精度に類似ユーザを選出することができる。例えば、サッカーの世界的な大会の開催中に、にわかファンが増えることが予測される際に、リストにサッカーに関するコンテンツ以外のコンテンツのコンテンツ識別情報やコンテンツ属性情報を登録することで、サッカーに関するコンテンツの影響を排除し、より高精度に類似ユーザを選出することができる。また、類似度算出処理に用いる嗜好情報が減るため、処理時間も短くなる。
【００４７】
また、端末装置３に、図示しないコンテンツの利用回数を記憶する格納部を用意し、一定回数以上の利用があったコンテンツのみをサーバ装置１に送信することで、嗜好情報格納部１８に記憶する嗜好情報を制限することもできる。一定回数以上の利用があったコンテンツに対応する嗜好情報のみを嗜好情報格納部１８に記憶することで、ユーザの嗜好が高いコンテンツに対応する嗜好情報のみを類似度算出に用いることができるので、より高精度に類似ユーザを選出することができる。また、類似度算出処理に用いる嗜好情報が減るため、処理時間も短くなる。
また、ユーザごとに、嗜好情報格納部１８に記憶する嗜好情報の数を設定し、記憶できる数の上限に到達した後はそれ以上記憶しないようにすることもできる。
以上が、端末装置３より、利用情報を受信した際の、サーバ装置１による嗜好情報を記憶する処理フローの説明である。
【００４８】
図１０は、上述した所定のタイミングごとに行われる、類似度算出部１５による類似度算出処理の動作を示すフローチャートである。
まず、コサイン類似度算出部１５０が、通常ノルム算出部１５２、補正ノルム算出部１５３とデータのやり取りを行いながら、ノルム算出処理を行い（ステップＳ２０１）、通常内積算出部１５５、補正内積算出部１５６とデータのやり取りを行いながら、内積算出処理を行い（ステップＳ２０２）、類似度算出処理を行う（ステップＳ２０３）。
次に、コサイン類似度算出部１５０が、嗜好情報格納部１８に記憶されている嗜好情報の中で、ｓｔａｔｅが「１」、または、「２」の嗜好情報において、ｖａｌｕｅの値を、ｎｅｗ＿ｖａｌｕｅの値で置き換え（ステップＳ２０４）、ｎｅｗ＿ｖａｌｕｅを全て消去し（ステップＳ２０５）、全てのｓｔａｔｅを「０」とし（ステップＳ２０６）、ステップＳ２０１からステップＳ２０６までの一連の処理を終了する。
【００４９】
次に、ステップＳ２０１のノルム算出処理について、図１１のフローチャートを用いて説明する。
まず、コサイン類似度算出部１５０が、ノルムを算出するユーザに対するユーザ識別情報を、ｕｓｅｒ＿ｉｄとして抽出する（ステップＳ３０１）。ここでは、嗜好情報格納部１８を参照しながら、全ユーザの中で、少なくとも１つの嗜好情報におけるｓｔａｔｅが「１」または「２」であるという条件を満たすユーザのユーザ識別情報を抽出する。この条件を満たすユーザは、前回の類似度算出時以降に、新たにコンテンツとして追加されたり、前回の類似度算出時にそのコンテンツに対する嗜好情報が存在していても、その嗜好情報における利用頻度値に変化が起きたりするため、ノルムが変化する。また、この条件を満たさないユーザのノルムは、前回の類似度算出時のノルムから変化がないため、改めてノルムを算出する必要がない。尚、ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｖａｌｕｅが存在する状態がｓｔａｔｅ「１」、または、ｓｔａｔｅ「２」の状態のどちらか一方であるため、ｎｅｗ＿ｖａｌｕｅの存在の有無で判定することができる。
【００５０】
次に、コサイン類似度算出部１５０が、ステップＳ３０１にて抽出したｕｓｅｒ＿ｉｄのうち、例えば抽出した順に、１つ選択する（ステップＳ３０２）。
次に、コサイン類似度算出部１５０が、ステップＳ３０２にて選択したｕｓｅｒ＿ｉｄにおいて、以前ノルムを算出したか否かを判定する。以前ノルムを算出したことがある場合は、ステップＳ３０５へ進み、以前ノルムを算出したことがない場合は、ステップＳ３０４へ進む（ステップＳ３０３）。ここで、以前ノルムを算出したか否かを判定するには、ノルム格納部１９に、ステップＳ３０２で選択したｕｓｅｒ＿ｉｄに対応したノルム（ｎｏｒｍ）が記憶されているか否かで容易に判定することができる。記憶されている場合は、以前ノルムを算出したことになる。記憶されていない場合は、以前ノルムを算出していないことになる。サーバ装置１の初期状態では、ノルム格納部１９に何も格納されていないため、ｕｓｅｒ＿ｉｄにおいて、必ず最初の１回は、ステップＳ３０４に進むことになる。
【００５１】
ステップＳ３０４では、コサイン類似度算出部１５０が、通常ノルム算出部１５１に、ステップＳ３０２にて選択したｕｓｅｒ＿ｉｄを送ることで、通常ノルム算出部１５１が、通常ノルム算出処理を行い、ステップＳ３０６へ進む。
ステップＳ３０５では、コサイン類似度算出部１５０が、補正ノルム算出部１５２に、ステップＳ３０２にて選択したｕｓｅｒ＿ｉｄを送ることで、補正ノルム算出部１５２が、補正ノルム算出処理を行い、ステップＳ３０６へ進む。
次に、コサイン類似度算出部１５０が、ステップＳ３０２にて、全てのｕｓｅｒ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ３０１からステップＳ３０６までの一連の処理を終了し、まだ未選択のものが残っている場合は、ステップＳ３０２へ進む（ステップＳ３０６）。
以上が、ステップＳ２０１のノルム算出処理の説明である。
【００５２】
次に、ステップＳ３０４の通常ノルム算出処理において、図１２を用いて説明する。
まず、通常ノルム算出部１５１が、コサイン類似度算出部１５０より、ｕｓｅｒ＿ｉｄを取得し（ステップＳ４０１）、ノルムの２乗を算出するための変数ｎ＿ｓ＝０とする（ステップＳ４０２）。
次に、通常ノルム算出部１５１が、嗜好情報格納部１８にて、ステップＳ４０１にて取得したｕｓｅｒ＿ｉｄに対応するｃｏｎｔｅｎｔ＿ｉｄを全て取得する（ステップＳ４０３）。
次に、通常ノルム算出部１５１が、ステップＳ４０３にて取得したｃｏｎｔｅｎｔ＿ｉｄのうち、例えば、取得した順番に、ｃｏｎｔｅｎｔ＿ｉｄを選択する（ステップＳ４０４）。
【００５３】
次に、通常ノルム算出部１５１が、嗜好情報格納部１８にて、ステップＳ４０１にて取得したｕｓｅｒ＿ｉｄとステップＳ４０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｎｅｗ＿ｖａｌｕｅを取得する（ステップＳ４０５）。通常ノルム算出処理を行う際は、前回の類似度算出時に、ステップＳ４０１にて取得したｕｓｅｒ＿ｉｄに対応するユーザが存在しなかったため、嗜好情報格納部１８に記憶されている嗜好情報は全て、前回の類似度算出以降に、新たに追加されたものである。そのため、ステップＳ４０１にて取得したユーザ識別情報に対応する嗜好情報のｓｔａｔｅの値は、全て「２」であるため、最新の利用頻度値は、ｎｅｗ＿ｖａｌｕｅにのみ記憶されている。
次に、通常ノルム算出部１５１が、ｎ＿ｓにステップＳ４０５にて取得したｎｅｗ＿ｖａｌｕｅの２乗を加える（ステップＳ４０６）。
次に、通常ノルム算出部１５１が、ステップＳ４０４にて、全てのｃｏｎｔｅｎｔ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ４０８へ進み、まだ未選択のものが残っている場合は、ステップＳ４０４へ進む（ステップＳ４０７）。
ステップＳ４０８では、通常ノルム算出部１５１が、ノルムを算出するためにｎ＝ｎ＿ｓ＾０．５とする。
【００５４】
次に、通常ノルム算出部１５１が、ノルム格納部１９に、ステップＳ４０１にて取得したｕｓｅｒ＿ｉｄと、ステップＳ４０２からステップＳ４０７までの処理にて算出したｎ＿ｓをｎｏｒｍ＿ｓｑｕａｒｅとし、ステップＳ４０８にて算出したｎをｎｏｒｍとして関連付けたものを記憶し（ステップＳ４０９）、ステップＳ４０１からステップＳ４０９までの一連の処理を終了する。
尚、通常ノルム算出処理によるノルム算出式は、ノルム算出対象のユーザをｕとし、ユーザｕの全コンテンツをＩ（ｕ）、ユーザｕのコンテンツｉにおける利用頻度値をｖ（ｕ，ｉ）としたとき、ユーザｕのノルムの２乗ｎｓ（ｕ）は、数式（１）で表わされる。
以上が、ステップＳ３０４の通常ノルム算出処理の説明である。
【００５５】
【数１】
0005429116.tif 000002
【００５６】
次に、ステップＳ３０５における補正ノルム算出処理について、図１３を用いて説明する。
まず、補正ノルム算出部１５２が、コサイン類似度算出部１５０より、ｕｓｅｒ＿ｉｄを取得し（ステップＳ５０１）、ノルム格納部１９より、ステップＳ５０１にて取得したｕｓｅｒ＿ｉｄに対応するｎｏｒｍ＿ｓｑｕａｒｅを取得し（ステップＳ５０２）、ノルムを算出するための変数ｎｅｗ＿ｎ＿ｓの初期値をｎｏｒｍ＿ｓｑｕａｒｅとする（ステップＳ５０３）。
次に、補正ノルム算出部１５２が、追加ノルム２乗補正値算出部１５３に、ステップＳ５０１にて取得したｕｓｅｒ＿ｉｄを送ることで、追加ノルム２乗補正値算出部１５３が、追加ノルム２乗補正値算出処理を行う（ステップＳ５０４）。
次に、補正ノルム算出部１５２が、追加ノルム２乗補正値算出部１５３より、追加ノルム２乗補正値Δｎ＿ｎ＿ｓを取得し（ステップＳ５０５）、ｎｅｗ＿ｎ＿ｓにステップＳ５０５にて取得したΔｎ＿ｎ＿ｓを加算する（ステップＳ５０６）。
次に、補正ノルム算出部１５２が、更新ノルム２乗補正値算出部１５４に、ステップＳ５０１にて取得したｕｓｅｒ＿ｉｄを送ることで、更新ノルム２乗補正値算出部１５４が、更新ノルム２乗補正値算出処理を行う（ステップＳ５０７）。
【００５７】
次に、補正ノルム算出部１５２が、更新ノルム２乗補正値算出部１５４より、更新ノルム２乗補正値Δｕ＿ｎ＿ｓを取得し（ステップＳ５０８）、ｎｅｗ＿ｎ＿ｓにステップＳ５０８にて取得したΔｕ＿ｎ＿ｓを加算する（ステップＳ５０９）。
次に、補正ノルム算出部１５２が、ノルムを算出するために、ｎｅｗ＿ｎ＝ｎｅｗ＿ｎ＿ｓ＾０．５とし（ステップＳ５１０）、ノルム格納部１９に、ステップＳ５０１にて取得したｕｓｅｒ＿ｉｄと、ステップＳ５０２からステップＳ５０９までの処理にて算出したｎｅｗ＿ｎ＿ｓをｎｏｒｍ＿ｓｑｕａｒｅとし、ステップＳ５１０にて算出したｎｅｗ＿ｎをｎｏｒｍとして関連付けたものを記憶し（ステップＳ５１１）、ステップＳ５０１からステップＳ５１１までの一連の処理を終了する。
以上が、ステップＳ３０５の補正ノルム算出処理の説明である。
【００５８】
次に、ステップＳ５０４の追加ノルム２乗補正値算出処理について、図１４を用いて説明する。
まず、追加ノルム２乗補正値算出部１５３が、補正ノルム算出部１５２より、ｕｓｅｒ＿ｉｄを取得し（ステップＳ６０１）、追加ノルム２乗補正値を算出するための変数Δｎ＿ｎ＿ｓ＝０とする（ステップＳ６０２）。
次に、追加ノルム２乗補正値算出部１５３が、嗜好情報格納部１８より、ステップＳ６０１にて取得したｕｓｅｒ＿ｉｄに対応する嗜好情報の中で、ｓｔａｔｅが「２」の嗜好情報のｃｏｎｔｅｎｔ＿ｉｄを全て取得する（ステップＳ６０３）。嗜好情報のｓｔａｔｅが「２」であれば、前回の類似度算出以降に、嗜好情報格納部１８に記憶されたため、前回の類似度算出の際に、対応する嗜好情報の利用頻度値の２乗を加算していない。そのため、ｎｏｒｍ＿ｓｑｕａｒｅに、利用頻度値の２乗をそのまま加算する必要がある。尚、ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｖａｌｕｅのみが存在する状態がｓｔａｔｅ「２」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００５９】
次に、追加ノルム２乗補正値算出部１５３が、ステップＳ６０３にて取得したｃｏｎｔｅｎｔ＿ｉｄを、例えば、取得した順に、一つ選択し（ステップＳ６０４）、嗜好情報格納部１８より、ステップＳ６０１にて取得したｕｓｅｒ＿ｉｄと、ステップＳ６０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｎｅｗ＿ｖａｌｕｅを取得する（ステップＳ６０５）。
次に、追加ノルム２乗補正値算出部１５３が、Δｎ＿ｎ＿ｓに、ステップＳ６０５にて取得したｎｅｗ＿ｖａｌｕｅの２乗を加算する（ステップＳ６０６）。
次に、追加ノルム２乗補正値算出部１５３が、ステップＳ６０４にて、全てのｃｏｎｔｅｎｔ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ６０８へ進み、まだ未選択のものが残っている場合は、ステップＳ６０４へ進む（ステップＳ６０７）。
次に、追加ノルム２乗補正値算出部１５３が、補正ノルム算出部１５２に、Δｎ＿ｎ＿ｓを送り（ステップＳ６０８）、ステップＳ６０１からステップＳ６０８までの一連の処理を終了する。
以上が、ステップＳ５０４の追加ノルム２乗補正値算出処理の説明である。
【００６０】
次に、ステップＳ５０７の更新ノルム２乗補正値算出処理について、図１５を用いて説明する。
まず、更新ノルム２乗補正値算出部１５４が、補正ノルム算出部１５２より、ｕｓｅｒ＿ｉｄを取得し（ステップＳ７０１）、更新ノルム２乗補正値を算出するための変数Δｕ＿ｎ＿ｓ＝０とする（ステップＳ７０２）。
次に、更新ノルム２乗補正値算出部１５４が、嗜好情報格納部１８より、ステップＳ７０１にて取得したｕｓｅｒ＿ｉｄに対応する嗜好情報の中で、ｓｔａｔｅが「１」の嗜好情報のｃｏｎｔｅｎｔ＿ｉｄを全て取得する（ステップＳ７０３）。嗜好情報のｓｔａｔｅが「１」であれば、前回の類似度算出時に、嗜好情報格納部１８に記憶されていたため、前回の類似度算出の際に、対応する嗜好情報の利用頻度値の２乗を加算している。そのため、ｎｏｒｍ＿ｓｑｕａｒｅに、利用頻度値の２乗の変化量のみを加算する必要がある。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅが共に存在する状態がｓｔａｔｅ「１」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００６１】
次に、更新ノルム２乗補正値算出部１５４が、ステップＳ７０３にて取得したｃｏｎｔｅｎｔ＿ｉｄを、例えば、取得した順に、１つ選択し（ステップＳ７０４）、嗜好情報格納部１８より、ステップＳ７０１にて取得したｕｓｅｒ＿ｉｄと、ステップＳ７０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｎｅｗ＿ｖａｌｕｅとｖａｌｕｅとを取得する（ステップＳ７０５）。
次に、更新ノルム２乗補正値算出部１５４が、Δｕ＿ｎ＿ｓに、ステップＳ７０５にて取得したｎｅｗ＿ｖａｌｕｅの２乗から、ステップＳ７０５にて取得したｖａｌｕｅの２乗を引いたものを加算する（ステップＳ７０６）。
次に、更新ノルム２乗補正値算出部１５４が、ステップＳ７０４にて、全てのｃｏｎｔｅｎｔ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ７０８へ進み、まだ未選択のものが残っている場合は、ステップＳ７０４へ進む（ステップＳ７０７）。
次に、更新ノルム２乗補正値算出部１５４が、補正ノルム算出部１５２に、Δｕ＿ｎ＿ｓを送り（ステップＳ７０８）、ステップＳ７０１からステップＳ７０８までの一連の処理を終了する。
以上が、ステップＳ５０７の更新ノルム２乗補正値算出処理の説明である。
【００６２】
尚、ユーザｕにおける以前算出したノルムの２乗をｎｓ（ｕ）、ノルムの２乗の変化量をΔｎｓ（ｕ）、追加ノルム２乗補正値をΔｎｎｓ（ｕ）、更新ノルム２乗補正値をΔｕｎｓ（ｕ）としたとき、補正ノルム算出処理によるノルムの２乗ｎｓ’（ｕ）は、数式（２）で表わされる。
【００６３】
【数２】
0005429116.tif 000003
【００６４】
さらに、ユーザｕの全コンテンツのうち、追加ノルム２乗補正値算出処理の対象となった全てのコンテンツをＪ（ｕ）とし、ユーザｕにおけるコンテンツｊの最新の利用頻度値（追加ノルム２乗補正値算出処理におけるｎｅｗ＿ｖａｌｕｅ）をｖ'（ｕ，ｊ）とすると、Δｎｎｓ（ｕ）は数式（３）で表わされる。
【００６５】
【数３】
0005429116.tif 000004
【００６６】
さらに、ユーザｕの全コンテンツのうち、更新ノルム２乗補正値算出処理の対象となった全てのコンテンツをＫ（ｕ）とし、ユーザｕにおけるコンテンツｋの最新の利用頻度値（更新ノルム２乗補正値算出処理におけるｎｅｗ＿ｖａｌｕｅ）をｖ'（ｕ，ｋ）とし、以前類所度を算出した際の利用頻度値（更新ノルム２乗補正値算出処理におけるｖａｌｕｅ）をｖ（ｕ，ｋ）とすると、Δｕｎｓ（ｕ）は数式（４）で表わされる。
【００６７】
【数４】
0005429116.tif 000005
【００６８】
次に、ステップＳ２０２の内積算出処理について、図１６のフローチャートを用いて説明する。
まず、コサイン類似度算出部１５０が、内積を算出する２ユーザに対するユーザ識別情報の組合せを、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せとして抽出する（ステップＳ８０１）。ここでは、嗜好情報格納部１８を参照しながら、２ユーザ間で同一のコンテンツに対応する嗜好情報が存在しており、かつ、少なくとも一方のユーザの嗜好情報における、ｓｔａｔｅが「１」または「２」であるという条件を満たす、２ユーザの組合せを抽出する。この条件を満たす２ユーザは、前回の類似度算出時には共通でなかったコンテンツが新たに共通コンテンツとして追加されたり、前回の類似度算出時に共通であっても、そのコンテンツに対する嗜好情報における利用頻度値に変化が起きたりするため、内積が変化する。また、この条件を満たさない２ユーザ間の内積は、前回の類似度算出時の内積から変化がないため、改めて内積を算出する必要がない。尚、ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｖａｌｕｅが存在する状態がｓｔａｔｅ「１」、または、ｓｔａｔｅ「２」の状態のどちらか一方であるため、ｎｅｗ＿ｖａｌｕｅの存在の有無で判定することができる。
【００６９】
次に、コサイン類似度算出部１５０が、ステップＳ８０１で抽出したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せのうちから１つの組合せを選択する。例えば、抽出した順に、１つ選択すればよい（ステップＳ８０２）。
次に、コサイン類似度算出部１５０が、ステップＳ８０２で選択したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せにおいて、以前内積を算出したか否かを判定する。以前内積を算出したことがある場合は、ステップＳ８０５へ進み、以前内積を算出したことがない場合は、ステップＳ８０４へ進む（ステップＳ８０３）。ここで、以前内積を算出したか否かを判定するには、類似度格納部２０に、ステップＳ８０２で選択したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せに対応した内積（ｉｎｎｅｒ＿ｐｒｏｄｕｃｔ）が記憶されているか否かで容易に判定することができる。記憶されている場合は、以前内積を算出したことになる。記憶されていない場合は、以前内積を算出していないことになる。サーバ装置１の初期状態では、類似度格納部２０に何も格納されていないため、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の全ての組合せにおいて、必ず最初の１回は、ステップＳ８０４に進むことになる。
【００７０】
ステップＳ８０４では、コサイン類似度算出部１５０が、通常内積算出部１５５に、ステップＳ８０２で選択したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを送ることで、通常内積算出部１５５が、通常内積算出処理を行い、ステップＳ８０６へ進む。
ステップＳ８０５では、コサイン類似度算出部１５０が、補正内積算出部１５６に、ステップＳ８０２で選択したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを送ることで、補正内積算出部１５６が、補正内積算出処理を行い、ステップＳ８０６へ進む。
次に、コサイン類似度算出部１５０が、ステップＳ８０２にて、全てのｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを選択したか否かを判定する。全て選択した場合は、ステップＳ８０１からステップＳ８０６までの一連の処理を終了し、まだ未選択のものが残っている場合は、ステップＳ８０２へ進む（ステップＳ８０６）。
以上が、ステップＳ２０２の内積算出処理の説明である。
【００７１】
次に、ステップＳ８０４の通常内積算出処理について、図１７を用いて説明する。
まず、通常内積算出部１５５が、コサイン類似度算出部１５０より、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを取得し（ステップＳ９０１）、内積を算出するための変数ｉ＿ｐ＝０とする（ステップＳ９０２）。
次に、通常内積算出部１５５が、嗜好情報格納部１８より、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿１に対応する全ての嗜好情報のｃｏｎｔｅｎｔ＿ｉｄの集合と、ｕｓｅｒ＿ｉｄ＿２に対応する全ての嗜好情報のｃｏｎｔｅｎｔ＿ｉｄとの集合において、その両方の集合に存在するｃｏｎｔｅｎｔ＿ｉｄを全て取得する（ステップＳ９０３）。これにより、２ユーザ間の共通コンテンツのｃｏｎｔｅｎｔ＿ｉｄを全て取得することができる。
【００７２】
次に、通常内積算出部１５５が、ステップＳ９０３にて取得したｃｏｎｔｅｎｔ＿ｉｄのうち、例えば、取得した順番に、ｃｏｎｔｅｎｔ＿ｉｄを選択する（ステップＳ９０４）。
次に、通常内積算出部１５５が、嗜好情報格納部１８にて、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿１とステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを確認し、その値により判定を行う。ｓｔａｔｅが「０」の場合は、ステップＳ９０６へ進み、ｓｔａｔｅが「１」、または、「２」の場合は、ステップＳ９０７へ進む（ステップＳ９０５）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００７３】
ステップＳ９０６では、通常内積算出部１５５が、嗜好情報格納部１８にて、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿１とステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値が記憶されているｖａｌｕｅをｖａｌｕｅ１として取得し、ステップＳ９０８へ進む。
ステップＳ９０７では、通常内積算出部１５５が、嗜好情報格納部１８にて、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿１とステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値が記憶されているｎｅｗ＿ｖａｌｕｅをｖａｌｕｅ１として取得し、ステップＳ９０８へ進む。
【００７４】
次に、通常内積算出部１５５が、嗜好情報格納部１８にて、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿２とステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを確認し、その値により判定を行う。ｓｔａｔｅが「０」の場合は、ステップＳ９０９へ進み、ｓｔａｔｅが「１」、または、「２」の場合は、ステップＳ９１０へ進む（ステップＳ９０８）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
ステップＳ９０９では、通常内積算出部１５５が、嗜好情報格納部１８にて、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿２とステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値が記憶されているｖａｌｕｅをｖａｌｕｅ２として取得し、ステップＳ９１１へ進む。
ステップＳ９１０では、通常内積算出部１５５が、嗜好情報格納部１８にて、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿２とステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値が記憶されているｎｅｗ＿ｖａｌｕｅをｖａｌｕｅ２として取得し、ステップＳ９１１へ進む。
【００７５】
次に、通常内積算出部１５５が、ｉ＿ｐにｖａｌｕｅ１とｖａｌｕｅ２との積を加える（ステップＳ９１１）。
次に、通常内積算出部１５５が、ステップＳ９０４にて、全てのｃｏｎｔｅｎｔ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ９１３へ進み、まだ未選択のものが残っている場合は、ステップＳ９０４へ進む（ステップＳ９１２）。
ステップＳ９１３では、通常内積算出部１５５が、類似度格納部２０に、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２と、ステップＳ９０２からステップＳ９１２までの処理にて算出したｉ＿ｐをｉｎｎｅｒ＿ｐｒｏｄｕｃｔとして関連付けたものを記憶し、ステップＳ９０１からステップＳ９１３までの一連の処理を終了する。
尚、通常内積算出処理による内積算出式は、内積算出対象の２ユーザをｘ，ｙとし、ユーザｘとユーザｙの全共通コンテンツをＩｃ、ユーザｘのコンテンツｉ（∈Ｉｃ）における利用頻度値をｖ（ｘ，ｉ）、ユーザｘのコンテンツｉにおける利用頻度値をｖ（ｙ，ｉ）としたとき、ユーザｘとユーザｙの内積ｉｐは、数式（５）で表わされる。
以上が、ステップＳ８０４の通常内積算出処理の説明である。
【００７６】
【数５】
0005429116.tif 000006
【００７７】
次に、ステップＳ８０５における補正内積算出処理について、図１８を用いて説明する。
まず、補正内積算出部１５６が、コサイン類似度算出部１５０より、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組い合わせを取得し（ステップＳ１００１）、類似度格納部２０より、ステップＳ１００１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せに対応するｉｎｎｅｒ＿ｐｒｏｄｕｃｔを取得し（ステップＳ１００２）、内積を算出するための変数ｎｅｗ＿ｉ＿ｐの初期値をｉｎｎｅｒ＿ｐｒｏｄｕｃｔとする（ステップＳ１００３）。
次に、補正内積算出部１５６が、追加内積補正値算出部１５７に、ステップＳ１００１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを送ることで、追加内積補正値算出部１５７が、追加内積補正値算出処理を行う（ステップＳ１００４）。
次に、補正内積算出部１５６が、追加内積補正値算出部１５７より、追加内積補正値Δｎ＿ｉ＿ｐを取得し（ステップＳ１００５）、ｎｅｗ＿ｉ＿ｐにステップＳ１００５にて取得したΔｎ＿ｉ＿ｐを加算する（ステップＳ１００６）。
【００７８】
次に、補正内積算出部１５６が、更新内積補正値算出部１５８に、ステップＳ１００１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを送ることで、更新内積補正値算出部１５８が、更新内積補正値算出処理を行う（ステップＳ１００７）。
次に、補正内積算出部１５６が、更新内積補正値算出部１５８より、更新内積補正値Δｕ＿ｉ＿ｐを取得し（ステップＳ１００８）、ｎｅｗ＿ｉ＿ｐにステップＳ１００８にて取得したΔｕ＿ｉ＿ｐを加算する（ステップＳ１００９）。
次に、補正内積算出部１５６が、類似度格納部２０に、ステップＳ１００１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せと、ステップＳ１００２からステップＳ１００９までの処理にて算出したｎｅｗ＿ｉ＿ｐをｉｎｎｅｒ＿ｐｒｏｄｕｃｔとして関連付けたものを記憶し（ステップＳ１０１０）、ステップＳ１００１からステップＳ１０１０までの一連の処理を終了する。
以上が、ステップＳ８０５の補正内積算出処理の説明である。
【００７９】
次に、ステップＳ１００４の追加内積補正値算出処理について、図１９を用いて説明する。
まず、追加内積補正値算出部１５７が、補正内積算出部１５６より、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを取得し（ステップＳ１１０１）、追加内積補正値Δｎ＿ｉ＿ｐ＝０とする（ステップＳ１１０２）。
次に、追加内積補正値算出部１５７が、嗜好情報格納部１８より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿１に対応するユーザとｕｓｅｒ＿ｉｄ＿２に対応するユーザの共通コンテンツにおいて、少なくとも一方の共通コンテンツに対応する嗜好情報のｓｔａｔｅの値が「２」のｃｏｎｔｅｎｔ＿ｉｄを全て取得する（ステップＳ１１０３）。この条件を満たすｃｏｎｔｅｎｔ＿ｉｄは、前回類似度算出以降に、そのｃｏｎｔｅｎｔ＿ｉｄに対応するコンテンツが共通コンテンツとなったため、前回類似度算出時に、ｉｎｎｅｒ＿ｐｒｏｄｕｃｔを算出する際に、対応する嗜好情報の利用頻度値の積を加算していない。そのため、ｉｎｎｅｒ＿ｐｒｏｄｕｃｔに、対応する利用頻度値の積をそのまま加算する必要がある。
【００８０】
次に、追加内積補正値算出部１５７が、ステップＳ１１０３にて取得したｃｏｎｔｅｎｔ＿ｉｄを、例えば、取得した順に一つ選択する（ステップＳ１１０４）。
次に、追加内積補正値算出部１５７が、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを判定する。ｓｔａｔｅが「０」の場合は、ステップＳ１１０６へ進み、ｓｔａｔｅが「１」、または、「２」の場合は、ステップＳ１１０７へ進む（ステップＳ１１０５）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００８１】
ステップＳ１１０６では、追加内積補正値算出部１５７が、嗜好情報格納部１８より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ１として取得し、ステップＳ１１０８へ進む。
ステップＳ１１０７では、追加内積補正値算出部１５７が、嗜好情報格納部１８より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ１として取得し、ステップＳ１１０８へ進む。
次に、追加内積補正値算出部１５７が、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿２と、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを判定する。ｓｔａｔｅが「０」の場合は、ステップＳ１１０９へ進み、ｓｔａｔｅが「１」、または、「２」の場合は、ステップＳ１１１０へ進む（ステップＳ１１０８）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００８２】
次に、追加内積補正値算出部１５７が、嗜好情報格納部１８より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿２と、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ２として取得し（ステップＳ１１０９）、ステップＳ１１１１へ進む。
次に、追加内積補正値算出部１５７が、嗜好情報格納部１８より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿２と、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ２として取得し（ステップＳ１１１０）、ステップＳ１１１１へ進む。
次に、追加内積補正値算出部１５７が、Δｎ＿ｉ＿ｐにｎｅｗ＿ｖａｌｕｅ１×ｎｅｗ＿ｖａｌｕｅ２を加算する（ステップＳ１１１１）。
【００８３】
次に、追加内積補正値算出部１５７が、ステップＳ１１０４にて、全てのｃｏｎｔｅｎｔ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ１１１３へ進み、まだ未選択のものが残っている場合は、ステップＳ１１０４へ進む（ステップＳ１１１２）。
次に、追加内積補正値算出部１５７が、補正内積算出部１５６に、Δｎ＿ｉ＿ｐを送り（ステップＳ１１１３）、ステップＳ１１０１からステップＳ１１１３までの一連の処理を終了する。
以上が、ステップＳ１００４の追加内積補正値算出処理の説明である。
【００８４】
次に、ステップＳ１００７の更新内積補正値算出処理について、図２０を用いて説明する。
まず、更新内積補正値算出部１５８が、補正内積算出部１５６より、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを取得し（ステップＳ１２０１）、更新内積補正値を算出するための変数Δｕ＿ｉ＿ｐ＝０とする（ステップＳ１２０２）。
次に、更新内積補正値算出部１５８が嗜好情報格納部１８より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿１に対応するユーザとｕｓｅｒ＿ｉｄ＿２に対応するユーザの共通コンテンツにおいて、一方のユーザの共通コンテンツに対応する嗜好情報のｓｔａｔｅの値が「１」で、他方のユーザの共通コンテンツに対応するｓｔａｔｅの値が「１」か「０」のｃｏｎｔｅｎｔ＿ｉｄを全て取得する（ステップＳ１２０３）。この条件を満たすｃｏｎｔｅｎｔ＿ｉｄは、前回の類似度算出時に、すでに共通コンテンツであったため、前回類似度算出時に、ｉｎｎｅｒ＿ｐｒｏｄｕｃｔを算出する際に、対応する嗜好情報の利用頻度値の積を加算している。このため、更新内積補正値算出処理を適用し、ｉｎｎｅｒ＿ｐｒｏｄｕｃｔに、利用頻度値の積の変化量のみを加算する必要がある。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅが共に存在する状態がｓｔａｔｅ「１」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００８５】
次に、更新内積補正値算出部１５８が、ステップＳ１２０３にて取得したｃｏｎｔｅｎｔ＿ｉｄを、例えば、取得した順に一つ選択する（ステップＳ１２０４）。
次に、更新内積補正値算出部１５８が、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを判定する。ｓｔａｔｅが「０」の場合は、ステップＳ１２０６へ進み、ｓｔａｔｅが「１」の場合は、ステップＳ１２０８へ進む（ステップＳ１２０５）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しく、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅが共に存在する状態がｓｔａｔｅ「１」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【００８６】
ステップＳ１２０６では、更新内積補正値算出部１５８が、嗜好情報格納部１８より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ１として、同時に前回類似度算出時と同値の利用頻度値でもあるｖａｌｕｅをｖａｌｕｅ１として取得し、ステップＳ１２０８へ進む。
ステップＳ１２０７では、更新内積補正値算出部１５８が、嗜好情報格納部１８より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ１として、前回類似度算出時と同値の利用頻度値であるｖａｌｕｅをｖａｌｕｅ１として取得し、ステップＳ１２０８へ進む。
【００８７】
次に、更新内積補正値算出部１５８が、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿２と、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを判定する。ｓｔａｔｅが「０」の場合は、ステップＳ１２０９へ進み、ｓｔａｔｅが「１」の場合は、ステップＳ１２１０へ進む（ステップＳ１２０８）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しく、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅが共に存在する状態がｓｔａｔｅ「１」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
ステップＳ１２０９では、更新内積補正値算出部１５８が、嗜好情報格納部１８より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿２と、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ２として、同時に前回類似度算出時と同値の利用頻度値でもあるｖａｌｕｅをｖａｌｕｅ２として取得し、ステップＳ１２１１へ進む。
【００８８】
ステップＳ１２１０では、更新内積補正値算出部１５８が、嗜好情報格納部１８より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿２と、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅをｎｅｗ＿ｖａｌｕｅ２として取得し、前回類似度算出時と同値の利用頻度値であるｖａｌｕｅをｖａｌｕｅ２として取得し、ステップＳ１２１１へ進む。
次に、更新内積補正値算出部１５８が、Δｕ＿ｉ＿ｐにｎｅｗ＿ｖａｌｕｅ１×ｎｅｗ＿ｖａｌｕｅ２−ｖａｌｕｅ１×ｖａｌｕｅ２を加算する（ステップＳ１２１１）。
次に、更新内積補正値算出部１５８が、ステップＳ１２０４にて、全てのｃｏｎｔｅｎｔ＿ｉｄを選択したか否かを判定する。全て選択した場合は、ステップＳ１２１３へ進み、まだ未選択のものが残っている場合は、ステップＳ１２０４へ進む（ステップＳ１２１２）。
次に、更新内積補正値算出部１５８が、補正内積算出部１５６に、Δｕ＿ｉ＿ｐを送り（ステップＳ１２１３）、ステップＳ１２０１からステップＳ１２１３までの一連の処理を終了する。
以上が、ステップＳ１００７の更新内積補正値算出処理の説明である。
【００８９】
尚、ユーザｘとユーザｙにおける以前算出した内積をｉｐ、内積の変化量をΔｉｐ、追加内積補正値をΔｎｉｐ、更新内積補正値をΔｕｉｐとしたとき、補正内積算出処理による内積ｉｐ’は、数式（６）で表わされる。
【００９０】
【数６】
0005429116.tif 000007
【００９１】
さらに、ユーザｘとユーザｙの共通コンテンツのうち、追加内積補正値算出処理の対象となった全てのコンテンツをＪｃとし、ユーザｘにおけるコンテンツｊ（∈Ｊｃ）の最新の利用頻度（追加内積補正値算出処理におけるｎｅｗ＿ｖａｌｕｅ１）をｖ'（ｘ，ｊ）とし、ユーザｙにおけるコンテンツｊの最新の利用頻度値（追加内積補正値算出処理におけるｎｅｗ＿ｖａｌｕｅ２）をｖ'（ｙ，ｊ）とすると、Δｎｉｐは数式（７）で表わされる。
【００９２】
【数７】
0005429116.tif 000008
【００９３】
さらに、ユーザｘとユーザｙの共通コンテンツのうち、更新内積補正値算出処理の対象となった全てのコンテンツをＫｃとし、ユーザｘにおけるコンテンツｋ（∈Ｋｃ）の最新の利用頻度値（更新内積補正値算出処理におけるｎｅｗ＿ｖａｌｕｅ１）をｖ'（ｘ，ｋ）とし、以前類似度を算出した際の利用頻度値（更新内積補正値算出処理におけるｖａｌｕｅ１）をｖ（ｘ，ｋ）とし、ユーザｙにおけるコンテンツｋの最新の利用頻度値（更新内積補正値算出処理におけるｎｅｗ＿ｖａｌｕｅ２）をｖ'（ｙ，ｋ）とし、以前類似度を算出した際の利用頻度値（更新内積補正値算出処理におけるｖａｌｕｅ２）をｖ（ｙ，ｋ）とすると、Δｕｉｐは数式（８）で表わされる。
【００９４】
【数８】
0005429116.tif 000009
【００９５】
次に、ステップＳ２０３の類似度算出処理について、図２１を用いて説明する。
まず、コサイン類似度算出部１５０が、類似度を算出する２ユーザに対するユーザ識別情報の組合せを、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せとして取得する（ステップＳ１３０１）。尚、類似度を算出する２ユーザは、嗜好情報格納部１８において、少なくとも一方の嗜好情報の中で、少なくとも一つの嗜好情報のｓｔａｔｅが「１」、または、「２」であるという条件を満たす。この条件を満たす２ユーザは、ステップS２０１のノルム算出処理、または、ステップＳ２０２の内積算出処理により、ノルムや内積の値が変化しているため、類似度を改めて算出する必要がある。また、この条件を満たさない２ユーザは、前回の類似度算出時のノルムや内積から変化していないので、改めて類似度を算出する必要がない。
【００９６】
次に、コサイン類似度算出部１５０が、ステップＳ１３０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せの中から、例えば、取得した順に、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを一つ選択する（ステップＳ１３０２）。
次に、コサイン類似度算出部１５０が、類似度格納部２０より、ステップＳ１３０２にて選択したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せに対応するｉｎｎｅｒ＿ｐｒｏｄｕｃｔを取得する（ステップＳ１３０３）。
次に、コサイン類似度算出部１５０が、ノルム格納部１９より、ステップＳ１３０２にて選択したｕｓｅｒ＿ｉｄ＿１に対応するｎｏｒｍをｎｏｒｍ１として取得する（ステップＳ１３０４）。
次に、コサイン類似度算出部１５０が、ノルム格納部１９より、ステップＳ１３０２にて選択したｕｓｅｒ＿ｉｄ＿２に対応するｎｏｒｍをｎｏｒｍ２として取得する（ステップＳ１３０５）。
【００９７】
次に、コサイン類似度算出部１５０が、ステップＳ１３０３にて取得したｉｎｎｅｒ＿ｐｒｏｄｕｃｔと、ステップＳ１３０４にて取得したｎｏｒｍ１と、ステップＳ１３０５にて取得したｎｏｒｍ２とを用いて類似度を算出する（ステップＳ１３０６）。尚、ｉｎｎｅｒ＿ｐｒｏｄｕｃｔとｎｏｒｍ１とｎｏｒｍ２とを用いて類似度を算出する方法は、例えば、ｉｎｎｅｒ＿ｐｒｏｄｕｃｔとｎｏｒｍ１とｎｏｒｍ２とを用いて算出したコサイン距離を類似度としてもよい。このとき、ユーザｘとユーザｙの内積をｉｐ、ユーザｘのノルムをｎ（ｘ）、ユーザｙのノルムをｎ（ｙ）とすると、ユーザｘとユーザｙとの間の類似度ｓｉｍ（ｘ，ｙ）は、数式（９）で表わされる。
【００９８】
【数９】
0005429116.tif 000010
【００９９】
また、コサイン距離に、２ユーザ間の共通コンテンツ数を用いて算出した値を重みとして掛け合わせた値を類似度としてもよい。このとき、２ユーザ間の共通コンテンツ数を用いた重みをｗｃとすると、ユーザｘとユーザｙとの間の類似度ｓｉｍ（ｘ，ｙ）は、数式（１０）で表わされる。
【０１００】
【数１０】
0005429116.tif 000011
【０１０１】
重みｗｃは、ユーザｘとユーザｙの共通コンテンツ数を用いて算出する。例えば、共通コンテンツ数が多ければ多いほど類似度が高くしたい場合は、ｗｃとして、共通コンテンツ数や、共通コンテンツ数の平方根や、共通コンテンツ数の対数などを用いれば良い。また逆に、共通コンテンツ数の影響を小さくしたい場合は、ｗｃとして、共通コンテンツ数の逆数や、共通コンテンツ数の平方根の逆数や、共通コンテンツ数の対数の逆数などを用いれば良い。コンテンツの性質や、利用頻度値の算出方法に応じて、共通コンテンツ数の影響を大きくするか小さくするかを決めれば良い。
【０１０２】
次に、コサイン類似度算出部１５０が、類似度格納部２０における、ステップＳ１３０２にて選択したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せに対応するｓｉｍｉｌａｒｉｔｙに、ステップＳ１３０６にて算出した類似度を記憶する（ステップＳ１３０７）。
次に、コサイン類似度算出部１５０が、ステップＳ１３０２にて全てのｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２との組合せを選択したか否かを判定する。全ての組合せを選択した場合は、ステップＳ１３０１からステップＳ１３０８までの一連の処理を終了し、未選択の組合せが残っている場合は、ステップＳ１３０２へ進む（ステップＳ１３０８）。
以上が、ステップＳ２０３の類似度算出処理の説明である。
【０１０３】
類似度算出部１５による類似度算出処理の説明は以上であるが、ここで本発明のサーバ装置によってユーザ間類似度の計算量が削減できる理由を説明する。
協調フィルタリング方式のコンテンツ推薦において、時間の経過と共に、ユーザ間の類似度計算を繰り返し行うことが一般的である。本実施形態においても、上述した所定のタイミングごとに、繰り返しユーザ間の類似度計算を行っている。
しかしながら、従来の協調フィルタリングにおけるユーザ間の類似度計算においては、本実施形態の通常内積算出部１５５に相当する処理を行っており、繰り返し計算において、過去の計算結果を利用した計算量の削減は行われていなかった。
【０１０４】
ここで、利用頻度値データ（利用情報）の性質を考えると、類似度計算を行う所定のタイミングの間隔が限られているため、前回類似度を計算した時点から、新たに類似度計算を行う時点までの間で、利用頻度値が変化するユーザは極一部であり、ユーザ全体に対して非常に少ない割合である場合が多い。本発明においては、このような利用頻度値データの性質を利用して、ユーザ間の類似度の計算量を削減をしている。
具体的には、嗜好情報格納部１８に、直近の類似度算出時の用いた利用頻度値であるｖａｌｕｅと、直近の類似度算出以降に追加または変更された利用頻度値であるｎｅｗ＿ｖａｌｕｅと、嗜好情報の状態を示すフラグのｓｔａｔｅを格納しているので、ｓｔａｔｅの値、またはｖａｌｕｅの値の有無とｎｅｗ＿ｖａｌｕｅの値の有無の組合せを用いることにより、ステップＳ３０１において、ノルムの再計算の必要なユーザを的確に抽出できる。さらに、ステップＳ８０１においても、内積の再計算が必要な２ユーザの組合せを的確に抽出できる。上述した利用頻度値データの性質により、ほとんどのユーザの利用頻度値は、変更も追加もされないため、ノルムや内積の再計算も必要ない。従って、ステップＳ３０１で処理で対象となるユーザは、全てのユーザのうちの極一部である。さらに、ステップＳ８０１以降の処理で対象となるユーザの組合せも、全てのユーザの組合せの内の極一部であり、大半のユーザの組合せに関しては再計算処理を行う必要がないので、計算量を大幅に削減することができる。
【０１０５】
また、ノルム格納部１９に直近に計算されたノルムであるｎｏｒｍを格納しているため、ステップＳ３０３の処理において、過去にノルムを計算しているユーザか否かを容易に判定することができ、過去にノルムを計算している場合は、ステップＳ３０５に進んで、過去のノルム計算の結果を有効に再利用している。
また、ステップＳ６０３において、嗜好情報格納部１８のｓｔａｔｅの値、またはｖａｌｕｅの値の有無とｎｅｗ＿ｖａｌｕｅの値の有無の組合せを用いて、どのユーザのどのコンテンツに対する利用頻度値が追加されたかについて、限定して適切に抽出している。同様に、ステップＳ７０３においても、嗜好情報格納部１８のｓｔａｔｅの値、またはｖａｌｕｅの値の有無とｎｅｗ＿ｖａｌｕｅの値の有無の組合せを用いて、どのユーザのどのコンテンツに対する利用頻度値が更新されたかについて、限定して適切に抽出している。そして、追加時（ステップＳ５０４）と更新時（ステップＳ５０７）の場合のみ処理を行っているため、ノルムの値に影響を与える必要最低限のデータのみを使って効率よくノルムを計算ができる。
【０１０６】
また、類似度格納部２０に直近に計算された内積であるｉｎｎｅｒ＿ｐｒｏｄｕｃｔを格納しているため、ステップＳ８０３の処理において、過去に内積を計算しているユーザの組合せか否かを容易に判定することができ、過去に内積を計算している場合は、ステップＳ８０５に進んで、過去の内積計算の結果を有効に再利用している。
また、ステップＳ１１０３において、嗜好情報格納部１８のｓｔａｔｅの値、またはｖａｌｕｅの値の有無とｎｅｗ＿ｖａｌｕｅの値の有無の組合せを用いて、どのユーザのどのコンテンツに対する利用頻度値が追加されたかについて、限定して適切に抽出している。同様に、ステップＳ１２０３においても、嗜好情報格納部１８のｓｔａｔｅの値、またはｖａｌｕｅの値の有無とｎｅｗ＿ｖａｌｕｅの値の有無の組合せを用いて、どのユーザのどのコンテンツに対する利用頻度値が更新されたかについて、限定して適切に抽出している。そして、追加時（ステップＳ１００４）と更新時（ステップＳ１００７）の場合のみ処理を行っているため、内積の値に影響を与える必要最低限のデータのみを使って効率よく内積を計算ができる。
【０１０７】
このように本発明では、ユーザ間類似度の算出に必要なノルム計算と内積計算とを効率よく行うことができる。また、ノルム計算や内積計算において行動履歴データの一部のみを用いているわけではなく、全ての行動履歴データを用いているので、計算量削減を行わない場合（全てのデータに対して通常ノルム算出部１５１や通常内積算出部１５５に相当する処理を行う場合）と比べて、ノルムや内積の計算精度が低下することがない。従って本発明により、ユーザ間の類似度を少ない計算量で、かつ精度良く計算することができる。
【０１０８】
図２２は、端末装置３より類似ユーザ情報の取得を要求する取得要求を受信した際の、サーバ装置１による類似ユーザ情報提供処理フローを示すシーケンス図である。
まず、取得要求送信部３２が、入力部３４より、類似ユーザ情報の取得を要求する操作を受信し（ステップＳ１４０１）、端末装置３を利用中のユーザを識別するユーザ識別情報を用いて、類似ユーザ情報の取得を要求する取得要求を作成し（ステップＳ１４０２）、ネットワーク２を通じて、取得要求受信部１２に、ステップＳ１４０２にて作成した取得要求を送信する（ステップＳ１４０３）。
次に、取得要求受信部１２が、ネットワーク２を通じて、取得要求送信部３２より、取得要求を受信し（ステップＳ１４０４）、類似ユーザ情報選択部１６に、ステップＳ１４０４にて受信した取得要求を送信する（ステップＳ１４０５）。
次に、類似ユーザ情報選択部１６が、取得要求受信部１２より、取得要求を受信する（ステップＳ１４０６）。
【０１０９】
次に、類似ユーザ情報選択部１６が、類似度格納部２０より、ステップＳ１４０６にて受信した取得要求のユーザ識別情報に対応するユーザ（一のユーザ）における類似ユーザのユーザ識別情報を取得する（ステップＳ１４０７）。類似ユーザのユーザ識別情報取得には、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２のどちらか一方に、一のユーザのユーザ識別情報を含む組合せの中から、ｓｉｍｉｌａｒｉｔｙが所定値以上のｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を選択し、一のユーザ以外のユーザ識別情報を、類似ユーザのユーザ識別情報として取得する。若しくは、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２のどちらか一方に、一のユーザのユーザ識別情報を含むものの中から、ｓｉｍｉｌａｒｉｔｙの高い順に所定数のｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せを選択し、一のユーザ以外のユーザ識別情報を、類似ユーザのユーザ識別情報として取得する。さらに、ユーザ情報格納部２１において、ユーザ属性情報の中に、ユーザが希望する「紹介相手の条件」が含まれている場合には、これを用いて、類似ユーザを選択しても良い。すなわち、一のユーザの「紹介相手の希望条件」に合致する属性情報（年齢、性別など）を持つ他のユーザを対象にして、ｓｉｍｉｌａｒｉｔｙが所定値以上のユーザ、またはｓｉｍｉｌａｒｉｔｙの高い順に所定数のユーザを抽出して、一のユーザに対する類似ユーザとしても良い。
【０１１０】
次に、類似ユーザ情報選択部１６が、ユーザ情報格納部２１より、ステップＳ１４０７にて取得した全てのユーザ識別情報に対応するユーザ属性情報を取得する（ステップＳ１４０８）。
次に、類似ユーザ情報選択部１６が、要求情報送信部１３に、ステップＳ１４０６で取得した取得要求のユーザ識別情報とともに、ステップＳ１４０８で取得した全てのユーザ情報を要求情報として送信する（ステップＳ１４０９）。
次に、要求情報送信部１３が、類似ユーザ情報選択部１６より、ユーザ識別情報と要求情報とを受信し（ステップＳ１４１０）、ネットワーク２を通じて、ステップＳ１４１０にて取得したユーザ識別情報に対応する端末装置３の要求情報受信部３３に、ステップＳ１４１０にて取得した要求情報を送信する（ステップＳ１４１１）。
次に、要求情報受信部３３が、ネットワーク２を通じて、要求情報送信部１３より、要求情報を取得し（ステップＳ１４１２）、ステップＳ１４１２にて取得した要求情報を描画し、表示装置２５に表示し（ステップＳ１４１３）、ステップＳ１４０１からステップＳ１４１３までの一連の処理を終了する。
以上が、端末装置３より類似ユーザ情報の取得を要求する取得要求を受信した際の、サーバ装置１による類似ユーザ情報提供処理の説明である。
【０１１１】
図２３は、端末装置３より推薦コンテンツの取得を要求する取得要求を受信した際の、サーバ装置１によるコンテンツ推薦処理を説明するためのシーケンス図である。
まず、取得要求送信部３２が、入力部３４より、コンテンツの推薦を要求する操作を受信し（ステップＳ１５０１）、端末装置３を利用中のユーザを識別するユーザ識別情報を用いて、推薦コンテンツの取得を要求する取得要求を作成し（ステップＳ１５０２）、ネットワーク２を通じて、取得要求受信部１２に、ステップＳ１５０２にて作成した取得要求を送信する（ステップＳ１５０３）。
次に、取得要求受信部１２が、ネットワーク２を通じて、取得要求送信部３２より、取得要求を受信し（ステップＳ１５０４）、推薦コンテンツ選択部１７に、ステップＳ１５０４にて受信した取得要求を送信する（ステップＳ１５０５）。
次に、推薦コンテンツ選択部１７が、取得要求受信部１２より、取得要求を受信する（ステップＳ１５０６）。
【０１１２】
次に、推薦コンテンツ選択部１７が、類似度格納部２０より、ステップＳ１５０６にて受信した取得要求のユーザ識別情報に対応するユーザ（一のユーザ）における類似ユーザのユーザ識別情報を取得する（ステップＳ１５０７）。類似ユーザのユーザ識別情報取得には、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２のどちらか一方に、一のユーザのユーザ識別情報を含む組合せの中から、ｓｉｍｉｌａｒｉｔｙが所定値以上のｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を選択し、一のユーザ以外のユーザ識別情報を、類似ユーザのユーザ識別情報として取得する。若しくは、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２のどちらか一方に、一のユーザのユーザ識別情報を含むものの中から、ｓｉｍｉｌａｒｉｔｙの高い順に所定数のｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を選択し、一のユーザ以外のユーザ識別情報を、類似ユーザのユーザ識別情報として取得する。
【０１１３】
次に、推薦コンテンツ選択部１７が、嗜好情報格納部１８より、ステップＳ１５０７にて取得した類似ユーザのユーザ識別情報に対応するｃｏｎｔｅｎｔ＿ｉｄを所定数取得する（ステップＳ１５０８）。ここで、嗜好情報格納部１８を参照しながら、類似ユーザのｓｔａｔｅが「０」の場合はｖａｌｕｅ、ｓｔａｔｅが「１」または「２」の場合はｎｅｗ＿ｖａｌｕｅの値をコンテンツ毎に加算し、その加算値の大きな順に所定数のコンテンツのｃｏｎｔｅｎｔ＿ｉｄを取得しても良い。
次に、推薦コンテンツ選択部１７が、コンテンツ情報格納部２２より、ステップＳ１５０８にて取得した全てのｃｏｎｔｅｎｔ＿ｉｄに対応するｃｏｎｔｅｎｔ＿ｉｎｆｏを取得する（ステップＳ１５０９）。
【０１１４】
次に、推薦コンテンツ選択部１７が、要求情報送信部１３に、ステップＳ１５０６で取得した取得要求のユーザ識別情報とともに、ステップＳ１５０９で取得した全てのコンテンツ情報を要求情報として送信する（ステップＳ１５１０）。
次に、要求情報送信部１３が、推薦コンテンツ選択部１７より、ユーザ識別情報と要求情報とを受信し（ステップＳ１５１１）、ネットワーク２を通じて、ステップＳ１５１１にて取得したユーザ識別情報に対応する端末装置３の要求情報受信部３３に、ステップＳ１５１１にて取得した要求情報を送信する（ステップＳ１５１２）。
次に、要求情報受信部３３が、ネットワーク２を通じて、要求情報送信部１３より、要求情報を取得し（ステップＳ１５１３）、ステップＳ１５１３にて取得した要求情報を描画し、表示装置２５に表示し（ステップＳ１５１４）、ステップＳ１５０１からステップＳ１５１４の一連の処理を終了する。
【０１１５】
また、ステップＳ１５０７とステップＳ１５０８の処理を以下のように変更することもできる。
ステップＳ１５０７において、推薦コンテンツ選択部１７が、類似度格納部２０より、ステップＳ１５０６にて受信した取得要求のユーザ識別情報に対応するユーザ（一のユーザ）における類似ユーザのユーザ識別情報とｓｉｍｉｌａｒｉｔｙとを取得する。類似ユーザのユーザ識別情報取得には、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２のどちらか一方に、一のユーザのユーザ識別情報を含む組合せの中から、ｓｉｍｉｌａｒｉｔｙが所定値以上のｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を選択し、一のユーザ以外のユーザ識別情報を、類似ユーザのユーザ識別情報として取得する。若しくは、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２のどちらか一方に、ステップＳ１５０６にて受信した取得要求のユーザ識別情報を含むものの中から、ｓｉｍｉｌａｒｉｔｙの高い順に所定数のｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を選択し、一のユーザ以外のユーザ識別情報を、類似ユーザのユーザ識別情報として取得する。
【０１１６】
ステップＳ１５０８において、推薦コンテンツ選択部１７が、嗜好情報格納部１８より、ステップＳ１５０７にて取得した類似ユーザのユーザ識別情報に対応するｃｏｎｔｅｎｔ＿ｉｄと、ｖａｌｕｅとを取得し、ｃｏｎｔｅｎｔ＿ｉｄごとに推薦度を算出する。さらに算出した推薦度を基に推薦コンテンツ用のｃｏｎｔｅｎｔ＿ｉｄを選択する推薦度は、ステップＳ１５０７にて取得したｓｉｍｉｌａｒｉｔｙと、ステップＳ１５０８にて取得したｖａｌｕｅの積とする。このとき、推薦されるユーザｘとユーザｘの類似ユーザｙとのｓｉｍｉｌａｒｉｔｙをｓｉｍ（ｘ，ｙ）、ユーザｙのコンテンツｉに対するｖａｌｕｅをｖ（ｙ，ｉ）としたとき、ユーザｘに対する類似ユーザｙにおけるコンテンツｉの推薦値ｒｅｃｏｍ（適合度）は、数式（１１）で表わされる。なお、推薦値（適合度）は、式（１１）で表される推薦値ｒｅｃｏｍに限定されず、一の利用者との他の利用者との類似度が大きいほど、かつ、他の利用者の利用頻度値が大きいほど大きな値となるような値であればよい。
【０１１７】
【数１１】
0005429116.tif 000012
【０１１８】
また、推薦コンテンツに対応するｃｏｎｔｅｎｔ＿ｉｄは、推薦値の高い順に所定数選択するか、または、所定値以上の推薦値をもつものを選択する。
以上が、端末装置３より推薦コンテンツの取得を要求する取得要求を受信した際の、サーバ装置１によるコンテンツ推薦処理の説明である。
【０１１９】
尚、上記の全ての処理において、嗜好情報の第１の格納形式の代わりに、第２の格納形式を用いる場合は、ｓｔａｔｅの値で判定する処理を、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅ＿１とｎｅｗ＿ｖａｌｕｅ＿２の有無により判定する処理で置き換えることができる。また、嗜好情報の第１の格納形式の代わりに、第３の格納形式を用いる場合は、ｓｔａｔｅの値で判定する処理を、ｔｙｐｅの値で判定する処理に置き換えることができる。
【０１２０】
＜第２の実施形態＞
以下に、本発明の実施形態について、図を用いて詳細に説明する。
図２４は、本発明の第２の実施形態におけるサーバ装置４の構成図である。本発明のシステム全体の構成は、図１の本発明の第１の実施形態におけるシステム全体の構成図において、サーバ装置１を、図２４のサーバ装置４で置き換えたものである。
サーバ装置４は、本発明の第１の実施形態のサーバ装置１と、構成が変わっているものの、同様の機能を有する。
【０１２１】
サーバ装置４は、制御部１０、利用情報受信部１１、取得要求受信部１２、要求情報送信部１３、利用頻度値算出部１４、類似度算出部２１５、類似ユーザ情報選択部１６、推薦コンテンツ選択部１７、嗜好情報格納部１８、ノルム格納部１９、類似度格納部２０、ユーザ情報格納部２１、コンテンツ情報格納部２２、内積算出補助情報格納部２２３から構成される。
利用情報受信部１１、取得要求受信部１２、要求情報送信部１３、利用頻度値算出部１４、類似ユーザ情報選択部１６、推薦コンテンツ選択部１７、嗜好情報格納部１８、ノルム格納部１９、類似度格納部２０、ユーザ情報格納部２１、コンテンツ情報格納部２２に関しては、第１の実施形態と同様である。
【０１２２】
内積算出補助情報格納部２２３は、ＨＤＤなどの記憶装置を用いて、内積算出補助情報を複数格納する。内積算出補助情報格納部２２３における内積算出補助情報の格納形式を図２５に示す。内積算出補助情報とは、２ユーザ分のユーザ識別情報であるｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２、その２ユーザの共通コンテンツに対するコンテンツ識別情報であるｃｏｎｔｅｎｔ＿ｉｄと、類似度算出部２１５において直近の類似度算出が行われた際に使われた、一方のユーザ識別情報とコンテンツ識別情報に対応する利用頻度値ともう一方のユーザ識別情報とコンテンツ識別情報に対応する利用頻度値との積（内積算出補助値）であるｐｒｏｄｕｃｔと、類似度算出部２１５において類似度算出をする際に、新たに２ユーザ間に共通コンテンツが追加された場合と、以前算出した内積算出補助値に変化があった場合にのみ算出される内積算出補助値であるｎｅｗ＿ｐｒｏｄｕｃｔと、内積算出補助情報の状態を示すフラグであるｐ＿ｓｔａｔｅとを関連付けたものであり、図２５のようなテーブル形式で格納されている。このテーブルにおいて、（ｕｓｅｒ＿ｉｄ＿１，ｕｓｅｒ＿ｉｄ＿２，ｃｏｎｔｅｎｔ＿ｉｄ）の組合せはユニーク（一意）であり、この組合せを指定することのより、テーブルのデータが特定できる。
【０１２３】
本実施形態における内積算出補助情報の状態を示すフラグであるｐ＿ｓｔａｔｅは、嗜好情報格納部１８のｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無により値が変化するｓｔａｔｅと同様に、ｐｒｏｄｕｃｔとｎｅｗ＿ｐｒｏｄｕｃｔの有無により値が変化する。ただし、ｐ＿ｓｔａｔｅの値が変化をするタイミングは、類似度算出部２１５にて、類似度算出を行うときのみである。ｐ＿ｓｔａｔｅが「０」の場合は、ｐｒｏｄｕｃｔにのみ値が記憶されている状態である。これは、前回の類似度算出以降に、嗜好情報格納部１８において、内積算出補助情報のｕｓｅｒ＿ｉｄ＿１とｃｏｎｔｅｎｔ＿ｉｄに対応する嗜好情報も、ｕｓｅｒ＿ｉｄ＿２とｃｏｎｔｅｎｔ＿ｉｄに対応する嗜好情報も変化せず、内積算出補助値が変化しなかったことを示す。ｐ＿ｓｔａｔｅが「１」の場合は、ｐｒｏｄｕｃｔとｎｅｗ＿ｐｒｏｄｕｃｔの両方に値が記憶されている状態である。これは、前回の類似度算出時に、嗜好情報格納部１８において、内積算出補助情報のｕｓｅｒ＿ｉｄ＿１とｃｏｎｔｅｎｔ＿ｉｄに対応する嗜好情報も、ｕｓｅｒ＿ｉｄ＿２とｃｏｎｔｅｎｔ＿ｉｄに対応する嗜好情報も記憶されており、かつ、前回の類似度算出以降に、２つの嗜好情報のうちの少なくとも一方が変化し、内積算出補助値が変化したことを示す。ｐ＿ｓｔａｔｅが「２」の場合は、ｎｅｗ＿ｐｒｏｄｕｃｔにのみ値が記憶されている状態である。これは、類似度算出時に、はじめてこの内積算出補助情報が登録されたことを示す。ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２は、類似度格納部２０と同様に、ｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２を入れ替えて一致するものが重複して記憶されないようにするとよい。本実施形態ではこのようなｐ＿ｓｔａｔｅを用いて処理を行うが、ｐ＿ｓｔａｔｅを用いる代わりにｐｒｏｄｕｃｔとｎｅｗ＿ｐｒｏｄｕｃｔの有無を用いて、同様に内積算出補助情報の状態を判定することも可能である。
【０１２４】
類似度算出部２１５は、構成は異なるが、本発明の第１の実施形態における類似度算出部１５と同様の機能を有する。
ここで、類似度算出部２１５の構成を図２６のブロック図を用いて説明する。図２６に示すように、類似度算出部２１５は、コサイン類似度算出部２１５０、通常ノルム算出部１５１、補正ノルム算出部１５２、追加ノルム２乗補正値算出部１５３、更新ノルム２乗補正値算出部１５４、通常内積算出部２１５５、補正内積算出部２１５６、追加内積補正値算出部２１５７、更新内積補正値算出部２１５８、内積算出補助値算出部２１５９との構成である。
【０１２５】
通常ノルム算出部１５１と、補正ノルム算出部１５２と、追加ノルム２乗補正値算出部１５３と、更新ノルム２乗補正値算出部１５４は、本発明の第１の実施形態と同様である。
コサイン類似度算出部２１５０は、通常ノルム算出部２１５１、補正ノルム算出部２１５２、通常内積算出部１５５、補正内積算出部１５６とデータのやり取りを行いながら、嗜好情報格納部１８に記憶されている複数の嗜好情報や、ノルム格納部１９に記憶されているユーザ識別情報に対する嗜好ベクトルのノルムや、類似度格納部２０に記憶されている２ユーザ間の類似性を数値化した類似度等を用いて、コサイン距離を用いた類似度を算出する。そして、類似度格納部２０に、類似度算出対象の２ユーザに対応する２つのユーザ識別情報と、算出した類似度とを関連付けて記憶する。そして、全類似度算出対象の２ユーザ間の類似度算出が終わると、嗜好情報格納部１８において、ｓｔａｔｅが「１」、または、「２」の全ての嗜好情報に対して、ｖａｌｕｅの値をｎｅｗ＿ｖａｌｕｅの値に置き換え、ｎｅｗ＿ｖａｌｕｅの値を消去し、ｓｔａｔｅを「０」とする。そして、内積算出補助情報格納部２２３において、ｐ＿ｓｔａｔｅが「１」、または、「２」の全ての内積算出補助情報に対して、ｐｒｏｄｕｃｔの値をｎｅｗ#ｐｒｏｄｕｃｔの値に置き換え、ｎｅｗ＿ｐｒｏｄｕｃｔの値を消去し、ｐ＿ｓｔａｔｅを「０」にする。また、ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｖａｌｕｅを消去するだけでよい。また、ｐ＿ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｐｒｏｄｕｃｔを消去するだけでよい。
【０１２６】
通常内積算出部２１５５は、一度も内積を算出したことのない２ユーザ間の内積を算出するためのものである。
【０１２７】
補正内積算出部２１５６は、追加内積補正値算出部２１５７、更新内積補正値算出部２１５８とデータのやり取りを行いながら、以前内積を算出した２ユーザにおいて、以前算出した内積との変化量を内積補正値として算出し、以前算出した内積にその内積補正値を加えることで、内積を算出するものである。尚、内積補正値は、後述する追加内積補正値と更新内積補正値の和である。また、追加内積補正値は追加内積補正値算出部２１５７にて算出される。また、更新内積補正値は更新内積補正値算出部２１５８にて算出される。
【０１２８】
内積算出補助値算出部２１５９は、共通コンテンツを有する２ユーザにおいて、その共通コンテンツに対する内積算出補助値を算出し、内積算出補助情報格納部２２３に記憶するためのものである。内積算出補助値を算出する対象は、共通コンテンツを有する２ユーザにおいて、嗜好情報格納部１８に記憶されている嗜好情報のうち、少なくとも一方の嗜好状態のｓｔａｔｅが「１」か「２」である必要がある。これにより、内積算出補助値の算出対象を、内積算出補助値が変化する内積算出補助情報や、新たに追加される内積算出補助情報のみに絞ることができる。このとき、内積算出補助情報格納部２２３に、その２ユーザのユーザ識別情報と、共通コンテンツに対応するコンテンツ識別情報に対応する内積算出補助情報が既に記憶されている場合は、新たに算出した内積算出補助値をｎｅｗ＿ｐｒｏｄｕｃｔに記憶し、ｐ＿ｓｔａｔｅを「１」と置き換える。また、内積算出補助情報格納部２２３に、その２ユーザのユーザ識別情報と、共通コンテンツに対応するコンテンツ識別情報に対応する内積算出補助情報が記憶されていない場合は、２ユーザのユーザ識別情報をｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２に、共通コンテンツのコンテンツ識別情報をｃｏｎｔｅｎｔ＿ｉｄに、内積算出補助値をｎｅｗ＿ｐｒｏｄｕｃｔに割り当て、ｐ＿ｓｔａｔｅを「２」として新たに記憶する。
【０１２９】
追加内積補正値算出部２１５７は、類似度算出対象の２ユーザにおいて、内積算出補助情報格納部２２３にて、ｐ＿ｓｔａｔｅが「２」のみの内積算出補助情報を用いて、追加内積補正値を算出するためのものである。
更新内積補正値算出部２１５８は、類似度算出対象の２ユーザにおいて、内積算出補助情報格納部２２３にて、ｐ＿ｓｔａｔｅが「１」のみの内積算出補助情報を用いて、更新内積補正値を算出するためのものである。
以上が、類似度算出部２１５における構成の説明である。
ネットワーク２と端末装置３の構成については、第１の実施形態と同様である。
【０１３０】
次に、上記構成におけるサーバ装置４の動作を説明する。
第２の実施形態におけるサーバ装置４は、ネットワーク２を通じて、複数の端末装置３との情報のやり取りを行いながら、主に、嗜好情報の記憶、類似度の算出、類似ユーザ情報の提供、コンテンツの推薦を行う。
端末装置３より、利用情報を受信した際の、サーバ装置４による嗜好情報を記憶する処理、端末装置３より類似ユーザ情報の取得を要求する取得要求を受信した際の、サーバ装置４による類似ユーザ情報提供処理、端末装置３より推薦コンテンツの取得を要求する取得要求を受信した際の、サーバ装置４によるコンテンツ推薦処理については、第１の実施形態と同様である。
【０１３１】
図２７は、所定のタイミングごとに行われる、類似度算出部２１５による類似度算出処理の動作を示すフローチャートである。
まず、コサイン類似度算出部２１５０が、内積算出補助値算出部２１５９と、通常内積算出部２１５５と、補正内積算出部２１５６とデータのやり取りを行いながら、内積算出処理を行う（ステップＳ１６０１）。次に、ステップＳ２０２へ進む。
ステップＳ２０２からステップＳ２０５までの手順は、本発明の第１の実施形態における所定のタイミングごとに行われる、類似度算出部１５による類似度算出処理のステップＳ２０２からステップＳ２０５までの処理と同様である。ステップＳ２０２からステップＳ２０５までの処理を終えると、ステップＳ１６０６へ進む。
【０１３２】
次に、コサイン類似度算出部２１５０が、内積算出補助情報格納部２２３に記憶されている内積算出補助情報の中で、ｐ＿ｓｔａｔｅが「１」、または、「２」の内積算出補助情報において、ｐｒｏｄｕｃｔの値を、ｎｅｗ＿ｐｒｏｄｕｃｔの値で置き換え（ステップＳ１６０６）、ｎｅｗ＿ｐｒｏｄｕｃｔを全て消去し（ステップＳ１６０７）、全てのｐ＿ｓｔａｔｅを「０」とし（ステップＳ１６０８）、一連の処理を終了する。
以上が、所定のタイミングごとに行われる、類似度算出部２１５による類似度算出処理の説明である。
【０１３３】
次に、ステップＳ１６０１の内積算出処理について、図２８のフローチャートを用いて説明する。
まず、コサイン類似度算出部２１５０が、内積算出補助値算出部２１５９にて、内積算出補助値算出処理を行わせる（ステップＳ１７０１）。
【０１３４】
次にステップＳ１７０２において、コサイン類似度算出部２１５０が、嗜好情報格納部１８の代わりに、内積算出補助情報格納部２２３において、ｐ＿ｓｔａｔｅが「１」、または、「２」の条件を満たす内積算出補助情報におけるｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せを抽出する。この条件を満たす２ユーザは、前回の類似度算出以降に、共通コンテンツが新たに追加されたり、共通コンテンツの利用頻度値の積が変化しているため、内積が変化する。また、この条件を満たさない２ユーザ間の内積は、前回の類似度算出時の内積から変化がないため、改めて内積を算出する必要がない。また、予め共通コンテンツが記憶されている内積算出補助情報格納部２２３より、２ユーザ間の共通コンテンツを探すため、本発明の第１の実施形態におけるステップＳ２０２の内積算出処理におけるステップＳ８０１の内積算出対象の２ユーザの組合せを抽出する処理に比べ、容易に共通コンテンツを抽出することができる。尚、ｐ＿ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｐｒｏｄｕｃｔが存在する状態がｐ＿ｓｔａｔｅ「１」、または、ｐ＿ｓｔａｔｅ「２」の状態を示すので、ｎｅｗ＿ｐｒｏｄｕｃｔの存在の有無で判定することができる。
【０１３５】
ステップＳ８０２からステップＳ８０３までの処理とステップＳ８０６の処理は、本発明の第１の実施形態におけるステップＳ２０２の内積算出処理のステップＳ８０２からステップＳ８０３までの処理とステップＳ８０６の処理と同様である。
ステップＳ１７０４の通常内積算出処理と、ステップＳ１７０５の補正内積算出処理は後ほど詳しく説明する。
以上が、ステップＳ１６０１の内積算出処理の説明である。
【０１３６】
次に、ステップＳ１７０１の内積算出補助値算出部２１５９による内積算出補助値算出処理について、図２９を用いて説明する。
【０１３７】
まず、内積算出補助値算出部２１５９が、内積算出補助値を算出する２ユーザのユーザ識別情報であるｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２と、その２ユーザの共通コンテンツのコンテンツ識別情報であるｃｏｎｔｅｎｔ＿ｉｄとの組合せを全て抽出する（ステップＳ１８０１）。内積算出補助値を算出するｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄの組合せは、共通のコンテンツを有する２ユーザにおいて、嗜好情報格納部１８において、その２ユーザの内の一方のユーザ識別情報と、共通コンテンツのコンテンツ識別情報とに対応する嗜好情報と、その２ユーザの内の他方のユーザ識別情報と、共通コンテンツのコンテンツ識別情報とに対応する嗜好情報のうち少なくとも一方の嗜好状態のｓｔａｔｅが「１」、または、「２」であるという条件を満たす。この条件を満たす２ユーザの共通コンテンツは、前回の類似度算出以降に共通コンテンツとして追加されたものや、前回の類似度算出以降に共通コンテンツに対する２ユーザの嗜好情報のうち、少なくとも一方の利用頻度値が変化し、利用頻度値の積を更新する必要があるものである。この条件を用いるため、すでに内積算出補助情報格納部２２３に記憶されている内積算出補助情報の中で、内積算出補助値が変化するものと、新たに追加される内積算出補助情報においてのみ、内積算出補助値を算出する対象として絞り込むことができる。尚、ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｖａｌｕｅが存在する状態がｓｔａｔｅ「１」、または、ｓｔａｔｅ「２」の状態のどちらか一方であるため、ｎｅｗ＿ｖａｌｕｅの存在の有無で判定することができる。
【０１３８】
次に、内積算出補助値算出部２１５９が、ステップＳ１８０１にて取得したｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄの組合せのうち、例えば抽出した順に、１つ選択する（ステップＳ１８０２）。
次に、内積算出補助値算出部２１５９が、嗜好情報格納部１８にて、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿１とｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを確認し、その値により判定を行う。ｓｔａｔｅが「０」の場合は、ステップＳ１８０４へ進み、ｓｔａｔｅが「１」、または、「２」の場合は、ステップＳ１８０５へ進む（ステップＳ１８０３）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
【０１３９】
ステップＳ１８０４では、内積算出補助値算出部２１５９が、嗜好情報格納部１８にて、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿１とｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｖａｌｕｅをｖａｌｕｅ１として取得し、ステップＳ１８０６へ進む。
ステップＳ１８０５では、内積算出補助値算出部２１５９が、嗜好情報格納部１８にて、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿１とｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅをｖａｌｕｅ１として取得し、ステップＳ１８０６へ進む。
【０１４０】
次に、内積算出補助値算出部２１５９が、嗜好情報格納部１８にて、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿２とｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報のｓｔａｔｅを確認し、その値により判定を行う。ｓｔａｔｅが「０」の場合は、ステップＳ１８０７へ進み、ｓｔａｔｅが「１」、または、「２」の場合は、ステップＳ１８０８へ進む（ステップＳ１８０６）。尚、ｓｔａｔｅを用いない場合は、ｖａｌｕｅが存在し、ｎｅｗ＿ｖａｌｕｅが存在しない状態がｓｔａｔｅ「０」の状態と等しいので、ｖａｌｕｅとｎｅｗ＿ｖａｌｕｅの有無で判定することができる。
ステップＳ１８０７では、内積算出補助値算出部２１５９が、嗜好情報格納部１８にて、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿２とｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｖａｌｕｅをｖａｌｕｅ２として取得し、ステップＳ１８０９へ進む。
【０１４１】
ステップＳ１８０８では、内積算出補助値算出部２１５９が、嗜好情報格納部１８にて、ステップＳ１８０２にて取得したｕｓｅｒ＿ｉｄ＿２とｃｏｎｔｅｎｔ＿ｉｄとに対応する嗜好情報において、最新の利用頻度値であるｎｅｗ＿ｖａｌｕｅをｖａｌｕｅ２として取得し、ステップＳ１８０９へ進む。
次に、内積算出補助値算出部２１５９が、内積算出補助値をｖａｌｕｅ１とｖａｌｕｅ２との積として算出する（ステップＳ１８０９）。
次に、内積算出補助値算出部２１５９が、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄの組合せに対応する内積算出補助値を算出したことがあるか否かを判定する。算出したことがある場合は、ステップＳ１８１２へ進み、算出したことがない場合は、ステップＳ１８１１へ進む（ステップＳ１８１０）。尚、内積算出補助値を算出したことがあるか否かを判定するには、内積算出補助情報格納部２２３に、ｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄの組合せに対応する内積算出補助情報が存在するかを調べればよい。存在する場合は、算出したことがあることを意味し、存在しない場合は、算出したことがないことを示す。
【０１４２】
ステップＳ１８１１では、内積算出補助値算出部２１５９が、内積算出補助情報格納部２２３に、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄと、ステップＳ１８０９にて算出した内積算出補助値をｎｅｗ＿ｐｒｏｄｕｃｔとして、さらに、ｐ＿ｓｔａｔｅを２とした内積算出補助情報を記憶し、ステップＳ１８１３へ進む。
ステップＳ１８１２では、内積算出補助値算出部２１５９が、内積算出補助情報格納部２２３に、ステップＳ１８０２にて選択したｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄとの組合せに対応する内積算出補助情報におけるｎｅｗ＿ｐｒｏｄｕｃｔにステップＳ１８０９にて算出した内積算出補助値を記憶し、ｐ＿ｓｔａｔｅを１とし、ステップＳ１８１３へ進む。
次に、内積算出補助値算出部２１５９が、ステップＳ１８０２にて、全てのｕｓｅｒ＿ｉｄ＿１と、ｕｓｅｒ＿ｉｄ＿２と、ｃｏｎｔｅｎｔ＿ｉｄとの組合せを選択したか否かを判定する。全て選択した場合は、ステップＳ１８０１からステップＳ１８１３までの一連の処理を終了し、まだ未選択のものが残っている場合は、ステップＳ１８０２へ進む（ステップＳ１８１３）。
以上が、ステップＳ１７０１の内積算出補助値算出部２１５９による内積算出補助値算出処理の説明である。
【０１４３】
次に、ステップＳ１７０４の通常内積算出処理について、図３０を用いて説明する。
本実施形態におけるステップＳ１７０４の通常内積算出処理は、本発明の第１の実施形態におけるステップＳ８０４の通常内積算出処理のステップＳ９０３の処理がステップＳ１９０３の処理に置き換わり、ステップＳ９０５からステップＳ９１１までの処理が、ステップＳ１９０５からステップＳ１９０６までの処理に置き換わる。
ステップＳ１９０３では、通常内積算出部２１５５が、内積算出補助情報格納部２２３より、ステップＳ８０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せに対応する内積算出補助情報におけるｃｏｎｔｅｎｔ＿ｉｄを全て抽出する。次に、ステップＳ９０４へ進む。内積算出補助情報格納部２２３には、２ユーザ間の共通コンテンツが全て記憶されているので、本発明の第１の実施形態におけるステップＳ８０４の通常内積算出処理におけるステップＳ９０３の２ユーザ間の共通コンテンツを抽出する処理に比べ、容易に共通コンテンツを抽出することができる。
【０１４４】
ステップＳ１９０５では、通常内積算出部２１５５が、内積算出補助情報格納部２２３より、ステップＳ９０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２と、ステップＳ９０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する内積算出補助情報のｎｅｗ＿ｐｒｏｄｕｃｔをｐｒｏｄｕｃｔとして取得する。
次に、通常内積算出部２１５５が、ｉ＿ｐに、ステップＳ１９０５にて取得したｐｒｏｄｕｃｔを加える（ステップＳ１９０６）。次に、ステップＳ９１２へ進む。
以上が、本実施形態におけるステップＳ１７０４の通常内積算出処理の説明である。
次に、ステップＳ１７０５の補正内積算出処理について、図３１のフローチャートを用いて説明する。本実施形態のステップＳ１７０５の補正内積算出処理は、本発明の第１の実施形態におけるステップＳ８０５の補正内積算出処理のステップＳ１００４の追加内積補正値算出処理がステップＳ２００４の追加内積補正値算出処理に置き換わり、ステップＳ１００７の更新内積補正値算出処理がステップＳ２００７の更新内積補正値算出処理に置き換わる。
【０１４５】
ステップＳ２００４の追加内積補正値算出処理について、図３２を用いて説明する。
本実施形態におけるステップＳ２００４の追加内積補正値算出処理は、本発明の第１の実施形態におけるステップＳ１００４の追加内積補正値算出処理のステップＳ１１０３の処理がステップＳ２１０３の処理に置き換わり、ステップＳ１１０５からステップＳ１１１１までの処理が、ステップＳ２１０５からステップＳ２１０６までの処理に置き換わる。
ステップＳ２１０３では、追加内積補正値算出部２１５７が、内積算出補助情報格納部２２３より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せに対応する内積算出補助情報のうち、ｐ＿ｓｔａｔｅが「２」の内積算出補助情報におけるｃｏｎｔｅｎｔ＿ｉｄを抽出する。この条件を満たす共通コンテンツは、前回の類似度算出以降に新たに追加されたため、内積が変化する。また、この条件を満たさない２ユーザ間の内積は、後述するステップＳ２００７の更新内積補正値算出処理にて算出されるか、または、前回の類似度算出時の内積から変化がないため、改めて内積を算出する必要がない。また、予め共通コンテンツが記憶されている内積算出補助情報格納部２２３より、２ユーザ間の共通コンテンツを探すため、本発明の第１の実施形態におけるステップＳ１００４の補正内積算出処理におけるステップＳ１１０３の２ユーザ間の共通コンテンツを抽出する処理に比べ、容易に共通コンテンツを抽出することができる。尚、ｐ＿ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｐｒｏｄｕｃｔのみ存在する状態がｐ＿ｓｔａｔｅ「２」の状態を示すので、ｎｅｗ＿ｐｒｏｄｕｃｔとｐｒｏｄｕｃｔの存在の有無で判定することができる。
【０１４６】
ステップＳ２１０５では、追加内積補正値算出部２１５７が、内積算出補助情報格納部２２３より、ステップＳ１１０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せと、ステップＳ１１０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する内積算出補助情報のｎｅｗ＿ｐｒｏｄｕｃｔを取得する。
ステップＳ２１０６では、追加内積補正値算出部２１５７が、Δｎ＿ｉ＿ｐにステップＳ２１０５にて取得したｎｅｗ＿ｐｒｏｄｕｃｔを加算する。
次に、ステップＳ２００７の更新内積補正値算出処理について、図３３を用いて説明する。
【０１４７】
本実施形態におけるステップＳ２００７の更新内積補正値算出処理は、本発明の第１の実施形態におけるステップＳ１００７の更新内積補正値算出処理のステップＳ１２０３の処理がステップＳ２２０３の処理に置き換わり、ステップＳ１２０５からステップＳ１２１１までの処理が、ステップＳ２２０５からステップＳ２２０６までの処理に置き換わる。
【０１４８】
ステップＳ２２０３では、更新内積補正値算出部２１５８が、内積算出補助情報格納部２２３より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せに対応する内積算出補助情報のうち、ｐ＿ｓｔａｔｅが「１」の内積算出補助情報におけるｃｏｎｔｅｎｔ＿ｉｄを抽出する。この条件を満たす共通コンテンツは、前回の類似度算出時も共通であったが、利用頻度値の積が変化しているため、内積が変化する。また、この条件を満たさない２ユーザ間の内積は、前述したステップＳ２００４の追加内積補正値算出処理にてすでに算出されたか、または、前回の類似度算出時の内積から変化がないため、改めて内積を算出する必要がない。また、予め共通コンテンツが記憶されている内積算出補助情報格納部２２３より、２ユーザ間の共通コンテンツを探すため、本発明の第１の実施形態におけるステップＳ１００７の更新内積補正値算出処理におけるステップＳ１２０３の２ユーザ間の共通コンテンツを抽出する処理に比べ、容易に共通コンテンツを抽出することができる。尚、ｐ＿ｓｔａｔｅを用いない場合は、ｎｅｗ＿ｐｒｏｄｕｃｔとｐｒｏｄｕｃｔが共に存在する状態がｐ＿ｓｔａｔｅ「１」の状態を示すので、ｎｅｗ＿ｐｒｏｄｕｃｔとｐｒｏｄｕｃｔの存在の有無で判定することができる。
【０１４９】
ステップＳ２２０５では、更新内積補正値算出部２１５８が、内積算出補助情報格納部２２３より、ステップＳ１２０１にて取得したｕｓｅｒ＿ｉｄ＿１とｕｓｅｒ＿ｉｄ＿２の組合せと、ステップＳ１２０４にて選択したｃｏｎｔｅｎｔ＿ｉｄとに対応する内積算出補助情報のｎｅｗ＿ｐｒｏｄｕｃｔとｐｒｏｄｕｃｔとを取得する。
ステップＳ２２０６では、更新内積補正値算出部２１５８が、Δｕ＿ｉ＿ｐにステップＳ２２０５にて取得したｎｅｗ＿ｐｒｏｄｕｃｔから、ステップＳ２２０５にて取得したｐｒｏｄｕｃｔを引いたものを加算する。
以上が、本実施形態におけるステップＳ１７０５の補正内積算出処理の説明である。
【０１５０】
第２の実施形態におけるサーバ装置４は、第１の実施形態のサーバ装置１よりも、更に少ない計算量でユーザ間の類似度を計算することができる。
【０１５１】
また、内積算出補助情報格納部２２３において、ｎｅｗ＿ｐｒｏｄｕｃｔとｐ＿ｓｔａｔｅとを格納しないようにすることも可能である。このとき、ステップＳ１６０２の内積算出処理の中で、ステップＳ１７０１の内積算出補助値算出処理を行う必要がなくなる。そして、ｎｅｗ＿ｐｒｏｄｕｃｔを取得する処理においては、その都度ｎｅｗ＿ｐｒｏｄｕｃｔにあたる値を算出すればよい。そして、ｐ＿ｓｔａｔｅを用いて処理を行っていた部分は、第１の実施形態と同様の処理を行えばよい。そして、類似度算出直後に、ステップＳ１７０１の内積算出補助値算出処理を応用して、ｐｒｏｄｕｃｔの値の更新、及び、内積算出補助情報の追加を行う。
なお、本発明は上述実施形態に限定されることなく、適宜変形して実施することができる。例えば、上述においては、端末装置３から送信される利用情報をサーバ装置１に集めて処理を行うようにしているが、端末装置３において上述実施形態のサーバ装置１の処理についても行うようにし、サーバ装置１を省略することも可能である。具体的には、端末装置３同士で利用情報を交換できるようにし、端末装置３にサーバ装置１の各部を追加した上で、端末装置３にて、上述実施形態においてサーバ装置１の処理として説明した処理を行ってもよい。この場合更に、ある端末装置３ａにおいて、全てのユーザの組合せに対する類似度を計算するのではなく、端末装置３ａを利用するユーザと、他のユーザとの組合せに限定して、ユーザ間の類似度の計算を行うようにしてもよい。
【符号の説明】
【０１５２】
１，４  サーバ装置（利用者情報処理装置）
１０  制御部
１１  利用情報受信部
１２  取得要求受信部
１３  要求情報送信部
１４  利用頻度値算出部
１５，２１５  類似度算出部
１６  類似ユーザ情報選択部
１７  推薦コンテンツ選択部
１８  嗜好情報格納部
１９  ノルム格納部
２０  類似度格納部
２１  ユーザ情報格納部
２２  コンテンツ情報格納部
２  ネットワーク
３ａ，３ｂ，３ｎ  端末装置
３１  利用情報送信部
３２  取得要求送信部
３３  要求情報受信部
３４  入力部
３５  表示部
１５０，２１５０  コサイン類似度算出部
１５１  通常ノルム算出部
１５２  補正ノルム算出部
１５３  追加ノルム２乗補正値算出部
１５４  更新ノルム２乗補正値算出部
１５５，２１５５  通常内積算出部
１５６，２１５６  補正内積算出部
１５７，２１５７  追加内積補正値算出部
１５８，２１５８  更新内積補正値算出部
２２３  内積算出補助情報格納部
２１５９  内積算出補助値算出部
【図１】
0005429116.tif 000013
【図２】
0005429116.tif 000014
【図３】
0005429116.tif 000015
【図４】
0005429116.tif 000016
【図５】
0005429116.tif 000017
【図６】
0005429116.tif 000018
【図７】
0005429116.tif 000019
【図８】
0005429116.tif 000020
【図９】
0005429116.tif 000021
【図１０】
0005429116.tif 000022
【図１１】
0005429116.tif 000023
【図１２】
0005429116.tif 000024
【図１３】
0005429116.tif 000025
【図１４】
0005429116.tif 000026
【図１５】
0005429116.tif 000027
【図１６】
0005429116.tif 000028
【図１７】
0005429116.tif 000029
【図１８】
0005429116.tif 000030
【図１９】
0005429116.tif 000031
【図２０】
0005429116.tif 000032
【図２１】
0005429116.tif 000033
【図２２】
0005429116.tif 000034
【図２３】
0005429116.tif 000035
【図２４】
0005429116.tif 000036
【図２５】
0005429116.tif 000037
【図２６】
0005429116.tif 000038
【図２７】
0005429116.tif 000039
【図２８】
0005429116.tif 000040
【図２９】
0005429116.tif 000041
【図３０】
0005429116.tif 000042
【図３１】
0005429116.tif 000043
【図３２】
0005429116.tif 000044
【図３３】
0005429116.tif 000045