(57)【要約】【課題】処理の流れをシンプルな構成とし、処理負荷を軽減することができる情報処理装置、情報処理方法、およびプログラムを提供することである。【解決手段】情報処理装置は、メッセージを、キュー構造の記憶部に記憶させる処理予約部と、先に記憶されたメッセージほど優先的に記憶部から読み出し、読み出したメッセージに基づく処理を並列に行う複数の処理実行部と、複数の処理実行部の其々の処理結果を出力する出力部と、を備え、処理予約部は、コンテンツ制作者によって入力されたコンテンツに関するクエリを、メッセージとして記憶部に記憶させ、処理実行部は、記憶部からクエリを読み出した場合、入力されたクエリに基づいてコンテンツ配信対象とするユーザを選択して出力する外部装置に対して、読み出したクエリを入力し、出力部は、外部装置の出力結果を、コンテンツ制作者の端末装置に出力する。【選択図】図３
2019164654.tif 000002
【特許請求の範囲】
【請求項１】
処理内容を指定するメッセージを、キュー構造の記憶部に記憶させる処理予約部と、
前記記憶部に記憶された複数の前記メッセージのうち、先に記憶されたメッセージほど優先的に前記記憶部から読み出し、前記読み出したメッセージに基づく処理を並列に行う複数の処理実行部と、
前記複数の処理実行部の其々の処理結果を出力する出力部と、を備え、
前記処理予約部は、コンテンツの制作者によって入力された前記コンテンツに関するクエリを、前記メッセージとして前記記憶部に記憶させ、
前記処理実行部は、前記記憶部から前記クエリを読み出した場合、入力されたクエリに基づいて、前記コンテンツの配信対象の候補となる複数のユーザの中から前記コンテンツの配信対象とするユーザを選択して出力する外部装置に対して、前記読み出したクエリを入力し、
前記出力部は、前記クエリに対する前記外部装置の出力結果を、前記制作者の端末装置に出力する、
情報処理装置。
【請求項２】
前記外部装置は、入力されたクエリの特徴と、前記コンテンツの配信対象の候補となる複数のユーザの其々の特徴との類似度に基づいて、前記複数のユーザの中から、前記コンテンツの配信対象とするユーザを選択する、
請求項１に記載の情報処理装置。
【請求項３】
前記複数の処理実行部の其々は、前記読み出したメッセージに基づく処理が完了した場合、処理が完了したことを示す処理完了情報を出力し、
前記複数の処理実行部の其々によって出力される前記処理完了情報に基づいて、前記複数の処理実行部の其々の処理の実行状況を監視する監視部を更に備える、
請求項１または２に記載の情報処理装置。
【請求項４】
前記監視部によって処理の実行状況が監視された前記複数の処理実行部の中に、前記記憶部から前記メッセージを読み出してから所定時間が経過するまでに前記処理完了情報を出力しない所定の処理実行部が存在する場合、前記複数の処理実行部のいずれかに、前記所定の処理実行部によって読み出されたメッセージに基づく処理を再実行させる処理管理部を更に備える、
請求項３に記載の情報処理装置。
【請求項５】
前記処理管理部は、前記所定の処理実行部によって読み出されたメッセージの優先度を最も高くして前記記憶部に再度記憶させることで、前記所定の処理実行部によって読み出されたメッセージに基づく処理を最優先で再実行させる、
請求項４に記載の情報処理装置。
【請求項６】
前記処理予約部は、更に、前記複数のユーザの中から、前記特徴の導出対象とする対象ユーザを指定するメッセージを前記記憶部に記憶させ、
前記処理実行部は、前記記憶部から前記対象ユーザを指定するメッセージを読み出した場合、前記対象ユーザの特徴を導出することを前記外部装置に依頼し、
前記依頼を受けた外部装置は、前記対象ユーザの行動履歴に基づいて、前記対象ユーザの特徴を導出する、
請求項１から５のうちいずれか１項に記載の情報処理装置。
【請求項７】
前記外部装置によって前記コンテンツの配信対象として選択されたユーザに、前記制作者のコンテンツを配信するコンテンツ配信部を更に備える、
請求項１から６のうちいずれか１項に記載の情報処理装置。
【請求項８】
コンピュータが、
処理内容を指定するメッセージを、キュー構造の記憶部に記憶させ、
前記記憶部に記憶させた複数の前記メッセージのうち、先に記憶されたメッセージほど優先的に前記記憶部から読み出し、
前記読み出したメッセージに基づく処理を並列に行い、
並列に行った前記読み出したメッセージに基づく処理の処理結果を出力し、
コンテンツの制作者によって入力された前記コンテンツに関するクエリを、前記メッセージとして前記記憶部に記憶させ、
前記記憶部から前記クエリを読み出した場合、入力されたクエリに基づいて、前記コンテンツの配信対象の候補となる複数のユーザの中から前記コンテンツの配信対象とするユーザを選択して出力する外部装置に対して、前記読み出したクエリを入力し、
前記クエリに対する前記外部装置の出力結果を、前記制作者の端末装置に出力する、
情報処理方法。
【請求項９】
コンピュータに、
処理内容を指定するメッセージを、キュー構造の記憶部に記憶させる処理と、
前記記憶部に記憶させた複数の前記メッセージのうち、先に記憶されたメッセージほど優先的に前記記憶部から読み出す処理と、
前記読み出したメッセージに基づく処理を並列に行う処理と、
並列に行った前記読み出したメッセージに基づく処理の処理結果を出力する処理と、
コンテンツの制作者によって入力された前記コンテンツに関するクエリを、前記メッセージとして前記記憶部に記憶させる処理と、
前記記憶部から前記クエリを読み出した場合、入力されたクエリに基づいて、前記コンテンツの配信対象の候補となる複数のユーザの中から前記コンテンツの配信対象とするユーザを選択して出力する外部装置に対して、前記読み出したクエリを入力する処理と、
前記クエリに対する前記外部装置の出力結果を、前記制作者の端末装置に出力する処理と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
ニュース記事とユーザとの類似度を求め、その類似度に基づいて、ユーザの趣味嗜好に合ったコンテンツを配信する技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−０３８８２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では、ニュース記事などのコンテンツとユーザとの類似度
を求める処理が複雑であり、しばしば処理負荷が大きくなってしまう場合があった。
【０００５】
本発明は、上記の課題に鑑みてなされたものであり、処理の流れをシンプルな構成とし、処理負荷を軽減することができる情報処理装置、情報処理方法、およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
本発明の一態様は、処理内容を指定するメッセージを、キュー構造の記憶部に記憶させる処理予約部と、前記記憶部に記憶された複数の前記メッセージのうち、先に記憶されたメッセージほど優先的に前記記憶部から読み出し、前記読み出したメッセージに基づく処理を並列に行う複数の処理実行部と、前記複数の処理実行部の其々の処理結果を出力する出力部と、を備え、前記処理予約部は、コンテンツの制作者によって入力された前記コンテンツに関するクエリを、前記メッセージとして前記記憶部に記憶させ、前記処理実行部は、前記記憶部から前記クエリを読み出した場合、入力されたクエリに基づいて、前記コンテンツの配信対象の候補となる複数のユーザの中から前記コンテンツの配信対象とするユーザを選択して出力する外部装置に対して、前記読み出したクエリを入力し、前記出力部は、前記クエリに対する前記外部装置の出力結果を、前記制作者の端末装置に出力する、情報処理装置である。
【発明の効果】
【０００７】
本発明の一態様によれば、処理の流れをシンプルな構成とし、処理負荷を軽減することができる。
【図面の簡単な説明】
【０００８】
【図１】実施形態における情報処理装置１００を含む情報処理システム１の一例を示す図である。
【図２】コンテンツが配信された端末装置１０の画面の一例を示す図である。
【図３】実施形態における情報処理装置１００の構成の一例を示す図である。
【図４】実施形態における情報処理装置１００による一連のバッチ処理の流れを示すフローチャートである。
【図５】ユーザベクトルの生成処理を説明するための図である。
【図６】第１記憶部ＤＢ１に格納されたステータスの結果の一例を示す図である。
【図７】実施形態における情報処理装置１００による一連のオンデマンド処理の流れを示すフローチャートである。
【図８】クエリに興味関心を示すユーザの選択処理を説明するための図である。
【図９】ユーザの集計結果の一例を示す図である。
【図１０】実施形態の情報処理装置１００のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明を適用した情報処理装置、情報処理方法、およびプログラムを、図面を参照して説明する。
【００１０】
［概要］
情報処理装置は、一以上のプロセッサにより実現される。情報処理装置は、処理内容を指定するメッセージを、キュー構造の記憶部に記憶させ、記憶部に記憶させた複数のメッセージのうち、先に記憶させたメッセージほど優先的に記憶部から読み出し、読み出したメッセージに基づく処理を並列に行う。そして、情報処理装置は、メッセージに基づく処理の処理結果を出力する。
【００１１】
情報処理装置には、コンテンツの制作者によってコンテンツに関するクエリがメッセージとして入力される場合がある。例えば、コンテンツの制作者が、自らが制作したコンテンツに対して興味関心を寄せるユーザを特定するために、コンテンツのことを端的に表現したキーワードをクエリとして情報処理装置に入力することがある。この場合、情報処理装置は、クエリとして入力されたキーワードをキュー構造の記憶部に記憶させる。情報処理装置は、記憶部から読み出したメッセージを基に複数の処理を並列に行っているときに、読み出したメッセージがクエリであった場合、そのクエリを、ある外部装置に入力する。
【００１２】
外部装置は、クエリが入力されると、その入力されたクエリの特徴と、コンテンツの配信対象の候補となる複数のユーザの其々の特徴との類似度を導出し、その類似度に基づいて、複数のユーザの中から、コンテンツの配信対象とするユーザを選択して出力する装置である。例えば、外部装置は、クエリの特徴との類似度が閾値以上となるユーザを、コンテンツの配信対象とするユーザとして選択する。クエリの特徴との類似度が閾値以上となるユーザは、コンテンツの制作者が制作したコンテンツに対して興味関心を示すことが想定されるユーザである。
【００１３】
情報処理装置は、外部装置にクエリを入力して得られた出力結果、すなわちコンテンツの制作者が制作したコンテンツに対して興味関心を示すことが想定されるユーザの集計結果などを、コンテンツの制作者が利用する端末装置に出力する。このように、メッセージのキューシングシステムを利用することで、処理の流れをシンプルな構成とすることができ、装置全体の処理負荷を軽減することができる。
【００１４】
［全体構成］
図１は、実施形態における情報処理装置１００を含む情報処理システム１の一例を示す図である。実施形態における情報処理システム１は、例えば、一以上の端末装置１０と、サービス提供装置２０と、情報処理装置１００と、分散処理装置２００とを備える。これらの装置は、ネットワークＮＷを介して接続される。また、これらの装置のうち一部は、他の装置に仮想的な装置として包含されてもよく、例えば、サービス提供装置２０や分散処理装置２００の機能の一部または全部が、情報処理装置１００の機能によって実現される仮想マシンであってもよいし、これとは反対に、情報処理装置１００の機能の一部または全部が、サービス提供装置２０や分散処理装置２００の機能によって実現される仮想マシンであってもよい。
【００１５】
図１に示す各装置は、ネットワークＮＷを介して種々の情報を送受信する。ネットワークＮＷは、例えば、インターネット、ＷＡＮ（Wide Area Network）、ＬＡＮ（Local Area Network）、プロバイダ端末、無線通信網、無線基地局、専用回線などを含む。なお、図１に示す各装置の全ての組み合わせが相互に通信可能である必要はなく、ネットワークＮＷは、一部にローカルなネットワークを含んでもよい。
【００１６】
端末装置１０は、例えば、スマートフォンなどの携帯電話、タブレット端末、各種パーソナルコンピュータなどの、入力装置、表示装置、通信装置、記憶装置、および演算装置を備える端末装置である。通信装置は、ＮＩＣ（Network Interface Card）などのネットワークカード、無線通信モジュールなどを含む。端末装置１０では、ウェブブラウザやアプリケーションプログラムなどのＵＡ（User Agent）が起動し、ユーザの入力する内容に応じたリクエストをサービス提供装置２０に送信する。また、ＵＡが起動された端末装置１０は、サービス提供装置２０から取得した情報に基づいて、表示装置に各種画像を表示させる。
【００１７】
サービス提供装置２０は、例えば、ＵＡとして起動されたウェブブラウザからのリクエストに応じてウェブページを端末装置１０に提供するウェブサーバである。ウェブページは、例えば、インターネット上において商品を販売するショッピングサイトやオークションサイト、フリーマーケットサイト等のウェブサイトを構成するウェブページであってよい。また、サービス提供装置２０は、検索サイトやＳＮＳ（Social Networking Service）、メールサービスなどの各種サービスを提供するウェブページを端末装置１０に提供してもよい。また、サービス提供装置２０は、ＵＡとして起動されたアプリケーションからのリクエストに応じてコンテンツを端末装置１０に提供することで、上述した各種ウェブサイトと同様のサービスを提供するアプリケーションサーバであってもよい。サービス提供装置２０は、「コンテンツ配信部」の一例である。
【００１８】
例えば、サービス提供装置２０は、自らが提供するサービスに新たなコンテンツが登録された場合、サービスを利用する複数のユーザのうち、新たに登録されたコンテンツに対して、より興味や関心を示すことが想定されるユーザに、そのコンテンツを配信する。
【００１９】
図２は、コンテンツが配信された端末装置１０の画面の一例を示す図である。例えば、サービス提供装置２０は、コンテンツの一つとしてニュース記事が新規に入稿された場合、そのニュース記事により興味関心を示しやすいユーザの端末装置１０に対して、ニュース記事をプッシュ通知などで配信する（図中Ｒ１）。
【００２０】
情報処理装置１００は、メッセージキューイングシステムを利用した装置である。メッセージとは、情報処理装置１００に含まれる各構成要素（プロセッサが実現する各機能部）が、キュー構造の記憶装置を介して相互に送受信するデータである。情報処理装置１００に含まれる各構成要素は、キュー構造の記憶装置を介してメッセージを送受信するため、互いに異なる周期で独立して処理を行うことができる。メッセージには、一方の構成要素から他方の構成要素に処理を依頼するメッセージ（以下、処理依頼メッセージと称する）や、処理の依頼を受けた方の構成要素が、処理を依頼した方の構成要素に対して、処理が完了したことを通知するためのメッセージ（以下、処理完了メッセージと称する）などが含まれる。処理完了メッセージは、「処理完了情報」の一例である。
【００２１】
情報処理装置１００は、例えば、予め決められた処理を所定周期（例えば一日）で繰り返すバッチ処理と、所定のユーザの要求に応じて処理を行うオンデマンド処理とを行う。情報処理装置１００は、例えば、バッチ処理として、分散処理装置２００にユーザベクトルの生成処理を指示する。ユーザベクトルは、例えば、新たに登録されたコンテンツの配信対象の候補となる複数のユーザの其々の特徴を示すベクトルである。
【００２２】
また、情報処理装置１００は、例えば、オンデマンド処理として、コンテンツの制作者によって新たに制作されたコンテンツに関するクエリが入力された場合、分散処理装置２００に、コンテンツの配信対象の候補となる複数のユーザの中から、新たに制作されたコンテンツに対して興味関心を示すことが想定されるユーザを選択する処理を指示する。クエリは、例えば、一つの単語（ワード）であってもよいし、複数の単語を含む語句（フレーズ）であってもよい。
【００２３】
分散処理装置２００は、例えば、Ｈａｄｏｏｐと呼ばれる分散ファイルシステムを利用して、画像やテキストなどの構造化されていないメタデータを複数のデータに分割し、分割した其々のデータに対して、並列に処理を行う装置である。例えば、分散処理装置２００は、情報処理装置１００からクエリが入力されると、その入力されたクエリの特徴を示すクエリベクトルを生成し、生成したクエリベクトルと、予め生成しておいた複数のユーザベクトルとの類似度を並列処理によって導出する。分散処理装置２００は、複数のユーザベクトルの中から、クエリベクトルとの類似度が閾値以上のユーザベクトルを抽出し、抽出したユーザベクトルの元となったユーザをコンテンツの配信対象とするユーザとして選択し、その結果を情報処理装置１００に出力する。
【００２４】
［情報処理装置の構成］
図３は、実施形態における情報処理装置１００の構成の一例を示す図である。図示のように、情報処理装置１００は、例えば、ジョブ管理部１１０と、ジョブステータス監視部１２０と、ジョブ実行部１３０と、ジョブ実行状況出力部１４０と、オンデマンド処理予約部１５０と、ユーザＩＤ変換部１６０と、第１記憶部ＤＢ１と、第２記憶部ＤＢ２と、第３記憶部ＤＢ３とを備える。ジョブ管理部１１０と、オンデマンド処理予約部１５０と、ユーザＩＤ変換部１６０とを合わせたものは、「処理予約部」の一例である。また、ジョブ管理部１１０は、「処理管理部」の一例であり、ジョブ実行部１３０は、「処理実行部」の一例である。
【００２５】
ジョブ管理部１１０、ジョブステータス監視部１２０、ジョブ実行部１３０、ジョブ実行状況出力部１４０、オンデマンド処理予約部１５０、およびユーザＩＤ変換部１６０は、例えば、ＣＰＵ（Central Processing Unit）などのプロセッサが各種記憶部に格納されたプログラムを実行することにより実現される。また、ジョブ管理部１１０、ジョブステータス監視部１２０、ジョブ実行部１３０、ジョブ実行状況出力部１４０、オンデマンド処理予約部１５０、およびユーザＩＤ変換部１６０のうち一部または全部は、ＬＳＩ（Large Scale Integration）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）、またはＧＰＵ（Graphics Processing Unit）などのハードウェア（回路部；circuitry）により実現されてもよいし、ソフトウェアとハードウェアの協働によって実現されてもよい。
【００２６】
第１記憶部ＤＢ１、第２記憶部ＤＢ２、および第３記憶部ＤＢ３は、例えば、ＨＤＤ（Hard Disc Drive）、フラッシュメモリ、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）などの記憶装置により実現される。これらの記憶装置には、ファームウェアやアプリケーションプログラムなどの各種プログラムが格納される。
【００２７】
第１記憶部ＤＢ１には、ジョブステータス監視部１２０の処理結果が記憶される。
【００２８】
第２記憶部ＤＢ２には、メッセージが格納されるキュー構造の記憶領域（以下、メッセージキューと称する）が含まれる。メッセージキューに格納されたメッセージは、後述する優先度が設けられていない限り、先に格納されたものから順に読み出される。メッセージキューには、上述した種々のメッセージのうち、少なくとも処理依頼メッセージが格納される。
【００２９】
第３記憶部ＤＢ３には、コンテンツの配信対象の候補となる複数のユーザの其々の識別情報（以下、ユーザＩＤと称する）が予め格納される。ユーザＩＤは、サービス提供装置２０により提供されるサービスを利用するユーザに対して割り当てられるＩＤであり、ユーザが任意に設定可能である。
【００３０】
ジョブ管理部１１０は、ジョブステータス監視部１２０によって監視された処理（ジョブ）の実行状況を参照し、完了せずに途中で停止した処理が存在する場合、その停止した処理をジョブ実行部１３０に再実行させる。
【００３１】
ジョブステータス監視部１２０は、後述するジョブ実行部１３０による処理の実行状況を監視し、その監視結果を第１記憶部ＤＢ１に記憶させる。
【００３２】
ジョブ実行部１３０は、第１ワーカ１３２（１）から第ｋワーカ１３２（ｋ：ｋは任意の自然数）までの複数のワーカを備える。各ワーカ１３２は、第２記憶部ＤＢ２のメッセージキューに格納された一つ以上の処理依頼メッセージのうち、先に格納された処理依頼メッセージから優先的に読み出し、読み出した処理依頼メッセージによって指定された処理を行う。各ワーカ１３２は、処理依頼メッセージによって指定された処理が完了した場合、処理が完了したことを示す処理完了メッセージを第２記憶部ＤＢ２に格納する。第２記憶部ＤＢ２に格納された処理完了メッセージは、上述したジョブステータス監視部１２０によって参照される。各ワーカ１３２は、上述したメッセージキューから処理依頼メッセージを読み出し、処理が完了したら処理完了メッセージを第２記憶部ＤＢ２に格納する、という一連の処理を所定の周期で繰り返す。以下、ワーカ１３２が処理を実行している状態を「稼働状態」と称し、ワーカ１３２が処理を実行していない状態を「待機状態」と称して説明する。
【００３３】
ジョブ実行状況出力部１４０は、第１記憶部ＤＢ１から、ジョブ実行部１３０の処理の実行状況の結果を示す情報を読み出し、第１記憶部ＤＢ１から読み出した情報を、ネットワークＮＷを介して、コンテンツの制作者が利用する端末装置１０に提供（送信）する。例えば、ジョブ実行状況出力部１４０は、端末装置１０で起動されたウェブブラウザから、ジョブ実行部１３０の処理の実行状況を確認するためのインタフェース（ＷｅｂＵＩ）を介して、第１記憶部ＤＢ１から読み出した情報を端末装置１０に提供してよい。
【００３４】
また、ジョブ実行状況出力部１４０は、第１記憶部ＤＢ１から読み出した、ジョブ実行部１３０の処理の実行状況の結果を示す情報を、ジョブ管理部１１０に送信する。
【００３５】
オンデマンド処理予約部１５０は、例えば、クエリを入力するためのＷｅｂＵＩに設けられたクエリ入力窓に対して、単語または語句が入力された場合、その（それらの）単語または語句をクエリとする。例えば、コンテンツの制作者は、自らが制作したコンテンツの内容から、そのコンテンツを端的に表した単語や語句を作り出してクエリ入力窓に入力してもよいし、コンテンツに含まれるテキストから抜粋した単語や語句をクエリ入力窓に入力してもよい。例えば、コンテンツの制作者が、オンリンピックに関するニュース記事を制作し、「○○オリンピック」や「○○五輪」、「フィギュアスケート＿金メダル」といったオンリンピックに関連した単語や語句をクエリ入力窓に入力したとする。この場合、オンデマンド処理予約部１５０は、「○○オリンピック」や「○○五輪」、「フィギュアスケート＿金メダル」といった単語や語句をクエリとする。そして、オンデマンド処理予約部１５０は、クエリとして入力された単語または語句をメッセージ（以下、クエリメッセージと称する）として、メッセージキューに格納する。クエリメッセージは、処理依頼メッセージの一つである。クエリメッセージに基づく処理内容については後述する。
【００３６】
ユーザＩＤ変換部１６０は、分散処理装置２００から、コンテンツの配信対象の候補となる複数のユーザのアカウント情報を取得する。アカウント情報には、例えば、ユーザによってユーザＩＤとして設定されたメールアドレスや、パスワード、生年月日、名前、性別などの個人情報が含まれる。
【００３７】
ユーザＩＤ変換部１６０は、取得したアカウント情報から、メールアドレスを抽出し、抽出したメールアドレスをユーザＩＤとして第３記憶部ＤＢ３に格納すると共に、抽出したユーザＩＤを暗号化する。そして、ユーザＩＤ変換部１６０は、暗号化したユーザＩＤによって識別されるユーザのユーザベクトルを生成するように依頼する処理依頼メッセージを第２記憶部ＤＢ２のメッセージキューに格納する。暗号化したユーザＩＤによって識別されるユーザは「特徴の導出対象とする対象ユーザ」の一例である。
【００３８】
［バッチ処理のフローチャート］
以下、実施形態における情報処理装置１００による一連のバッチ処理の流れをフローチャートに即して説明する。図４は、実施形態における情報処理装置１００による一連のバッチ処理の流れを示すフローチャートである。本フローチャートの処理は、例えば、時間単位、日単位、週単位などの所定の周期で繰り返し行われてよい。
【００３９】
まず、ユーザＩＤ変換部１６０は、暗号化したユーザＩＤによって識別されるユーザのユーザベクトルを生成するように依頼する処理依頼メッセージを、第２記憶部ＤＢ２のメッセージキューに格納する（Ｓ１００）。この処理依頼メッセージには、暗号化されたユーザＩＤが含まれる。
【００４０】
次に、情報処理装置１００は、第１ワーカ１３２（１）から第ｋワーカ１３２（ｋ）までの複数のワーカの中に、待機状態のワーカ１３２が存在するか否かを判定し（Ｓ１０２）、待機状態のワーカ１３２が存在しない場合（全てのワーカ１３２が稼働状態である場合）、本フローチャートの処理を終了する。
【００４１】
一方、待機状態のワーカ１３２が存在する場合（全てのワーカ１３２が稼働状態でない場合）、その待機状態のワーカ１３２は、メッセージキューから処理依頼メッセージを読み出し、読み出した処理依頼メッセージによって指定された処理を開始する（Ｓ１０４）。
【００４２】
例えば、読み出した処理依頼メッセージが、ユーザベクトルを生成することを依頼する処理依頼メッセージである場合、ワーカ１３２は、処理依頼メッセージに含まれる暗号化されたユーザＩＤを分散処理装置２００に送信することで、分散処理装置２００にユーザベクトルを生成させる。
【００４３】
図５は、ユーザベクトルの生成処理を説明するための図である。例えば、依頼を受けた分散処理装置２００は、処理依頼メッセージに含まれる、暗号化されたユーザＩＤを復号し、その復号したユーザＩＤに対応付けられたユーザの行動履歴に基づいて、ユーザベクトルを生成する。ユーザの行動履歴には、例えば、ユーザが閲覧したコンテンツに含まれるテキストや、コンテンツ検索時に入力されたクエリのログが含まれる。ユーザの行動履歴は、予め分散処理装置２００によって収集されているものとする。
【００４４】
例えば、ユーザが閲覧したコンテンツがニュース記事である場合、分散処理装置２００は、ニュース記事のタイトルおよび本文を形態素解析によって複数の単語（形態素）に分割し、分割した各単語をユーザベクトルの要素に決定する。この際、分散処理装置２００は、各要素の値を単語の重みとする。例えば、分散処理装置２００は、ＴＦ（Term Frequency）‐ＩＤＦ（Inverse Document Frequency）と呼ばれる単語の出現頻度を評価する手法を用いて、分割した各単語（または複数の単語の組み合わせである語句）に対して重みを付与する。ＴＦは、それぞれの単語（形態素）のテキスト（タイトルおよび本文）内での出現頻度を表しており、そのＴＦ値は、対象のテキスト内で出現する回数が多い単語ほど大きくなる。ＩＤＦは、ある単語が出現するテキストの頻度を表しており、そのＩＤＦ値は、ユーザが閲覧したコンテンツに含まれるテキストでは出現し易く、ユーザが閲覧していない他のコンテンツに含まれるテキストでは出現し難い単語ほど大きくなる。例えば、分散処理装置２００は、ＴＦ値とＩＤＦ値との積を、各単語の重み（以下、第１の重みと称する）とする。
【００４５】
また、分散処理装置２００は、ユーザ間でのコンテンツの閲覧傾向の差異を単語の重みに反映させるため、上述した手法でＴＦ値を導出すると共に、対象とするユーザ（処理依頼メッセージに含まれるユーザＩＤのユーザ）は閲覧回数が多く、他のユーザ（処理依頼メッセージに含まれるユーザＩＤと異なるユーザＩＤのユーザ）は閲覧回数が少ないコンテンツに含まれるテキストの単語ほど大きくなる傾向のＩＤＦ値（以下、第２のＩＤＦ値）を導出する。分散処理装置２００は、ＴＦ値と第２のＩＤＦ値との積を、各単語の第２の重みとする。
【００４６】
そして、分散処理装置２００は、第１の重みと第２の重みとに基づいて各要素の値を決定し、それらの複数の要素値をもつ多次元のベクトルをユーザベクトルとして生成する。分散処理装置２００は、ユーザベクトルの生成依頼を受ける度に、その処理依頼メッセージに含まれるユーザＩＤに基づいて、ユーザＩＤによって識別されるユーザのユーザベクトルを生成する。分散処理装置２００は、例えば、ユーザベクトルを生成すると、そのユーザベクトルを内部の記憶装置に記憶させておくと共に、ユーザベクトルの生成が完了したことを示す情報をワーカ１３２に返す。ワーカ１３２は、分散処理装置２００からユーザベクトルの生成が完了したことを示す情報を受けると、ユーザベクトルを生成することを依頼する処理依頼メッセージに対する処理完了メッセージを第２記憶部ＤＢ２に格納する。
【００４７】
図４に戻り、次に、ジョブステータス監視部１２０は、第２記憶部ＤＢ２に処理完了メッセージが格納されたか否かを判定し（Ｓ１０６）、第２記憶部ＤＢ２に処理完了メッセージが格納された場合、処理依頼メッセージに基づく処理のステータス（実行状況）を、処理が完了したことを示すステータスにし、そのステータスの結果を、第１記憶部ＤＢ１に格納する（Ｓ１０８）。
【００４８】
一方、ジョブステータス監視部１２０は、第２記憶部ＤＢ２に処理完了メッセージが格納されていない場合、処理依頼メッセージをメッセージキューから読み出したワーカ１３２が処理を開始してから所定時間が経過したか否かを判定し（Ｓ１１０）、処理を開始してから所定時間が経過した場合、処理依頼メッセージに基づく処理のステータスを、処理が完了せずに異常（エラー）が生じたことを示すステータスにし、そのステータスの結果を、第１記憶部ＤＢ１に格納する（Ｓ１１２）。これによって、本フローチャートの処理が終了する。
【００４９】
図６は、第１記憶部ＤＢ１に格納されたステータスの結果の一例を示す図である。図示の例のように、ジョブステータス監視部１２０は、処理依頼メッセージを読み出したワーカ１３２の識別情報であるワーカＩＤに対して、各処理依頼メッセージの識別情報であるジョブＩＤと、ワーカ１３２が処理を開始した日時と、ワーカ１３２が処理を完了した日時と、ステータスとを対応付けた情報を、ステータスの結果として第１記憶部ＤＢ１に格納してよい。図示の例では、ワーカＩＤが「２」であるワーカ１３２（２）に依頼したジョブＩＤが「ＤＤＤ」の処理が完了していない。この場合、ジョブステータス監視部１２０は、ワーカ１３２（２）に依頼した「ＤＤＤ」の処理のステータスをエラーのステータスにする。
【００５０】
ジョブ実行状況出力部１４０は、第１記憶部ＤＢ１に格納されたステータスの結果を参照し、エラーのステータスが存在する場合、ステータスの結果からエラーのステータスのジョブＩＤを抽出し、抽出したジョブＩＤをジョブ管理部１１０に送信する。なお、ジョブ実行状況出力部１４０は、第１記憶部ＤＢ１に格納されたステータスの結果をそのままジョブ管理部１１０に送信してもよい。
【００５１】
ジョブ管理部１１０は、エラーのステータスのジョブＩＤを参照し、そのジョブＩＤと同じ処理依頼メッセージ、すなわち処理を再実行させるための処理依頼メッセージを、第２記憶部ＤＢ２のメッセージキューに格納する。この際、ジョブ管理部１１０は、処理依頼メッセージの優先度を最も高くする。優先度とは、メッセージキューに格納された処理依頼メッセージのうち、どの処理依頼メッセージから読み出すのかを順位付けるものである。例えば、オンデマンド処理予約部１５０やユーザＩＤ変換部１６０によってメッセージキューに格納される処理依頼メッセージには、優先度が設けられておらず、メッセージキューに格納された順序で処理依頼メッセージが読み出される。これに対して、ジョブ管理部１１０によってメッセージキューに格納される処理依頼メッセージには、最も高い優先度が設けられているため、メッセージキューに既に他の処理依頼メッセージが格納されていても、後に格納された再実行のための処理依頼メッセージが先に読み出される。この結果、待機状態のいずれかのワーカ１３２は、ステータスがエラーとなった処理を最優先で実行する。
【００５２】
［オンデマンド処理のフローチャート］
以下、実施形態における情報処理装置１００による一連のオンデマンド処理の流れをフローチャートに即して説明する。図７は、実施形態における情報処理装置１００による一連のオンデマンド処理の流れを示すフローチャートである。
【００５３】
まず、オンデマンド処理予約部１５０は、例えば、ＷｅｂＵＩにクエリが入力されたか否かを判定し（Ｓ２００）、ＷｅｂＵＩにクエリが入力された場合、入力されたクエリを含むクエリメッセージを、第２記憶部ＤＢ２のメッセージキューに格納する（Ｓ２０２）。
【００５４】
次に、情報処理装置１００は、第１ワーカ１３２（１）から第ｋワーカ１３２（ｋ）までの複数のワーカの中に、待機状態のワーカ１３２が存在するか否かを判定し（Ｓ２０４）、待機状態のワーカ１３２が存在しない場合（全てのワーカ１３２が稼働状態である場合）、本フローチャートの処理を終了する。
【００５５】
一方、待機状態のワーカ１３２が存在する場合（全てのワーカ１３２が稼働状態でない場合）、その待機状態のワーカ１３２は、メッセージキューから処理依頼メッセージを読み出し、読み出した処理依頼メッセージによって指定された処理を開始する（Ｓ２０６）。
【００５６】
例えば、読み出した処理依頼メッセージがクエリメッセージである場合、ワーカ１３２は、クエリメッセージに含まれるクエリを分散処理装置２００に送信することで、分散処理装置２００に、コンテンツの配信対象の候補となる複数のユーザの中から、クエリに興味関心を示すユーザを選択させる。ＷｅｂＵＩには、コンテンツの制作者が制作したコンテンツに関連する単語や語句がクエリとして入力されるため、クエリに興味関心を示すユーザは、コンテンツの制作者が制作したコンテンツに興味関心を示すユーザでもある。クエリに興味関心を示すユーザは、「コンテンツの配信対象とするユーザ」の一例である。
【００５７】
図８は、クエリに興味関心を示すユーザの選択処理を説明するための図である。例えば、分散処理装置２００は、ワーカ１３２からクエリを取得すると、クエリの特徴を示すクエリベクトルを生成する。例えば、分散処理装置２００は、ｗｏｒｄ２ｖｅｃやＧｌｏＶｅのような分散表現または単語埋め込み表現（Word Embedding(s)）と呼ばれる手法を用いて、クエリからクエリベクトルを生成してよい。分散表現または単語埋め込み表現は、単語または語句と、その単語または語句の前後で出現する単語または語句との共起性に基づいて、単語や語句をベクトル化する手法であり、例えば、予め用意された複数の単語や語句を含むコーパスに基づいて、ある文脈においてクエリの前後に出現する単語の出現確率を求め、その出現確率を要素値とする多次元のベクトルを生成する手法である。
【００５８】
例えば、分散処理装置２００は、クエリベクトルを生成すると、そのクエリベクトルと、予め生成しておいた複数のユーザベクトルの其々との類似度（例えばコサイン類似度）を導出し、クエリベクトルとの類似度が大きい上位所定数（例えば１０個）のユーザベクトルを抽出したり、クエリベクトルとの類似度が閾値以上の全てのユーザベクトルを抽出したりする。そして、分散処理装置２００は、抽出したユーザベクトルの元となったユーザＩＤのユーザを、クエリに興味関心を示すユーザとして選択する。
【００５９】
分散処理装置２００は、コンテンツの配信対象の候補となる複数のユーザの中から、クエリに興味関心を示すユーザを選択すると、クエリに興味関心を示すユーザの集計結果（ユーザの選択結果）を示す情報と、ユーザの選択処理が完了したことを示す情報とをワーカ１３２に返す。なお、分散処理装置２００は、クエリに興味関心を示すユーザとして選択したユーザ以外のユーザもユーザの集計結果に含めてよい。ワーカ１３２は、分散処理装置２００から、ユーザの集計結果を示す情報と、ユーザの選択処理が完了したことを示す情報とを受けると、クエリメッセージに対する処理完了メッセージと、ユーザの集計結果を示す情報とを第２記憶部ＤＢ２に格納する。
【００６０】
図７に戻り、次に、ジョブステータス監視部１２０は、第２記憶部ＤＢ２に、クエリメッセージに対する処理完了メッセージと、ユーザの集計結果を示す情報とが格納されたか否かを判定し（Ｓ２０８）、第２記憶部ＤＢ２に双方が格納された場合、クエリメッセージに基づく処理のステータス（実行状況）を、処理が完了したことを示すステータスにし、そのステータスの結果を、第１記憶部ＤＢ１に格納すると共に、ユーザの集計結果を示す情報を、第１記憶部ＤＢ１に格納する（Ｓ２１０）。
【００６１】
次に、ジョブ実行状況出力部１４０は、第１記憶部ＤＢ１に格納されたユーザの集計結果を示す情報を、ＷｅｂＵＩなどを介してコンテンツの制作者の端末装置１０に提供する（Ｓ２１２）。
【００６２】
図９は、ユーザの集計結果の一例を示す図である。例えば、ジョブ実行状況出力部１４０は、ユーザの集計結果として、クエリに興味関心を示すユーザ、或いはココンテンツに興味関心を示すユーザの数を、「ターゲティング通知対象のユーザ数」として提供する。また、ジョブ実行状況出力部１４０は、各ユーザのユーザＩＤ（暗号化されたユーザＩＤ）に対して、そのユーザが利用する端末装置１０の識別情報（図中デバイスＩＤ）や、端末装置１０にインストールされたＯＳ（Operating System）の種類などが対応付けられた情報を、ユーザの集計結果として提供してもよい。また、ジョブ実行状況出力部１４０は、クエリベクトルとの類似度の大きさに対するユーザの人数の分布を表すグラフなどを、ユーザの集計結果として提供してもよい。このような情報をユーザの集計結果としてコンテンツの制作者に提供するため、コンテンツの制作者は、自らが制作したコンテンツに何人程度のユーザが興味関心を示すのかを知ることができる。この結果、コンテンツの制作者は、制作したコンテンツを改編したり、他のコンテンツに差し替えたりすることができる。
【００６３】
また、ジョブ実行状況出力部１４０は、第１記憶部ＤＢ１に格納されたユーザの集計結果を示す情報を、コンテンツの制作者の端末装置１０に提供するのに代えて、或いは加えて、サービス提供装置２０に提供してもよい。この場合、サービス提供装置２０は、ユーザの集計結果に含まれるユーザ、すなわち、コンテンツの制作者が制作したコンテンツに興味関心を示すことが想定されるユーザの端末装置１０に、コンテンツの制作者が制作したコンテンツをプッシュ通知などで配信してよい。
【００６４】
一方、ジョブステータス監視部１２０は、第２記憶部ＤＢ２に、クエリメッセージに対する処理完了メッセージおよびユーザの集計結果を示す情報のいずれか一方または双方が格納されていない場合、クエリメッセージをメッセージキューから読み出したワーカ１３２が処理を開始してから所定時間が経過したか否かを判定し（Ｓ２１４）、処理を開始してから所定時間が経過した場合、クエリメッセージに基づく処理のステータスを、処理が完了せずに異常（エラー）が生じたことを示すステータスにし、そのステータスの結果を、第１記憶部ＤＢ１に格納する（Ｓ２１６）。これによって、本フローチャートの処理が終了する。
【００６５】
以上説明した実施形態によれば、処理依頼メッセージを、メッセージキューに格納するジョブ管理部１１０、オンデマンド処理予約部１５０、またはユーザＩＤ変換部１６０と、メッセージキューに格納された処理依頼メッセージのうち、先に格納された処理依頼メッセージほど優先的にメッセージキューから読み出し、読み出した処理依頼メッセージに基づく処理を並列に行う複数のワーカ１３２と、複数のワーカ１３２の其々の処理結果を出力するジョブ実行状況出力部１４０と、を備え、オンデマンド処理予約部１５０は、コンテンツの制作者によって入力されたコンテンツに関するクエリを、処理依頼メッセージの一つであるクエリメッセージとしてメッセージキューに格納し、複数のワーカ１３２のうち待機状態のワーカ１３２は、メッセージキューからクエリメッセージを読み出した場合、クエリメッセージに含まれるクエリを分散処理装置２００に入力する。分散処理装置２００は、入力されたクエリをクエリベクトルに変換し、そのクエリベクトルと、コンテンツの配信対象の候補となる複数のユーザの其々のユーザベクトルとの類似度に基づいて、複数のユーザの中からコンテンツの配信対象とするユーザを選択し、その結果をワーカ１３２に出力する。ジョブ実行状況出力部１４０は、分散処理装置２００の出力結果を、コンテンツの制作者の端末装置１０に提供する。このようなメッセージのキューシングシステムを利用することで、情報処理装置１００の各構成要素は、互いに異なる周期で独立して処理を行うことができるため、処理の流れをシンプルな構成とすることができ、装置全体の処理負荷を軽減することができる。
【００６６】
また、上述した実施形態によれば、複数のワーカ１３２の中に、メッセージキューから処理依頼メッセージを読み出してから所定時間が経過するまでに処理完了メッセージを出力しないワーカ１３２が存在する場合、ジョブ管理部１１０は、そのワーカ１３２が行った処理を再実行させるための処理依頼メッセージに最も高い優先度を付けてメッセージキューに格納する。これによって、メッセージキューに既に他の処理依頼メッセージが格納されていても、後に格納された再実行のための処理依頼メッセージが先に読み出されるため、途中で止まった処理を最優先で再実行させることができる。この結果、処理の再実行性を高めることができる。
【００６７】
また、上述した実施形態によれば、ユーザＩＤを予め暗号化した上で、ユーザベクトルの生成処理などの各種処理を行うため、ユーザの個人情報の秘匿性を高めながら、装置全体の処理負荷を軽減することができる。
【００６８】
また、上述した実施形態によれば、メッセージのキューシングシステムを利用するため、構成要素間での同期などを取る必要がなく、情報処理装置１００の各構成要素の処理内容を変更したり、新たな構成要素を追加したりすることを容易に行うことができる。この結果、情報処理装置１００のモジュール性を向上させることができる。
【００６９】
＜ハードウェア構成＞
上述した実施形態の情報処理装置１００は、例えば、図１０に示すようなハードウェア構成により実現される。図１０は、実施形態の情報処理装置１００のハードウェア構成の一例を示す図である。
【００７０】
情報処理装置１００は、ＮＩＣ１００−１、ＣＰＵ１００−２、ＲＡＭ１００−３、ＲＯＭ１００−４、フラッシュメモリやＨＤＤなどの二次記憶装置１００−５、およびドライブ装置１００−６が、内部バスあるいは専用通信線によって相互に接続された構成となっている。ドライブ装置１００−６には、光ディスクなどの可搬型記憶媒体が装着される。二次記憶装置１００−５、またはドライブ装置１００−６に装着された可搬型記憶媒体に格納されたプログラムがＤＭＡコントローラ（不図示）などによってＲＡＭ１００−３に展開され、ＣＰＵ１００−２によって実行されることで、ジョブ管理部１１０、ジョブステータス監視部１２０、ジョブ実行部１３０、ジョブ実行状況出力部１４０、オンデマンド処理予約部１５０、およびユーザＩＤ変換部１６０の各構成要素が実現される。これらの構成要素が参照するプログラムは、ネットワークＮＷを介して他の装置からダウンロードされてもよい。
【００７１】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何ら限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【００７２】
１…情報処理システム、１０…端末装置、２０…サービス提供装置、１００…情報処理装置、１１０…ジョブ管理部、１２０…ジョブステータス監視部、１３０…ジョブ実行部、１３２…ワーカ、１４０…ジョブ実行状況出力部、１５０…オンデマンド処理予約部、１６０…ユーザＩＤ変換部、ＤＢ１…第１記憶部、ＤＢ２…第２記憶部、ＤＢ３…第３記憶部、２００…分散処理装置
【図１】
2019164654.tif 000003
【図２】
2019164654.tif 000004
【図３】
2019164654.tif 000005
【図４】
2019164654.tif 000006
【図５】
2019164654.tif 000007
【図６】
2019164654.tif 000008
【図７】
2019164654.tif 000009
【図８】
2019164654.tif 000010
【図９】
2019164654.tif 000011
【図１０】
2019164654.tif 000012