本発明は、出現頻度が時間的に増加傾向にある単語に注目し、相互の文書間の距離を演算する技術に関する。
膨大な文書を効率的に閲覧するために、文書群中での話題に着目し、文書を分類する方法が知られている(たとえば、特許文献1、非特許文献1参照)。
特許文献1記載の方法は、不特定多数が書き込むことのできるインターネット上の掲示板等に蓄積され、時刻情報が付加されている多数のメッセージから、話題を表す単語やフレーズを抽出する技術である。抽出した話題情報に基づいて、メッセージ群を分類・整理すれば、閲覧を高速化することができる。
特許文献1記載の方法では、単語やフレーズの出現密度(単位時間当たりの出現回数)やメッセージの新しさを考慮し、任意の時刻における単語やフレーズの話題スコアを演算することができる。
しかし、各単語やフレーズについて、話題スコアの演算に必要な統計量を、各時刻(メッセージの出現時刻)毎に保持する必要があるので、時間が経過してメッセージが増加するにつれ、記憶に要する記憶領域の量が増加する。新しくメッセージが入力されると、この入力されたメッセージに含まれている単語やフレーズに対し、各時刻毎に保持している統計量を、それぞれ演算する必要があり、インデクスを予め構築しておくことによって、これらの演算を高速に行う工夫をしている。しかし、メッセージの増加に伴い、ひとつひとつの単語やフレーズに対して、演算すべき統計量の数が増加するので、いずれは処理速度の低下を免れないという問題がある。
非特許文献1記載の発明は、文書間の類似度を演算し、類似度が高い2文書の文書間距離は、小さく、類似度が低い2文書の文書間距離は、大きいとみなし、距離の近い文書同士を集約することによって、類似文書を分類する技術である。特に、類似度演算に必要な単語出現回数等の統計量の演算を高速に行う技術である。文書が古くなるほど、徐々に文書自体の重要度を下げるので、古い文書は自然に、重要度が0になり、影響力がなくなるので、特許文献1記載の発明のように、文書の増加に伴って、明示的に文書を破棄する必要がない。言い換えれば、古くなった文書を自然に消滅させる技術である。一度集計した統計量を保持し、これを演算し、管理するので、文書集合が増加した場合にも、新着文書に対してのみ、単語を集計すればよく、文書が逐次増加する状況において、特に有効な技術である。
特開2006−172424号公報
石川佳治、北川博之著「忘却の概念に基づくインクリメンタルな文書クラスタリング手法」電子情報通信学会技術研究報告資料、Vol.101、No.192、DE2001-55、pp.145-152、2001年7月。情報処理学会研究報資料、2001-DBS-125(I)、Vol.2001、No.71、125-41、pp.313-320、2001年7月。
上記特許文献1記載の発明では、文書が増加すると、計算量が増加するという問題がある。
上記非特許文献1記載の発明では、文書間の類似度が、話題の変化を反映していないという問題がある。つまり、時間の経過に従って変化する文書の傾向(文書の主題の変化)を反映した類似度にならず、人間の感覚とはあまり合致しない類似度が得られる場合が多い。
これには、原因が2点ある。古くなった文書は、他の文書との類似度が小さくなる傾向があることが、1番目の原因である。内容によらず、時間が経過するだけで、他の文書との類似度が低くなるので、人間の感覚とは必ずしも合致しない。このために、非特許文献1記載の発明によって計算された文書間の類似度を用いて、類似文書を分類すると、互いに類似する新しい文書を集約することができるが、古い文書は、どの文書ともあまり類似しないので、古い文書も含めて全てを適切に分類することはできない。
2番目の原因は、非特許文献1記載の発明によって計算された文書間の類似度に、話題性の大きさが反映されていないことである。文書群中での単語の出現頻度が増加傾向にあると、「最近目にする機会が増えてきた」という感覚を覚えるが、非特許文献1記載の発明では、その感覚を反映した類似度が得られない。すなわち、たとえば実世界で、ある事象が話題になると、この話題に関連する単語が、出現する文書が多くなり、所定の文書数に占める上記単語出現文書の率が増加する傾向にある。この場合、話題と関連のある単語を特に重視して文書間の類似度を演算するわけではないので、人間の感覚とはあまり合致しない類似度が得られる場合が多い。
本発明は、古い文書も含めた文書集合全体を適切に分類することができ、また、文書が増加した場合でも、更新処理が迅速である文書間距離演算装置、文書間距離演算方法、プログラムおよび記録媒体を提供することを目的とする。
本発明は、着目している単語が初めて出現した初出時に、単語出現量を0に初期化し、上記初出時における文書のうちで、着目している単語が含まれている文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を単語出現量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における単語出現量に乗算し、新たに入力された文書のうちで、上記着目している単語が含まれている文書の数を、上記乗算された結果に加算して演算し、新たな単語出現量として更新する単語出現量演算・更新手段と、上記単語出現量演算・更新手段が演算した単語出現量を記録し、更新する単語出現量記録手段と、文書を最初に入力した初回入力時に、総文書量を0に初期化し、上記初回入力時における文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を総文書量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における総文書量に乗算し、新たに入力された文書の数を、上記乗算された結果に加算して演算し、新たな総文書量として更新する総文書量演算・更新手段と、上記総文書量演算・更新手段が演算した総文書量を記録し、更新する総文書量記録手段と、上記総文書量と各単語の単語出現量とに基づいて、各単語の話題度を演算する単語の話題度演算手段と、上記演算された各単語の話題度に基づいて、文書間距離を演算し、更新する文書間距離演算・更新手段と、上記文書間距離演算・更新手段が演算した文書間距離を記録し、更新する文書間距離記録手段とを有することを特徴とする文書間距離演算装置である。
本発明によれば、単語の話題度を演算するに際し、単語の出現頻度等を演算する場合、前回演算した出現量を保持するので、新たな計算量は僅かであり、したがって、文書が増加した場合でも、更新処理が迅速であるという効果を奏する。
また、本発明によれば、話題度を加味して文書間距離を判断することができ、この話題度を用いて文書間距離を演算するので、各文書が文書データベースに入力された時点における話題を考慮した文書間距離を得ることができるという効果を奏する。
発明を実施するための最良の形態は、以下の実施例である。
図1は、本発明の実施例1である文書間距離演算装置100のシステム構成例を示す図である。
文書間距離演算装置100は、文書データベース1と、単語出現量演算・更新手段2と、単語出現量記録手段3と、総文書量演算・更新手段4と、総文書量記録手段5と、単語の話題度演算手段6と、文書間距離演算・更新手段7と、文書間距離記録部8とを有する。
文書間距離演算装置100は、文書データを蓄積する記憶部である文書データベース1に対し、文書を逐次入力し、蓄積し、1日に1回、以下の一連の処理を実行する実施例である。
図2は、文書データベース1に記録されている文書データの例を示す図である。
文書データベース1は、図2に示すように、文書を一意に識別する文書IDと、各文書中に出現する単語の一覧とを記録する。
単語出現量演算・更新手段2は、着目している単語が初めて出現した初出時に、単語出現量を0に初期化し、上記初出時における文書のうちで、着目している単語が含まれている文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を単語出現量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における単語出現量に乗算し、新たに入力された文書のうちで、上記着目している単語が含まれている文書の数を、上記乗算された結果に加算して演算し、新たな単語出現量として更新する単語出現量演算・更新手段の例である。
単語出現量記録手段3は、上記単語出現量演算・更新手段が演算した単語出現量を記録し、更新する単語出現量記録手段の例である。
総文書量演算・更新手段4は、文書を最初に入力した初回入力時に、総文書量を0に初期化し、上記初回入力時における文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を総文書量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における総文書量に乗算し、新たに入力された文書の数を、上記乗算された結果に加算して演算し、新たな総文書量として更新する総文書量演算・更新手段の例である。
総文書量記録手段5は、上記総文書量演算・更新手段が演算した総文書量を記録し、更新する総文書量記録手段の例である。
単語の話題度演算手段6は、上記総文書量と各単語の単語出現量とに基づいて、各単語の話題度を演算する単語の話題度演算手段の例である。
文書間距離演算・更新手段7は、上記演算された各単語の話題度に基づいて、文書間距離を演算し、更新する文書間距離演算・更新手段の例である。
文書間距離記録手段8は、上記文書間距離演算・更新手段が演算した文書間距離を記録し、更新する文書間距離記録手段の例である。
実施例1では、各文書から名詞のみを取得し、図2に示すように、文書データベース1に、記録する。また、初期状態では、話題度がまだ計算されていないので、文書データベース1における話題度の欄は、空の状態である。文書IDは、0001、0002、0003のように、後に入力する文書ほど大きな数字を付与し、これによって、入力した順序が分かるようにする。
図3は、単語出現量演算・更新手段2が行う単語出現量演算・更新処理を示すフローチャートである。
単語出現量演算・更新手段2は、まず、単語出現量記録手段3を参照し、既に1以上の単語が記録されているか否かを調べ、初期状態(つまり単語が記録されていない状態)であれば(S1のNO)、S3に進む。
S3で、文書データベース1を参照し、話題度が未設定である文書について、文書ID一覧を取得する。図2に示す例の場合、文書ID0001、0002、0003を取得する。
S4では、S3で取得した文書ID一覧のうちで、1文書について、上記文書中に出現する単語の一覧を取得する。第1の文書である文書ID0001については、「週末」「遊園地」「天気」「ジェットコースター」等を取得する。
S5では、単語出現量記録手段3に記録されている各単語の単語出現量のうちで、S4で取得した単語の単語出現量に、それぞれ1を加算し、更新する。上記「単語出現量」は、単語出現数に、重みが乗じられた値である。なお、上記「重み」については、後述する。
また、S4で取得した単語が、単語出現量記録手段3に記録されていなければ、単語出現量として新たに1を設定し、単語出現量記録手段3に記録する。初期状態では、S4で取得した単語は、いずれも単語出現量記録手段3に記録されていないので、「週末」「遊園地」「天気」「ジェットコースター」等の各単語に対し、単語出現量として1を設定する。
S3で取得したそれぞれの文書IDに、S4〜S5の処理を実行し終わると(S6のYES)、単語出現量演算・更新手段2は処理を終える。
図4は、着目している単語が初めて出現し、単語出現量記録手段3に初めて記録された単語と、単語出現量との例を示す図である。
着目している単語が初めて出現すると、単語出現量を0に初期化し、文書を最初に入力した文書のうちで、着目している単語が含まれている文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を単語出現量として、単語出現量記録手段3に記録する。
図3に示す処理の結果、単語出現量記録手段3には、図4に示すように、文書ID0002と0003との両方に出現している単語「消費税」の単語出現量が「2」であり、他は全て単語出現量が「1」である状態で、単語と単語出現量とが記録されている。
一方、単語出現量記録手段3に単語が記録されていれば、S2で、単語出現量記録手段3に記録されている各単語の単語出現量に、1未満の係数(重み)を乗じて、単語出現量を減衰させ、単語出現量を演算・更新する。
図5は、実施例1において、減衰のための係数である重みを決定する曲線の例を示す図である。
時刻が0(つまり現在時刻)のときに、重みが1であり、現在時刻からt日前、すなわち時刻が−tであるときに、上記重みがexp(−t/T)である。なお、Tは、定数である。
単語出現量演算・更新手段2は、前回単語出現量を演算・更新してからの経過時刻に応じて、重みを決定するが、実施例1では、1日に1回、減衰のための係数を決定するので、前回実行時からの経過時刻は1日である。したがって、t=1であり、重みは、exp(−1/T)である。
定数Tは、1日経過後に単語出現量を減衰させる割合を決定する定数であり、定数Tの値が大きければ、減衰の程度は緩やかであり、定数Tの値が小さければ、1日経過後の減衰が大きい。説明を簡単にするために、定数T=10を設定したとし、重みexp(−1/10)=0.9048……の値を0.9とみなす。
図6は、単語出現量記録手段3に記録されている単語と、前日に演算した単語出現量に重みを乗じた新たな単語出現量の例を示す図である。
単語出現量記録手段3に、図4に示すように単語を記録した状態で、単語出現量を減衰させると(S2)、各単語の単語出現量に係数0.9を乗じ、図6に示すように、単語出現量の減衰によって単語出現量が変化する。その後に、新規追加分の文書中に出現した単語の出現回数を加算し、単語出現量を演算・更新する(S3〜S6)。
図3に示すフローチャートに従って、単語出現量を演算、更新する処理は、文書データベース1に記録した文書群における各単語の出現度数を、図5に示す曲線に基づいて決定する重みを使用し、加算集計する処理と等価である。
図7は、単語出現量の概念を示す図である。
t日前の係数を、exp(−t/T)で表すと、2t(tの2倍の期間)日前の重みは、exp(一2t/T)={exp(−t/T)}2であり、これと同様に、3t日前の重みは、{exp(−t/T)}3である。したがって、上記のように、1日前の重みが0.9であれば、2日前の重みは、0.92=0.81であり、3日前の重みは、0.93=0.729である。
たとえば、5月11日に文書データベース1に入力した文書、1日前の5月10日に入力した2文書、2日前の5月9日に入力した1文書、3日前の5月8日に入力した1文書に出現する単語について5月11日時点における単語出現量は、各日の重みに文書数を乗じた値の総和である。
つまり、5月11日時点での単語出現量は、1×1+0.9×2+0.81×1+0.729×1=4.339である。この値は、図3に示す単語出現量演算・更新処理を1日毎に実行し、単語出現量を減衰させながら加算した結果と等しい。
図8は、実施例1において、総文書量演算・更新手段4が実行する動作を示すフローチャートである。
たとえば、5月11日に文書データベース1に1文書を入力し、1日前の5月10日に2文書を入力し、2日前の5月9日に1文書を入力し、3日前の5月8日に1文書を入力した場合、5月11日時点における総文書量は、各日の重みに文書数を乗じた値の総和である。つまり、5月11日時点での総文書量は、1×1+0.9×2+0.81×1+0.729×1=4.339である。
S11で、総文書量記録手段5に、総文書量が既に記録されているか否かを調べ、記録されていなければ(S11のNO)、S13で、文書データベース1において、話題度が未設定である文書数を取得する。図2に示す例では、文書ID0001、0002、0003のいずれにも、文書中の各単語の話題度が設定されていないので、文書数として3を取得する。
S14では、S13で取得した文書数「3」を、総文書量記録手段5に記録されている文書数に、加算することによって、総文書量の値を演算・更新し、処理を終了する。総文書量記録手段5に値が存在しなければ、S13で取得した値「3」を、総文書量として記録する。
一方、総文書量記録手段5に、総文書量が記録されていれば(S11)、S12で、総文書量記録手段5に既に記録されている総文書量に、1未満の重みを乗じて、総文書量を減衰させ、値を演算・更新する。総文書量の減衰の概念は、上記単語出現量の減衰の概念と全く同等であり、1日、1回処理する度に、図5に示す曲線と同様の曲線に対応する重みexp(−t/Td)を乗じて、総文書量を減衰させる。なお、定数Tdは、総文書量を減衰させる場合に使用する定数である。
実施例1では、定数Tdの値を、単語出現量の演算時に使用する定数Tの値と同じく、10に設定する。
図9は、実施例1において、単語の話題度演算手段6が実行する動作を示すフローチャートである。
単語の話題度演算手段6は、図9に示す手順に従って、文書データベース1に記録されている文書に出現する各単語の話題度を演算する。
これによって、文書中に出現する単語w1、w2、w3,……に対して、w1=0.5,w2=0.3,w3=0.9,……のように、それぞれ話題度が算出される。
まず、S21で、総文書量記録手段5に記録されている総文書量を取得する。S22で、文書データベース1に記録されている各単語のうちで、話題度が未設定である単語を1語取得する。S23では、S22で取得した単語の単語出現量を、単語出現量記録手段3を参照して取得する。
S24では、S21で取得した総文書量と、S23で取得した単語出現量とを用い、S22で取得した単語の話題度を演算し、上記単語の話題度として、文書データベース1に記録する。このときに、上記単語の話題度が既に設定されていれば、値を演算・更新せず、話題度が未設定の場合にのみ、話題度を記録する。また、複数の文書において、上記単語の話題度が未設定であれば、その全てについて、S24で演算した話題度を記録する。
S21で取得した総文書量を、Dとし、S23で取得した単語wの単語出現量を、d(w)とし、次の式(1)に基づいて、単語wの話題度Topic(w)を演算する。
Topic(w)=log{D/d(w)}+1 …… 式(1)
単語出現量の演算時に用いる定数Tと、総文書量の演算時に用いる定数Tdの値とを、いずれも10に設定すると、全ての文書に出現するような単語wでは、総文書量Dと単語wの単語出現量d(w)とが、互いに同じ値になるので、単語wの話題度Topic(w)は、1になる。また、単語出現量d(w)が、総文書量Dを超えることがないので、単語wの話題度Topic(w)の値が1未満になることはない。
文書データベース1に記録した全ての単語の話題度を設定し終えるまで、S22〜S24を、繰り返し(S25のYES)、処理を終了する。
図10は、文書データベース1に記録されている文書データと、各単語と、各単語の話題度との例を示す図である。
図9に示す処理によって、話題度が未設定であった単語の全てについて、図10に示すように、新たに話題度が演算され、記録される。また、過去に話題度を設定した単語については、話題度の演算・更新を行わない、同一の単語であっても、話題度の演算タイミングによって、話題度の値が異なる。
文書間距離は、あらゆる組み合わせの2文書に対して演算することができるが、実施例1における文書間距離演算・更新手段7は、ある1文書に対し、それ以前に入力された文書(すなわち、上記ある1文書の文書IDよりも小さな文書IDを持つ文書)までの距離をそれぞれ演算し、文書間距離記録部8に記録する。
図11は、文書間距離を既に計算し、文書間距離記録部8に記録した例を示す図である。
文書ID0001の文書については、より小さな文書IDを持つ文書が存在しないので、いずれの文書との距離も演算しない。文書ID0002の文書と、以前に入力された文書ID0001の文書との間の距離0.98と、文書ID0002、00001とを対にして記録する。その他の文書についても、上記と同様に、より小さな文書IDを持つ文書との距離とを対にして記録する。
図12は、文書間距離演算・更新手段7が行う処理の流れを示すフローチャートである。
S31で、文書データベース1と文書間距離記録部8とを参照し、文書データベース1に記録した文書のうちで、文書間距離記録部8には記録されていない文書(つまり文書間距離記録部8に、他の文書との文書間距離が登録されていない文書)が存在するかどうかを調べる。存在しなければ(S31のNO)、処理を終了する。存在する場合(S31のYES)、S32のステップに進む。たとえば、文書データベース1には、文書ID0001〜0006の6文書が登録され、文書間距離記録部8には、図11に示すように、文書ID0001〜0005の5文書が登録されているとすると、文書ID0006の文書は、文書データベース1にあって文書間距離記録部8にないので、S32で、文書間距離を演算する基準となる文書を決定する。この1文書とは、文書データベース1に記録されている文書のうちで、文書間距離記録部8には記録されていない文書であり、かつ、最も小さい番号の文書IDを持つ文書である。文書間距離記録部8に、図11に示すように、文書IDが0005までの文書が記録され、文書データベース1には、文書IDが0006以降の文書も記録されていれば、文書ID0006の文書を選択する。
S33では、S32で選択した文書ID0006の文書と、それよりも小さな(若い)文書IDを持つ文書それぞれとの間の文書間距離を、文書データベース1に記録した各文書のベクトルを参照して演算する。文書ID0006の文書に対しては、文書ID0005、0004、0003、0002、0001の5文書が該当し、文書ID0006の文書と、これら5文書との間の文書問距離をそれぞれ演算する。
文書間距離は、ベクトル間のユークリッド距離等、文書の内容が類似している2文書ほど大きな値が与えられる方法で演算する距離である。
図10に示す例において、文書ID0002と文書ID0003との間の文書間距離を演算する場合、文書ID0002の文書の第1の単語「こと」が、文書ID0003の文書には出現しなければ、文書ID0003の文書の単語「こと」に対する話題度は、初めて出てきたから0であるとみなす。これによって、文書ID0002の文書に含まれている単語数と、文書ID0003に含まれている単語数とが同じであるとみなすことができ、同次元のベクトル(話題度列)同士の距離を演算することになる。
S34では、S32で決定した1文書の文書ID(たとえば0006)に対して、S32で選択した文書ID0001〜0005と、文書ID0006とそれらの文書との間の文書間距離を、それぞれ対応付けて、文書間距離記録部8に記録する。
図11に示す例は、文書ID0005までを記録した例であるが、文書ID0006に対しても、同様に、文書IDと文書間距離とを対応付けたデータを記録する。
S32〜S34の処理を繰り返すことによって、文書データベース1に記録されている文書ID0001を除く全ての文書に対して、より小さな文書IDを持つ文書との間の文書間距離を演算し、記録する。
実施例1によれば、古い文書も含めた文書集合全体を適切に分類することができ、また、文書が増加した場合に必要になる統計量演算の量を削減することができる。
図13は、本発明の実施例2である文書間類似度演算装置200の構成例を示す図である。
実施例2は、実施例1において、単語出現量演算・更新手段2、単語出現量記録手段3の代わりに、第1の単語出現量演算・更新手段2a、第1の単語出現量記録手段3a、第2の単語出現量演算・更新手段2b、第2の単語出現量記録手段3bを設け、単語出現文書量更新手段9、単語出現量記録手段10が設けられている。
なお、実施例2は、文書データを蓄積する記憶部である文書データベース1に、文書を逐次入力し、蓄積し、以下の一連の処理を、1文書入力毎、1時間毎、1日毎等、定期的に、または随時、実行する実施例である。
つまり、実施例1は、1日毎に、更新する実施例であり、実施例2は、1日に限定せずに、1分毎、1時間毎、または文書の入力毎に、更新する実施例である。言い換えれば、実施例2における更新間隔を1日に設定した例が、実施例1である。
図14は、実施例2において、文書データベース1に記録されている文書データの例を示す図である。
文書データベース1は、図14に示すように、文書を一意に識別する文書IDと、文書の作成時刻や取得時刻、文書中の事象の発生時刻等、文書に関わる日時と、各文書中に出現する単語の一覧とを記録する。図14に示す例は、各文書から名詞のみを取得し、記録した例である。また、話題度は、初期状態では計算されていないので、空の状態である。
図15は、実施例2において、第1の単語出現量演算・更新手段9が行う処理を示すフローチャートである。
第1の単語出現量演算・更新手段9は、図15に示す処理を行う。実施例1における単語出現量演算・更新手段2が行う処理(図3)と同様に、第1の単語出現量記録手段3aに既に記録されている第1の単語出現量の減衰と加算とを行う。
図16は、第1の単語出現量記録手段3aに、初めて記録された単語と、単語出現量との例を示す図である。
最終演算・更新時刻欄に時刻が既に記録され、複数の単語と、それぞれの第1の単語出現量の値とが記録されているが、初期状態ではいずれも空欄である。
最初に、S41で、第1の単語出現量記録手段3aを参照し、既に1以上の単語が記録されているか否かを調べ、初期状態(単語が記録されていない状態)(S41のNO)であれば、S42に進む。
S42で、文書データベース1を参照し、最も古い時刻を持つ文書について、時刻と単語一覧とを取得する。その後、S47に進む。
一方、第1の単語出現量記録手段3aに単語が存在する場合(S41のYES)、S43で、第1の単語出現量記録手段3aに記録されている最終演算・更新時刻を取得する。第1の単語出現量演算・更新手段9は、第1の単語出現量記録手段3aに最初に単語を記録する際に、最終演算・更新時刻も記録するので、第1の単語出現量記録手段3aに単語が存在すれば、最終演算・更新時刻も必ず存在する。
S44で、文書データベース1を参照し、S43で取得した最終演算・更新時刻以降の時刻を持つ文書が存在するかどうかを調べ、存在すれば(S44のYES)、S45に進む。存在しなければ(S44のNO)、処理を終る。
S45では、文書データベース1に記録されている文書のうちで、S43で取得した最終演算・更新時刻以降の時刻を持ち、かつ一番古い文書について、時刻と単語一覧とを取得する。
S46では、S43で取得した最終演算・更新時刻とS45で取得した時刻との差を演算し、この演算された差の時刻に応じて、重みを決定する。さらに、第1の単語出現量記録手段3aに記録されている全単語の第1の単語出現量に、ここで決定した重みを乗じ、単語出現量を減衰させ、新たな単語出現量を演算・更新する。
ここでの単語出現量の減衰の概念は、実施例1の場合と全く同様である。時刻差がtであれば、重みexp(−t/Tp)を決定する。たとえば、定数Tpの値が3(日)で、上記時刻の差が12時間、すなわち0.5日であれば、重みexp(−0.5/3)=exp(−1/6)≒0.846である。
S47では、第1の単語出現量記録手段3aに記録されている各単語の第1の単語出現量のうちで、S42またはS45で取得した単語の第1の単語出現量に、それぞれ1を加算して演算・更新する。なお、S42またはS45で取得した単語のうちで、第1の単語出現量記録手段3aに記録されていない単語については、第1の単語出現量として、新たに1を設定し、記録する。また、同時に、S42またはS45で取得した時刻を、最終演算・更新時刻として記録する。
S47を実行すると、S43以降の処理を、再度繰り返す。
上記処理によって、直前に処理した文書との時刻の差に基づいて、時刻差が大きいほど第1の単語出現量を大きく減衰させながら、文書中に出現した単語の出現量を加算し、第1の単語出現量を演算する。
実施例1の動作は、実施例2において、S46で演算する時刻差が常に1日である場合の動作と同じである。
第2の単語出現量演算・更新手段11が、各単語の第2の単語出現量を演算し、第2の単語出現量記録手段3bに記録する処理は、第1の単語出現量演算・更新手段2aが行う処理と全く同じであり、exp(−t/Tm)で決定する。定数Tmの値として、第1の単語出現量更新手段3aにおけるTpの値よりも大きな値、たとえば15(日)等に設定する。
なお、第1の単語出現量は、第2の単語出現量よりも減衰が早い単語出現量である。すなわち、単語出現量が複数種類存在する場合、そのうちの1つを、「第1の単語出現量」、別の1つを、「第2の単語出現量」と呼んで区別し、たとえば、単語「参院選」に着目した場合、単語「参院選」の第1の単語出現量がたとえば4.2であり、単語「参院選」の第2の単語出現量がたとえば6.9であるとする。そして、これら2種類の単語出現量を演算、更新する。また、たとえば1日経過した後に、上記第1の単語出現量4.2がどの程度減衰するのか、また、上記第2の単語出現量6.9がどの程度減衰するのかを決定する場合に使用する式が、それぞれexp(−t/Tp)、exp(−t/Tm)である。定数TpとTmとの値が異なる他は、第1の単語出現量と第2の単語出現量とは同じである。実施例2では、「Tmの値は、Tpの値よりも大きくする」ことにしているので、同じ時間だけ経過した後に減衰する割合は、第1の単語出現量の方が大きく(減衰が速く)、第2の単語出現量の方が小さく(減衰が遅く)なる。
また、単語出現文書量演算・更新手段13が、各単語の単語出現文書量を演算し、単語出現文書量記録手段10に記録する処理も、第1の単語出現量演算・更新手段2aが行う処理と全く同じで、exp(−t/Td)で決定する。定数Tdの値は、正文書出現量演算・更新手段2aにおけるTpの値よりも極端に大きな値、たとえば1000等に設定する。これによって、第1の単語出現量、第2の単語出現量の減衰の速度に比べて、単語出現文書量が減衰する速度が極端に遅くなる。したがって、単語出現文書量は、第1の単語出現量や第2の単語出現量に比べると、減衰なしで単純に文書数を集計するのとほぼ等しいとみなすことができる。
第1の単語出現量、第2の単語出現量、単語出現文書量は、いずれも、各単語を含む文書数を、経過時間に基づいて決定する重みを乗じながら加算した値である。
次に、総文書量演算・更新手段4が行う処理の流れについて説明する。
図17は、実施例2において、総文書量演算・更新手段4が行う処理を示すフローチャートである。
なお、総文書量記録手段5には、総文書量と、最終演算・更新時刻とを記録する。
S51で、総文書量記録手段5に、総文書量が既に記録されているかどうかを調べる。総文書量が既に記録されていれば、S53に進み、記録されていなければ、S52に進む。
S52で、文書データベース1を参照し、最も古い時刻を持つ文書の時刻を取得し、S57に進む。
一方、S53で、総文書量記録手段5に記録されている最終演算・更新時刻を取得する。総文書量演算・更新手段4は、総文書量記録手段5に最初に値を記録する際に、最終演算・更新時刻も記録するので、総文書量記録手段5に総文書量が記録されていれば、最終演算・更新時刻も必ず存在する。
S54では、文書データベース1を参照し、S53で取得した最終演算・更新時刻以降の時刻を持つ文書が存在するかどうかを調べ、存在すれば(S54のYES)、S55に進む。存在しなければ、(S54のNO)、処理を終了する。
S55で、文書データベース1に記録されている文書のうちで、S53で取得した最終演算・更新時刻以降の時刻を持ち、かつ、一番古い文書について、時刻を取得する。
S56では、S53で取得した最終演算・更新時刻とS55で取得した時刻との差から、総文書量を減衰するための重みを決定し、総文書量記録手段5に記録されている総文書量に、この重みを乗じ、総文書量を減衰させ、総文書量の値を演算・更新する。
S57で、総文書量記録手段5に記録されている総文書量に1を加算する。総文書量の値が存在しなければ、新たに1を設定する。これと同時に、S52またはS55で取得した時刻を記録し、最終演算・更新時刻も演算・更新する。
S57を終了すると、S53以降の処理を、再度繰り返す。
総文書量を減衰するための重みを決定する際の定数Tdの値は、単語出現文書量の演算時と同じ値(1000)を用いる。総文書量が、Tp=3やTm=15よりも極端に大きいので、総文書量は、第1の単語出現量や第2の単語出現量に比べると、文書データベース1に記録されている文書数を単純に集計するのとほほ等しいとみなすことができる。
図18は、実施例2における単語の話題度演算手段6が実行する処理を示すフローチャートである。
単語の話題度演算手段6は、図18に示すように、文書データベース1に記録されている文書に出現する各単語の話題度を演算する。これによって、文書中に出現する単語w1,w2,w3,……に対し、w1=0.5、w2=0.3、w3=0.9、……のように、それぞれ話題度が算出される。
まず、S61で、総文書量記録手段5に記録されている総文書量を取得する。S62で、文書データベース1に記録されている各単語のうちで、話題度が未設定である単語を1語取得し、保持する。
S63では、S62で取得した単語の第1の単語出現量を、第1の単語出現量記録手段3aから、取得し、第2の単語出現量を、第2の単語出現量記録手段3bから、取得し、単語出現文書量を、単語出現文書量記録手段10から、取得し、保持する。
S64では、S61で取得した総文書量と、S63で取得した第1の単語出現量と、第2の単語出現量と、単語出現文書量とを用い、S62で取得した単語の話題度を演算し、文書データベース1中の、上記単語の話題度として記録する。このときに、話題度が未設定である場合にのみ、話題度を記録し、上記単語の話題度が既に設定されていれば、値を演算・更新しない。また、複数の文書において、上記単語の話題度が未設定であれば、その全てに対して、S64で演算した話題度を記録する。
全ての単語の話題度を演算し終わるまで(S65のYES)、S62〜S64を繰り返す。
次に、S64における単語の話題度演算方法について説明する。
S61で取得した総文書量を、Dとし、S63で取得した単語wの第1の単語出現量を、first(w)とし、第2の単語出現量を、second(w)とし、単語出現文書量を、d(w)とすると、単語wの話題度Topic(w)を、次の式(2)〜式(5)に基づいて演算する。
Topic1(w)=log{D/d(w)}+1 …… 式(2)
I(w)=Tm/(Tm−Tp)×first(w)
−Tp/(Tm−Tp)×second(w) …… 式(3)
Topic2(w)=Maxof(I(w),1) …… 式(4)
Topic(w)=Topic1(w)×Topic2(w) …… 式(5)
I(w)は、上記式(3)に示すように、Tm/(Tm−Tp)×first(w)と、Tp/(Tm−Tp)×second(w)との差である。また、I(w)は、意外性を示す指標であり、過去に出現していた単語が現在、出現しなければ、I(w)が負であり、逆に、過去に出現していない単語が現在、出現すれば、I(w)が正になる。
式(2)におけるTopic1(w)について、単語出現文書量d(w)、総文書量0の演算時に用いる減衰のための定数は、いずれも同じ値Tdであるので、全ての文書に出現するような単語wでは、Dとd(w)とが同じ値になり、Topic1(w)の値は、「1」になる。
また、単語出現文書量d(w)が総文書量Dを超えることがないので、Topic1(w)の値が1未満になることはない。単語wを含む文書数が少なければ少ないほど、Topic1(w)の値は大きくなる。
上記式(3)におけるI(w)は、単語wの第1の単語出現量first(w)、単語wの第2の単語出現量second(w)に、それぞれ定数Tp、Tmで決まる係数を乗じて引いた値である。
図19は、式(3)におけるI(w)の演算の概念を説明する図である。
図19の実線は、I(w)をグラフ化した図である。Tm/(Tm−Tp)×first(w)からTp/(Tm−Tp)×second(w)を引くことによって、ある時刻に正負が反転する曲線になる。なお、図19では、Tm/(Tm−Tp)×first(w)とTp/(Tm−Tp)×second(w)との差を求める場合、理解を容易にするために、Tm/(Tm−Tp)×first(w)に、−Tp/(Tm−Tp)×second(w)を加算することによって、I(w)を求める場合を記載してある。
つまり、Tm/(Tm−Tp)×first(w)からTp/(Tm−Tp)×second(w)を引くことによって、ある時刻に、横軸を跨ぐ曲線になる。first(w)とsecond(w)とに乗じた各係数であるTm/(Tm−Tp)と、Tp/(Tm−Tp)とは、切片(時刻が0のときの値)を1にし、かつ、値が正となる区間の面積と値が負となる区間の面積とを等しくして、全区間の積分値を0にするための係数である。
実施例1において、図3に示す流れに従って、単語出現量を演算する処理が、概念的には、図7に示す曲線に基づいて決定する重み付きで、単語の出現度数を加算集計する処理と等価であったのと同様に、I(w)は、図19に示す曲線に基づいて決定する重み付きで、単語の出現度数を加算集計することで演算できる。
すなわち、図19において、値が正となる区間(以下、「正区間」という)の時刻を持つ文書中に出現した場合、正の値を加算するために、また、値が負となる区間(以下、「負区間」という)の時刻を持つ文書中に出現した場合、負の値を加算するために、相対的に負区間よりも正区間の文書中に多く出現する単語のI(w)の値は、正の値となり、相対的に負区間に多く出現する単語のI(w)の値は、負の値となる。また、時間によらず、常に一定の頻度で出現する単語の場合は、I(w)の値は0となる。
式(4)におけるTopic2(w)について、Maxof(a,b)は、aとbのうちの小さくないほうの値を表す。
したがって、I(w)が1を下回るときは、Topic2(w)の値は「1」となる。Topic2(w)は、時間的な盛り上がりの度合いを数値化するための指標である。話題性があり、出現頻度が増加傾向にある単語である場合、I(w)の値は、正の大きな値となるので、Topic2(w)も正の大きな値となる。
一方で、すたれた話題に関する単語で、出現頻度が減少傾向にある単語である場合、I(w)の値は、「0」またはそれ以下の値になるので、Topic2(w)の値は、最小値「1」となる。
単語の話題度演算手段6が処理を行うと、文書データベース1中の全ての単語について、話題度が記録される。
以後、文書間距離演算・更新手段7が、文書データベース1を参照し、異なる2文書の文書間距離を演算し、文書間距離記録部8に記録する処理は、実施例1と同一である。
文書間距離記録部8には、文書間距離を演算する基準となる文書に対し、より小さな文書IDを持つ全ての文書との距離をそれぞれ記録するのではなく、最も距離が近い文書から順に最大N文書までの文書についてのみ、距離を記録するようにしてもよい。
すなわち、上記実施例における単語の話題度は、単語出現量と総文書量とに基づいて算出するものである。単語出現量とは、現在までにおける単語の総出現文書数と似た概念のものであるが、図5に示す曲線に従って算出する点に特徴がある。たとえば、ある単語wが、現在までに3文書に出現している場合、単純に文書数を数えると3(すなわち、総出現文書数が3)となるが、単語出現量は、これら3文書の持つ時刻情報(文書データベース1へ入力した時刻)と、図5に示す曲線とから、重みを決定し、この決定された重みを、それまでの単語出現量に乗じた値である。図5に示す曲線のように、過去になるほど、重みが小さくなる曲線を用いれば、3文書に出現する場合でも、それら3文書が古ければ古いほど、単語出現量は小さくなる。簡単に言えば、「現在から見て0日前(つまり現在)、1日前、3日前の3文書に出現する単語の単語出現量は、0日前の重み1、1日前の重み0.9、3日前の重み0.729を、各単語出現量に乗じた値を合計した値」である。これら1、0.9、0.729の各重みを、図5に示すような曲線を用いて決定する。
総文書量は、単語出現量とほぼ同じように説明することができる。総文書量は、現在までにおける総文書数と似た概念であるが、図5に示す曲線に従って算出する点に特徴がある。たとえば、現在までに3文書が存在する場合、総文書数は3であると言えるが、総文書量は、文書の持つ時刻情報に応じて、重みを決定し、この決定された重みを、それまでの総文書量に乗じた値を合計した値である。図5に示すように、過去になるほど、値が小さくなる曲線を用いる場合、単純に加算した「3」よりも、小さな値になる。
以下では、単語出現量のみについて説明するが、総文書量についても、同様である。
単語出現量を演算する場合、入力した文書が次々と増加する場合、ある時点で計算した単語出現量を保持し、この保持した単語出現量を、逐次(実施例1では1日後、実施例2では次の文書入力時)、読み出しながら更新する。ある単語の単語出現量を得るのに、前回算出した値を利用できるので、計算が速くなるというメリットがある。
ある単語の単語出現量を前回計算したのが2日前でありし、また、本日の時刻情報を持つ1文書中にも、その単語が出現したとする。この場合、2日前に算出し、保持している単語出現量に対し、そこからの経過時刻である2日という時間幅に基づいて、重みを決定し、この決定された重みを、それまでの単語出現量に乗じ、この乗算結果に、本日入力した1文書の「1」を加える。この加算結果が、上記単語に関する現在時刻における単語出現量である。
つまり、上記実施例は、着目している単語が初めて出現した初出時に、単語出現量を0に初期化し、上記初出時における文書のうちで、着目している単語が含まれている文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を単語出現量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における単語出現量に乗算し、新たに入力された文書のうちで、上記着目している単語が含まれている文書の数を、上記乗算された結果に加算して演算し、新たな単語出現量として更新する単語出現量演算・更新手段と、上記単語出現量演算・更新手段が演算した単語出現量を記録し、更新する単語出現量記録手段と、文書を最初に入力した初回入力時に、総文書量を0に初期化し、上記初回入力時における文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を総文書量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における総文書量に乗算し、新たに入力された文書の数を、上記乗算された結果に加算して演算し、新たな総文書量として更新する総文書量演算・更新手段と、上記総文書量演算・更新手段が演算した総文書量を記録し、更新する総文書量記録手段と、上記総文書量と各単語の単語出現量とに基づいて、各単語の話題度を演算する単語の話題度演算手段と、上記演算された各単語の話題度に基づいて、文書間距離を演算し、更新する文書間距離演算・更新手段と、上記文書間距離演算・更新手段が演算した文書間距離を記録し、更新する文書間距離記録手段とを有することを特徴とする文書間距離演算装置の例である。
この場合、上記単語出現量記録手段と単語出現量演算・更新手段とによって構成される組を複数、有し、各単語出現量演算・更新手段は、対応する単語出現量記録手段に保持されている単語出現量を演算・更新する手段であり、上記単語の話題度演算手段は、上記総文書量と、上記複数の単語出現量記録手段が保持している単語出現量とに基づいて、各単語の話題度を演算する手段である。
また、上記実施例を、方法の発明として把握することができる。つまり、上記実施例は、着目している単語が初めて出現した初出時に、単語出現量を0に初期化し、上記初出時における文書のうちで、着目している単語が含まれている文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を単語出現量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における単語出現量に乗算し、新たに入力された文書のうちで、上記着目している単語が含まれている文書の数を、上記乗算された結果に加算して演算し、新たな単語出現量として更新する単語出現量演算・更新工程と、上記単語出現量演算・更新工程で演算した単語出現量を記憶装置に記録し、更新する単語出現量記録工程と、文書を最初に入力した初回入力時に、総文書量を0に初期化し、上記初回入力時における文書の数に重みを乗算せずに、上記文書の数を加算し、この加算結果を総文書量とし、更新の度に、前回更新時から今回更新するまでの経過時間に対応する重みを、前回更新時における総文書量に乗算し、新たに入力された文書の数を、上記乗算された結果に加算して演算し、新たな総文書量として更新する総文書量演算・更新工程と、上記総文書量演算・更新工程が演算した総文書量を記憶装置に記録し、更新する総文書量記録工程と、上記総文書量と各単語の単語出現量とに基づいて、各単語の話題度を演算し、記憶装置に記憶する単語の話題度演算工程と、上記演算された各単語の話題度に基づいて、文書間距離を演算し、更新する文書間距離演算・更新工程と、上記文書間距離演算・更新工程が演算した文書間距離を記憶装置に記録し、更新する文書間距離記録工程とを有することを特徴とする文書間距離演算方法の例である。
また、上記文書間距離演算方法をコンピュータに実行させるプログラムを作成するようにしてもよい。さらに、上記文書間距離演算方法をコンピュータに実行させるプログラムを記録媒体に記録するようにしてもよい。この記録媒体として、CD、DVD、光ディスク、光磁気ディスク、半導体メモリ等が考えられる。
本発明の実施例1である文書間距離演算装置100のシステム構成例を示す図である。
文書データベース1に記録されている文書データの例を示す図である。
単語出現量演算・更新手段2が行う単語出現量演算・更新処理を示すフローチャートである。
着目している単語が初めて出現し、単語出現量記録手段3に初めて記録された単語と、単語出現量との例を示す図である。
実施例1において、減衰のための係数である重みを決定する曲線の例を示す図である。
単語出現量記録手段3に記録されている単語と、前日に演算した単語出現量に重みを乗じた新たな単語出現量の例を示す図である。
単語出現量の概念を示す図である。
実施例1において、総文書量演算・更新手段4が実行する動作を示すフローチャートである。
実施例1において、単語の話題度演算手段6が実行する動作を示すフローチャートである。
文書データベース1に記録されている文書データと、各単語と、各単語の話題度との例を示す図である。
文書間距離を既に計算し、文書間距離記録部8に記録した例を示す図である。
文書間距離演算・更新手段7が行う処理の流れを示すフローチャートである。
本発明の実施例2である文書間類似度演算装置200の構成例を示す図である。
実施例2において、文書データベース1に記録されている文書データの例を示す図である。
実施例2において、第1の単語出現量演算・更新手段9が行う処理を示すフローチャートである。
第1の単語出現量記録手段3aに、初めて記録された単語と、単語出現量との例を示す図である。
実施例2において、総文書量演算・更新手段4が行う処理を示すフローチャートである。
実施例2における単語の話題度演算手段6が実行する処理を示すフローチャートである。
式(3)におけるI(w)の演算の概念を説明する図である。
符号の説明
100…文書間距離演算装置、
1…文書データベース、
2…単語出現量演算・更新手段、
3…単語出現量記録手段、
4…総文書量演算・更新手段、
5…総文書量記録手段、
6…単語の話題度演算手段、
7…文書間距離演算・更新手段、
8…文書間距離記録手段、
200…文書間距離演算装置、
2a…第1の単語出現量演算・更新手段、
3a…第1の単語出現量記録手段、
2b…第2の単語出現量演算・更新手段、
3b…第2の単語出現量記録手段、
9…単語出現文書量演算・更新手段、
10…単語出現文書量記録手段。