(57)【特許請求の範囲】
【請求項１】
文字列ベクトルを行列の行ベクトルとして生成する文字列ベクトル生成装置であって、
入力されたテキストから、当該テキスト中の文の各文字位置からの連続する有限個の文字の列である文字列の異なりの集合A及び集合Bを抽出する文字列集合抽出手段と、
各行を前記集合A中の文字列に対応させ、各列を前記集合B中の文字列に対応させた行列を生成し、前記テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、前記集合A中の文字列Cと、前記集合B中の文字列Dとが共起する頻度を、前記テキスト中の全ての前記所定の範囲にわたって加算した値を、前記文字列Cと前記文字列Dに対応する前記行列中の要素とした行列を生成し、出力する第1行列生成手段と
を備えることを特徴とする文字列ベクトル生成装置。
【請求項２】
文字列ベクトルを行列の行ベクトルとして生成する文字列ベクトル生成装置であって、
入力されたテキストから、当該テキスト中の文の各文字位置からの連続する有限個の文字の列である文字列の異なりの集合A及び集合Bを抽出する文字列集合抽出手段と、
前記集合B中の各文字列に対し、L（Lは１以上の整数）個の成分番号から抽出される成分番号の集合の群から、既に付与した成分番号集合の群を除いた集合群から、ランダムに一つの成分番号集合を選び、当該成分番号集合を当該文字列に付与する成分番号付与手段と、
各行を前記集合A中の文字列に対応させ、各列を前記成分番号集合中の成分番号に対応させた行列を生成し、前記テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、前記集合A中の文字列Cと、前記集合B中の文字列に対応付けられた成分番号Eとが共起する頻度を、前記テキスト中の全ての前記所定の範囲にわたって加算した値を、前記文字列Cと前記成分番号Eに対応する前記行列中の要素とした行列を生成し、出力する第2行列生成手段と
を備えることを特徴とする文字列ベクトル生成装置。
【請求項３】
前記出力された行列に対し特異値分解を行うことにより、当該行列を、列数をより少なくした行列に変換する特異値分解手段を更に備えることを特徴とする請求項１または２に記載の文字列ベクトル生成装置。
【請求項４】
入力された文書に対し、当該文書中の各文字列で、前記出力された行列の行に対応する文字列の集合を検索し、検索された文字列に対応する行ベクトルを求め、当該行ベクトルの和または重心を、前記文書のベクトルとする文書ベクトル生成手段を更に備えたことを特徴とする請求項１ないし３のうちいずれか１項に記載の文字列ベクトル生成装置。
【請求項５】
文字列ベクトルを行列の行ベクトルとして生成する文字列ベクトル生成装置が実行する文字列ベクトル生成方法であって、
入力されたテキストから、当該テキスト中の文の各文字位置からの連続する有限個の文字の列である文字列の異なりの集合A及び集合Bを抽出する文字列集合抽出ステップと、
各行を前記集合A中の文字列に対応させ、各列を前記集合B中の文字列に対応させた行列を生成し、前記テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、前記集合A中の文字列Cと、前記集合B中の文字列Dとが共起する頻度を、前記テキスト中の全ての前記所定の範囲にわたって加算した値を、前記文字列Cと前記文字列Dに対応する前記行列中の要素とした行列を生成し、出力する第1行列生成ステップと
を備えることを特徴とする文字列ベクトル生成方法。
【請求項６】
文字列ベクトルを行列の行ベクトルとして生成する文字列ベクトル生成装置が実行する文字列ベクトル生成方法であって、
入力されたテキストから、当該テキスト中の文の各文字位置からの連続する有限個の文字の列である文字列の異なりの集合A及び集合Bを抽出する文字列集合抽出ステップと、
前記集合B中の各文字列に対し、L（Lは１以上の整数）個の成分番号から抽出される成分番号の集合の群から、既に付与した成分番号集合の群を除いた集合群から、ランダムに一つの成分番号集合を選び、当該成分番号集合を当該文字列に付与する成分番号付与ステップと、
各行を前記集合A中の文字列に対応させ、各列を前記成分番号集合中の成分番号に対応させた行列を生成し、前記テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、前記集合A中の文字列Cと、前記集合B中の文字列に対応付けられた成分番号Eとが共起する頻度を、前記テキスト中の全ての前記所定の範囲にわたって加算した値を、前記文字列Cと前記成分番号Eに対応する前記行列中の要素とした行列を生成し、出力する第2行列生成ステップと
を備えることを特徴とする文字列ベクトル生成方法。
【請求項７】
前記出力された行列に対し特異値分解を行うことにより、当該行列を、列数をより少なくした行列に変換する特異値分解ステップを更に備えることを特徴とする請求項５または６に記載の文字列ベクトル生成方法。
【請求項８】
入力された文書に対し、当該文書中の各文字列で、前記出力された行列の行に対応する文字列の集合を検索し、検索された文字列に対応する行ベクトルを求め、当該行ベクトルの和または重心を、前記文書のベクトルとする文書ベクトル生成ステップを更に備えたことを特徴とする請求項５ないし７のうちいずれか１項に記載の文字列ベクトル生成方法。
【請求項９】
コンピュータを、請求項１ないし４のうちいずれか1項に記載された文字列ベクトル生成装置における各手段として機能させるためのプログラム。
【請求項１０】
請求項９に記載されたプログラムを格納したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列の意味表現である文字列ベクトルを生成する文字列ベクトル生成装置、文字列ベクトル生成方法、プログラム、及びプログラムを格納したコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
単語の意味表現としてのベクトルは、単語間の意味的類似性を定量化できるため、検索等の言語処理に適用され、精度向上に寄与している。
【０００３】
単語の意味表現であるベクトルを生成する方法として、非特許文献1に記載の方法がある。この方法では、テキストを入力とし、テキスト中に存在する単語の異なりの集合をとり、該集合間の共起行列を生成する。テキストの所定の範囲（典型的には1文）において、任意の単語同士が共起する頻度を、テキスト中の全ての所定の範囲にわたって加算した値を、該単語対に対応する該共起行列中の要素に格納する。共起行列中の各行ベクトルは、該行に対応する単語が、どのような単語と共起しているか（すなわちどのような単語を隣人として持っているか）を表している。一般に、意味の近い単語は、共通の隣人となる単語を持っており、対応する行ベクトルが近くなる。そこで、単語の概念を、対応する行ベクトルで表す。この行ベクトルを共起ベクトルと呼ぶ。
【０００４】
生成された共起行列を特異値分解し、列数を縮退させた共起行列に変換し、共起ベクトルの次元数を縮退することにより、ベクトル間の類似性の精度を向上させることができる。共起ベクトルの次元数を縮退して得られるベクトルを概念ベクトルと呼ぶ。
【０００５】
共起ベクトルと概念ベクトルを合わせて単語ベクトルと呼ぶ。単語間の意味的類似性は、対応する単語ベクトルの間の類似度により定量化される。
【０００６】
文書の意味表現としての文書ベクトルは、文書中の単語の単語ベクトルの和または重心とする。文書間の意味的類似性は、対応する文書ベクトルの間の類似度により定量化される。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】H. Schutze, Dimensions of Meaning, Proc. of Supercomputing '92, pp.786-796, 1992
【発明の概要】
【発明が解決しようとする課題】
【０００８】
非特許文献1の方法では、入力テキスト中の単語を取得するのに形態素解析を行う。形態素解析では、テキストを、単語辞書中の単語に分割する。テキスト中に、単語辞書にない単語がある等の場合に、単語分割が適切になされないことがあり、その結果、抽出する単語が正しくなく、単語間の共起頻度も正しくカウントされないため、単語ベクトルの品質に問題がある。また、単語ベクトル群を生成した後、入力文書のベクトルを生成するにあたっても、入力文書の単語分割が適切になされないことがあり、その結果、抽出する単語が正しくないため、文書ベクトルの品質に問題がある。
【０００９】
また、あるテキストから単語ベクトル群を生成したとしても、該テキストに存在しない単語については、単語ベクトルが得られないという問題がある。このため、入力文書のベクトルを生成するにあたっても、入力文書中に、単語ベクトルのない単語がある場合、その単語の意味は文書ベクトルに反映されないため、文書ベクトルの品質に問題がある。
【００１０】
以上のように、単語分割の誤りに起因する単語ベクトルや文書ベクトルの品質の問題や、単語ベクトルの量に起因する文書ベクトルの品質の問題がある。この他にも、単語ベクトルを使用した言語処理全般にわたり、精度に問題がある。
【００１１】
本発明は、上記の問題を解決するためになされたものであり、任意の文字列に対し、その意味表現として適切なベクトルを生成することを可能とする文字列ベクトル生成の技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、請求項１に係る発明は、文字列ベクトルを行列の行ベクトルとして生成する文字列ベクトル生成装置であって、入力されたテキストから、当該テキスト中の文の各文字位置からの連続する有限個の文字の列である文字列の異なりの集合A及び集合Bを抽出する文字列集合抽出手段と、各行を前記集合A中の文字列に対応させ、各列を前記集合B中の文字列に対応させた行列を生成し、前記テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、前記集合A中の文字列Cと、前記集合B中の文字列Dとが共起する頻度を、前記テキスト中の全ての前記所定の範囲にわたって加算した値を、前記文字列Cと前記文字列Dに対応する前記行列中の要素とした行列を生成し、出力する第1行列生成手段とを備えることを特徴とする文字列ベクトル生成装置として構成される。
【００１３】
また、請求項２に係る発明は、文字列ベクトルを行列の行ベクトルとして生成する文字列ベクトル生成装置であって、入力されたテキストから、当該テキスト中の文の各文字位置からの連続する有限個の文字の列である文字列の異なりの集合A及び集合Bを抽出する文字列集合抽出手段と、前記集合B中の各文字列に対し、L（Lは１以上の整数）個の成分番号から抽出される成分番号の集合の群から、既に付与した成分番号集合の群を除いた集合群から、ランダムに一つの成分番号集合を選び、当該成分番号集合を当該文字列に付与する成分番号付与手段と、各行を前記集合A中の文字列に対応させ、各列を前記成分番号集合中の成分番号に対応させた行列を生成し、前記テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、前記集合A中の文字列Cと、前記集合B中の文字列に対応付けられた成分番号Eとが共起する頻度を、前記テキスト中の全ての前記所定の範囲にわたって加算した値を、前記文字列Cと前記成分番号Eに対応する前記行列中の要素とした行列を生成し、出力する第2行列生成手段とを備えることを特徴とする文字列ベクトル生成装置として構成される。
【００１４】
また、請求項３に係る発明は、請求項１または２に記載の文字列ベクトル生成装置において、前記出力された行列に対し特異値分解を行うことにより、当該行列を、列数をより少なくした行列に変換する特異値分解手段を更に備えることを特徴とする文字列ベクトル生成装置として構成される。
【００１５】
また、請求項４に係る発明は、請求項１ないし３のうちいずれか１項に記載の文字列ベクトル生成装置において、入力された文書に対し、当該文書中の各文字列で、前記出力された行列の行に対応する文字列の集合を検索し、検索された文字列に対応する行ベクトルを求め、当該行ベクトルの和または重心を、前記文書のベクトルとする文書ベクトル生成手段を更に備えたことを特徴とする文字列ベクトル生成装置として構成される。
【００１６】
また、請求項５〜８に記載のように、本発明は、請求項１〜４に記載の文字列ベクトル生成装置が実行する文字列ベクトル生成方法として構成することもできる。また、本発明は、請求項９に記載のように、コンピュータを、請求項１ないし４のうちいずれか1項に記載された文字列ベクトル生成装置における各手段として機能させるためのプログラムとして構成してもよい。更に、本発明は、請求項１０に記載のように、請求項９に記載されたプログラムを格納したコンピュータ読み取り可能な記録媒体として構成することもできる。
【発明の効果】
【００１７】
本発明に係る技術では、集合A中の各文字列に対し、該文字列に対応する、請求項1〜3に記載された発明のいずれかを用いて生成した行列の行ベクトルを、該文字列の文字列ベクトルとしている。集合A中の文字列と、該文字列に対応する文字列ベクトルとの対の集合を文字列ベクトルデータベースと呼ぶ。
【００１８】
請求項1〜3に係る発明では、集合A、Bとも、一般の文字列の集合を取れば、テキストを形態素解析することがないため、単語分割の誤りに起因する問題はなく、任意の文字列の対の共起頻度を適切にカウントでき、生成される文字列ベクトルの品質は高くなる。また、請求項4に係る発明を用いて入力文書のベクトルを生成するにあたっても、該文書を形態素解析することがないため、単語分割の誤りに起因する問題はなく、該文書の文字列の文字列ベクトルを適切に取得でき、品質の高い文書ベクトルを生成できるという効果を奏する。
【００１９】
請求項1〜3に係る発明では、集合Aとして数個程度までの個数の文字からなる文字列の集合を取って文字列ベクトルデータベースを生成してもよい。この文字列ベクトルデータベースを使用する際、集合A中に存在しない文字列に対しても、該文字列を、集合A中の文字列のある集合に分解できるので、該文字列を請求項4に係る発明における入力文書として使用して、請求項4の処理を行うことにより、該文字列の文字列ベクトルを生成することが可能となる。
【００２０】
請求項1〜3に係る発明において、集合Aとして、単語の集合と、数個程度までの個数の文字からなる文字列の集合との、和集合を取って文字列ベクトルデータベースを生成してもよい。この文字列ベクトルデータベースを使用する際、集合A中に存在する単語に対しては、対応する文字列ベクトルを使用し、存在しない単語に対しては、該単語を、集合A中の文字列のある集合に分解できるので、該単語を請求項4に係る発明における入力文書として使用して、請求項4の処理を行うことにより、該単語の文字列ベクトルを生成することが可能となる。このように、文字列ベクトルデータベースに存在しない単語の文字列ベクトルも生成できるため、入力文書のベクトルを生成するにあたっても、該文書の単語の文字列ベクトルを適切に取得でき、品質の高い文書ベクトルを生成できる。
【００２１】
請求項1〜3に係る発明は、集合Bとして、単語の集合を取ったり、あるいは、単語の集合と、数個程度までの個数の文字からなる文字列の集合との、和集合を取るというバリエーションも包含するものである。
【００２２】
また、請求項2に係る発明では、任意の文字列の対の共起情報を保持しつつ、文字列ベクトルの次元数を一定（L個）にすることができる。これにより、任意の文字列の対の共起情報を保持しつつ、それを使用する処理の計算量が低い文字列ベクトルを生成することができる。
【００２３】
上述した効果は、上記各請求項に対応する他のカテゴリの請求項に係る発明においても同様に奏する効果である。
【図面の簡単な説明】
【００２４】
【図１】実施例１における文字列ベクトル生成装置100の機能構成図である。
【図２】入力テキスト(15)の例を示す図である。
【図３】2-gram配列の例を示す図である。
【図４】第1行列生成部12又は第2行列生成部23が実行する処理のフローチャートである。
【図５】実施例1-1における行列の例を示す図である。
【図６】実施例1-1、実施例2-1における配列aの例を示す図である。
【図７】実施例1-1における配列bの例を示す図である。
【図８】実施例1-1における配列b'の例を示す図である。
【図９】実施例1-1における行列の例を示す図である。
【図１０】単語辞書の内容の一例を示す図である。
【図１１】不要語テーブルの内容の一例を示す図である。
【図１２】不要品詞テーブルの内容の一例を示す図である。
【図１３】図2のテキストを形態素解析した結果を示す図である。
【図１４】実施例1-2、実施例2-2における文字列集合Aの例を示す図である。
【図１５】実施例1-2、実施例2-2における文字列集合Bの例を示す図である。
【図１６】実施例1-2における行列の例を示す図である。
【図１７】実施例1-2、実施例2-2における配列aの例を示す図である。
【図１８】実施例1-2における配列bの例を示す図である。
【図１９】実施例1-2における配列b'の例を示す図である。
【図２０】実施例1-2における行列の例を示す図である。
【図２１】実施例２における文字列ベクトル生成装置200の機能構成図である。
【図２２】実施例2-1における成分番号付文字列集合Bの例を示す図である。
【図２３】実施例2-1における行列の例を示す図である。
【図２４】実施例2-1における配列bの例を示す図である。
【図２５】実施例2-1における配列b'の例を示す図である。
【図２６】実施例2-1における行列の例を示す図である。
【図２７】実施例2-1における配列aの例を示す図である。
【図２８】実施例2-1における配列aの例を示す図である。
【図２９】実施例2-1における配列gの例を示す図である。
【図３０】実施例2-1における配列bの例を示す図である。
【図３１】実施例2-1における配列b'の例を示す図である。
【図３２】実施例2-1における行列の例を示す図である。
【図３３】実施例2-2における成分番号付文字列集合Bの例を示す図である。
【図３４】実施例2-2における行列の例を示す図である。
【図３５】実施例2-2における配列bの例を示す図である。
【図３６】実施例2-2における配列b'の例を示す図である。
【図３７】実施例2-2における行列の例を示す図である。
【図３８】実施例2-2における配列aの例を示す図である。
【図３９】実施例2-2における配列aの例を示す図である。
【図４０】実施例2-2における配列gの例を示す図である。
【図４１】実施例2-2における配列bの例を示す図である。
【図４２】実施例2-2における配列b'の例を示す図である。
【図４３】実施例2-2における行列の例を示す図である。
【図４４】実施例３における文字列ベクトル生成装置301の機能構成図である（例１）。
【図４５】実施例３における文字列ベクトル生成装置302の機能構成図である（例２）。
【図４６】実施例3-1における文字列ベクトルデータベース2(19)の例である。
【図４７】実施例3-2における文字列ベクトルデータベース2(19)の例である。
【図４８】実施例４における文字列ベクトル生成装置401の機能構成図である（例１）。
【図４９】実施例４における文字列ベクトル生成装置402の機能構成図である（例２）。
【図５０】実施例4-1における入力文書の例を示す図である。
【図５１】実施例4-1における2-gram列の例を示す図である。
【図５２】実施例4-2における入力文書の例を示す図である。
【図５３】実施例4-2における形態素解析結果の例を示す図である。
【図５４】実施例4-2において形態素解析結果から抽出される単語列の例である。
【図５５】実施例4-2における1-gram列の例を示す図である。
【発明を実施するための形態】
【００２５】
以下、図面を参照して、本発明を実施するための形態である実施例１〜４を説明する。
【００２６】
[実施例1]
図１に、本発明の実施例１に係る文字列ベクトル生成装置100の構成例を示す。図１に示すように、実施例１の文字列ベクトル生成装置100は、文字列集合抽出部11、第１行列生成部12、テキスト格納部101、文字列集合格納部102、及び文字列ベクトル格納部103を備える。
【００２７】
文字列集合抽出部11は、テキスト格納部101からテキスト(15)を読み出して入力とし、当該入力テキスト(15)中の連続する有限個の文字の列である文字列の異なりの集合である文字列集合A(16)及び文字列集合B(17)を抽出し、文字列集合格納部102に格納する。なお、"文字列の異なりの集合"とは、互いに異なる文字列の集合のことである。以下、同様に、"Ｘの異なりの集合"とは、互いに異なるＸの集合を意味する。
【００２８】
上記の集合A、Bは同一であるとして、ある一つの文字列集合を抽出、格納して、該文字列集合を、集合Aでもあり、集合Bでもあるというように扱ってもよい。
【００２９】
文字列集合抽出部11は、例えば、1以上の整数の定数nに対し、テキスト中の連続するn個の文字の列（n-gramと呼ぶ）の異なりの集合をとり、これを文字列集合とする。このn-gram集合の中で、例えば、高頻度のn-gramの集合に限定したものを文字列集合としてもよい。また、複数のnに対し、各nに対するn-gram集合の和集合をとり、それを文字列集合としてもよい。
【００３０】
また、文字列集合抽出部11は、入力テキストを形態素解析し、テキスト中の単語の異なりの集合を、文字列集合として抽出してもよい。この場合、文字列集合に採用する単語を、名詞、動詞、形容詞等の内容語に限定してもよい。また、単語集合の中で、例えば、高頻度の単語の集合に限定したものを文字列集合としてもよい。
【００３１】
また、いくつかのn-gram集合と、単語集合との和集合をとることにより文字列集合としてもよい。このとき、n-gram集合と単語集合が、文字列として同一の要素をそれぞれ持っていたとしても、それらの要素は別物とみなして、n-gram集合と単語集合を、共通要素を持たない集合ととらえてもよい。
【００３２】
第1行列生成部12は、テキスト(15)、文字列集合A(16)、文字列集合B(17)をテキスト格納部101及び文字列集合格納部102から読み出して入力とし、各行が集合A中の文字列に対応し、各列が集合B中の文字列に対応しているような行列を生成し、テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、集合A中の文字列Cと、集合B中の文字列Dとが共起する頻度を、テキスト中の全ての所定の範囲にわたって加算した値を、文字列Cと文字列Dに対応する該行列中の要素に格納し、集合A中の文字列と、該文字列に対応する該行列の行ベクトルとの対の集合である文字列ベクトルデータベース1(18)を出力し、文字列ベクトル格納部103に格納する。
【００３３】
なお、第1行列生成部12は、文字列ベクトルデータベース1(18)を文字列ベクトル格納部103に対して出力、及び格納することに代えて、例えば通信ネットワークを介して、文字列ベクトル生成装置100の外部にある装置に出力することとしてもよい。
【００３４】
以下、実施例1における処理の詳細例として、n-gram間の共起をとる実施例1-1と、単語間共起の行の単語集合にn-gram集合を加える実施例1-2を説明する。
【００３５】
＜実施例1-1＞
文字列集合抽出部11は、以下のようにして、入力テキスト(15)から、1以上の整数の定数nに対し、n-gramの異なりの集合をとる。
(1)  n-gramの配列をクリアする。なお、配列は、文字列ベクトル生成装置100内のメモリ等における所定のエリアである。他の実施例についても同様である。
(2)  テキスト中の文ごとに以下の処理を行う。
【００３６】
(2.1)  該文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）から、連続するn個の文字（n-gram）をとり、該n-gramをn-gram配列に挿入する。この際、該n-gramが既にn-gram配列になければ挿入し（頻度もカウントする場合、さらに、n-gram配列中の該n-gramの頻度を1とする）、あれば何もしない（頻度もカウントする場合、さらに、n-gram配列中の該n-gramの頻度を1だけ増やす）。
【００３７】
このようにして得られたn-gram配列を、文字列集合A、Bとする。前述したように、n-gram配列の中で、高頻度のn-gramの集合に限定したものを、文字列集合AまたはBとしてもよい。
【００３８】
以下、n=2とした場合の具体例を説明する。
【００３９】
図2は、入力テキスト(15)の例であり、図2中にある「時計とパンを買いパンを食べた」がテキスト中の1文である。
【００４０】
図3は、n=2としたときの文字列集合抽出部11の処理で得られた2-gram配列を示す。図3では、図2中の1文から得られた2-gramを表示している。ここで、図3における「〇時」は、該文における0文字目からの2-gramであることを示し、「た〇」は、該文におけるs文字目からの2-gramであることを示している。以下、図3の2-gram配列を、文字列集合A、Bとする。
【００４１】
図4に、第1行列生成部12が実行する処理のフローチャートを示す。以下、実施例1-1における各ステップの処理について説明する。
【００４２】
ステップ31）  図5に示すような、各行が集合A中のn-gramに対応し、各列が集合B中のn-gramに対応しているような行列を生成し、メモリ等の記憶手段に格納する。行列中の各要素は、対応する集合A中のn-gramと集合B中のn-gramとの共起頻度を表し、本ステップでは初期値として0をセットする。
【００４３】
ステップ32）  制御１として、集合A中のn-gramと集合B中のn-gramとが共起する頻度を算出する処理の対象となるテキスト中の所定の範囲を決定する。所定の範囲は、1文、1段落や1文書等の、連続する有限個の単語の列である。ここでの決定は、例えば、所定の範囲を示す情報を予め文字列ベクトル生成装置100の記憶手段に格納しておき、当該記憶手段から上記情報を読み出すことにより行うことができる。
【００４４】
所定の範囲を1文とした場合は、まず、テキスト中の最初の文を処理対象とする。処理対象とした文に関するステップ33以降の処理が終了したならば、その次の文を処理対象とする。最後の文に関するステップ33以降の処理が終了したならば、処理対象の文はないので、本フローチャートを終了する。所定の範囲を、他のものとした場合も同様である。
【００４５】
ステップ33）  集合A中のn-gramとその頻度の対の配列である配列aと、集合B中のn-gramとその頻度の対の配列である配列bを、クリアする。
【００４６】
ステップ34）  制御２として、処理対象のテキストの範囲におけるn-gramの列を以下のように定める。
【００４７】
該範囲における各文において、該文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）からのn-gramを順にとり、該文のn-gram列とする。該範囲における各文のn-gram列を、文の順につなげたものを、該範囲におけるn-gram列とする。
【００４８】
上記のように定めた上で、該範囲における、処理対象とするn-gramを以下のようにして決定する。
【００４９】
まず、該範囲におけるn-gram列の最初のn-gramを処理対象とする。処理対象としたn-gramに関するステップ35の処理が終了したならば、その次のn-gramを処理対象とする。最後のn-gramに関するステップ35の処理が終了したならば、処理対象のn-gramはないので、ステップ36へ移行する。
【００５０】
ステップ35）  処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramとその頻度1の対を追加する。ヒットすれば、配列aにおける該n-gramの頻度を1だけ増やす。
【００５１】
処理対象のn-gramで集合Bを検索する。ヒットすれば、以下を行う。該n-gramで配列bを検索する。ヒットしなければ、配列bに該n-gramとその頻度1の対を追加する。ヒットすれば、配列bにおける該n-gramの頻度を1だけ増やす。
【００５２】
上記の処理により、図2に示したテキストの1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図6の配列aと図7の配列bが得られる。
【００５３】
ステップ36）  配列aにおける、処理対象とするn-gramを以下のようにして決定する。
【００５４】
まず、配列aにおける最初のn-gramを処理対象とする。処理対象としたn-gramに関するステップ37の処理が終了したならば、その次のn-gramを処理対象とする。最後のn-gramに関するステップ37の処理が終了したならば、処理対象のn-gramはないので、ステップ32へ移行する。
【００５５】
ステップ37）  配列bの各n-gramVの頻度に、処理対象のn-gramUの配列aにおける頻度を乗じた値を、n-gramUに対応する行ベクトルの、n-gramVに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象n-gram（同一n-gramのものが複数あっても別物とする）に対し、該n-gram自身との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【００５６】
1)  自己共起方式 
・配列bの各n-gramVの頻度に、処理対象のn-gramUの配列aにおける頻度を乗じた値を、n-gramUに対応する行ベクトルの、n-gramVに対応する成分に加算する。
【００５７】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成し、処理対象のn-gramUが配列b'にあれば、n-gramUの配列b'における頻度から1だけ減じる。
・配列b'の各n-gramVの頻度に、n-gramUの配列aにおける頻度を乗じた値を、n-gramUに対応する行ベクトルの、n-gramVに対応する成分に加算する。
・配列b'をクリアする。
【００５８】
自己非共起方式での具体例として、ステップ32で、行列が図5であり、かつ、図2に示したテキストの1範囲を処理対象と決定した場合を考える。ステップ36で図6の配列aにおけるn-gram「パン」を処理対象と決定したときに、ステップ37では、図7の配列bのn-gram「パン」の頻度から1だけ減じて得られる図8の配列b'の各頻度に、n-gram「パン」の配列aにおける頻度2を乗じて、n-gram「パン」の行ベクトルに加算する。ステップ36で処理対象のn-gramがなくなった時点で、図9の行列が得られる。
【００５９】
上記実施例1-1における図4のフローチャートの説明では、処理対象のテキストの範囲におけるn-gramで同一のものが複数あるとき、それぞれを別物として処理しているが、処理対象のテキストの範囲におけるn-gramで同一のものが複数あっても、1個として扱う処理方法も考えられる。この処理方法を用いる場合、ステップ35が以下のようになる。
【００６０】
ステップ35）  処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramとその頻度1の対を追加する。
【００６１】
処理対象のn-gramで集合Bを検索する。ヒットすれば、以下を行う。該n-gramで配列bを検索する。ヒットしなければ、配列bに該n-gramとその頻度1の対を追加する。
【００６２】
図2に示したテキストの1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、配列aは図6の各n-gramの頻度を1にしたものが、配列bは図7の各n-gramの頻度を1にしたものが得られる。
【００６３】
＜実施例1-2＞
次に、実施例1-2について説明する。まず、文字列集合抽出部11は、単語辞書を参照して、入力テキスト(15)を形態素解析する。単語辞書は、文字列ベクトル生成装置100の記憶手段に格納されていてもよいし、外部装置に格納され、通信ネットワークを介してアクセスするものであってもよい。
【００６４】
図10は、単語辞書の内容の一例を示す図である。図10の例では、単語辞書は、1レコードが1単語に関する情報となっており、1レコードは、カンマで区切られた2つの項目から構成されている。第1項目は単語の表記であり、第2項目は該単語の品詞情報である。活用語に対しては、終止形も新たな項目として登録しておくようにしてもよい。
【００６５】
文字列集合抽出部11は、形態素解析の結果得られる単語に対し、その後の処理で用いる単語（必要語と呼ぶ）か、用いない単語（不要語と呼ぶ）かを判断する。一般に、名詞、動詞、形容詞等の内容語が必要語となる。
【００６６】
単語が必要語かどうかは、例えば、不要語を記述した不要語テーブルと、不要語の品詞を記述した不要品詞テーブルを文字列ベクトル生成装置100の記憶手段に格納しておき、これらのテーブルを参照することにより判断する。
【００６７】
図11は、不要語テーブルの内容の一例である。不要とされる各単語の終止形（終止形がない単語に対しては、単語表記を終止形とする。）が1レコードとして記述されている。図12は、不要品詞テーブルの内容の一例である。不要とされる各品詞情報が1レコードとして記述されている。
【００６８】
図2のテキストを形態素解析した結果を図13に示す。図13に示すように、各単語間は"/"で区切られている。各単語は、単語表記、終止形、品詞情報、必要語フラグから成っており、それぞれ","で区切られている。終止形が登録されていない単語に対しては、形態素解析後に、単語表記と品詞情報から終止形を導出し、終止形がない単語に対しては、単語表記を終止形とする。終止形が不要語テーブルのあるレコードと一致するか、あるいは、品詞情報が不要品詞テーブルのあるレコードと一致する場合、必要語フラグを0とし、一致しない場合、必要語フラグを1とする。
【００６９】
そして、文字列集合抽出部11は、形態素解析結果から、単語の異なりの集合と、1以上の整数の定数nに対し、n-gramの異なりの集合をとる。この処理は、以下のようにして行う。
(1)  単語の配列、n-gramの配列をクリアする。
(2)  形態素解析結果中の文ごとに以下の処理を行う。
【００７０】
(2.1)・形態素解析結果中の終止形で、必要語フラグが1となっているものを、単語配列に挿入する。この際、該終止形が既に単語配列になければ挿入し（頻度もカウントする場合、さらに、単語配列中の該終止形の頻度を1とする）、あれば何もしない（頻度もカウントする場合、さらに、単語配列中の該終止形の頻度を1だけ増やす）。
・形態素解析結果中の単語表記を連結した非分割文を生成する。
・該非分割文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）から、連続するn個の文字（n-gram）をとり、該n-gramをn-gram配列に挿入する。この際、該n-gramが既にn-gram配列になければ挿入し（頻度もカウントする場合、さらに、n-gram配列中の該n-gramの頻度を1とする）、あれば何もしない（頻度もカウントする場合、さらに、n-gram配列中の該n-gramの頻度を1だけ増やす）。
・該非分割文をクリアする。
【００７１】
このようにして得られた単語配列とn-gram配列を、それぞれ、高頻度の単語、高頻度のn-gramに限定してもよい。
【００７２】
文字列集合抽出部11は、上記のようにして得られた単語配列とn-gram配列を、共通要素を持たない集合ととらえて結合し、文字列集合Aとする。文字列集合Aでは、単語とn-gramで同一の文字列のものがあったとしても、別物ととらえる。また、単語配列を文字列集合Bとする。
【００７３】
以下、n=1とした場合の具体例を説明する。
【００７４】
図13の形態素解析結果から、n=1として文字列集合抽出部11の処理を行って得られた文字列集合Aを図14に示し、文字列集合Bを図15に示す。図14は、単語配列と1-gram配列を罫線で分かれているように表示しており、図13中の1文から得られた単語及び1-gramを表示している。図15は、図13中の1文から得られた単語を表示している。
【００７５】
図4に、第1行列生成部12が実行する処理のフローチャートを示す。以下、実施例1-2における各ステップの処理について説明する。
【００７６】
ステップ31）  図16に示すような、各行が集合A中の文字列（単語またはn-gram）に対応し、各列が集合B中の単語に対応しているような行列を生成し、メモリ等の記憶手段に格納する。行列中の各要素は、対応する集合A中の文字列と集合B中の単語との共起頻度を表し、本ステップでは初期値として0をセットする。
【００７７】
ステップ32）  制御１として、集合A中の文字列と集合B中の単語とが共起する頻度を算出する処理の対象となる形態素解析結果中の所定の範囲を決定する。所定の範囲は、1文、1段落や1文書等の、連続する有限個の単語の列である。ここでの決定は、例えば、所定の範囲を示す情報を予め文字列ベクトル生成装置100の記憶手段に格納しておき、当該記憶手段から上記情報を読み出すことにより行うことができる。
【００７８】
所定の範囲を1文とした場合は、まず、形態素解析結果中の最初の文を処理対象とする。処理対象とした文に関するステップ33以降の処理が終了したならば、その次の文を処理対象とする。最後の文に関するステップ33以降の処理が終了したならば、処理対象の文はないので、本フローチャートを終了する。所定の範囲を、他のものとした場合も同様である。
【００７９】
ステップ33）  集合A中の文字列とその頻度の対の配列である配列aと、集合B中の単語とその頻度の対の配列である配列bと、非分割テキストを、クリアする。
【００８０】
処理対象の形態素解析結果の範囲における単語表記を連結した非分割テキストを生成し、記憶手段に格納する。
【００８１】
ステップ34）  制御２として、処理対象の形態素解析結果の範囲におけるn-gramの列を以下のように定める。
【００８２】
該範囲の非分割テキストにおける各文において、該文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）からのn-gramを順にとり、該文のn-gram列とする。該範囲の非分割テキストにおける各文のn-gram列を、文の順につなげたものを、該範囲におけるn-gram列とする。
【００８３】
上記のように定めた上で、該範囲における、処理対象とするn-gramを以下のようにして決定する。
【００８４】
まず、該範囲におけるn-gram列の最初のn-gramを処理対象とする。処理対象としたn-gramに関するステップ35の処理が終了したならば、その次のn-gramを処理対象とする。最後のn-gramに関するステップ35の処理が終了したならば、処理対象のn-gramはないので、ステップ36へ移行する。
【００８５】
ステップ35）  配列aにおいては、単語とn-gramとは、文字列として一致しても別物として扱う。
【００８６】
処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramとその頻度1の対を追加する。ヒットすれば、配列aにおける該n-gramの頻度を1だけ増やす。
【００８７】
処理対象のn-gramの先頭文字に対応する、形態素解析結果中の単語表記の文字が、単語表記の先頭文字であり、かつ、該単語表記の必要語フラグが1であれば、該単語表記の終止形を処理対象として以下を行う。
【００８８】
処理対象の終止形で集合Aを検索する。ヒットすれば、以下を行う。該終止形で配列aを検索する。ヒットしなければ、配列aに該終止形とその頻度1の対を追加する。ヒットすれば、配列aにおける該終止形の頻度を1だけ増やす。
【００８９】
処理対象の終止形で集合Bを検索する。ヒットすれば、以下を行う。該終止形で配列bを検索する。ヒットしなければ、配列bに該終止形とその頻度1の対を追加する。ヒットすれば、配列bにおける該終止形の頻度を1だけ増やす。
【００９０】
上記の処理により、図13に示した形態素解析結果の1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図17の配列aと図18の配列bが得られる。
【００９１】
なお、ステップ34、35では、処理対象の範囲におけるn-gramと単語の頻度を同時に求めているが、ステップ34、35において、該範囲の非分割テキストをもとにn-gramの頻度のみを求め、それらのステップとは別に、該範囲の形態素解析結果をもとに単語の頻度を求めるステップを設けるという構成にしてもよい。
【００９２】
ステップ36）  配列aにおける、処理対象とする文字列を以下のようにして決定する。
【００９３】
まず、配列aにおける最初の文字列を処理対象とする。処理対象とした文字列に関するステップ37の処理が終了したならば、その次の文字列を処理対象とする。最後の文字列に関するステップ37の処理が終了したならば、処理対象の文字列はないので、ステップ32へ移行する。
【００９４】
ステップ37）  配列aにおけるn-gramと配列bにおける単語は、文字列として一致しても別物として扱う。
【００９５】
配列bの各単語Vの頻度に、処理対象の文字列Uの配列aにおける頻度を乗じた値を、文字列Uに対応する行ベクトルの、単語Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象文字列（同一文字列のものが複数あっても別物とする）に対し、該文字列自身との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【００９６】
1)  自己共起方式 
・配列bの各単語Vの頻度に、処理対象の文字列Uの配列aにおける頻度を乗じた値を、文字列Uに対応する行ベクトルの、単語Vに対応する成分に加算する。
【００９７】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成し、処理対象の文字列Uが配列b'にあれば、文字列Uの配列b'における頻度から1だけ減じる。
・配列b'の各単語Vの頻度に、文字列Uの配列aにおける頻度を乗じた値を、文字列Uに対応する行ベクトルの、単語Vに対応する成分に加算する。
・配列b'をクリアする。
【００９８】
自己非共起方式での具体例として、ステップ32で、行列が図16であり、かつ、図13に示した形態素解析結果の1範囲を処理対象と決定した場合を考える。ステップ36で図17の配列aにおける単語「パン」を処理対象と決定したときに、ステップ37では、図18の配列bの単語「パン」の頻度から1だけ減じて得られる図19の配列b'の各頻度に、単語「パン」の配列aにおける頻度2を乗じて、単語「パン」の行ベクトルに加算する。ステップ36で処理対象の文字列がなくなった時点で、図20の行列が得られる。
【００９９】
上記実施例1-2における図4のフローチャートの説明では、処理対象の形態素解析結果の範囲において、単語で同一のものが複数あるときや、n-gramで同一のものが複数あるとき、それぞれを別物として処理しているが、処理対象の形態素解析結果の範囲において、単語で同一のものが複数あるときや、n-gramで同一のものが複数あるときでも、それらを1個として扱う処理方法も考えられる。この処理方法を用いる場合、ステップ35が以下のようになる。
【０１００】
ステップ35）  配列aにおいては、単語とn-gramとは、文字列として一致しても別物として扱う。
【０１０１】
処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramとその頻度1の対を追加する。
【０１０２】
処理対象のn-gramの先頭文字に対応する、形態素解析結果中の単語表記の文字が、単語表記の先頭文字であり、かつ、該単語表記の必要語フラグが1であれば、該単語表記の終止形を処理対象として以下を行う。
【０１０３】
処理対象の終止形で集合Aを検索する。ヒットすれば、以下を行う。該終止形で配列aを検索する。ヒットしなければ、配列aに該終止形とその頻度1の対を追加する。
【０１０４】
処理対象の終止形で集合Bを検索する。ヒットすれば、以下を行う。該終止形で配列bを検索する。ヒットしなければ、配列bに該終止形とその頻度1の対を追加する。
【０１０５】
図13に示した形態素解析結果の1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、配列aは図17の各文字列の頻度を1にしたものが、配列bは図7の各単語の頻度を1にしたものが得られる。
【０１０６】
[実施例2]
図２１に、本発明の実施例2に係る文字列ベクトル生成装置200の構成例を示す。図２１に示すように、実施例２の文字列ベクトル生成装置200は、文字列集合抽出部11、成分番号付与部22、第2行列生成部23、テキスト格納部10１、文字列集合格納部102、及び文字列ベクトル格納部103を備える。
【０１０７】
文字列集合抽出部11は、実施例1における文字列集合抽出部11と同一である。
【０１０８】
成分番号付与部22は、文字列集合格納部102から文字列集合B(17)を読み出して入力とし、集合B中の各文字列に対し、L個の成分番号からなる成分番号集合中のいくつかの成分番号を対応付けた成分番号付文字列集合B(24)を出力し、文字列集合格納部102に格納する。
【０１０９】
第2行列生成部23は、テキスト(15)、文字列集合A(16)、成分番号付文字列集合B(24)をテキスト格納部101及び文字列集合格納部102から読み出して入力とし、各行が集合A中の文字列に対応し、各列が成分番号集合中の成分番号に対応しているような行列を生成し、テキスト中の、連続する有限個の単語の列である所定の範囲に存在する、集合A中の文字列Cと、集合B中の文字列に対応付けられた成分番号Eとが共起する頻度を、テキスト中の全ての所定の範囲にわたって加算した値を、文字列Cと成分番号Eに対応する該行列中の要素に格納し、集合A中の文字列と、該文字列に対応する該行列の行ベクトルとの対の集合である文字列ベクトルデータベース1(18)を出力し、文字列ベクトル格納部103に格納する。
【０１１０】
なお、第2行列生成部23は、文字列ベクトルデータベース1(18)を文字列ベクトル格納部103に対して出力、及び格納することに代えて、例えば通信ネットワークを介して、文字列ベクトル生成装置200の外部にある装置に出力することとしてもよい。
【０１１１】
以下、実施例2における処理の詳細例として、n-gram間の共起をとる実施例2-1と、単語間共起の行の単語集合にn-gram集合を加える実施例2-2を説明する。
【０１１２】
＜実施例2-1＞
文字列集合抽出部11は、入力テキスト(15)から、1以上の整数の定数nに対し、n-gramの異なりの集合をとる。処理内容は、実施例1-1の文字列集合抽出部11の処理内容と同一である。
【０１１３】
以下、n=2とした場合の具体例を説明する。
【０１１４】
図2の入力テキスト(15)から文字列集合抽出部11の処理で得られる図3の2-gram配列を、文字列集合A、Bとする。
【０１１５】
成分番号付与部22は、集合B中の各文字列に対し、L個の成分番号からなる成分番号集合（集合Fと呼ぶ）中のいくつかの成分番号を対応付ける。
【０１１６】
集合Fを本実施例では{1, 2,・・・, L}とする。また、一文字列に対応付ける成分番号の個数を定数Kとして定めておく。定数Kは、異なる文字列には異なる成分番号集合が対応付けられるように、以下のようにして定める。
【０１１７】
L個の成分番号から抽出したK個の成分番号の組合せの数
【０１１８】
【数１】
0005513985.tif 000002
は、以下の式で表される。
【０１１９】
【数２】
0005513985.tif 000003
そして、集合Bの要素数をMとしたとき、
【０１２０】
【数３】
0005513985.tif 000004
となるようにKを定める。Kをこのように定めることにより、異なる文字列には異なる成分番号集合を対応付けることができる。
【０１２１】
成分番号付与部22の処理は、以下のようにして行われる。
(1)  集合Bの文字列ごとに以下の処理を行う。
【０１２２】
(1.1)  L個の成分番号から抽出されるK個の成分番号の集合の群から、それまでに付与した成分番号集合の群を除いた集合群から、ランダムに一つの成分番号集合を選び、該成分番号集合を該文字列に付与する。
【０１２３】
図22は、図3の文字列集合Bを入力とし、K=2としたときの成分番号付与部22の処理で得られた成分番号付文字列集合Bの例を示す図である。各文字列には、その文字列にユニークな、2個の要素からなる成分番号集合が対応付けられており、該成分番号集合は第2項目として、各成分番号がコロン区切りとなっている。
【０１２４】
実施例2-1における以後の第2行列生成部23の処理の説明において集合Bとは、この成分番号付文字列集合Bを意味するものとする。
【０１２５】
図4に、第2行列生成部23が実行する処理のフローチャートを示す。以下、実施例2-1における各ステップの処理について説明する。
【０１２６】
ステップ31）  図23に示すような、各行が集合A中のn-gramに対応し、各列が集合F中の成分番号に対応しているような行列を生成し、メモリ等の記憶手段に格納する。行列中の各要素は、対応する集合A中のn-gramと集合F中の成分番号との共起頻度を表し、本ステップでは初期値として0をセットする。
【０１２７】
ステップ32）  制御１として、集合A中のn-gramと集合F中の成分番号とが共起する頻度を算出する処理の対象となるテキスト中の所定の範囲を決定する。所定の範囲は、1文、1段落や1文書等の、連続する有限個の単語の列である。ここでの決定は、例えば、所定の範囲を示す情報を予め文字列ベクトル生成装置200の記憶手段に格納しておき、当該記憶手段から上記情報を読み出すことにより行うことができる。
【０１２８】
所定の範囲を1文とした場合は、まず、テキスト中の最初の文を処理対象とする。処理対象とした文に関するステップ33以降の処理が終了したならば、その次の文を処理対象とする。最後の文に関するステップ33以降の処理が終了したならば、処理対象の文はないので、本フローチャートを終了する。所定の範囲を、他のものとした場合も同様である。
【０１２９】
ステップ33）  集合A中のn-gramとその頻度の対の配列である配列aと、集合F中の成分番号とその頻度の対の配列である配列bを、クリアする。
【０１３０】
ステップ34）  制御２として、処理対象のテキストの範囲におけるn-gramの列を以下のように定める。
【０１３１】
該範囲における各文において、該文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）からのn-gramを順にとり、該文のn-gram列とする。該範囲における各文のn-gram列を、文の順につなげたものを、該範囲におけるn-gram列とする。
【０１３２】
上記のように定めた上で、該範囲における、処理対象とするn-gramを以下のようにして決定する。
【０１３３】
まず、該範囲におけるn-gram列の最初のn-gramを処理対象とする。処理対象としたn-gramに関するステップ35の処理が終了したならば、その次のn-gramを処理対象とする。最後のn-gramに関するステップ35の処理が終了したならば、処理対象のn-gramはないので、ステップ36へ移行する。
【０１３４】
ステップ35）  処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramとその頻度1の対を追加する。ヒットすれば、配列aにおける該n-gramの頻度を1だけ増やす。
【０１３５】
処理対象のn-gramで集合Bを検索する。ヒットすれば、以下を行う。該n-gramに対応付けられた各成分番号に対し以下を行う。該成分番号で配列bを検索する。ヒットしなければ、配列bに該成分番号とその頻度1の対を追加する。ヒットすれば、配列bにおける該成分番号の頻度を1だけ増やす。
【０１３６】
上記の処理により、図2に示したテキストの1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図6の配列aと図24の配列bが得られる。
【０１３７】
ステップ36）  配列aにおける、処理対象とするn-gramを以下のようにして決定する。
【０１３８】
まず、配列aにおける最初のn-gramを処理対象とする。処理対象としたn-gramに関するステップ37の処理が終了したならば、その次のn-gramを処理対象とする。最後のn-gramに関するステップ37の処理が終了したならば、処理対象のn-gramはないので、ステップ32へ移行する。
【０１３９】
ステップ37）  配列bの各成分番号Vの頻度に、処理対象のn-gramUの配列aにおける頻度を乗じた値を、n-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象n-gram（同一n-gramのものが複数あっても別物とする）に対し、該n-gram自身の成分番号との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【０１４０】
1)  自己共起方式 
・配列bの各成分番号Vの頻度に、処理対象のn-gramUの配列aにおける頻度を乗じた値を、n-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
【０１４１】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成する。
・処理対象のn-gramUで集合Bを検索し、対応する成分番号集合を取得する。
・該成分番号集合が空でなければ、n-gramUの各成分番号に対し、該成分番号の配列b'における頻度から1だけ減じる。
・配列b'の各成分番号Vの頻度に、n-gramUの配列aにおける頻度を乗じた値を、n-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
・配列b'をクリアする。
【０１４２】
自己非共起方式での具体例として、ステップ32で、行列が図23であり、かつ、図2に示したテキストの1範囲を処理対象と決定した場合を考える。ステップ36で図6の配列aにおけるn-gram「パン」を処理対象と決定したときに、ステップ37では、n-gram「パン」の成分番号16，38に対し、図24の配列bの成分番号16，38の頻度からそれぞれ1だけ減じて得られる図25の配列b'の各頻度に、n-gram「パン」の配列aにおける頻度2を乗じて、n-gram「パン」の行ベクトルに加算する。ステップ36で処理対象のn-gramがなくなった時点で、図26の行列が得られる。
【０１４３】
上記実施例2-1における図4のフローチャートの説明で、処理対象のテキストの範囲におけるn-gramの頻度をカウントしない処理方法を、ステップ33、35、37を以下のようにすることにより実現できる。この処理方法では、行列生成にあたり、処理対象のテキストの範囲において、n-gramの頻度をカウントするプロセスや、n-gram同士の共起頻度をカウントするプロセスを含めないように構成できる。
【０１４４】
ステップ33）  集合A中のn-gramの配列である配列aと、集合F中の成分番号とその頻度の対の配列である配列bを、クリアする。
【０１４５】
ステップ35）  処理対象のn-gramで集合Aを検索し、ヒットすれば、該n-gramを配列aに追加する。配列aにおいては、n-gramが、追加される順に格納されており、同一のn-gramが既に配列aにある場合でも追加される。
【０１４６】
処理対象のn-gramで集合Bを検索する。ヒットすれば、以下を行う。該n-gramに対応付けられた各成分番号に対し以下を行う。該成分番号で配列bを検索する。ヒットしなければ、配列bに該成分番号とその頻度1の対を追加する。ヒットすれば、配列bにおける該成分番号の頻度を1だけ増やす。
【０１４７】
図2に示したテキストの1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図27の配列aと図24の配列bが得られる。
【０１４８】
ステップ37）  配列bの各成分番号Vの頻度を、処理対象のn-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象n-gram（同一n-gramのものが複数あっても別物とする）に対し、該n-gram自身の成分番号との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【０１４９】
1)  自己共起方式 
・配列bの各成分番号Vの頻度を、処理対象のn-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
【０１５０】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成する。
・処理対象のn-gramUで集合Bを検索し、対応する成分番号集合を取得する。
・該成分番号集合が空でなければ、n-gramUの各成分番号に対し、該成分番号の配列b'における頻度から1だけ減じる。
・配列b'の各成分番号Vの頻度を、n-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
・配列b'をクリアする。
【０１５１】
上記実施例2-1における図4のフローチャートの説明では、処理対象のテキストの範囲におけるn-gramで同一のものが複数あるとき、それぞれを別物として処理している。処理対象のテキストの範囲におけるn-gramで同一のものが複数あっても、1個として扱う処理方法も考えられる。この処理方法の場合、ステップ33、35、37が以下のようになる。
【０１５２】
ステップ33）  集合A中のn-gramの配列である配列aと、集合F中の成分番号とその頻度の対の配列である配列bと、集合B中のn-gramの配列である配列gを、クリアする。
【０１５３】
ステップ35）  処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramを追加する。
【０１５４】
処理対象のn-gramで集合Bを検索する。ヒットすれば、以下を行う。該n-gramで配列gを検索する。ヒットしなければ、以下を行う。配列gに該n-gramを追加する。該n-gramに対応付けられた各成分番号に対し以下を行う。該成分番号で配列bを検索する。ヒットしなければ、配列bに該成分番号とその頻度1の対を追加する。ヒットすれば、配列bにおける該成分番号の頻度を1だけ増やす。
【０１５５】
図2に示したテキストの1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図28の配列aと図29の配列gと図30の配列bが得られる。
【０１５６】
ステップ37）  配列bの各成分番号Vの頻度を、処理対象のn-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象n-gramに対し、該n-gram自身の成分番号との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【０１５７】
1)  自己共起方式 
・配列bの各成分番号Vの頻度を、処理対象のn-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
【０１５８】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成する。
・処理対象のn-gramUで集合Bを検索し、対応する成分番号集合を取得する。
・該成分番号集合が空でなければ、n-gramUの各成分番号に対し、該成分番号の配列b'における頻度から1だけ減じる。
・配列b'の各成分番号Vの頻度を、n-gramUに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
・配列b'をクリアする。
【０１５９】
自己非共起方式での例として、ステップ32で、行列が図23であり、かつ、図2に示したテキストの1範囲を処理対象と決定した場合を考える。ステップ36で図28の配列aにおけるn-gram「パン」を処理対象と決定したときに、ステップ37では、n-gram「パン」の成分番号16，38に対し、図30の配列bの成分番号16，38の頻度からそれぞれ1だけ減じて得られる図31の配列b'の各頻度を、n-gram「パン」の行ベクトルに加算する。ステップ36で処理対象のn-gramがなくなった時点で、図32の行列が得られる。
【０１６０】
＜実施例2-2＞
次に、実施例2-2について説明する。まず、文字列集合抽出部11は、単語辞書を参照して、入力テキスト(15)を形態素解析する。単語辞書は、文字列ベクトル生成装置200の記憶手段に格納されていてもよいし、外部装置に格納され、通信ネットワークを介してアクセスするものであってもよい。
【０１６１】
形態素解析結果から、単語の異なりの集合と、1以上の整数の定数nに対し、n-gramの異なりの集合をとる。処理内容は、実施例1-2の文字列集合抽出部11の処理内容と同一である。
【０１６２】
以下、n=1とした場合の具体例を説明する。
【０１６３】
図13の形態素解析結果から、文字列集合抽出部11の処理で得られる図14の文字列配列を文字列集合Aとし、図15の単語配列を文字列集合Bとする。
【０１６４】
成分番号付与部22は、集合B中の各単語に対し、L個の成分番号からなる成分番号集合（集合Fと呼ぶ）中のいくつかの成分番号を対応付ける。処理内容は、実施例2-1の成分番号付与部22の処理内容と同一である。
【０１６５】
図33は、図15の文字列集合Bを入力とし、K=2としたときの成分番号付与部22の処理で得られた成分番号付文字列集合Bである。各文字列には、その文字列にユニークな、2個の要素からなる成分番号集合が対応付けられており、該成分番号集合は第2項目として、各成分番号がコロン区切りとなっている。
【０１６６】
実施例2-2における以後の第2行列生成部23の処理の説明において集合Bとは、この成分番号付文字列集合Bを意味するものとする。
【０１６７】
図4に、第2行列生成部23が実行する処理のフローチャートを示す。以下、実施例2-2における各ステップの処理について説明する。
【０１６８】
ステップ31）  図34に示すような、各行が集合A中の文字列（単語またはn-gram）に対応し、各列が集合F中の成分番号に対応しているような行列を生成し、メモリ等の記憶手段に格納する。行列中の各要素は、対応する集合A中の文字列と集合F中の成分番号との共起頻度を表し、本ステップでは初期値として0をセットする。
【０１６９】
ステップ32）  制御１として、集合A中の文字列と集合F中の成分番号とが共起する頻度を算出する処理の対象となる形態素解析結果中の所定の範囲を決定する。所定の範囲は、1文、1段落や1文書等の、連続する有限個の単語の列である。ここでの決定は、例えば、所定の範囲を示す情報を予め文字列ベクトル生成装置200の記憶手段に格納しておき、当該記憶手段から上記情報を読み出すことにより行うことができる。
【０１７０】
所定の範囲を1文とした場合は、まず、形態素解析結果中の最初の文を処理対象とする。処理対象とした文に関するステップ33以降の処理が終了したならば、その次の文を処理対象とする。最後の文に関するステップ33以降の処理が終了したならば、処理対象の文はないので、本フローチャートを終了する。所定の範囲を、他のものとした場合も同様である。
【０１７１】
ステップ33）  集合A中の文字列とその頻度の対の配列である配列aと、集合F中の成分番号とその頻度の対の配列である配列bと、非分割テキストを、クリアする。
【０１７２】
処理対象の形態素解析結果の範囲における単語表記を連結した非分割テキストを生成する。
【０１７３】
ステップ34）  制御２として、処理対象の形態素解析結果の範囲におけるn-gramの列を以下のように定める。
【０１７４】
該範囲の非分割テキストにおける各文において、該文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）からのn-gramを順にとり、該文のn-gram列とする。該範囲の非分割テキストにおける各文のn-gram列を、文の順につなげたものを、該範囲におけるn-gram列とする。
【０１７５】
上記のように定めた上で、該範囲における、処理対象とするn-gramを以下のようにして決定する。
【０１７６】
まず、該範囲におけるn-gram列の最初のn-gramを処理対象とする。処理対象としたn-gramに関するステップ35の処理が終了したならば、その次のn-gramを処理対象とする。最後のn-gramに関するステップ35の処理が終了したならば、処理対象のn-gramはないので、ステップ36へ移行する。
【０１７７】
ステップ35）  配列aにおいては、単語とn-gramとは、文字列として一致しても別物として扱う。
【０１７８】
処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramとその頻度1の対を追加する。ヒットすれば、配列aにおける該n-gramの頻度を1だけ増やす。
【０１７９】
処理対象のn-gramの先頭文字に対応する、形態素解析結果中の単語表記の文字が、単語表記の先頭文字であり、かつ、該単語表記の必要語フラグが1であれば、該単語表記の終止形を処理対象として以下を行う。
【０１８０】
処理対象の終止形で集合Aを検索する。ヒットすれば、以下を行う。該終止形で配列aを検索する。ヒットしなければ、配列aに該終止形とその頻度1の対を追加する。ヒットすれば、配列aにおける該終止形の頻度を1だけ増やす。
【０１８１】
処理対象の終止形で集合Bを検索する。ヒットすれば、以下を行う。該終止形に対応付けられた各成分番号に対し以下を行う。該成分番号で配列bを検索する。ヒットしなければ、配列bに該成分番号とその頻度1の対を追加する。ヒットすれば、配列bにおける該成分番号の頻度を1だけ増やす。
【０１８２】
図13に示した形態素解析結果の1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図17の配列aと図35の配列bが得られる。
【０１８３】
ステップ34、35では、処理対象の範囲におけるn-gramと単語と成分番号の頻度を同時に求めているが、ステップ34、35では、該範囲の非分割テキストをもとにn-gramの頻度のみを求め、それらのステップとは別に、該範囲の形態素解析結果をもとに単語と成分番号の頻度を求めるステップを設けるという構成にしてもよい。
【０１８４】
ステップ36）  配列aにおける、処理対象とする文字列を以下のようにして決定する。
【０１８５】
まず、配列aにおける最初の文字列を処理対象とする。処理対象とした文字列に関するステップ37の処理が終了したならば、その次の文字列を処理対象とする。最後の文字列に関するステップ37の処理が終了したならば、処理対象の文字列はないので、ステップ32へ移行する。
【０１８６】
ステップ37）  配列aにおけるn-gramは集合Bには存在しないものとする。
【０１８７】
配列bの各成分番号Vの頻度に、処理対象の文字列Uの配列aにおける頻度を乗じた値を、文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象文字列（同一文字列のものが複数あっても別物とする）に対し、該文字列自身の成分番号との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【０１８８】
1)  自己共起方式 
・配列bの各成分番号Vの頻度に、処理対象の文字列Uの配列aにおける頻度を乗じた値を、文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
【０１８９】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成する。
・処理対象の文字列Uで集合Bを検索し、対応する成分番号集合を取得する。
・該成分番号集合が空でなければ、文字列Uの各成分番号に対し、該成分番号の配列b'における頻度から1だけ減じる。
・配列b'の各成分番号Vの頻度に、文字列Uの配列aにおける頻度を乗じた値を、文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
・配列b'をクリアする。
【０１９０】
自己非共起方式での具体例として、ステップ32で、行列が図34であり、かつ、図13に示した形態素解析結果の1範囲を処理対象と決定した場合を考える。ステップ36で図17の配列aにおける単語「パン」を処理対象と決定したときに、ステップ37では、単語「パン」の成分番号11，91に対し、図35の配列bの成分番号11，91の頻度からそれぞれ1だけ減じて得られる図36の配列b'の各頻度に、単語「パン」の配列aにおける頻度2を乗じて、単語「パン」の行ベクトルに加算する。ステップ36で処理対象の文字列がなくなった時点で、図37の行列が得られる。
【０１９１】
上記実施例2-2における図4のフローチャートの説明で、処理対象の形態素解析結果の範囲における文字列の頻度をカウントしない処理方法を、ステップ33、35、37を以下のようにすることにより実現できる。この処理方法では、行列生成にあたり、処理対象の形態素解析結果の範囲において、文字列の頻度をカウントするプロセスや、文字列同士の共起頻度をカウントするプロセスを含めないように構成できる。
【０１９２】
ステップ33）  集合A中の文字列の配列である配列aと、集合F中の成分番号とその頻度の対の配列である配列bと、非分割テキストを、クリアする。
【０１９３】
処理対象の形態素解析結果の範囲における単語表記を連結した非分割テキストを生成する。
【０１９４】
ステップ35）  配列aにおいては、単語とn-gramとは、文字列として一致しても別物として扱い、それぞれ別領域に格納する。
【０１９５】
処理対象のn-gramで集合Aを検索し、ヒットすれば、該n-gramを配列aに追加する。配列aにおいては、n-gramが、追加される順に格納されており、同一のn-gramが既に配列aにある場合でも追加される。
【０１９６】
処理対象のn-gramの先頭文字に対応する、形態素解析結果中の単語表記の文字が、単語表記の先頭文字であり、かつ、該単語表記の必要語フラグが1であれば、該単語表記の終止形を処理対象として以下を行う。
【０１９７】
処理対象の終止形で集合Aを検索し、ヒットすれば、該終止形を配列aに追加する。配列aにおいては、終止形が、追加される順に格納されており、同一の終止形が既に配列aにある場合でも追加される。
【０１９８】
処理対象の終止形で集合Bを検索する。ヒットすれば、以下を行う。該終止形に対応付けられた各成分番号に対し以下を行う。該成分番号で配列bを検索する。ヒットしなければ、配列bに該成分番号とその頻度1の対を追加する。ヒットすれば、配列bにおける該成分番号の頻度を1だけ増やす。
【０１９９】
図13に示した形態素解析結果の1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図38の配列aと図35の配列bが得られる。
【０２００】
ステップ37）  配列aにおけるn-gramは集合Bには存在しないものとする。
【０２０１】
配列bの各成分番号Vの頻度を、処理対象の文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象文字列（同一文字列のものが複数あっても別物とする）に対し、該文字列自身の成分番号との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【０２０２】
1)  自己共起方式 
・配列bの各成分番号Vの頻度を、処理対象の文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
【０２０３】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成する。
・処理対象の文字列Uで集合Bを検索し、対応する成分番号集合を取得する。
・該成分番号集合が空でなければ、文字列Uの各成分番号に対し、該成分番号の配列b'における頻度から1だけ減じる。
・配列b'の各成分番号Vの頻度を、文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
・配列b'をクリアする。
【０２０４】
上記実施例2-２における図4のフローチャートの説明では、処理対象の形態素解析結果の範囲において、単語で同一のものが複数あるときや、n-gramで同一のものが複数あるとき、それぞれを別物として処理している。処理対象の形態素解析結果の範囲において、単語で同一のものが複数あるときや、n-gramで同一のものが複数あるときでも、それらを1個として扱う処理方法も考えられる。この処理方法の場合、ステップ33、35、37が以下のようになる。
【０２０５】
ステップ33）  集合A中の文字列の配列である配列aと、集合F中の成分番号とその頻度の対の配列である配列bと、集合B中の単語の配列である配列gと、非分割テキストを、クリアする。
【０２０６】
処理対象の形態素解析結果の範囲における単語表記を連結した非分割テキストを生成する。
【０２０７】
ステップ35）  配列aにおいては、単語とn-gramとは、文字列として一致しても別物として扱う。
【０２０８】
処理対象のn-gramで集合Aを検索する。ヒットすれば、以下を行う。該n-gramで配列aを検索する。ヒットしなければ、配列aに該n-gramを追加する。
【０２０９】
処理対象のn-gramの先頭文字に対応する、形態素解析結果中の単語表記の文字が、単語表記の先頭文字であり、かつ、該単語表記の必要語フラグが1であれば、該単語表記の終止形を処理対象として以下を行う。
【０２１０】
処理対象の終止形で集合Aを検索する。ヒットすれば、以下を行う。該終止形で配列aを検索する。ヒットしなければ、配列aに該終止形を追加する。
【０２１１】
処理対象の終止形で集合Bを検索する。ヒットすれば、以下を行う。該終止形で配列gを検索する。ヒットしなければ、以下を行う。配列gに該終止形を追加する。該終止形に対応付けられた各成分番号に対し以下を行う。該成分番号で配列bを検索する。ヒットしなければ、配列bに該成分番号とその頻度1の対を追加する。ヒットすれば、配列bにおける該成分番号の頻度を1だけ増やす。
【０２１２】
図13に示した形態素解析結果の1範囲からは、ステップ34で処理対象のn-gramがなくなった時点で、図39の配列aと図40の配列gと図41の配列bが得られる。
【０２１３】
ステップ37）  配列aにおけるn-gramは集合Bには存在しないものとする。
【０２１４】
配列bの各成分番号Vの頻度を、処理対象の文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。ここで加算の仕方として、処理対象範囲における処理対象文字列に対し、該文字列自身の成分番号との共起をカウントする自己共起方式と、カウントしない自己非共起方式があり、それぞれ以下の処理内容となる。
【０２１５】
1)  自己共起方式 
・配列bの各成分番号Vの頻度を、処理対象の文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
【０２１６】
2)  自己非共起方式 
・配列bのコピーとして配列b'を生成する。
・処理対象の文字列Uで集合Bを検索し、対応する成分番号集合を取得する。
・該成分番号集合が空でなければ、文字列Uの各成分番号に対し、該成分番号の配列b'における頻度から1だけ減じる。
・配列b'の各成分番号Vの頻度を、文字列Uに対応する行ベクトルの、成分番号Vに対応する成分に加算する。
・配列b'をクリアする。
【０２１７】
自己非共起方式での例として、ステップ32で、行列が図34であり、かつ、図13に示した形態素解析結果の1範囲を処理対象と決定した場合を考える。ステップ36で図39の配列aにおける単語「パン」を処理対象と決定したときに、ステップ37では、単語「パン」の成分番号11，91に対し、図41の配列bの成分番号11，91の頻度からそれぞれ1だけ減じて得られる図42の配列b'の各頻度を、単語「パン」の行ベクトルに加算する。ステップ36で処理対象の文字列がなくなった時点で、図43の行列が得られる。
【０２１８】
＜実施例３＞
実施例３は、文字列ベクトル生成装置100、200において、特異値分解部13を備える実施例である。実施例１の文字列ベクトル生成装置100に特異値分解部13を備えた文字列ベクトル生成装置301の構成を図４４に示す。また、実施例２の文字列ベクトル生成装置200に特異値分解部13を備えた文字列ベクトル生成装置302の構成を図４５に示す。
【０２１９】
特異値分解部13は、文字列ベクトル格納部103から文字列ベクトルデータベース1(18)を読み出して入力とし、該文字列ベクトルデータベースの行列に対し特異値分解を行うことにより、該行列を、列数をより少なくした行列に変換し、集合A中の文字列と、該文字列に対応する、変換後の行列の行ベクトルとの対の集合である文字列ベクトルデータベース2(19)を出力し、文字列ベクトル格納部103に格納する。
【０２２０】
＜実施例3-1＞
文字列ベクトルデータベース1(18)において、行に対応する文字列がn-gramである場合について実施例3-1として説明する。実施例3-1は、例えば、文字列ベクトルデータベース1(18)が、実施例1-1の図9か、または、実施例2-1の図26か図32である場合に対応する。
【０２２１】
ここでは、文字列ベクトルデータベース1(18)の行列の次元数をJとしたとき、J≧H≧1となる定数Hをとる。該行列を、特異値分解により、列数がHの行列に変換することにより、図46のような文字列ベクトルデータベース2(19)が得られる。
【０２２２】
＜実施例3-2＞
文字列ベクトルデータベース1(18)において、行に対応する文字列が単語及びn-gramである場合について実施例3-2として説明する。実施例3-2は、例えば、文字列ベクトルデータベース1(18)が、実施例1-2の図20か、または、実施例2-2の図37か図43である場合に対応する。  
ここでは、文字列ベクトルデータベース1(18)の行列の次元数をJとしたとき、J≧H≧1となる定数Hをとる。該行列を、特異値分解により、列数がHの行列に変換することにより、図47のような文字列ベクトルデータベース2(19)が得られる。
【０２２３】
このように、次元数が縮退した文字列ベクトルを生成することにより、文字列ベクトル間の類似性の精度が向上する。
【０２２４】
＜実施例4＞
実施例４は、文字列ベクトル生成装置100、200、301、302において、文書ベクトル生成部14を備える実施例である。図４４の文字列ベクトル生成装置301に文書ベクトル生成部14を備えた文字列ベクトル生成装置401の構成を図４８に示す。また、図４５の文字列ベクトル生成装置302に文書ベクトル生成部14を備えた文字列ベクトル生成装置402の構成を図４９に示す。図４８、図４９に示すように、本実施例では、文書及び文書ベクトルを格納する文書情報格納部104も備えられている。
【０２２５】
なお、図４８、図４９に示す例では、それぞれ特異値分解部13を備えているが、特異値分解部13を備えることは必須ではなく、特異値分解部13を備えないこととしてもよい。すなわち、文書ベクトル生成部14は、特異値分解部13が出力した文字列ベクトルデータベース2(19)を入力とする代わりに、第1行列生成部12または第2行列生成部23が出力した文字列ベクトルデータベース1(18)を入力としてもよい。
【０２２６】
実施例4では、文字列ベクトルデータベース1(18)と文字列ベクトルデータベース2(19)を総称して文字列ベクトルデータベースと呼ぶことにする。
【０２２７】
文書ベクトル生成部14は、文書情報格納部104から読み出され、入力された文書(20)に対し、該文書中の各文字列で、文字列ベクトルデータベースの行列の行に対応する文字列の集合を検索し、検索された文字列に対応する行ベクトルを求め、該行ベクトルの和または重心を、該文書のベクトルとして出力し、文書情報格納部104に格納する。
【０２２８】
以下、実施例４の具体例として、行に対応する文字列がn-gramの文字列ベクトルデータベースをとる実施例4-1と、行に対応する文字列が単語及びn-gramの文字列ベクトルデータベースをとる実施例4-2を説明する。
【０２２９】
＜実施例4-1＞
本実施例では、文字列ベクトルデータベースとして、実施例1-1の図9か、または、実施例2-1の図26か図32、または、実施例3-1の図46のような、行に対応する文字列がn-gramの文字列ベクトルデータベースをとる。このとき、入力文書の文書ベクトルを以下のようにして求める。
【０２３０】
入力文書におけるn-gramの列を以下のように定める。
【０２３１】
入力文書における各文において、該文の先頭文字を1文字目とし、先頭文字の直前の位置を0文字目として、以降、文の前方は減少し、文の後方は増加するように、各文字に番号を振っていく。該文の文字数をsとしたとき、(2-n)文字目からs文字目までの各位置（但しn≧s+3のときは、(s-n+3)文字目から0文字目を除く）からのn-gramを順にとり、該文のn-gram列とする。入力文書における各文のn-gram列を、文の順につなげたものを、入力文書におけるn-gram列とする。ここでn-gram列において、同一のn-gramが複数あるとき、それらを1つだけにしてもよい。
【０２３２】
n-gram列における各n-gramで文字列ベクトルデータベースを検索し、対応する文字列ベクトルを取得する。検索がヒットしたn-gramの列をp1, p2,・・・,ptとし、各pr（1≦r≦t）の文字列ベクトルをv(pr)とする。
【０２３３】
【数４】
0005513985.tif 000005
または、
v(pr)（1≦r≦t）の重心である
【０２３４】
【数５】
0005513985.tif 000006
または、
【０２３５】
【数６】
0005513985.tif 000007
を長さ1に正規化したベクトル、のうちのいずれかを算出し、入力文書の文書ベクトルとて出力する。どの方法で文書ベクトルを算出するかは予め設定しておくことができる。
【０２３６】
文字列ベクトルデータベースとして、図9、図26、図32、図46のような、行に対応する文字列が2-gramの文字列ベクトルデータベースをとった場合、図50の入力文書から、図51の2-gram列を抽出し、図51の各2-gramで文字列ベクトルデータベースを検索して、対応する文字列ベクトルを取得し、それらのベクトル群に上記の式を適用することにより、入力文書の文書ベクトルを生成する。
【０２３７】
＜実施例4-2＞
本実施例では、文字列ベクトルデータベースとして、実施例1-2の図20か、または、実施例2-2の図37か図43、または、実施例3-2の図47のような、行に対応する文字列が単語及びn-gramの文字列ベクトルデータベースをとる。このとき、入力文書の文書ベクトルを以下のようにして求める。
【０２３８】
入力文書を形態素解析し、形態素解析結果中の終止形で、必要語フラグが1となっているものの列を、入力文書における単語列とする。ここで単語列において、同一の単語が複数あるとき、それらを1つだけにしてもよい。
【０２３９】
単語列における各単語で文字列ベクトルデータベースを検索し、対応する文字列ベクトルを取得する。検索がヒットした単語の列をp1, p2,・・・,ptとし、各pr（1≦r≦t）の文字列ベクトルをv(pr)とする。
【０２４０】
【数７】
0005513985.tif 000008
または、
v(pr)（1≦r≦t）の重心である
【０２４１】
【数８】
0005513985.tif 000009
または、
【０２４２】
【数９】
0005513985.tif 000010
を長さ1に正規化したベクトル、のうちのいずれかを算出し、入力文書の文書ベクトルとて出力する。
【０２４３】
単語列における単語で、文字列ベクトルデータベースを検索してもヒットしなかったものに対しては、該単語を入力文書として、実施例4-1の処理を行うことにより該単語の文字列ベクトルを生成してもよい。すなわち、該単語におけるn-gram列を抽出し、該n-gram列の各n-gramで文字列ベクトルデータベースを検索し、得られた文字列ベクトルを合成することにより該単語の文字列ベクトルを生成する。
【０２４４】
このように、検索してもヒットしなかった単語と生成したその文字列ベクトルを、上記の単語列、文字列ベクトル列に加えて、入力文書ベクトルを生成してもよい。
【０２４５】
文字列ベクトルデータベースとして、図20、図37、図43、図47のような、行に対応する文字列が単語及び1-gramの文字列ベクトルデータベースをとった場合、図52の入力文書を形態素解析して図53の形態素解析結果を取得し、図53の形態素解析結果から図54の単語列を抽出し、図54の各単語で文字列ベクトルデータベースを検索する。
【０２４６】
単語「紅茶」，「飲む」はヒットするので、対応する文字列ベクトルを取得する。
【０２４７】
単語「シカゴ」はヒットしないので、該単語を入力文書として、図55の1-gram列を抽出し、図55の各1-gramで文字列ベクトルデータベースを検索し、得られた文字列ベクトルを合成することにより単語「シカゴ」の文字列ベクトルを生成する。
【０２４８】
図54の各単語の文字列ベクトルを合成することにより、入力文書の文書ベクトルを生成する。
【０２４９】
これまでに説明した各文字列ベクトル生成装置は、例えば、ＣＰＵやメモリ、ハードディスク等を備えた一般的なコンピュータに、各実施例で説明した処理手段に対応するプログラムを実行させることにより実現可能である。当該プログラムは、可搬メモリ等のコンピュータ読み取り可能な記録媒体に記録して配布してもよいし、ネットワーク上のサーバからダウンロードすることもできる。このように、文字列ベクトル生成装置をコンピュータで実現する場合、テキストや文字列等の処理データは、メモリ等に記憶され、プログラムの命令に従って、適宜、ＣＰＵにより読み出されて処理されることになる。
【０２５０】
また、これまでに説明した各文字列ベクトル生成装置は、１つのコンピュータで実現してもよいし、複数のコンピュータを、ネットワークを介して接続することにより実現してもよい。例えば、101〜104で示される格納部のうちの１つ又は複数を外部のサーバ装置として構成することは、文字列ベクトル生成装置を複数のコンピュータで実現する場合の一例である。
【産業上の利用可能性】
【０２５１】
本発明は、文字列の意味表現である文字列ベクトルを生成する技術に適用可能である。
【０２５２】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【０２５３】
100、200、301、302、401、402  文字列ベクトル生成装置
11  文字列集合抽出部
12  第１行列生成部
13  特異値分解部
22  成分番号付与部
23  第2行列生成部
101  テキスト格納部
102  文字列集合格納部
103  文字列ベクトル格納部
104  文書情報格納部
14  文書ベクトル生成部
【図１】
0005513985.tif 000011
【図２】
0005513985.tif 000012
【図３】
0005513985.tif 000013
【図４】
0005513985.tif 000014
【図５】
0005513985.tif 000015
【図６】
0005513985.tif 000016
【図７】
0005513985.tif 000017
【図８】
0005513985.tif 000018
【図９】
0005513985.tif 000019
【図１０】
0005513985.tif 000020
【図１１】
0005513985.tif 000021
【図１２】
0005513985.tif 000022
【図１３】
0005513985.tif 000023
【図１４】
0005513985.tif 000024
【図１５】
0005513985.tif 000025
【図１６】
0005513985.tif 000026
【図１７】
0005513985.tif 000027
【図１８】
0005513985.tif 000028
【図１９】
0005513985.tif 000029
【図２０】
0005513985.tif 000030
【図２１】
0005513985.tif 000031
【図２２】
0005513985.tif 000032
【図２３】
0005513985.tif 000033
【図２４】
0005513985.tif 000034
【図２５】
0005513985.tif 000035
【図２６】
0005513985.tif 000036
【図２７】
0005513985.tif 000037
【図２８】
0005513985.tif 000038
【図２９】
0005513985.tif 000039
【図３０】
0005513985.tif 000040
【図３１】
0005513985.tif 000041
【図３２】
0005513985.tif 000042
【図３３】
0005513985.tif 000043
【図３４】
0005513985.tif 000044
【図３５】
0005513985.tif 000045
【図３６】
0005513985.tif 000046
【図３７】
0005513985.tif 000047
【図３８】
0005513985.tif 000048
【図３９】
0005513985.tif 000049
【図４０】
0005513985.tif 000050
【図４１】
0005513985.tif 000051
【図４２】
0005513985.tif 000052
【図４３】
0005513985.tif 000053
【図４４】
0005513985.tif 000054
【図４５】
0005513985.tif 000055
【図４６】
0005513985.tif 000056
【図４７】
0005513985.tif 000057
【図４８】
0005513985.tif 000058
【図４９】
0005513985.tif 000059
【図５０】
0005513985.tif 000060
【図５１】
0005513985.tif 000061
【図５２】
0005513985.tif 000062
【図５３】
0005513985.tif 000063
【図５４】
0005513985.tif 000064
【図５５】
0005513985.tif 000065