(57)【要約】      （修正有）【課題】3CosAddでは無視されるベクトルのノルムの値も判断材料として実用的な計算速度で利用できるようにする方法を提供する。【解決手段】3CosAddに、高速に計算できるベクトルのノルムを表現する項を追加し、ほぼ同じ計算速度でベクトルのノルムについても評価できる3CosScaleとして提供する。【選択図】なし【特許請求の範囲】
【請求項１】
単語を数値のベクトルで表現する場合に，ベクトルのノルム長も実用的な計算時間で評価可能とする3CosScaleの方法およびアルゴリズムおよび，その実装．
【請求項２】
3CosScaleアルゴリズムにおいてテストセットに含まれる単語のみを考慮することで高速化する方法およびアルゴリズムおよび，その実装．
【請求項３】
図１の3CosScaleアルゴリズムのforループを行列の積として計算する方法およびアルゴリズムおよび，その実装．
【請求項４】
図１の3CosScaleアルゴリズムのforループを並列計算として計算する方法およびアルゴリズムおよび，その実装．
【請求項５】
分散表現を計算する時に必要となるニューラルネットワークなどのパラメータ調節を3CosScaleを利用する方法およびアルゴリズムおよび，その実装．
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は自然言語処理において，単語をword2vecやGloVeやSingularなどを利用して分散表現，単語ベクトル，ベクトル表現などと呼ばれる数値ベクトルによる表現をする場合に，
より良いベクトル表現を選択するための基準として使われてきた3CosAddの拡張である．
本発明は3CosAddでは無視されるベクトルのノルムの値も判断材料として実用的な計算速度で利用できるようにする方法である． 
【背景技術】
【０００２】
近年，word2vecやGloVeやSingularなどの単語を数値のベクトルで表現する自然言語処理方法が注目されている．
このような単語をword2vecやGloVeやSingularなどを利用しての数値ベクトルで表現する方法は，まとめて分散表現または単語ベクトル表現または単にベクトル表現とも呼ばれる．
word2vecやGloVeやSingularなどの単語ベクトル表現の中でどれが現在考えている応用に適切であるかを判定する基準に3CosAddと呼ばれる基準がある．
3CosAddは単語ベクトル表現のベクトルのノルムの値を1に正規化してから比較する方法である．
そのためノルムに重要な情報が含まれていても無視してしまう問題があった．
単語ベクトル表現は主成分分析の一種であるため，主成分の重要度に相当するノルムの値を1に正規化してしまうのは非常に重大な問題である．
例えば第1主成分と第100主成分が同じ重みで評価されてしまうといった事がおこりうる．
Singularの様な特異値分解や固有値分解に基づく手法では，ベクトルのノルムの値を1に正規化するのは特異値や固有値の値を無視することに相当する．
主成分の重要度を決める固有値を無視するのも非常に重大な問題である．
また特異値分解や固有値分解に基づかない手法においても，情報を欠損した状態で比較する手法であるため正確性に問題があった．
例えば特異値分解や固有値分解に基づかない方法であるword2vecで10次元の単語ベクトル表現を計算する場合，ベクトルのノルムの値を1に正規化してから3CosAddで比較すると，10次元の情報のうち1次元が捨てられて実質的に9次元の情報しか活用されない．
本発明は3CosAddでは無視されるベクトルのノルムの値も判断材料として実用的な計算速度で利用できるようにする方法である． 
【０００３】
次に3CosAddについて具体的に説明する．
単語ベクトル表現は次の関係式を可能なかぎり正確に成り立たせる表現が理想的とされている．
【０００４】
(数1) 
(queenのベクトル表現) ＝ (kingのベクトル表現) - (manのベクトル表現) + (womanのベクトル表現)
【０００５】
すなわち次式の誤差d(x)のノルム|d(x)|を最小にする単語xがqueenと一致するのが最も良いベクトル表現である．
【０００６】
(数2)
x= arg min  x | d(x) |
= arg min  x |(kingのベクトル表現) - (manのベクトル表現) +  (womanのベクトル表現) -  (xのベクトル表現)  |
【０００７】
これ以外にも
http://download.tensorflow.org/data/questions-words.txt
には，1万以上の単語の組み合わせが評価基準として提供されている．
例えば以下のようなものが提供されている．
【０００８】
(数3)
(Berlinのベクトル表現) ＝ (Tokyoのベクトル表現) - (Japanのベクトル表現) + (Germanyのベクトル表現)
(sonのベクトル表現) ＝ (daughterのベクトル表現) - (sheのベクトル表現) + (heのベクトル表現)
【０００９】
これら様々な単語の組み合わせについて，まとめて以下のように a, b, a', b' を使って表すこととする．
【００１０】
(数4)
( b' のベクトル表現) ＝ ( a' のベクトル表現) - ( a のベクトル表現) + ( b のベクトル表現)
【００１１】
様々な単語の組み合わせについて推定された単語xと正解の単語b'が一致する割合，すなわち正解率を以下で表す．
【００１２】
(数5)
P(b'=x)= P(b'= arg min  x   | ([x]のベクトル表現) - ([a']のベクトル表現) + ([a]のベクトル表現) - ([b]のベクトル表現) | )
【００１３】
単語zのベクトル表現をv  zで表すと以下のようになる．
【００１４】
【数６】
2019215756.tif 000002
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】Omer Levy and Yoav Goldberg. Linguistic regularities in sparse and explicit word representations. In Proc in CoNLL, pages 171-180, 2014.
【非特許文献２】H. Huda et al.: An Optimality Proof for the PairDiff operator for Representing Relations between Words. https://www.researchgate.net/publication/319952814_An_Optimality_Proof_for_the_PairDiff_operator_for_Representing_Relations_between_Words
【発明の概要】
【発明が解決しようとする課題】
【００１６】
単語を数値のベクトルで表現する単語ベクトル表現を比較評価する場合に，今まで計算時間の関係で無視されてきたベクトルのノルム長も実用的な計算時間で評価可能とする3CosScale．
【課題を解決するための手段】
【００１７】
従来法である3CosAddに実用的な計算時間で計算できるベクトルのノルムを表現する項を追加する3CosScale．
【発明の効果】
【００１８】
単語を数値のベクトルで表現する方法として従来はあまり有効とされていなかった方法，例えばSinglarなどの方法が実は有効である可能性が示せる．
【００１９】
非特許文献2に示されているように3CosAddの応用としてPairDiffという技術があるが，3CosScaleについても類似した技術を構成できる．
【図面の簡単な説明】
【００２０】
【図１】図1は本特許のアルゴリズムを示した図である．ここで行列のj列のベクトルを取り出す操作をnumpyと同様に [:,j] で表した．
【発明を実施するための形態】
【００２１】
技術背景0007で述べたような多数の組み合わせについて，数式6のxとb'の一致率すなわち正解率を計算することで，
単語ベクトル表現の良さを評価できる．
全ての単語のベクトルを列ベクトルとして並べた行列Vを使えば
以下の関係を導出できる．
【００２２】
【数７】
2019215756.tif 000003
【００２３】
ここでeiはi方向の単位ベクトルである．
行列とベクトルの転置をtで表した．
この導出では，最小化したいxと関係ない項を削除し，
xと関係ある要素 ex
と，xと関係ない要素を分離する式変形を行なっている．
最後の式変形では
ex = ex * ex
という関係を利用した．
この関係式から ex
とxと関係ない要素をくくり出したベクトルとの内積として数式6の問題を記述できることがわかる．
この関係式を利用しないで，ノルムを無視しない計算をすると計算時間は100倍以上に増加するため，
技術背景0007で述べたような多数の組み合わせについて計算すると10時間近い計算時間が必要となる場合がある．
本発明の3CosScaleと先行技術である3CosAddの計算時間はほぼ同程度である．
しかし先行技術である3CosAddでは，この関係式に気がつかなかったために，ノルムを無視して計算時間の短縮をしたと考えられる．
この導出でくくり出したベクトルをwで表すと，
数式6の問題は以下となる．
【００２４】
【数８】
2019215756.tif 000004
【００２５】
すなわちベクトルwの最小要素の単語xとb'が一致している割合を計算する問題となる．ここでベクトルwは以下で計算するxに依存しない定数ベクトルである．
【００２６】
【数９】
2019215756.tif 000005
【００２７】
全ての単語と全ての組み合わせ  b'= a'  -a + b についてこの正解率を計算するのは計算時間がかかるため，
このようにベクトルの最小要素を探す問題に変換することで実用的な計算時間でベクトル表現の評価をすることが可能となる．
【００２８】
ベクトルwの計算式は2つの項から構成されている．第1項は行列Vの二乗である．第2項はこの二乗の対角成分のみを取り出して並べたものである．
全ての単語のベクトルのノルムが長さ1に正規化されている場合は第2項は全ての要素が同じ1/2の値のベクトルとなる．
そのため第2項はxに依存しない項となり最小要素xの計算に影響しない．
そのためノルムが長さ1に正規化されている場合は第2項を無視して第1項のみで計算ができる．
この方法は3cosAddと呼ばれている非特許文献1で提案されている手法である．
【００２９】
全ての単語のベクトルのノルムが長さ1に正規化されていない場合には，ベクトルwの計算式の第2項も含めて計算した評価が必要となる．
また，第2項は第1項で計算する行列の対角成分を取り出しただけのものであり，計算量はほとんど増加しない．
この方法を3CosScaleと呼ぶこととする．
図１に具体的な計算手順を示す．
【００３０】
よく利用される状況として，ベクトル表現のベクトルが100次元，単語の数が100,000個，テストセットの数が10,000個の場合を考える．
この場合の3CosScaleの計算時間を単純な計算手順と比較してみると次のようになる．
単純に全てのテストセットについて正解か不正解かを数えると，
必要となる四則演算の数は約 100*100,000*10,000 = 10の11乗 回となる．
ところで行列Vの二乗は様々な場面で必要な量であり，既に計算済みな場合が多い．
例えば単語ベクトル表現を計算するアルゴリズム内で利用されている場合もある．
そのため行列Vの二乗は計算済みな場合を考える．
この時に図１の3CosScaleアルゴリズムで計算が必要なのはforループの中だけである．
forループの中で必要となる四則演算の数は100,000*10,000  = 10の9乗 回となる．
これは単純な計算方法の1/100の計算時間である．
この計算時間の問題があるため，従来はベクトルのノルムを無視して高速に計算する方法が採用されてきた．
しかし3CosScaleを使えば従来の方法とほとんど同程度の計算量でベクトルのノルムを評価できる．
【００３１】
よく利用される状況として，ベクトル表現のベクトルが100次元，単語の数が100,000個，テストセットの数が10,000個の場合を考えたが，
テストセットの数が10,000個の場合にテストセットに含まれる単語はテストセットの数と同じ約10,000個程度である．
つまりテストセットに含まれる単語のみを考慮して評価すると単語の数が1/10となり，3CosScaleの計算は少なくとも10倍以上高速となる．
具体的には行列Vは全単語を考慮すると100行100,000列の行列であるが，テストセットに含まれる単語のみを考慮する場合は100行10,000列の行列となる．
3CosScaleも3CosAddも想定している単語と一致しているかどうかを判定する基準であるため，それ以外の単語は何でも良い．
このように想定している単語のみを考慮する100行10,000列の行列を使った評価は高速であり，評価結果の傾向も全単語を利用した場合とほぼ同じである．
【００３２】
数式9と図1の3CosScaleアルゴリズムを比較するとわかるように，行列のj列のみを取り出す演算は，単位ベクトル ejとの内積と等価である．
この単位ベクトルに相当する位置に1の値を持つ疎行列Gを考えると，
図1の3CosScaleアルゴリズムのforループの部分は行列Vの二乗と疎行列Gの積で計算することができる．
行列の積は並列化など様々な高速な演算方法が既に提案されており，forループの部分を行列の積で計算するとさらに高速化することができる．
forループの部分をpythonのforループで実装した場合と比べてscipy libraryの行列積を利用して計算する場合は少なくとも3倍以上は高速となる．
3CosScaleには，このように主要な計算を行列計算として実装できるという特徴がある．
【００３３】
図１の3CosScaleアルゴリズムのforループ内の処理はほぼ独立な処理であり，容易に並列計算できる．
3CosScaleには並列計算しやすいという特徴もある．
【００３４】
非特許文献1などで3CosAddのpython言語による実装が多数存在するが，3CosScaleは3CosAddに項を追加したものであるため
3CosAddのプログラムコードにわずかな変更をすることで実装できる．
【実施例１】
【００３５】
3CosAddの実装が
https://bitbucket.org/omerlevy/hyperwords
で公開されているが，この実装に数式9の第二項を追加することで3CosScaleは実装できる．
【産業上の利用可能性】
【００３６】
word2vecやGloVeやSingularなどの単語ベクトル表現を計算する手法のパラメータ調節の基準として利用可能である．
【図１】
2019215756.tif 000006