(57)【要約】【課題】翻訳機の出力文内のクラストークンと、入力文のクラストークンとがともに複数あるとき、両者の対応を信頼性高く決定する装置を提供する。【解決手段】この装置は、入力文の第１のクラストークンを抽出する第１のクラストークン抽出部７５０と、出力文の第２のクラストークンを抽出する第２のクラストークン抽出部７５２と、第１及び第２のクラストークンの１対１対応として可能な対応関係の各々につき、当該対応関係を構成する、互いに対応する第１及び第２のクラストークンの間の関連度に基づいて、当該対応関係の適合度スコアを算出するスコア算出部７７２及び７７４と、スコアが最も高くなる対応関係を選択し、当該選択された対応関係にしたがって第１及び第２のクラストークンを対応づけるトークン対応付け部７７６とを含む。【選択図】図２０
2019057244.tif 000002
【特許請求の範囲】
【請求項１】
入力文の各トークンと当該入力文に対する翻訳結果である出力文の各トークンとの関連度を表す関連度情報を各トークンの組み合わせに対して出力可能な翻訳装置とともに用いられ、前記入力文に含まれる複数個の第１のクラストークンと、前記出力文に含まれる複数個の第２のクラストークンとの対応を決定するクラストークン対応決定装置であって、前記第１のクラストークンと前記第２のクラストークンとは同数であり、
前記入力文の複数個の前記第１のクラストークンを抽出する第１のクラストークン抽出手段と、
前記出力文の複数個の前記第２のクラストークンを抽出する第２のクラストークン抽出手段と、
前記複数個の前記第１のクラストークンと、前記複数個の前記第２のクラストークンとの１対１対応として可能な対応関係の各々について、当該対応関係を構成する、互いに対応する第１及び第２のクラストークンの間の関連度に基づいて、当該対応関係の適合度を表すスコアを算出するためのスコア算出手段と、
前記スコアが予め定められる条件を充足する対応関係を選択し、当該選択された対応関係にしたがって前記複数個の前記第１のクラストークンと前記複数個の前記第２のクラストークンとを対応づけるためのトークン対応付け手段とを含む、クラストークン対応決定装置。
【請求項２】
前記スコア算出手段は、前記可能な対応関係の各々について、前記入力文と前記出力文とにおいて、各クラストークンを中心とする所定範囲内のトークン同士の関連度を用いて当該対応関係の前記スコアを決定するためのスコア決定手段を含む、請求項１に記載のクラストークン対応決定装置。
【請求項３】
前記スコア決定手段は、前記可能な対応関係の各々について、前記入力文と前記出力文とにおいて、各クラストークンを中心とする所定範囲内のトークン同士の関連度に対する加重平均により当該対応関係の前記スコアを決定するための加重平均算出手段を含む、請求項２に記載のクラストークン対応決定装置。
【請求項４】
前記加重平均算出手段は、前記可能な対応関係の各々につき、前記入力文と前記出力文とにおいて、各クラストークンを中心とする所定範囲内のトークン同士の関連度の平均値により前記スコアを決定するための平均値算出手段を含む、請求項３に記載のクラストークン対応決定装置。
【請求項５】
前記加重平均の重みは、各トークン間の関連度の大きさに対する増加関数により決定される、請求項３に記載のクラストークン対応決定装置。
【請求項６】
前記加重平均算出手段は、前記所定範囲内のトークン間の関連度の大きさの順位が上位の所定個数のトークン同士の関連度の平均により前記スコアを算出する、請求項５に記載のクラストークン対応決定装置。
【請求項７】
前記所定範囲は、前記入力文と前記出力文との双方において、各クラストークンを中心とする互いに等しい個数のトークンからなる範囲である、請求項２〜請求項６のいずれかに記載のクラストークン対応決定装置。
【請求項８】
前記スコア算出手段は、前記複数個の前記第１のクラストークンと、前記複数個の前記第２のクラストークンとの１対１対応として可能な対応関係の各々について、当該対応関係を構成する、互いに対応関係にある第１及び第２のクラストークンの間の関連度の合計により当該対応関係のスコアを算出するための手段を含む、請求項１に記載のクラストークン対応決定装置。
【請求項９】
前記トークン対応付手段は、前記スコアが最大となる対応関係を選択し、当該選択された対応関係にしたがって前記複数個の第１のクラストークンと前記第２のクラストークンとを対応づけるための手段を含む、請求項１〜請求項８の何れかに記載のクラストークン対応決定装置。
【請求項１０】
関連度を表す関連度情報を各トークンの組み合わせに対して出力可能な翻訳装置を用い、コンピュータにより、前記入力文に含まれる複数個の第１のクラストークンと、前記出力文に含まれる複数個の第２のクラストークンとの対応を決定するクラストークン対応決定方法であって、前記第１のクラストークンと前記第２のクラストークンとは同数であり、
コンピュータが、前記入力文の複数個の前記第１のクラストークンを抽出する第１のクラストークン抽出ステップと、
コンピュータが、前記出力文の複数個の前記第２のクラストークンを抽出する第２のクラストークン抽出ステップと、
コンピュータが、前記複数個の前記第１のクラストークンと、前記複数個の前記第２のクラストークンとの１対１対応として可能な対応関係の各々について、当該対応関係を構成する、互いに対応する第１及び第２のクラストークンの間の関連度に基づいて、当該対応関係の適合度を表すスコアを算出するスコア算出ステップと、
コンピュータが、前記スコアが予め定められる条件を充足する対応関係を選択し、当該選択された対応関係にしたがって前記複数個の前記第１のクラストークンと前記複数個の前記第２のクラストークンとを対応づけるトークン対応付けステップとを含む、クラストークン対応決定方法。
【請求項１１】
請求項１〜請求項９の何れかに記載のクラストークン対応決定装置としてコンピュータを機能させる、コンピュータプログラム。
【請求項１２】
請求項１１に記載のコンピュータプログラムを記録した、コンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は機械翻訳に関し、特に、単語をクラス化して翻訳する際の翻訳精度を向上させるための技術に関する。
【背景技術】
【０００２】
これまでの機械翻訳の主流は、大量の対訳を集めたコーパスを統計的に処理して得られた、いわゆる翻訳モデル及び言語モデル等を用いるフレーズベース統計機械翻訳（Ｐｈｒａｓｅ―ｂａｓｅｄ  Ｍａｃｈｉｎｅ  Ｔｒａｎｓｌａｔｉｏｎ：ＰＢＭＴ）であった。ＰＢＭＴでは、クラス化と呼ばれる処理の有効性が認められている。これは、入力文中のトークン（翻訳時の最小単位。単語等）のうち、「数字」「地名」「人名」といった、同一カテゴリに属する単語であって、種類が非常に多くかつ重要な情報を持つトークンを抽象化（クラス化）したシンボルに置き換えて翻訳する処理である。例えば数字については「＜ｎｕｍ＞」、地名については「＜ｌｏｃ＞」等のシンボルが使用される。こうしたシンボルを本明細書ではクラストークンと呼ぶ。入力文中のクラストークンは他のトークンの翻訳処理中には翻訳対象から除外される。したがって、翻訳後の出力文中にはクラストークンが残る。出力文中のクラストークンは、他トークンの翻訳完了後に、入力時の表現、辞書等の外部リソース、及び事前に定めたルール等にしたがって別途翻訳される。
【０００３】
一般に、「数字」「地名」「人名」といったトークンは種類が非常に多く、ほとんど限りがないため、個々のトークンがコーパス中に出現する頻度は他のトークンと比較して著しく低い（低頻度トークン）。そのため、コーパスを統計的に処理してモデルの学習を行ったときは、これら低頻度トークンについて高い精度で翻訳することが困難である。にもかかわらず、これらの低頻度トークンの多くは重要な情報を持つ。そのため、低頻度トークンを正しく翻訳できないと翻訳の精度が著しく低くなるという問題がある。クラストークンを用いることによって、同じクラスに属する低頻度トークンを１つのクラストークンに集約することが可能となる。その結果、あるクラストークンのコーパス中における出現頻度は高くなり、統計的モデルを用いた翻訳計算において、これら低頻度トークンの翻訳を高精度化し、かつ高速化できる。こうした効果から、クラストークンは、ＰＢＭＴにおいて扱える語彙を広くするという効果を持つ。
【０００４】
一方、近時、いわゆる深層学習による学習を行ったニューラルネットワークによる機械翻訳（Ｎｅｕｒａｌ  Ｍａｃｈｉｎｅ  Ｔｒａｎｓｌａｔｉｏｎ：以下「ＮＭＴ」と呼ぶ。）がＰＢＭＴを凌駕する性能を示すとして注目されている。ＮＭＴも統計をベースとした機械翻訳ではあるが、翻訳モデルを用いるのではなく、翻訳元入力文（以下単に「入力文」と呼ぶ。）から翻訳先出力文（以下単に「出力文」と呼ぶ。）への翻訳処理を、ｅｎｄ−ｔｏ−ｅｎｄで直接ニューラルネットワークに学習させる点が異なる。
【０００５】
ＮＭＴは、ＰＢＭＴと比較して自然な出力文が得られるという特長がある。しかしその反面、ハードウェアリソース及び計算時間等の制約から、ＮＭＴではＰＢＭＴと比較して語彙サイズをＰＢＭＴより小さくせざるを得ないという欠点がある。こうした欠点を解消するために、ＰＢＭＴと同様、ＮＭＴにおいてもクラストークンを用いることが有効であると期待され、開発が望まれている。
【０００６】
しかしＮＭＴにおいてクラストークンを用いる上では以下のような問題がある。
【０００７】
図１は、後掲の非特許文献１に記載されたＮＭＴによる翻訳の概要を示す。図１を参照して、このＮＭＴ５０では、入力文６０に含まれるすべてのトークン（離散シンボル）を内部的に連続値ベクトル７０〜７８からなる連続値ベクトルの系列６２に変換し、この系列６２に対する複数回の写像によって固定長の連続値ベクトルからなる特徴ベクトル６４を得る。この特徴ベクトル６４が入力文６０の文意を表すものと考えられる。特徴ベクトル６４に対してさらに写像を行うことで翻訳先言語のトークンに対応する連続値ベクトル８０〜９０からなる連続値ベクトルの系列６６を得る。この系列６６の各連続値ベクトルから、対応する出力文６８の各トークンが得られる。
【０００８】
この方式では、連続値ベクトルへの変換をすべてのトークンに実行することで、文意に相当する固定長の特徴ベクトル６４を得て翻訳を行う。そのため、上記したようなクラストークンだけを翻訳せず後で置き換えるという操作を考えることができない。又、入力文６０を連続値ベクトルの系列６２に変換するため、仮にクラストークンを採用したとしても、入力文６０側のクラストークン数と、出力文６８側のクラストークン数とが一致しないという事態が発生してしまう。そのため、クラストークンを用いることによって低頻度トークンの訳出を正確に行うことができず翻訳が失敗する危険性が生じる。
【０００９】
一方、後掲の非特許文献２には、図２に示すようなアテンションモデルと呼ばれるＮＭＴが開示されている。図２を参照して、アテンションモデルのＮＭＴ１００では、入力文６０を連続値ベクトルの系列６２に変換するところまでは図１と同様だが、入力文６０の各トークン（系列６２の各連続値ベクトル）と、出力文１４０の各トークンに対応する系列１１２の各連続値ベクトル１２０〜１３０とを関連付ける「アテンション」と呼ばれる関連度スコアを計算する。図２では、この関連度スコアによる連続値ベクトル間の関連の強さをアテンション層１１０に示す各矢印の太さで表している。この関連度スコアによって、入力文６０にクラストークンが含まれている場合、出力文１４０に対応するクラストークンが訳出される可能性が高くなると考えられる。
【００１０】
しかしそれでも、両者の間で対応するクラストークンの数が一致する保証はない。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】Sutskever, Vinyals, Le, “Sequence to Sequence Learning with Neural  Networks”, in Proceedings of NIPS,2014.
【非特許文献２】Bahdanau, Cho, Bengio, “Neural Machine Translation by Jointly  Learning to Align and Translate,” in Proceedings of ICLR, 2015.
【非特許文献３】Luong, Sutskever, Le, Vinyals, Zaremba,“Addressing the Rare Word Problem in Neural Machine Translation”, in Proceedings of ACL, 2015.
【非特許文献４】Tu, Lu, Liu, Liu, Li, “Modeling Coverage for Neural Machine Translation”, in Proceedings of ACL, 2016.
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ＰＢＭＴの場合にも、原理的には翻訳の前後でクラストークンの数が一致しないという状況が起こり得る。ＰＢＭＴの実装方法にもよるが、例えば学習データの質が低く、翻訳元言語のクラストークンを翻訳先言語で同じクラストークンへ正しく翻訳するために使用される重みが小さくなってしまう、というような場合が考えられる。しかし、学習データの質が十分であればそうした問題が生じる可能性はあまり考えられない。
【００１３】
これと対照的に、ＮＭＴの場合には、上記したように翻訳前後のクラストークンの数が一致するという保証が全くない。そして、クラストークンの数を一致させることはほぼ不可能と考えられてきた。これは、ＮＭＴの内部での処理が一種のブラックボックス化されており、クラストークンの翻訳を制御することが難しいことに起因する。つまりこの問題は、ＮＭＴにおいて初めて顕現した問題ということができる。
【００１４】
しかし、上記したようにクラストークンを利用できれば、ＮＭＴの性能を更に高めることが期待できる。また、ＰＢＭＴでも同様の問題が生じ得るとすれば、ＰＢＭＴについても同様に対処できれば好ましい。
【００１５】
また、仮に出力文に含まれる特定クラスのクラストークンの数が、入力文の対応するクラストークンの数と一致しているとしても、それらが複数個あるときには、入力文の各クラストークンが、出力文のどのクラストークンに対応するかを決定しなければ最終的な出力文を得ることができない。
【００１６】
これを解決しようとする技術が、後掲の非特許文献３において提案されている。非特許文献３では、ＮＭＴの入力文内のクラストークンと出力文のクラストークンとを同定できる翻訳モデルを構築するために、翻訳モデルの学習に用いられる対訳コーパスについて、対訳中の単語をクラス化し、正しく対応するクラストークン同士の間の関係が分かるようにしておくという方法が提案されている。そのために非特許文献３では、原文中に現れる各クラスのクラストークンにクラスごとの通し番号を振り、翻訳文中において対応するクラストークンにも同じ通し番号を振り、翻訳モデルの学習データとする。
【００１７】
しかし、翻訳モデルの学習では、学習データに出現しない単語は未知語となりＮＭＴでは扱うことができなくなる。非特許文献３により提案された方法では、学習の際に対訳コーパスの１文（１対訳）に出現する同一クラスのクラストークンの最大出現数が、翻訳時に扱えるそのクラスのクラストークン数の上限となってしまう（それ以上の数のクラストークンが未知語として扱われる。）という問題がある。また、学習では極端に出現頻度が低い単語が必ず翻訳時に扱えるという保証もない。そのため、実質的に使用できるクラストークンの数はさらに小さくなる可能性もある。１文の中で扱うことができるクラストークン数に上限が出来てしまうと、クラストークンの周辺の訳出に関する翻訳モデルがスパースになってしまい、翻訳の精度が下がるという問題がある。
【００１８】
一方、前記したようにアテンションモデルを用いたＮＭＴでは、入力文のどの部分に注目して出力の単語を選択するかという情報（アテンション）を保持しながら翻訳結果の生成を行う。このアテンションを翻訳の入出力間における擬似的な単語対応と捉えることもできるが、アテンションが広く分散してしまったり、本来の単語ではない単語の方に強いアテンションがかかったりする場合がある。そのために、出力文中のクラストークンに対し、単純にそのクラストークンに対するアテンションが最も強い同種のクラストークンを入力文から選択すると、クラストークンの対応が誤ってしまう可能性が生じる。このような誤った対応付けにより、出力文における同種のクラストークンの訳出の位置が入れ替わってしまうというような問題が起きる。
【００１９】
したがって、出力文に含まれるクラストークンの数が一致することを保証するクラストークン訳出保証装置及び方法、並びにそのためのコンピュータプログラム（以下単に「プログラム」と呼ぶ。）を提供することが望ましい。
【００２０】
また、出力文内のあるクラスのクラストークンと、入力文の同じクラスのクラストークンとがともに複数あるとき、両者の対応を信頼性高く決定するトークン対応決定装置及び方法、並びにそのためのプログラムを提供することが望ましい。
【課題を解決するための手段】
【００２１】
本発明の第１の局面に係るクラストークン対応決定装置は、入力文の各トークンと当該入力文に対する翻訳結果である出力文の各トークンとの関連度を表す関連度情報を各トークンの組合せに対して出力可能な翻訳装置とともに用いられ、入力文に含まれる複数個の第１のクラストークンと、出力文に含まれる複数個の第２のクラストークンとの対応を決定する。第１のクラストークンと第２のクラストークンとは同数である。このクラストークン対応決定装置は、入力文の複数個の第１のクラストークンを抽出する第１のクラストークン抽出手段と、出力文の複数個の第２のクラストークンを抽出する第２のクラストークン抽出手段と、複数個の第１のクラストークンと、複数個の第２のクラストークンとの１対１対応として可能な対応関係の各々について、当該対応関係を構成する、互いに対応する第１及び第２のクラストークンの間の関連度に基づいて、当該対応関係の適合度を表すスコアを算出するためのスコア算出手段と、スコアが予め定められる条件を充足する対応関係を選択し、当該選択された対応関係にしたがって複数個の第１のクラストークンと複数個の第２のクラストークンとを対応づけるためのトークン対応付け手段とを含む。
【００２２】
好ましくは、スコア算出手段は、可能な対応関係の各々について、入力文と出力文とにおいて、各クラストークンを中心とする所定範囲内のトークン同士の関連度を用いて当該対応関係のスコアを決定するためのスコア決定手段を含む。
【００２３】
より好ましくは、スコア決定手段は、可能な対応関係の各々について、入力文と出力文とにおいて、各クラストークンを中心とする所定範囲内のトークン同士の関連度に対する加重平均により当該対応関係のスコアを決定するための加重平均算出手段を含む。
【００２４】
さらに好ましくは、加重平均算出手段は、可能な対応関係の各々につき、入力文と出力文とにおいて、各クラストークンを中心とする所定範囲内のトークン同士の関連度の平均値によりスコアを決定するための平均値算出手段を含む。
【００２５】
好ましくは、加重平均の重みは、各トークン間の関連度の大きさに対する増加関数により決定される。
【００２６】
より好ましくは、加重平均算出手段は、所定範囲内のトークン間の関連度の大きさの順位が上位の所定個数のトークン同士の関連度の平均によりスコアを算出する。
【００２７】
さらに好ましくは、所定範囲は、入力文と出力文との双方において、各クラストークンを中心とする互いに等しい個数のトークンからなる範囲である。
【００２８】
好ましくは、スコア算出手段は、複数個の第１のクラストークンと、複数個の第２のクラストークンとの１対１対応として可能な対応関係の各々について、当該対応関係を構成する、互いに対応関係にある第１及び第２のクラストークンの間の関連度の合計により当該対応関係のスコアを算出するための手段を含む。
【００２９】
より好ましくは、トークン対応付手段は、スコアが最大となる対応関係を選択し、当該選択された対応関係にしたがって複数個の第１のクラストークンと第２のクラストークンとを対応づけるための手段を含む。
【００３０】
本発明の第２の局面に係るクラストークン対応決定方法は、入力文の各トークンと当該入力文に対する翻訳結果である出力文の各トークンとの関連度を表す関連度情報を各トークンの組合せに対して出力可能な翻訳装置を用い、コンピュータにより、入力文に含まれる複数個の第１のクラストークンと、出力文に含まれる複数個の第２のクラストークンとの対応を決定する。第１のクラストークンと第２のクラストークンとは同数である。このクラストークン対応決定方法は、コンピュータが、入力文の複数個の第１のクラストークンを抽出する第１のクラストークン抽出ステップと、コンピュータが、出力文の複数個の第２のクラストークンを抽出する第２のクラストークン抽出ステップと、コンピュータが、複数個の第１のクラストークンと、複数個の第２のクラストークンとの１対１対応として可能な対応関係の各々について、当該対応関係を構成する、互いに対応する第１及び第２のクラストークンの間の関連度に基づいて、当該対応関係の適合度を表すスコアを算出するスコア算出ステップと、コンピュータが、スコアが予め定められる条件を充足する対応関係を選択し、当該選択された対応関係にしたがって複数個の第１のクラストークンと複数個の第２のクラストークンとを対応づけるトークン対応付けステップとを含む。
【００３１】
本発明の第３の局面に係るコンピュータプログラムは、コンピュータを、上記したいずれかの装置の各手段として機能させる。
【００３２】
本発明の第４の局面に係るコンピュータ読取可能な記憶媒体は、上記した第３の局面に係るコンピュータプログラムを記録した記憶媒体である。
【図面の簡単な説明】
【００３３】
【図１】非特許文献１に開示されたＮＭＴによる翻訳の概略を示す模式図である。
【図２】非特許文献２に開示されたＮＭＴによる翻訳の概略を示す模式図である。
【図３】本発明の第１の実施の形態に係る装置及び方法を採用した機械翻訳システムの概略ブロック図である。
【図４】クラストークンを用いた翻訳の過程を模式的に示す図である。
【図５】クラストークンを用いた際の問題を模式的に示す図である。
【図６】図３に示すクラストークン訳出保証部の機能的ブロック図である。
【図７】図３に示すクラストークン置換部のより詳細な機能的ブロック図である。
【図８】図３に示す機械翻訳システムを実現するコンピュータシステムの外観図である。
【図９】図８に示すコンピュータの内部構成を示すブロック図である。
【図１０】クラストークン訳出保証部の機能を実現するプログラムの全体構成を示すフローチャートである。
【図１１】クラストークン訳出保証部の動作を説明する模式図である。
【図１２】図１０に示すフローチャートにおいてダミートークンを挿入する機能を実現するプログラムの制御構造を示すフローチャートである。
【図１３】図１２に示すフローチャートにおいてダミートークン数ｄを決定する機能を実現するプログラムの制御構造を示すフローチャートである。
【図１４】図１０に示すフローチャートにおいてダミートークンをクラストークンに割当てる機能を実現するプログラムの制御構造を示すフローチャートである。
【図１５】図１４に示すフローチャートにおいてクラストークン割当候補のインデックスの集合Ｊｃａｎｄを計算する機能を実現するプログラムの制御構造を示すフローチャートである。
【図１６】図１５に示すフローチャートにおいて、集合Ｊｃａｎｄを修正する機能を実現するプログラムの制御構造を示すフローチャートである。
【図１７】図１６に示す判定処理の機能を実現するプログラムの制御構造を示すフローチャートである。
【図１８】図１４に示すフローチャートにおいて修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅを修正する機能を実現するプログラムの制御構造を示すフローチャートである。
【図１９】図１０に示すフローチャートにおいて不要トークンを削除する機能を実現するプログラムの制御構造を示すフローチャートである。
【図２０】図７に示すクラストークン置換部の機能を実現するプログラムの制御構造を示すフローチャートである。
【図２１】アテンションテーブルの例を表形式で示す図である。
【図２２】図２１において入力文と出力文とにおいて共通するクラストークン「＜ｎｕｍ＞」を抽出して示す図である。
【図２３】図２２に示すクラストークン「＜ｎｕｍ＞」の対応の組合せを示す模式図である。
【図２４】第１の実施の形態の第１の変形例において、クラストークン「＜ｎｕｍ＞」の間の対応関係を矩形フィルタにより決定する方法を説明するための図である。
【図２５】入力文と出力文とにおいて共通するクラストークン「＜ｎｕｍ＞」を抽出し、図２４に示す矩形フィルタにより計算したスコアとともに示す図である。
【図２６】図２４及び図２５に示す方法により決定されたクラストークン「＜ｎｕｍ＞」の間の対応の組合せを示す模式図である。
【図２７】第１の実施の形態の第２の変形例において、クラストークン「＜ｎｕｍ＞」の間の対応関係を決定する方法を説明するための図である。
【図２８】入力文と出力文とにおいて共通するクラストークン「＜ｎｕｍ＞」を抽出し、図２７に示す矩形フィルタにより計算したスコアとともに示す図である。
【図２９】図２７及び図２８に示す方法により決定されたクラストークン「＜ｎｕｍ＞」の間の対応の組合せを示す模式図である。
【図３０】本発明の第２の実施の形態に係る機械翻訳システムにおけるダミートークンの割当処理の機能を実現するプログラムの制御構造を示すフローチャートである。
【図３１】図３０に示す同数訳出クラストークンを処理する機能を実現するプログラムの制御構造を示すフローチャートである。
【図３２】図３０に示す過剰訳出クラストークンを処理する機能を実現するプログラムの制御構造を示すフローチャートである。
【図３３】図３０に示す過少訳出クラストークンを処理する機能を実現するプログラムの制御構造を示すフローチャートである。
【発明を実施するための形態】
【００３４】
以下の説明及び図面では、同一の部品には同一の参照番号を付してある。したがって、それらについての詳細な説明は繰返さない。また、以下の実施の形態の説明では、必須の構成としてアテンションモデルを用いたＮＭＴにおいて計算されるアテンションを用いている。しかし本発明はそのような実施の形態には限定されない。後述するように、アテンションに代えて、又はアテンションと組合せて、翻訳元入力文のトークンと翻訳先出力文のトークンとの間の関連度を表す何らかの値（例えば翻訳単語選択スコア等）を用いることも可能である。
【００３５】
［第１の実施の形態］
＜全体構成＞
最初に、実施の形態に関する以下の説明で使用する記号について説明する。
【００３６】
集合Ｃとは、以下の実施の形態で使用する、ｃ個の互いに異なるクラストークンの集合である。集合Ｃの要素は各ユーザが必要に応じて定義するものである。例えば入出力文中の数字トークンを表す＜ＮＵＭ＞、日付トークンを表す＜ＤＡＴＥ＞、地名を表す＜ＬＯＣ＞等のシンボルが考えられる。もちろんこれらに限定されるわけでなく、またトークンを表すシンボルも自由に定義できる。
【００３７】
入力文Ｘはｍ個のトークンからなるトークンの集合であり、その第ｉ要素をトークンｘ（ｉ）とする。すなわち、入力文Ｘ＝｛ｘ（１），…，ｘ（ｍ）｝である。各トークンｘ（ｉ）は、翻訳元言語の単語、文頭記号・文末記号・未知語等の特殊文字、クラストークンのいずれかの値を持つ。
【００３８】
出力文Ｙはｎ個のトークンからなるトークンの集合であり、その第ｊ要素をトークンｙ（ｊ）とする。すなわち、出力文Ｙ＝｛ｙ（１），…，ｙ（ｎ）｝である。出力文Ｙは入力文Ｘを入力として受けた機械翻訳システムが翻訳した結果である。各トークンｙ（ｊ）は翻訳先言語の単語、文頭記号・文末記号・未知語等の特殊文字、又はクラストークン内の要素等の値をもつ。
【００３９】
以下の実施の形態において、関連度スコアＡとは、翻訳システムが翻訳処理時に計算した各入力トークンと各出力トークンの間の関連度を表す数値スコアを表す。通常このスコアはｍ個の入力トークン及びｎ個の出力トークンの組に対して定義される。入力文Ｘのトークンｘ（ｉ）と出力文Ｙのトークンｙ（ｊ）の間のスコアをａ（ｉ，ｊ）とすると、関連度スコアＡ＝｛ａ（１，１），…，ａ（１，ｎ），ａ（２，１），…，ａ（ｍ，ｎ）｝である。
【００４０】
本実施の形態では、アテンションモデルのＮＭＴを使用しているため、ＮＭＴ内で計算されるアテンションを関連度スコアＡとして用いる。一方、ＰＢＭＴに本発明を適用する場合、翻訳元フレーズと翻訳先フレーズとの間で、翻訳先フレーズが翻訳元フレーズの翻訳として得られる確率を表すフレーズテーブルが用いられる。したがって、フレーズテーブルをこの関連度スコアＡとして用いることができる。また、言語間の単語翻訳辞書に記載されている翻訳例を言語間トークンの関連ルールとみなすと、その単語辞書は、フレーズテーブルにおいて、２言語の単語の間にそうした関連ルールがあれば確率を１、なければ０としたものに相当する。したがって単語翻訳辞書を関連度スコアＡとして用いることもできる。
【００４１】
「クラス」とは、トークンを何らかの基準にしたがって分類したときの各分類を示す。地名、数字、日付のように、語形又は文字コードにより他の種類の単語と明らかに区別できる性格を持つ単語を集めたものである。本実施の形態では、「地名」、「数字」、「日付」等の低頻度トークンを別々のクラスに分類する。各クラスに属するトークンであることを示すために、クラスごとに準備したトークン（＜ＬＯＣ＞、＜ＮＵＭ＞、＜ＤＡＴＥ＞等）でそれら単語を置換する。このクラスごとのトークンを本実施の形態ではクラストークンと呼ぶ。
【００４２】
図３に、この発明の第１の実施の形態に係る機械翻訳システム１６０の概略構成をブロック図形式で示す。図３を参照して、この機械翻訳システム１６０は、入力文１６２を最小の処理単位である単語にトークン化し、さらに単語のうち、「数字」、「地名」、「人名」等、個々の単語の出現頻度が他の単語と比較して著しく小さな予め定められた単語をクラストークンに置換し、クラストークンを含む入力文Ｘを出力するための単語クラス化処理部１８０と、この入力文Ｘを入力としてＮＭＴにより翻訳を行い、出力文Ｙを出力する翻訳処理部１８４とを含む。この実施の形態では、翻訳処理部１８４は、非特許文献２に記載されたようなアテンションによる翻訳を行うものを採用している。翻訳処理部１８４は、この翻訳の際の翻訳に関する種々の情報（翻訳関連情報）１８８を出力する。
【００４３】
翻訳関連情報１８８は、本実施の形態では、入力文Ｘのトークン数ｍ、出力文Ｙのトークン数ｎ、クラストークンの集合Ｃ等を含む。これらは以下の各部での処理で使用される。
【００４４】
機械翻訳システム１６０はさらに、単語クラス化処理部１８０から入力文Ｘを、翻訳処理部１８４から関連度スコアＡ、翻訳関連情報１８８及び出力文Ｙをそれぞれ受け、関連度スコアＡ、及び翻訳関連情報１８８を用いて出力文Ｙ内のクラストークンの数を調整することにより、入力文Ｘ内のクラストークンの数と同じクラストークンを含む最終修正出力文Ｙｏｕｔを出力することで、出力文Ｙに含まれる各クラスのクラストークンの集合が入力文Ｘに含まれる同じクラスのクラストークンの集合と等しくなることを保証するためのクラストークン訳出保証部１９２と、単語クラス化処理部１８０から入力文Ｘを、翻訳処理部１８４から関連度スコアＡを、クラストークン訳出保証部１９２から最終修正出力文Ｙｏｕｔを、それぞれ受け、入力文Ｘ内のクラストークンと、最終修正出力文Ｙｏｕｔ内のクラストークンとの間の対応関係を推定し、各クラストークンが適切な訳語で置換された訳文１６４を出力するためのクラストークン置換部１９６とを含む。
【００４５】
＜全体の処理の流れ＞
図４に、この実施の形態に係る機械翻訳システム１６０による翻訳の全体の流れを示す。図４を参照して、文２１０が機械翻訳システム１６０に与えられたとする。最初に、文２１０をトークンに分割し、トークンに分割した後の文２１４として出力するトークナイズ２１２が実行される。トークンに分割した後の文２１４に含まれる数字、地名、人名等のトークンである単語を、それぞれのクラスに応じたクラストークンに置換する単語クラス化処理２１６が行われ、クラス化後の文２１８が得られる。このクラス化後の文２１８に対して翻訳２２０が実行され、翻訳後のトークン列２２２が得られる。翻訳後のトークン列２２２が含む各クラスのクラストークンの数は、図３に示すクラストークン訳出保証部１９２の機能により、翻訳前の文２１８に含まれる各クラスのクラストークンの数とそれぞれ一致している。この翻訳後のトークン列２２２について、各クラストークンをそれぞれ適切な訳語に置換するクラストークン置換処理２２４により、クラストークン置換後のトークン列２２６が得られる。トークン列２２６の各トークンを連結するデトークナイズ処理２２８により、最終的な訳文２３０が得られる。
【００４６】
＜従来の問題点＞
図４の翻訳２２０による問題点は以下のとおりであった。図５を参照して、入力文２４０が１又は複数個のクラストークンを含むものとする。翻訳処理２４２により得られるトークン列に含まれる各クラスのクラストークンの数は、入力文２４０と同数（トークン列２４４）の場合もあるし、入力文２４０に対し一部のクラスのトークンの数が過少な場合（トークン列２４６、２４８）もある。図示していないが一部のクラスのトークンの数が入力文２４０に対して過剰となる場合もあり得る。入力文２４０に含まれる各クラスのクラストークンの数と、翻訳後のトークン列に含まれる各クラスのクラストークンの数とが、すべてのクラスについて一致しなければ、正しい翻訳は行えない。図３に示すクラストークン訳出保証部１９２が、入力文２４０に含まれる各クラスのクラストークンの数と、翻訳後のトークン列に含まれる各クラスのクラストークンの数とが、すべてのクラスについて一致することを保証することでこうした問題を回避する。その処理の内容について以下詳細に説明する。
【００４７】
＜クラストークン訳出保証部１９２＞
図６を参照して、クラストークン訳出保証部１９２は、図３に示す翻訳処理部１８４からアテンションを関連度スコアＡとして取得するアテンション取得部２６０と、アテンション取得部２６０が取得した関連度スコアＡ及び他の情報を記憶することが可能な、メモリ、ハードディスク等からなる記憶部２６２と、図３に示す翻訳処理部１８４から翻訳関連情報１８８を取得し記憶部２６２に格納する翻訳関連情報取得部２６６と、翻訳処理部１８４から出力文Ｙを取得して記憶部２６２に格納する出力文取得部２６８と、単語クラス化処理部１８０から入力文Ｘを受付けて記憶部２６２に格納する入力文受付部２７０とを含む。
【００４８】
本実施の形態では、入力文Ｘ、出力文Ｙ、及び関連度スコアＡの他に、翻訳関連情報取得部２６６が取得し記憶部２６２に記憶する翻訳関連情報は、以下のとおりである。
【００４９】
・クラストークン集合Ｃ
・クラストークン数ｃ
・入力文Ｘのトークン数ｍ
・出力文Ｙのトークン数ｎ
記憶部２６２には、これらに加えて後述する処理で使用されるクラストークン割当済のインデックスの集合Ｊｄｏｎｅ、クラストークン割当候補のインデックスの集合Ｊｃａｎｄ、修正出力文Ｙｍｏｄ、及び最終修正出力文Ｙｏｕｔが記憶される。これらについては後述する。
【００５０】
クラストークン訳出保証部１９２はさらに、出力文取得部２６８が出力文Ｙを記憶部２６２に格納したことに応答して、出力文Ｙ内のトークン数が入力文Ｘ内のトークン数より多くなるようにダミートークンを出力文Ｙに挿入するダミートークン挿入部２７２と、入力文Ｘ内のクラストークンの各々をダミートークン挿入部２７２により出力文Ｙに挿入されたダミートークンのいずれかに対応付ける（割当てる）ダミートークン割当部２７４と、ダミートークン割当部２７４による処理で入力文Ｘ内のクラストークンに割当てられなかった不要トークンを削除する不要トークン削除部２７６と、不要トークン削除部２７６の処理が終了した後、入力文Ｘのクラストークンと同じ数のクラストークンを含む出力文Ｙを記憶部２６２から読み出して最終修正出力文Ｙｏｕｔとして出力する出力部２７８とを含む。ダミートークン挿入部２７２、ダミートークン割当部２７４、及び不要トークン削除部２７６等は本実施の形態ではコンピュータハードウェア上で実行されるプログラムにより実現される。それらプログラムの構成については後述する。
【００５１】
＜クラストークン置換部１９６＞
図７を参照して、クラストークン置換部１９６は、図３に示す翻訳処理部１８４から関連度スコアＡを取得してアテンション情報記憶部３０２に格納するアテンション情報取得部３００と、図３に示す単語クラス化処理部１８０から入力文Ｘを取得する入力文取得部３０６と、クラストークン訳出保証部１９２から最終修正出力文Ｙｏｕｔを取得する最終修正出力文取得部３０４とを含む。
【００５２】
クラストークン置換部１９６はさらに、入力文取得部３０６が取得した入力文Ｘ、及び最終修正出力文取得部３０４が取得した最終修正出力文Ｙｏｕｔからそれぞれクラストークンを抽出するクラストークン抽出部３０８と、アテンション情報記憶部３０２に記憶されたアテンション情報を用いて、クラストークン抽出部３０８により抽出された入力文Ｘ及び最終修正出力文Ｙｏｕｔのクラストークンの間の対応関係を決定するクラストークン対応決定部３１０と、クラストークン対応決定部３１０の処理の結果、最終的に最終修正出力文Ｙｏｕｔに残ったクラストークンをそれぞれ適切に翻訳したもので置換して訳文１６４として出力するクラストークン翻訳部３１２とを含む。
【００５３】
＜クラストークン訳出保証部１９２を実現するプログラム＞
本発明の実施の形態に係る機械翻訳システム１６０、クラストークン訳出保証部１９２及びクラストークン置換部１９６は、コンピュータハードウェアと、そのコンピュータハードウェア上で実行されるプログラムとにより実現できる。図８はこのコンピュータシステム３３０の外観を示し、図９はコンピュータシステム３３０の内部構成を示す。
【００５４】
図８を参照して、このコンピュータシステム３３０は、メモリポート３５２及びＤＶＤ（Digital  Versatile  Disk）ドライブ３５０を有するコンピュータ３４０と、キーボード３４６と、マウス３４８と、モニタ３４２とを含む。
【００５５】
図９を参照して、コンピュータ３４０は、メモリポート３５２及びＤＶＤドライブ３５０に加えて、ＣＰＵ（中央処理装置）３５６及びＧＰＧＰＵ（汎用画像処理装置）３５７と、ＣＰＵ３５６、ＧＰＧＰＵ３５７、メモリポート３５２及びＤＶＤドライブ３５０に接続されたバス３６６と、ブートプログラム等を記憶する読出専用メモリであるＲＯＭ３５８と、バス３６６に接続され、プログラム命令、システムプログラム及び作業データ等を記憶するコンピュータ読取可能な記憶媒体であるランダムアクセスメモリ（ＲＡＭ）３６０と、ハードディスク３５４を含む。コンピュータ３４０はさらに、他端末との通信を可能とするネットワーク３６８への接続を提供するネットワークインターフェイス（Ｉ／Ｆ）３４４とを含む。
【００５６】
コンピュータシステム３３０を上記した実施の形態に係る機械翻訳システム１６０、クラストークン訳出保証部１９２及びクラストークン置換部１９６の各機能部として機能させるためのプログラムは、ＤＶＤドライブ３５０又はメモリポート３５２に装着される、いずれもコンピュータ読取可能な記憶媒体であるＤＶＤ３６２又はリムーバブルメモリ３６４に記憶され、さらにハードディスク３５４に転送される。又は、プログラムはネットワーク３６８を通じてコンピュータ３４０に送信されハードディスク３５４に記憶されてもよい。プログラムは実行の際にＲＡＭ３６０にロードされる。ＤＶＤ３６２から、リムーバブルメモリ３６４から又はネットワーク３６８を介して、直接にＲＡＭ３６０にプログラムをロードしてもよい。
【００５７】
このプログラムは、コンピュータ３４０を、上記実施の形態に係る機械翻訳システム１６０、クラストークン訳出保証部１９２及びクラストークン置換部１９６として機能させるための複数の命令からなる命令列を含む。翻訳処理部１８４における数値演算処理は、ＣＰＵ３５６及びＧＰＧＰＵ３５７を用いて行う（ＣＰＵ３５６のみを用いてもよいがＧＰＧＰＵ３５７を用いる方が高速である。）。コンピュータ３４０にこの動作を行わせるのに必要な基本的機能のいくつかはコンピュータ３４０上で動作するオペレーティングシステム若しくはサードパーティのプログラム又はコンピュータ３４０にインストールされる、ダイナミックリンク可能な各種プログラミングツールキット又はプログラムライブラリにより提供される。したがって、このプログラム自体はこの実施の形態のシステム、装置及び方法を実現するのに必要な機能全てを必ずしも含まなくてよい。このプログラムは、命令のうち、所望の結果が得られるように制御されたやり方で適切な機能又はプログラミングツールキット又はプログラムライブラリ内の適切なプログラムを実行時に動的に呼出すことにより、上記したシステム、装置又は方法としての機能を実現する命令のみを含んでいればよい。もちろん、プログラムのみで必要な機能を全て提供してもよい。
【００５８】
図１０は、クラストークン訳出保証部１９２の機能を実現するプログラムの全体の制御構造を示す。図１０を参照して、このプログラムは、起動後、プログラムの実行に必要な記憶領域の確保、及びその値の初期化等を行うステップ３８０と、入力文Ｘを取得し記憶部２６２に格納するステップ３８２と、出力文Ｙを取得し記憶部２６２に格納するステップ３８４と、関連度スコアＡ及び翻訳関連情報１８８を取得し記憶部２６２に格納するステップ３８６とを含む。
【００５９】
このプログラムはさらに、ステップ３８６の後、各クラスについて、入力文Ｘと出力文Ｙとのクラストークンの２つの集合が一致しているか否かを判定し、判定結果に応じて制御の流れを分岐させるステップ３８７と、ステップ３８７の判定が肯定であるときに、出力文Ｙを最終修正出力文Ｙｏｕｔに代入するステップ３９３とを含む。
【００６０】
このプログラムはさらに、ステップ３８７の判定が否定であるときに、出力文Ｙ内のトークンの数が入力文Ｘ内のトークン数に応じて決まる一定数以上となるようにダミーのクラストークン（以下、単に「ダミートークン」と呼ぶ。）を出力文Ｙに挿入するステップ３８８と、入力文Ｘの各クラストークンに対し、ダミートークン挿入後の出力文Ｙ内のダミートークンのいずれか１つが割当てられるようダミートークンの割当処理を行い、修正出力文Ｙｍｏｄとして記憶部２６２（図６参照）に格納するステップ３９０とを含む。修正出力文Ｙｍｏｄは、出力文Ｙと同じくｎ個のトークンからなる集合であり、その第ｊ要素をトークンｙｍｏｄ（ｊ）とする。トークンｙｍｏｄ（ｊ）の値域はトークンｙ（ｊ）と同じである。なお、このステップで入力文Ｘ内のクラストークンに対応して同じクラストークンの値が強制的に割当てられた修正出力文Ｙｍｏｄの要素のインデックスｊの集合がクラストークン割当済のインデックスの集合Ｊｄｏｎｅである。また、同じくこのステップで入力文Ｘ内のクラストークンに対応し、同じクラストークンの値が強制的に割当てられる可能性のある修正出力文Ｙｍｏｄのインデックスｊからなる集合Ｊｃａｎｄが計算される。図６に示すようにこの集合Ｊｄｏｎｅ及び集合Ｊｃａｎｄはいずれも記憶部２６２に記憶される。
【００６１】
このプログラムはさらに、ステップ３９０の結果、入力文Ｘ内のクラストークンに割当てられずに修正出力文Ｙｍｏｄに残ったダミートークンを削除するステップ３９２と、ステップ３９２及び３９３までの処理により入力文Ｘと同じ数だけ残ったクラストークンの各々を適切な訳語に置換し、最終修正出力文Ｙｏｕｔとしてデトークナイズして訳文として出力し処理を終了するステップ３９４とを含む。
【００６２】
この一連の処理によるダミートークンの変化を図式化すると図１１に示すとおりである。図１１を参照して、翻訳への入力となるトークン列４１０が「１  ２  ３  ４  ５  ６  ７  ８」という８つの数字を含むものとする。トークンのクラス化４１２によりトークン列４１４が得られる。トークン列４１４は、８つの数字の代わりに８個のトークン「＜ＮＵＭ＞」を含む。
【００６３】
このトークン列４１４を機械翻訳４１６で翻訳した結果、翻訳後のトークン列４１８が得られたものとする。トークン列４１８は、この例では３個のクラストークン「＜ＮＵＭ＞」しか持たない。そこで、前述したように、トークン列４１８内のトークン数がトークン列４１０に含まれるトークン数以上となるようにトークン列４１８にダミートークンを挿入する処理４２０を実行し、ダミートークン挿入後のトークン列４２２を得る。この例ではダミートークンとして６個を挿入し、トークン列４２２内のクラストークンとダミートークンの数の合計が９個となるようにしている。
【００６４】
最後に、入力されたトークン列４１４に含まれるクラストークンの各々をトークン列４２２に含まれるクラストークン及びダミートークンのいずれか１つに強制的に割当てるクラストークンの割当処理４２４を行う。この割当てでは、１つのクラストークンには１つのクラストークン又はダミートークンしか割当てられないようにする。最後に残った不要なダミートークンを削除する。
【００６５】
以上の処理により、トークン列４１４に含まれるクラストークン「＜ＮＵＭ＞」と同じ数の同じ８個のクラストークン「ＮＵＭ」を含むトークン列４２６が得られる。
【００６６】
<ダミートークンの挿入（追加）〉
例えば図１１に示す例では、トークン列４１８には全部で４つのトークン（３つのクラストークン＜ＮＵＭ＞と通常のトークン「hello」）しかない。これは、機械翻訳４１６（図１１）において、トークン列４１４にある８個のクラストークンを抽象化しきれなかったためである。このような場合には、入力文Ｘ内のクラストークンの一部が訳出できないために正確な翻訳はけっして実現できない。そこで例えば入力文Ｘ内のクラストークン数に比べて出力文Ｙ内のトークン数が少ない場合には、出力文Ｙ内のトークン数が入力文Ｘ内のクラストークンの数より多くなるように、出力文Ｙにトークンを追加する。この実施の形態では、出力文Ｙにダミートークンを挿入する場合、出力文Ｙの各トークン間に所定数ｄのダミートークンを挿入する。この所定数ｄは、ダミートークン挿入後の出力文Ｙのトークン数が、入力文Ｘ内のクラストークン数以上となるように定める。定義上、所定数ｄは非負整数でなければならない。図１１に示す例では所定数ｄ＝２である。
【００６７】
図１２は、図９のダミートークンの挿入（追加）を行うステップ３８８を実現するサブルーチンの制御構造を示すフローチャートである。図１２を参照して、このサブルーチンは、最初に上記した所定数ｄを決定するステップ４４０を含む。
【００６８】
図１３を参照して、ステップ４４０は、入力文Ｘ内のクラストークン数ｑを計算するステップ４７０と、ｑが出力文Ｙ内のトークン数ｎ以上か否かを判定して制御の流れを分岐させるステップ４７２と、ステップ４７２の判定が肯定のときに、ダミートークンを挿入した後の出力文Ｙ内のトークン数が一定値以上となるような最小の値にｄを設定するステップ４７４と、ステップ４７２の判定が否定のときに、所定数ｄにデフォルト値（例えば１）を代入するステップ４７６と、ステップ４７４の後、及びステップ４７６の後に、戻り値にｄを代入して親ルーチン（図１２）に制御を戻すステップ４７８とを含む。ここでいう「一定値」とは、最小でｑである。もし、「出力文Ｙのうちクラストークンでないトークンは決して修正しない」という方針を採用する場合には、一定値はｑ＋（出力文Ｙ内の非クラストークン数)となる。
【００６９】
ダミートークン挿入後の出力文Ｙのトークン数は、ダミートークンの挿入箇所を既存トークンの間に限定するならば（ｎ−１）＊ｄ＋ｎとなる。もちろん、ダミートークンの挿入箇所はこれに限定されない。例えば既存トークンの前及び後にもダミートークン挿入するならばダミートークン挿入後の出力文Ｙ内のトークン数は（ｎ＋１）＊ｄ＋ｎとなる。これ以外にも、ダミートークン挿入方法、したがって所定数ｄの決定方法は種々考えられる。例えば出力文Ｙの先頭のトークンの前及び末尾のトークンの後ろに１個ずつダミートークンを挿入し、各トークン間にｄ個ずつダミートークンを挿入する場合にはトークン数は（ｎ＋１）＊ｄ＋ｎ＋２となる。また、トークン間に挿入するトークンの数を一定数ｄに統一する必要もない。
【００７０】
再び図１２を参照して、このサブルーチンはさらに、出力文Ｙのトークン間に、ステップ４４０で決定された所定数ｄ個ずつのダミートークンを挿入して出力文Ｙの値を更新するステップ４４２と、この更新にあわせて出力文Ｙ内のトークン数ｎを更新するステップ４４４と、関連度スコアＡを更新するステップ４４６とを含む。
【００７１】
ステップ４４２で出力文Ｙに挿入するダミートークンは、非クラストークン及び既存のクラストークンのいずれとも区別できるよう、特別なシンボルを設定する。ダミートークンとしては、例えば図１１に示す「＜ｄｕｍｍｙ＞」、又はそれに代えて「＜ＮＵＬＬ＞」等を使用できる。
【００７２】
ステップ４４６の処理では、出力文Ｙの拡張に合わせて関連度スコアＡの要素数を増やす。新たな要素（主にダミートークンに対応する要素）には、本実施の形態では適当な定数を与える、その要素に対応するダミートークンの前後の非ダミートークンの値をコピーする、前後の非ダミートークンの値を局所窓等で平均化した値を使う、等、任意の計算方法を選んでこの定数を決定できる。
【００７３】
〈ダミートークンの割当〉
図１４は、図１０に示すステップ３９０を実現するサブルーチンの制御構造を示す。図１４に示すサブルーチンは、集合Ｊｄｏｎｅと修正出力文Ｙｍｏｄとを計算することを目的とする。図１４を参照して、このサブルーチンは、記憶部２６２（図６を参照）において、集合Ｊｄｏｎｅの記憶領域を確保し、空集合として初期化するステップ５００と、修正出力文Ｙｍｏｄの記憶領域を確保し、空集合として初期化するステップ５０２とを含む。これらに限らず、本実施の形態で使用するあらゆる集合は、プログラム上はリスト等の公知の手法で実装可能である。
【００７４】
このサブルーチンはさらに、入力文Ｘのｉ＝１〜ｍ番目の全てのトークンｘ（ｉ）について、以下の処理５０６を実行するステップ５０４を含む。なお、本実施の形態ではｉ＝１〜ｍまで順番にこの処理５０６を実行するが、この処理順番は任意であり、各要素について処理５０６を１回だけ実行するような順番であればどのような順番で実行してもよい。
【００７５】
処理５０６は、トークンｘ（ｉ）がクラストークンかどうかを判定し、判定に応じて制御の流れを分岐させるステップ５２０と、ステップ５２０の判定が肯定であれば、インデックスｉ及びトークンｘ（ｉ）に対して、出力文Ｙ中でこのクラストークンに置換すべき候補からなるクラストークン割当候補のインデックスの集合Ｊｃａｎｄを計算するステップ５２２（図１５〜図１７を用いて詳説する。）と、ステップ５２２で計算された集合Ｊｃａｎｄを用いて、実際にトークンｘ（ｉ）のクラストークンの値を出力文Ｙ内のいずれかのトークンに割当て、修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅを更新・修正してこの処理５０６を終了するステップ５２４（図１８を参照して詳説する。）とを含む。ステップ５２０の判定が否定なら、このインデックスｉに対してはこれ以上の処理をせず処理５０６を終了する。
【００７６】
《クラストークン割当候補のインデックスの集合Ｊｃａｎｄの計算》
図１５を参照して、図１４のステップ５２２を実現するサブルーチンは、クラストークン割当候補のインデックスの集合Ｊｃａｎｄの記憶領域を記憶部２６２（図６参照）に確保し、空集合として初期化するステップ５４０と、複数の観点から集合Ｊｃａｎｄを修正するステップ５４２と、ステップ５４２により修正された集合Ｊｃａｎｄを記憶部２６２に保存してこのサブルーチンを終了するステップ５４４とを含む。
【００７７】
図１６は、図１５のステップ５４２を実現するサブルーチンの制御構造を示す。この実施の形態では、このサブルーチンは、３つの基準を用いて入力文Ｘのトークンｘ（ｉ）に対応する可能性のある出力文Ｙのトークンのインデックスｊの集合を計算する。図１６を参照して、このルーチンは、３つの基準に対応する作業用の集合Ｊ１、Ｊ２及びＪ３の記憶領域を記憶部２６２内に確保し、これらを空集合で初期化するステップ５６０を含む。これら集合Ｊ１、Ｊ２及びＪ３は、出力文Ｙのうちで上記した３つの基準に合致するトークンｙ（ｊ）のインデックスｊを一時的に保存するためのものである。なお、ここで使用する基準は３つには限定されない。精度の点からいうと３個以上であることが好ましいが、場合によっては２個以下でも十分である可能性がある。
【００７８】
このルーチンはさらに、出力文Ｙの全てのトークンのインデックスｊ＝１，…，ｎに対して、各基準にそのインデックスに対応するトークンが合致するか否かを判定し、基準に合致したインデックスｊをその基準に対応する集合（Ｊ１、Ｊ２又はＪ３）に追加する判定処理５６４を繰返すステップ５６２と、ステップ５６２の後、３つの集合Ｊ１、Ｊ２及びＪ３の積集合が空集合か否かを判定して制御の流れを分岐させるステップ５６６とを含む。判定処理５６４では、各インデックスｊについて各基準に関する判定を行い、判定結果が肯定なら対応する集合にインデックスｊを追加する。したがって、インデックスｊが２つの基準１及び２に合致すればこのインデックスｊは集合Ｊ１及びＪ２の双方に追加される。インデックスｊが例えば基準３のみに合致すればこのインデックスｊは集合Ｊ３のみに追加される。インデックスｊがどの基準にも合致しなければそのインデックスｊは集合Ｊ１，Ｊ２及びＪ３のいずれにも追加されない。
【００７９】
このサブルーチンはさらに、ステップ５６６の判定が否定（集合Ｊ１∩Ｊ２∩Ｊ３が空集合でない。）のときに、集合Ｊ１∩Ｊ２∩Ｊ３の要素を集合Ｊｃａｎｄに追加してこのルーチンを終了するステップ５６８と、ステップ５６６における判定が肯定（集合Ｊ１∩Ｊ２∩Ｊ３＝φ（空集合））のときに、集合Ｊ１∩（Ｊ２∪Ｊ３）の要素を集合Ｊｃａｎｄに追加してこのルーチンを終了するステップ５７０とを含む。
【００８０】
図１７は、図１６に示す判定処理５６４を実現する判定ルーチンの制御構造を示す。図１７を参照して、このルーチンは、インデックスｊが集合Ｊｄｏｎｅに既に存在しているか否かを判定し、存在していないときにこのインデックスｊを集合Ｊ１に追加するステップ６００及び６０２と、このトークンｙ（ｊ）と入力文Ｘの各トークンｘ（ｓ）（ｓ＝１，…，ｍ）との間の関連度スコアａ（ｓ，ｊ）の中で、関連度スコアａ（ｉ，ｊ）の大きさの順位が１位（最大）であればインデックスｊを集合Ｊ２に追加するステップ６０４及び６０６と、処理中のトークンｙ（ｊ）がトークンｘ（ｉ）と一致していればｊを集合Ｊ３に追加するステップ６０８及び６１０とを含む。ステップ６０８及び６１０が終了するとこのルーチンは終了する。
【００８１】
以上の処理により、記憶部２６２には、集合Ｊｃａｎｄが記憶されている。集合Ｊｃａｎｄは、処理中のクラストークンｘ（ｉ）に対応する可能性があるトークンｙ（ｊ）のインデックスｊの集合である。
【００８２】
図１６及び図１７に示す例は、場合分けの判定はステップ５６６のみで行い、ステップ５６８及びステップ５７０で各場合における集合Ｊｃａｎｄの計算を行っている。しかし本発明はそのような実施の形態には限定されない。判定基準としてより多くを採用する場合、判定を複数回組合せてもよい。
【００８３】
ステップ５６６の判定は一時集合Ｊ１、Ｊ２及びＪ３が共通要素を持つか否かを判定基準としている。これは、具体的には、「まだ修正されていないトークンｙ（ｊ）のうち、トークンｘ（ｉ）と同じトークン値を既に持っており、かつトークンｘ（ｉ）と関連度が最も高いトークンｙ（ｊ）があれば、それを一つだけ選択しそのインデックスを集合Ｊｃａｎｄに追加する、というものである。ステップ５６６の判定が否定の場合には、「まだ修正されていなトークンｙ（ｊ）のうち、トークンｘ（ｉ）と同じトークン値をすでに持っているか、インデックスｉと関連度が最も高い出力トークン」のインデックスを集合Ｊｃａｎｄに追加する、という基準となる。
【００８４】
判定処理５６４で使用できる基準の例を以下のテーブルに示す。なお、この例は網羅的なものではなく例示的なものに過ぎない。これらの中から任意の個数の任意の組合せを用いて判定処理５６４を行うようにしてもよい。また、図１６のステップ５６６、５６８及び５７０の判定基準は、ここで採用する基準に応じて適切な論理式を採用する必要がある。この場合、全ての一時集合を集合演算で組合せても良いし、一部の一時集合のみを組合せる判定を採用してもよい。なお、以下に示す判定基準については図１７の説明とともに後述する。
【００８５】
【表１】
2019057244.tif 000003
基準Ｊ１は、既に修正をうけた出力先トークンを一時集合から外し、それ以外を一時集合に加えるという基準である。
【００８６】
基準Ｊ２は、トークンｙ（ｊ）とトークンｘ（ｉ）との関連度ｘ（ｉ、ｊ）が、トークンｙ（ｊ）と全トークンｘ（ｓ）（ｓ＝１，…，ｍ）との関連度スコアａ（ｓ，ｊ）の最大値であればインデックスｊを一時集合に追加するという基準である。
【００８７】
基準Ｊ３は、トークンｙ（ｊ）がトークンｘ（ｉ）と一致する場合にインデックスｊを一時集合に追加するという基準である。
【００８８】
基準Ｊ４は、インデックスｊをランダムに一時集合に追加する(一定の確率で追加する)という基準である。
【００８９】
基準Ｊ５は、トークンｙ（ｊ）がダミートークンならばインデックスｊを一時集合に追加するという基準である。
【００９０】
基準Ｊ６は、トークンｙ（ｊ）がクラストークンの集合Ｃに含まれている場合にインデックスｊを一時集合に追加するという基準である。
【００９１】
基準Ｊ７は、翻訳単語選択スコアＰのうち、トークンｙ（ｊ）に対応する翻訳単語選択スコアｐ（ｊ）を見たときに、トークンｘ（ｉ）のスコアがしきい値以上であればインデックスｊを一時集合に追加するという基準である。なお、この第１の実施の形態では、翻訳単語選択スコアＰは用いていない。この翻訳単語選択スコアＰを用いる場合には、全ての翻訳単語選択スコアＰ＝｛ｐ（ｊ）｜ｊ＝１，…ｎ｝を翻訳システムから受け取る必要がある。他の基準でも同様である。翻訳単語選択スコアＰについては後述する。
【００９２】
基準Ｊ８は、トークンｙ（ｊ）に対応する翻訳単語選択スコアｐ（ｊ）を全単語のスコアの大きさで見たときに、全単語のスコアにおけるトークンｘ（ｉ）のスコアの大きさの順位がしきい値より上（スコアの値が大きい）であればインデックスｊを一時集合に追加するという基準である。
【００９３】
基準Ｊ９は、トークンｘ（ｉ）と各トークンｙ（ｊ）の間の関連度スコアａ（ｉ，ｊ）がしきい値以上であればインデックスｊを一時集合に追加するという基準である。
【００９４】
なお、基準Ｊ７及びＪ８で用いる翻訳単語選択スコアＰは、ｎ個の数値又は数値ベクトルの集合である。その第ｊ番目の要素ｐ（ｊ）は、翻訳システムにおいて出力文Ｙのトークンｙ（ｊ）の値を選択した時に翻訳システム内部で算出される確からしさである。翻訳処理部１８４は、翻訳時の翻訳単語選択のために、予め統計的に準備された翻訳単語モデルを用いて翻訳単語選択スコアを計算し、そのスコアを用いて翻訳単語を選択している。したがって翻訳処理部１８４は、翻訳時には、入力文Ｘ内の各トークンと出力文Ｙ内の各トークンとの間の関連度を表す関連度スコアＡとともに、翻訳単語選択スコアＰを算出し保持している。翻訳単語選択スコアＰが必要な場合には、翻訳単語選択スコアＰを翻訳処理部１８４から受け取るようにすればよい。
【００９５】
又は、翻訳単語選択スコアＰに代えてトークンｙ（ｊ）の候補となったあらゆる翻訳先言語の単語の確からしさ（数値のベクトル）を用いても良い。翻訳単語選択スコアとしてはさらに、アテンションモデルのニューラル翻訳機で計算される、各翻訳出力トークンの単語選択確率を用いることもできる。また統計的モデルに基づく言語モデルの計算する単語生成確率を翻訳単語選択スコアとして利用できる。出力先言語の辞書、又は外部コーパス内の単語生成頻度等を用いることも可能である。この翻訳単語選択スコアＰは、本実施の形態ではオプショナルに用いているが、これを関連度スコアＡに代えて、又は関連度スコアＡと組合せて用いることもできる。
【００９６】
《修正出力文Ｙｍｏｄ及び集合Ｊｃａｎｄの修正》
図１８は、図１４においてステップ５２２に続いて行われる、集合Ｊｃａｎｄを用いて修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅを修正するステップ５２４を実現するためのサブルーチンの制御構造を示す。
【００９７】
図１８を参照して、このサブルーチンは、集合Ｊｃａｎｄが空集合か否かを判定して、集合Ｊｃａｎｄが空集合のときに、集合Ｊｃａｎｄを｛１，２，…，ｎ｝に設定するステップ６３０及びステップ６３２を含む。集合Ｊｃａｎｄが空集合であれば、入力文Ｘの第ｉ番目のトークンｘ（ｉ）に対応して適切であることが明確な出力トークンが存在しないということである。この場合には集合Ｊｃａｎｄとしては上記したようにインデックスｊの取り得る全ての値を集合Ｊｃａｎｄの要素に設定する。
【００９８】
このサブルーチンはさらに、集合Ｊｃａｎｄ内の全ての要素ｊから、入力文Ｘ内の第ｉ番目のトークンｘ（ｉ）に対応してトークンｘ（ｉ）と同じ値を持つよう修正すべき出力文Ｙのトークンのインデックスｊａｓｓｉｇｎを決定するステップ６３４を含む。この実施の形態では、図１８に示すように、集合Ｊｃａｎｄに属する全てのｊに対して関連度ａ（ｉ，ｊａｓｓｉｇｎ）≧ａ（ｉ，ｊ）となるようなインデックスｊａｓｓｉｇｎを選択する。
【００９９】
インデックスｊａｓｓｉｇｎの決定方法はこれには限定されない。例えば以下のような方法をとることもできる。
【０１００】
・集合Ｊｃａｎｄ内の要素からランダムにｊａｓｓｉｇｎを選択する。
【０１０１】
・集合Ｊｃａｎｄの要素について、出力文Ｙの各トークンに関する翻訳単語選択スコアを用いてｊａｓｓｉｇｎを決定する。例えば、入力文Ｘ内の第ｉ番目のトークンｘ（ｉ）に対する、集合Ｊｃａｎｄ内の要素ｊに対応する出力文Ｙのトークンｙ（ｊ）についての翻訳単語選択スコアｐ（ｊ）が最大となるようなｊをｊａｓｓｉｇｎとすることが考えられる。
【０１０２】
このサブルーチンはさらに、ステップ６３４の後、選択されたインデックスｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加するステップ６３６と、修正出力文Ｙｍｏｄのｊａｓｓｉｇｎ番目のトークンｙｍｏｄ（ｊａｓｓｉｇｎ）の値を入力トークンｘ（ｉ）とするステップ６３８と、このようにして修正された修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅを記憶部２６２（図６参照）に保存してこのサブルーチンの実行を終了するステップ６４０とを含む。ステップ６３６で集合Ｊｄｏｎｅにインデックスｊａｓｓｉｇｎを追加するので、既にクラストークンが割当てられたトークンかどうかについては、集合Ｊｄｏｎｅの要素を見れば判定できる。集合Ｊｃａｎｄにあって集合Ｊｄｏｎｅにないインデックスが、まだクラストークンに割当てられていないトークンのイデックスを示す。
【０１０３】
<不要トークンの削除〉
図１９には、図１０のステップ３９２に示す不要トークンを削除する処理を実現するサブルーチンの制御構造を示す。このサブルーチンの機能は、最終的に出力される最終修正出力文Ｙｏｕｔ内のクラストークンの数と入力文Ｘ内のクラストークンの数と種類とが一致するように処理することである。
【０１０４】
図１９を参照して、このプログラムは、最終修正出力文Ｙｏｕｔの値を修正出力文Ｙｍｏｄに初期化するステップ６６０と、インデックスｊを１から出力文Ｙ内のトークン数ｎまで変化させながら以下の処理６６４を繰返すステップ６６０とを含む。
【０１０５】
処理６６４は、最終修正出力文Ｙｏｕｔ内のｊ番目のトークンをそのままトークンとして出力すべきか、何も出力すべきでないかを検証して最終的な修正が行われた最終修正出力文Ｙｏｕｔを出力するためのものである。本実施の形態では、この処理において集合Ｊｄｏｎｅを使用する。
【０１０６】
この処理６６４は、修正出力文Ｙｍｏｄのｊ番目のトークンｙｍｏｄ（ｊ）がダミートークンか否かを判定するステップ６８０と、ステップ６８０の判定が肯定であれば最終修正出力文Ｙｏｕｔのｊ番目のトークンｙｏｕｔ（ｊ）にＮＵＬＬを代入、つまりこのトークンとしては何も出力しないように設定するステップ６８６とを含む。ステップ６８０の段階で残っているダミートークンは、トークンｘ（ｉ）のいずれにも対応していない。したがってここでダミートークンを削除する。
【０１０７】
さらに処理６６４は、ステップ６８０の判定が否定であるときに、ｊ番目のトークンｙｍｏｄ（ｊ）が空文字か否かを判定し、空文字なら制御をステップ６８６に分岐させるステップ６８１と、ステップ６８１の判定が否定のときに、ｊ番目のトークンｙｍｏｄ（ｊ）がクラストークンの集合Ｃに属するか否か、つまりクラストークンのいずれかであるか否かを判定し、判定が否定なら、つまりｊ番目のトークンｙｍｏｄ（ｊ）がクラストークンでなければ処理６６４を終了して次のｊに処理を移すステップ６８２とを含む。ここでいう「空文字」とは、タブ、スペース等のいわゆる空白文字と、空トークン（""）を指す。空文字の場合にはトークンｙｍｏｄ（ｊ）としては何も出力しない。また、トークンｙｍｏｄ（ｊ）がクラストークンでなければ最終修正出力文Ｙｏｕｔのトークンｙｏｕｔ（ｊ）にはトークンｙｍｏｄ（ｊ）がそのまま保持される。すなわち、この実施の形態では、トークンｙｍｏｄ（ｊ）がクラストークンでない場合には、そのトークンがクラストークンに置換されることはない。
【０１０８】
処理６６４はさらに、ステップ６８２の判定が肯定のときに、インデックスｊが集合Ｊｄｏｎｅに属するか否かを判定し、判定が否定なら制御をステップ６８６に分岐させるステップ６８４と、ステップ６８４の判定が肯定のときに、トークンｙｍｏｄ（ｊ）が入力文Ｘに含まれるか否かを判定し、含まれる場合には何もせず処理６６４を終了し、次のｊに処理を移すステップ６８５とを含む。ステップ６８５の判定が否定のときには制御はステップ６８６に移る。ステップ６８４において、インデックスｊが集合Ｊｄｏｎｅに含まれていない場合には、トークンｙｍｏｄ（ｊ）に割当てられたトークンｘ（ｉ）がないということなので、トークンｙｏｕｔ（ｊ）にはステップ６８６でＮＵＬＬが設定され、最終修正出力文Ｙｏｕｔには出力されない。したがって、最終修正出力文Ｙｏｕｔに入力文Ｘ内のトークン数より多い同じクラストークンが存在していた場合、そのうちで入力文Ｘのトークンと対応付けられていないクラストークンはここで削除される。またステップ６８５では、入力文Ｘに存在していないクラストークンが削除される。そのため、入力文Ｘに存在していないクラストークンが翻訳誤りのために最終修正出力文Ｙｏｕｔに出現したとしても、最終修正出力文Ｙｏｕｔにはそうしたクラストークンは出力されない。
【０１０９】
ステップ６８６では、前述したとおりｊ番目のトークンｙｏｕｔ（ｊ）にＮＵＬＬを代入してインデックスｊに対する処理６６４を終わり、処理は次のｊに移る。
【０１１０】
全てのｊ＝１，…，ｎに対して処理６６４が終了したときに得られた最終修正出力文Ｙｏｕｔには、入力文Ｘ内に存在していたクラストークンが、各クラスについて同じ数だけ存在したものとなる。
【０１１１】
以上の処理により、最終修正出力文Ｙｏｕｔには入力文Ｘに含まれるクラストークンと同じ種類のクラストークンが、各クラスに同じ数だけ存在することが保証される。
【０１１２】
<クラストークン置換〉
以上のようにして、最終修正出力文Ｙｏｕｔ内のクラストークンの集合が入力文Ｘ内のクラストークンの集合と一致していたとしても、同種のトークンが複数個あった場合には、それらの対応をどのようにとるかが問題となる。これは、ＮＭＴの場合だけの問題ではなく、例えばＰＢＭＴでも同種の問題が発生する可能性がある。また他の翻訳方式を採用した場合にも起こりうることである。
【０１１３】
図３に示すクラストークン置換部１９６は、入力文Ｘと最終修正出力文Ｙｏｕｔとに同じクラスのクラストークンが複数個存在している場合に、クラストークン同士の対応を付け、適切に翻訳する機能を持つ。なお、以下のクラストークン置換部１９６の動作に関する記載においては、最終修正出力文Ｙｏｕｔを単に「出力文Ｙ」と呼ぶ。
【０１１４】
本実施の形態では、クラストークン置換部１９６は、図３に示すようにアテンションモデルのＮＭＴを採用した翻訳処理部１８４の出力について、クラストークン訳出保証部１９２により入力文Ｘ内のクラストークンと出力文Ｙ内のクラストークンとの集合が一致していることを前提に、互いのクラストークン同士の対応を評価する。この評価の際、クラストークン置換部１９６は、互いのクラストークンの間のアテンションのスコアだけではなく、文中でクラストークンを中心とした周辺のトークン（ここではこれらのトークンを「周辺トークン」と呼ぶ。）の間のアテンションのスコアも考慮して、出力文中のクラストークンの同定を行う。
【０１１５】
図２０は、クラストークン置換部１９６を実現するプログラムの制御構造を表すフローチャートである。図２０を参照して、このプログラムは、入力文Ｘのクラストークンの文内の位置、種類、及び種類ごとの数Ｎ１を特定するステップ７５０と、出力文Ｙ内のクラストークンの位置、種類、及び種類ごとの数Ｎ２を特定するステップ７５２と、全てのクラストークンについてＮ１＝Ｎ２か否かを判定し、判定に応じて制御の流れを分岐させるステップ７５４と、ステップ７５４の判定が否定の時に、以下の処理の前提となる条件（入力文Ｘ内のクラストークンの数と出力文Ｙ内のクラストークンの数とが一致しているという条件）が充足されていない旨のエラーメッセージを表示して処理を終了するステップ７６２とを含む。
【０１１６】
このプログラムはさらに、ステップ７５４の判定が肯定であることに応答して、各種類のクラストークンについて、以下に説明するそのクラスにおける入力文Ｘと出力文Ｙ内のクラストークンとの対応付を決定し翻訳する処理７５８を繰返して、最終的にクラストークンが全て適切に翻訳された出力文Ｙを生成するステップ７５６と、ステップ７５６で生成された出力文Ｙを出力するステップ７６０とを含む。
【０１１７】
処理７５８は、最初に処理中のクラスについて入力文Ｘ内のクラストークンの数Ｎ１と出力文Ｙ内のクラストークンの数Ｎ２とがともに１か否かを判定し、判定結果にしたがって制御の流れを分岐させるステップ７７０と、ステップ７７０の判定が否定のときに、入力文Ｘの各対象クラスのクラストークンと出力文Ｙの対象クラスの各クラストークンの間の各スコアを算出するステップ７７２と、対象となる組合わせの適合度を示す文全体でのスコアの合計が最大となるという条件を充足する対象クラストークン間の組合せを決定するステップ７７４とを含む。
【０１１８】
このルーチンはさらに、ステップ７７４の処理が終了して対象クラストークン間の組合せが決定した後、及びステップ７７０の判定が肯定のときに行われ、決定された組合せにしたがって出力文Ｙ内の対象クラスのクラストークンを辞書又はルール等で決定した訳語で置換しこの処理７５８を終了するステップ７７６を含む。ステップ７７０の判定が肯定のときにステップ７７２及び７７４を省略するのは、同じクラストークンの数が入力文Ｘと出力文Ｙとでともに１なら、クラストークンの対応関係の問題は生じないためである。
【０１１９】
図４に示す例では、翻訳後のトークン列２２２（出力文Ｙ）に同じクラストークン＜ｎｕｍ＞が２つあるため、クラス化後の文２１８（入力文Ｘ）の中の同じ２つのクラストークンとの間で対応付を行う必要がある。対応付は入出力の各トークン間の関連度に基づいて行う。
【０１２０】
図２１に示すアテンションテーブル７８０は、翻訳結果の入力文Ｘ及び出力文Ｙの、クラストークンを含む各単語の間の関連度を示す関連度情報の例であり、翻訳処理部１８４のＮＭＴでの翻訳の際に得られたアテンションからなる関連度のテーブルである。アテンションテーブル７８０の左のトークン列が入力文Ｘ＝｛ｘ（１），…、ｘ（ｍ）｝に対応し、上側のトークン列が出力文Ｙ＝｛ｙｏｕｔ（１），…、ｙｏｕｔ（ｎ）｝に対応し、表中のｉ行ｊ列のセルの数字が出力文Ｙのｊ番目（ｊ＝１，…，ｎ）のトークンｙｏｕｔ（ｊ）を生成する際の入力文Ｘのｉ番目（ｉ＝１，…，ｍ）のトークンｘ（ｉ）に対する関連度の強さａｉｊを示す。なお、出力文Ｙ中の「＜／ｓ＞は文末であることを表す特殊記号である。ＮＭＴでは、出力中にこの記号が生成された時点で翻訳を終了する。ただし翻訳結果にはこの記号は出力しない。
【０１２１】
図２１に示す例では、入力文Ｘではｉ＝１、４、出力文Ｙではｊ＝３、６がクラストークンとなっている。なお、以下、本実施の形態の構成に関する部分では、記載を簡潔にするために、出力文Ｙを単に出力文Ｙと呼び、そのトークンをｙ（ｊ）（ｊ＝１，…，ｎ）と記載する。
【０１２２】
本実施の形態では、トークンｘ（ｉ）とトークンｙ（ｊ）とをペアにしたとき、このペアのスコアｓｃｏｒｅ（ｉ，ｊ）を以下の式により算出する。
【０１２３】
【数１】
2019057244.tif 000004
式（１）において、Ｎはウィンドウサイズを制御するためのパラメータである。図２１はＮ＝０の時を示す。Ｎ＝０のときにはウィンドウサイズは１となる。すなわちこのときには、対象となるｘ（ｉ）及びｙ（ｉ）の間のセル７９０，７９２，７９４及び７９６の関連度がそのままこのペアのスコアとなる。
【０１２４】
ただし、本実施の形態では、このスコアをそのまま用いてペアを決定するのではない。ペアの組合せにより得られるスコアの総計が最も大きくなるような組合せを採用する。
【０１２５】
Ｎ＝０の場合を考える。図２２は、図２１に示す例で、処理対象となるクラストークンのみを取り出し、各文中で出現する順序にしたがってＮ＝０の場合のスコアを表として示したものである。
【０１２６】
これらクラストークンのペアとしては、（１，１），（１，２），（２，１）及び（２，２）が考えられるが、これらのペアを組合せる場合、可能なものは、（（１，１），（２，２））及び（（１，２），（２，１））の２通りしかない。本実施の形態では、これら２つの組合せの各々について、それらの組合せを構成する２つのペアのスコアを合計し、合計がより大きな方の組合せを選択する。
【０１２７】
より一般的にいえば、入力文Ｘ及び出力文ＹにそれぞれＭ個のクラストークンが存在すれば、これらによる可能なペアの組合せはＭの階乗（Ｍ！）個存在する。本実施の形態では、理屈のうえからはこれら組合せの全てについて、その組合せを構成する各ペアのスコアの合計を計算し、その値が最も大きくなった組合せに従って入力文Ｘのクラストークンと出力文Ｙのクラストークンとを組合せる。
【０１２８】
図２１及び図２２に示した例において可能な組合せを、各ペアについて計算されるスコアとともに図２３に示す。図２３においては、太い線でつながれた２つのペアの組合せと、細い線でつながれた２つのペアの組合せとの、２つの組合せが可能である。この値をまとめると以下のとおりである。
【０１２９】
太い線のペアの組合せによるスコアの合計：０．２１８＋０．０９２＝０．３１０
細い線のペアの組合せによるスコアの合計：０．１１２＋０．１７２＝０．２８４
両者の差：０．３１０−０．２８４＝０．１２６
したがってこの場合、図２２でいうと（１，２）及び（２，１）からなる組合せ（図２１では（ｉ＝１，ｊ＝６）及び（ｉ＝４，ｊ＝３）の組合せ）を採用する。
【０１３０】
Ｎ＝１の場合、図２４を参照して、図２１に示す関連度に基づいて入力文Ｘ及び出力文Ｙの各トークンの組合せについてスコアを計算する場合のウィンドウについて説明する。Ｎ＝１の場合、各ウィンドウは３×３のサイズとなる。セル７９０についてはウィンドウ８００を、セル７９２についてはウィンドウ８０２を、セル７９４についてはウィンドウ８０４を、セル７９６についてはウィンドウ８０６を、それぞれ用いてこれらセルの値を再計算する。なお、各ウィンドウのうち、元のテーブルの外にはみ出した部分は上記した式による計算では考慮しない。例えばウィンドウ８００の場合、上部にはみ出した部分は考慮せず、セル７９０の計算ではＮ＝６として計算する。他も同様である。
【０１３１】
この計算の結果を抽出したものを図２５に示す。セル７９０、７９２，７９４及び７９６のスコアは以下の通りに計算できる。
【０１３２】
【表２】
2019057244.tif 000005
図２４及び図２５に示した例において可能な組合せを、各ペアについて計算されるスコアとともに図２６に示す。図２６においては、太い線でつながれた２つのペアの組合せと、細い線でつながれた２つのペアの組合せとの、２つの組合せが可能である。両者の値をまとめると以下のとおりである。
【０１３３】
太い線のペアの組合せによるスコアの合計：０．１９５＋０．１３２＝０．３２７
細い線のペアの組合せによるスコアの合計は０．１０１＋０．０９６＝０．１９７
両者の差：０．３２７−０．１９７＝０．１３０
したがってこの場合、図２２の場合と同様、図２５でいうと（１，２）及び（２，１）からなる組合せ（図２４では（ｉ＝１，ｊ＝６）及び（ｉ＝４，ｊ＝３）の組合せ）を採用する。この組合せは図２３に示したものと同様で正しい対応付がされていることが分かるが、この２つの場合のスコア合計の差は、図２６に示したものの方がより大きくなっている。すなわち、図２４に示したように周囲のトークンの関連度まで含めて計算した方が、対応付がより確実になる。これは、例えば数値クラスの場合、「円」、「グラム」等という、単位を表すトークンに対するアテンションが強く、それらを考慮することで対応が取りやすくなったためである。
【０１３４】
図２５に示すウィンドウ８００等を用いたセル７９０の値の再計算は、ウィンドウを用いた一種のフィルタによるものと考えられる。この考え方にしたがって式（１）をさらに一般化すると、各セルの値に重みを乗じて加算することで加重平均を計算する、以下の式を考えることができる。式（１）は、次の式（２）の重みを全て１とした場合と考えることができる。
【０１３５】
【数２】
2019057244.tif 000006
この重みωi+k,k+lを適宜設定してセルの値を再計算することにより、クラストークンの間の対応付けをより確実なものにできる。例えば、ａi+k,k+lのうちで値の大きなものの上位Ｌ個については重みωi+k,k+l＝１、そのほかについては重みωi+k,k+l＝０としてセル７９０，７９２，７９４及び７９６の値を加重平均により再計算することを考える。この場合式（２）を用いても良いが以下の式の方がよりわかりやすい。
【０１３６】
【数３】
2019057244.tif 000007
重みωi+k,k+l＝１なのは、上記式（３）の各項の中でＬ個だけなので、結局式（３）はウィンドウ内のセルのうち、値の大きさにしたがって順位を付けた場合の上位Ｌ個の平均を計算していることになる。式（３）で計算した値は、式（２）で計算した値の（２Ｎ＋１）２／Ｌ倍になるだけなので、式（２），（３）のいずれを用いてもクラストークンの対応付けの結果は同じになる。
【０１３７】
なお、式（２）及び式（３）はより一般的には以下の式（４）で表現できる。式（２）は、式（４）において全ての重み＝１の場合に相当し、式（３）は重みのうちＬ個の値が１、それ以外が０の場合に相当する。
【０１３８】
【数４】
2019057244.tif 000008
図２７を参照して、ウィンドウ８００の上位３個のセルはセル７９０，８３２，及び８３４である。ウィンドウ８０２についてはセル８３６、８３８及び８４０である。ウィンドウ８０４についてはセル７９４、８４４及び８４６である。ウィンドウ８０６についてはセル７９６，８４８及び８５２である。
【０１３９】
ここではこれらを用いた計算式は示さないが、セル７９０，７９２，７９４及び７９６の再計算後の値を図２２及び図２５と同様の形式で示したものが図２８であり、図２３及び図２６と同様の形式で示したものが図２９である。可能なクラストークンのペアの組合せは、｛（ｉ＝１，ｊ＝６），（ｉ＝４，ｊ＝３）｝と、｛（ｉ＝１，ｊ＝３｝、（ｉ＝４，ｊ＝６））の２つだけである。図２９からわかるように、両者の値をまとめると以下のとおりである。
【０１４０】
太い線のペアの組合せによるスコアの合計：０．３１５＋０．２７３＝０．５８８
細い線のペアの組合せによるスコアの合計：０．１６３＋０．１７７＝０．３４０
両者の差：０．５８８−０．３４０＝０．２４８
この場合も正しいペアが選択されるが、正しい選択の際のスコア合計と、誤った選択の際のスコア合計との差は、上記２番目の例と比較してさらに大きくなっている。これは、スコアの計算に使用する関連度をウィンドウ内の上位のものに絞ると、関連度の低いトークン同士のスコアが計算に含まれることが防止でき、重要なアテンションの情報が薄まってしまうのを防ぐことができるためと考えられる。すなわち、アテンションの大きさが大きくなる変化にともなって値が増加するような、アテンションに対する増加関数として重みを定義すると有効である。すなわち、上位のスコアの重みをより大きく、下位のスコアの重みをより小さく、という形でスコアの計算を行うようなものであれば、全ての重みを同一にするものよりも正しい選択を行える確率は高くなると考えられる。
【０１４１】
また、関連度の大きさとは別に、問題となるトークンの近辺のトークンについては大きな重みを与え、遠いトークンには小さな重みを与えるようにしてもよい。この場合の距離は、セルの中心間の幾何学的な距離でもよいし、一辺を接するセル同士の距離を１として、問題となるセルから他のセルまで、順番にセルをたどるようにして移動したセルの数の最小値を距離としてもよい。
【０１４２】
一方、これらとは別に、対訳コーパス等を教師データとしてこの重みを学習するようにしてもよい。
【０１４３】
＜動作＞
本発明の第１の実施の形態に係る機械翻訳システム１６０は以下のように動作する。特に図３を参照して、入力文Ｘ（図４に示す文２１０）が与えられると、単語クラス化処理部１８０がこの入力文Ｘをトークナイズする。単語クラス化処理部１８０はさらに、予め定められたクラス（数字、地名、人名等）に属するトークンを検出して、それぞれ対応するクラストークンに置換し（図４に示すクラス化後の文２１８）入力文Ｘとして、翻訳処理部１８４、クラストークン訳出保証部１９２及びクラストークン置換部１９６に与える。
【０１４４】
翻訳処理部１８４は、入力文Ｘに対してアテンションモデルによるＮＭＴを用いた翻訳を行い、出力文Ｙ（図４に示す翻訳後のトークン列２２２）をクラストークン訳出保証部１９２に出力する。この翻訳の際、翻訳処理部１８４は入出力のトークンの間の関連度を示すアテンションテーブルを作成し、関連度スコアＡとしてクラストークン訳出保証部１９２及びクラストークン置換部１９６に出力する。翻訳処理部１８４はさらに、翻訳関連情報１８８もクラストークン訳出保証部１９２に出力する。翻訳関連情報１８８は、前述したように入力文Ｘのトークン数ｍ、出力文Ｙのトークン数ｎ、及びクラストークンの集合Ｃ等を含む。
【０１４５】
出力文Ｙ、関連度スコアＡ及び翻訳関連情報１８８を受けたクラストークン訳出保証部１９２は以下のように動作する。
【０１４６】
図６を参照して、アテンション取得部２６０は関連度スコアＡを受けて記憶部２６２に格納する。翻訳関連情報取得部２６６は翻訳関連情報１８８を受けて記憶部２６２に格納する。出力文取得部２６８は出力文Ｙを受けて記憶部２６２に格納する。入力文受付部２７０は入力文Ｘを受け記憶部２６２に格納する。出力文取得部２６８は、入力文Ｘ内のクラストークンからなる集合と、出力文Ｙ内のクラストークンからなる集合との２つの集合が一致しているか否かを判定し（図１０のステップ３８７）、一致している場合には出力文Ｙをそのままクラストークン置換部１９６に渡す。
【０１４７】
出力文取得部２６８はさらに、出力文Ｙを記憶部２６２に格納したことを示す信号をダミートークン挿入部２７２に与える。ダミートークン挿入部２７２はこの信号に応答し、図１２に制御構造を示すプログラムを実行する。すなわちダミートークン挿入部２７２は、まず出力文Ｙの各トークンの間にｄ個ずつダミートークンを挿入することを前提に、ダミートークンを挿入した後の出力文Ｙ内のトークン数が入力文Ｘ内のトークンより多くなるような最小のｄを決定する（ステップ４４０及び図１３）。ステップ４４２で出力文Ｙの各トークン間にｄ個ずつダミートークンを挿入する。この挿入に伴い出力文Ｙのトークン数ｎが増加するので、出力文Ｙのトークン数ｎを更新する（ステップ４４４）。さらに、ダミートークンが挿入されたことにより、関連度スコアＡの更新が必要になるのでこれを更新する（ステップ４４６）。更新方法は構成の項で述べたとおりである。ステップ４４６の処理が終了するとダミートークン挿入部２７２（図６）は、ダミートークン割当部２７４による処理を起動する。
【０１４８】
図１４を参照して、ダミートークンの割当処理を実現するためにダミートークン割当部２７４は、集合Ｊｄｏｎｅを初期化し（ステップ５００）、修正出力文Ｙｍｏｄを初期化する（ステップ５０２）。
【０１４９】
さらにダミートークン割当部２７４は、インデックスｉを１から入力文Ｘのトークン数ｍまで１ずつ順次変化させながら、入力文Ｘのｉ番目のトークンｘ（ｉ）がクラストークンの集合Ｃに属するか否か、すなわちクラストークンのいずれかであるかを判定する。トークンｘ（ｉ）がクラストークンである場合には（ステップ５２０でＹＥＳ）、ダミートークン割当部２７４はインデックスｉとトークンｘ（ｉ）に対して図１５に示す処理を実行し、集合Ｊｃａｎｄを計算する（ステップ５２２）。
【０１５０】
図１５を参照して、ステップ５２２では、集合Ｊｃａｎｄを初期化（ステップ５４０）した後、予め準備しておいた判定ルーチンにより集合Ｊｃａｎｄを修正する（ステップ５４２）。
【０１５１】
この判定ルーチンの構成は図１６及び図１７に示されている。この例では、一時集合Ｊ１には、集合Ｊｄｏｎｅに存在していないインデックスｊが登録される。一時集合Ｊ２には、入力文Ｘの各トークンｘ（ｓ）（ｓ＝１，…，ｍ）との間の関連度スコアａ（ｓ，ｊ）の中で、関連度スコアａ（ｉ，ｊ）の大きさの順位が１位（最大）となるトークンｙ（ｊ）のインデックスｊが登録される。一時集合Ｊ３には、処理中のトークンｙ（ｊ）がトークンｘ（ｉ）と一致しているときのインデックスｊが登録される。
【０１５２】
図１６を参照して、ステップ５６６、５６８及び５７０により、一時集合Ｊ１、Ｊ２及びＪ３の積集合が空集合であるときにはＪ１∩（Ｊ２∪Ｊ３）が集合Ｊｃａｎｄに代入され、そうでないときにはＪ１∩Ｊ２∩Ｊ３が集合Ｊｃａｎｄに代入される。この結果、集合Ｊｃａｎｄは、複数の観点から修正された、トークンｘ（ｉ）に対応する候補であるトークンｙ（ｊ）のインデックスの集合となる。
【０１５３】
再び図１４を参照して、ステップ５２４では、ステップ５２２で計算された集合Ｊｃａｎｄを用いて修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅが修正される。具体的には、図１８に示す処理が実行される。
【０１５４】
図１８を参照して、この処理では集合Ｊｃａｎｄが空集合でなければそのまま集合Ｊｃａｎｄを用い、空集合であれば集合Ｊｃａｎｄ＝｛１，…，ｎ｝とする（ステップ６３０及び６３２）。集合Ｊｃａｎｄ内でｘ（ｉ）との間の関連度ａ（ｉ，ｊ）が最大となるインデックスｊａｓｓｉｇｎを決定し（ステップ６３４）、このｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加する（ステップ６３６）。そして、ｘ（ｉ）をトークンｙｍｏｄ（ｊａｓｓｉｇｎ）に代入する（ステップ６３８）。最後に、このようにして修正された修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅを記憶部２６２に保存する（ステップ６４０）。
【０１５５】
この処理により、修正出力文Ｙｍｏｄの、まだ入力文Ｘ内のトークンのいずれにも対応付けられていないトークンｙｍｏｄ（ｊ）のうちで、処理中のトークンｘ（ｉ）との関連度が最も高いものがトークンｘ（ｉ）と関連付けられてトークンｘ（ｉ）（これはクラストークンである。）により置換され、そのインデックスが集合Ｊｄｏｎｅに入力される。こうして、図１０のステップ５２２で計算された集合Ｊｃａｎｄを用いて、修正出力文Ｙｍｏｄが修正され、その修正に対応して集合Ｊｄｏｎｅが修正されたことになる。
【０１５６】
再び図１０を参照して、ステップ３９２で出力文Ｙに残った不要なトークンを削除する処理が行われる。図１９を参照して、このステップ３９２では、最初に最終修正出力文Ｙｏｕｔの値が修正出力文Ｙｍｏｄにより初期化される（ステップ６６０）。さらにインデックスｊを１から修正出力文Ｙｍｏｄ内のトークン数ｎまで順次１ずつ変化させながら以下の処理６６４が繰返される（ステップ６６０）。
【０１５７】
処理６６４は、最終修正出力文Ｙｏｕｔ内のｊ番目のトークンをそのままトークンとして出力すべきか、何も出力すべきでないかを検証して最終的な修正が行われた最終修正出力文Ｙｏｕｔを出力するためのものである。本実施の形態では、この処理において集合Ｊｄｏｎｅを使用する。
【０１５８】
この処理６６４では、修正出力文Ｙｍｏｄのｊ番目のトークンｙｍｏｄ（ｊ）がダミートークンのとき（ステップ６８０の判定でＹＥＳ）、トークンｙｍｏｄ（ｊ）が空文字であるとき、トークンｙｍｏｄ（ｊ）がクラストークンのいずれかであって（ステップ６８２でＹＥＳ）かつインデックスｊが集合Ｊｄｏｎｅにない（ステップ６８４でＮＯ）とき、及びトークンｙｍｏｄ（ｊ）がクラストークンのいずれかであって（ステップ６８２でＹＥＳ）かつインデックスｊが集合Ｊｄｏｎｅにあり（ステップ６８４でＹＥＳ）、かつトークンｙｍｏｄ（ｊ）が入力文Ｘ内になければ（ステップ６８５でＮＯ）、最終修正出力文Ｙｏｕｔのｊ番目のトークンｙｏｕｔ（ｊ）にＮＵＬＬが代入され、このトークンとしては何も出力されない。
【０１５９】
ステップ６８０の段階で残っているダミートークンは、トークンｘ（ｉ）のいずれにも対応していない。したがってここで余剰のダミートークンが削除される。ステップ６８１の処理により、意味のない空文字も出力文Ｙから削除される。ステップ６８２の処理により、最終修正出力文Ｙｏｕｔのトークンのうち、クラストークンでないものはそのまま出力される。ステップ６８４の処理により、最終修正出力文Ｙｏｕｔのうち、クラストークンであってかつトークンｘ（ｉ）のいずれにも関係付けられていないものがもし残っていれば削除される。ステップ６８５の処理により、最終修正出力文Ｙｏｕｔに残っているクラストークンであってトークンｘ（ｉ）のいずれかに対応付けられており、しかも入力文Ｘ内にあるものはそのまま最終修正出力文Ｙｏｕｔ内に出力され、そうでないものは削除される。
【０１６０】
こうして、全てのｊ＝１，…，ｎに対して処理６６４が終了したときに得られた最終修正出力文Ｙｏｕｔには、入力文Ｘ内に存在していたクラストークンが、各種類について入力文Ｘと同じ数だけ存在することになり、出力文Ｙには入力文Ｘに含まれるクラストークンと同じ種類のクラストークンが、各種類に同じ数だけ存在することが保証される。以下、この実施の形態の動作に関する説明では、記載を簡潔にするために最終修正出力文Ｙｏｕｔを単に出力文Ｙと呼ぶ。
【０１６１】
図３を参照して、この出力文Ｙがクラストークン置換部１９６に与えられる。クラストークン置換部１９６にはまた、翻訳処理部１８４から関連度スコアＡが与えられ、単語クラス化処理部１８０から入力文Ｘが与えられる。
【０１６２】
図７を参照して、アテンション情報取得部３００は関連度スコアＡを取得し、アテンション情報記憶部３０２に格納する。最終修正出力文取得部３０４は出力文Ｙを取得し、クラストークン抽出部３０８に対して出力する。入力文取得部３０６は入力文Ｘを取得しクラストークン抽出部３０８に与える。
【０１６３】
クラストークン抽出部３０８は以下のように動作する。クラストークン抽出部３０８は、入力文Ｘ及び出力文Ｙのクラストークンの位置、種類、及び種類ごとの数Ｎ１及びＮ２を特定する（図２０のステップ７５０及び７５２）。クラストークン抽出部３０８はこの情報を図７に示すクラストークン対応決定部３１０に与える。
【０１６４】
クラストークン対応決定部３１０は以下のようにして入力文Ｘのクラストークンと出力文Ｙのクラストークンのうち、同種のトークンが同数あるものについて、出力文Ｙ内のクラストークンと入力文Ｘ内の同種のクラストークンとを対応付ける。
【０１６５】
再び図２０を参照して、クラストークン対応決定部３１０は、全種類のクラストークンについてその数が入力文Ｘと出力文Ｙとで同一か否かを判定する（ステップ７５４）。これらのうちいずれか１つでも一致しないものがあれば、両者の数が一致しているという前提が成立していないので、ステップ７６２でエラーメッセージを表示して処理を終了する。
【０１６６】
全種類のクラストークンの数が入力文Ｘと出力文Ｙとで同数であることが確認できると（ステップ７５４でＹＥＳ）、各種類のクラストークンについて処理７５８を実行する（ステップ７５６）。すなわち、入力文Ｘ及び出力文Ｙの双方について、対象となるクラストークンの数がいずれも１なら、両者の対応を特にとる必要がないので処理を終了する（ステップ７７０でＹＥＳ）。クラストークンの数が２以上であれば、関連度スコアＡに基づいて、対象となるクラストークンについて、入出力の対象クラストークンの間で可能な組合せを全て求める。それら組合せの全てについて、各組合せにおけるクラストークンの間のスコアの合計を算出する。合計が最大となるような組合せをクラストークンの組合せに決定する。入出力の間で可能な組合せを全て計算し（ステップ７７２）、その組合せの各々について、関連度スコアの合計を計算する（ステップ７７２）。入出力の間のクラストークンの間のスコアの算出方法としては、図２１〜図２３に示した方法、図２４〜図２６に示した方法（第１の変形例）、図２７〜図２９に示した方法（第２の変形例）のいずれを採用しても良い。第１又は第２の変形例を採用した場合には、組合せごとの関連度スコアの合計を計算する前に、各クラストークンのスコアを、予め設定したフィルタを用いて再計算する。
【０１６７】
さらに、ステップ７７４で決定された組合せにしたがって、出力文Ｙ内の対象となるクラストークンを、入力文Ｘ内で対応するクラストークンのもとのトークンを辞書又はルールによって翻訳したもので置換する（ステップ７７６）。
【０１６８】
以上の処理７５８を全種類のクラストークンについて繰返すことで、出力文Ｙが完成する。この出力文Ｙをステップ７６０で出力し、翻訳を終了する。
【０１６９】
［第２の実施の形態］
＜ダミートークンの割当＞
第１の実施の形態では、出力文Ｙ内のダミートークンに対して入力文Ｘ内のクラストークンを割当てる際に、図１４〜図１７に示すような規則を用いており、採用する規則についても自由度が高い。これは、ヒューリスティックな規則による処理ということができる。しかし本発明はそのような実施の形態には限定されない。入力文Ｘ内のクラストークンの集合と、出力文Ｙ内のクラストークンの集合との間の関係に着目してダミートークンにクラストークンを割当てることもできる。この第２の実施の形態は、そのような考え方によるものである。
【０１７０】
この実施の形態が第１の実施の形態と異なるのは、図１４〜１７に示すダミートークンの割当を行うサブルーチンに代えて、図３０〜図３３に示すサブルーチンを採用した点である。このサブルーチンもダミートークンの割当を行う点では図１４〜図１７に示すものと同じである。
【０１７１】
図３０を参照して、この第２の実施の形態におけるダミートークンを割当てるサブルーチン９００は、入力文Ｘ内の全てのクラストークンを抽出し、重複を全て排除した異なりクラストークンの集合Ｃｘを計算するステップ９１０と、集合Ｃｘ内の各クラストークンｃの、入力文Ｘ内、及び出力文Ｙ内での出現（訳出）回数ＮＸ及びＮＹを計算するステップ９１２と、ＮＸとＮＹとの大小により各クラストークンｃを３つの集合Ｃｘ＿ｏｖｅｒ、集合Ｃｘ＿ｕｎｄｅｒ、集合Ｃｘ＿ｅｑｕａｌのいずれかに分類するステップ９１４とを含む。具体的には、ＮＹ＞ＮＸの場合、クラストークンｃを集合Ｃｘ＿ｏｖｅｒに分類する。ＮＹ＜ＮＸの場合、クラストークンｃを集合Ｃｘ＿ｕｎｄｅｒに登録する。ＮＹ＝ＮＸの場合、クラストークンｃを集合Ｃｘ＿ｅｑｕａｌに登録する。
【０１７２】
このプログラムはさらに、集合Ｃｘ＿ｅｑｕａｌに分類されたクラストークン（これを「同数訳出クラストークン」と呼ぶ。）に関する修正出力文Ｙｍｏｄと集合Ｊｄｏｎｅの更新をするステップ９１６と、集合Ｃｘ＿ｏｖｅｒに分類されたクラストークン（これを「過剰訳出クラストークン」と呼ぶ。）に関する修正出力文Ｙｍｏｄの更新をするステップ９１８と、集合Ｃｘ＿ｕｎｄｅｒに分類されたクラストークン（これを「過少訳出クラストークン」と呼ぶ。）に関する修正出力文Ｙｍｏｄの更新をするステップ９２０とを含む。ステップ９１６，９１８及び９２０は互いに独立なので、実行順序は任意である。修正出力文Ｙｍｏｄの同時更新に関する注意さえすれば、これらステップを同時並行的に行うことも可能である。
【０１７３】
<同数訳出クラストークンに関する処理〉
図３１は、図３０のステップ９１６の同数訳出クラストークンに関して修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅの更新処理を実現するサブルーチンの制御構造を示す。図３１を参照して、このサブルーチンは、集合Ｃｘ＿ｅｑｕａｌに属する各クラストークンｃに対して、処理９３２を実行するステップ９３０を含む。
【０１７４】
処理９３４は、変数ｋを１から修正出力文Ｙｍｏｄ内のトークン数まで１ずつ変化させながら、集合Ｊｄｏｎｅを更新する処理９３６を繰り返し実行するステップ９３４を含む。
【０１７５】
処理９３６は、処理中のクラストークンｃが修正出力文Ｙｍｏｄ内のｋ番目のトークンと一致するか否かを判定するステップ９４０と、ステップ９４０の判定が肯定のときにこのときの変数ｋを集合Ｊｄｏｎｅに追加して処理を終了するステップ９４２とを含む。ステップ９４０の判定が否定であるときには何もしない。
【０１７６】
この処理により、修正出力文Ｙｍｏｄ内でこの同数訳出クラストークンに対応するインデックスが全て集合Ｊｄｏｎｅに登録される。
【０１７７】
<過剰訳出クラストークンに関する処理〉
図３２は、図３０のステップ９１８の過剰訳出クラストークン処理を実現するサブルーチンの制御構造を示す。図３２を参照してこのサブルーチンは、集合Ｃｘ＿ｏｖｅｒに属する各クラストークンｃに対し、以下の処理９５１を繰り返し実行するステップ９５０を含む。
【０１７８】
処理９５１は、修正出力文Ｙｍｏｄ内に訳出された処理対象のクラストークンｃを、入力文Ｘ内に出現した同トークンｃに対応するものと、対応しない（本来訳出されるべきでなかったもの）に分離する。そして、前者のインデックスを集合Ｊｄｏｎｅに保存する。こうすることで、最後の修正ルーチンで入力文Ｘに出現しなかったものを削除できる。集合Ｃｘ＿ｏｖｅｒに登録されたクラストークンはいずれも修正出力文Ｙｍｏｄ（及び出力文Ｙ）内の訳出回数が入力文Ｘ内の出現回数よりも多い。そのため、削除されるべきクラストークンが必ず存在している。それらを削除すれば当該クラストークンの数は翻訳前後で同じになることが保証される。
【０１７９】
具体的には、処理９５１は、集合ＪｃａｎｄをＪｃａｎｄ＝｛ｊ｜ｙｍｏｄ(j)＝ｃ，ｊ＝１，…，ｎ｝として計算するステップ９５２と、変数ｉを１から入力文Ｘ内のトークン数ｍまで１ずつ変化させながら処理９５６を実行するステップ９５４とを含む。ステップ９５２により、修正出力文Ｙｍｏｄ内における処理中のクラストークンｃの出現位置のインデックスが集合Ｊｃａｎｄに保存される。
【０１８０】
処理９５６は、トークンｘ（ｉ）がクラストークンｃの値を持っている場合、修正出力文Ｙｍｏｄ内でこのインデックスｉに対応すべきトークンの同定処理をする。
【０１８１】
具体的には、処理９５６は、処理中の変数ｉに対応する入力文Ｘのトークンｘ（ｉ）が処理中のクラストークンｃと一致するか否かを判定し、一致しなければこのトークンについてそれ以上の処理をせず、次のｉに対する処理に移行するステップ９７０と、ステップ９７０の判定が肯定のときに、集合Ｊｃａｎｄに属する全てのｊに対して関連度スコアａ（ｉ、ｊａｓｓｉｇｎ）≧ａ（ｉ、ｊ）を満たす様なインデックスｊａｓｓｉｇｎを修正出力文Ｙｍｏｄ内においてトークンｘ（ｉ）に対応するトークンのインデックスとして決定するステップ９７２と、このインデックスｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加し、集合Ｊｃａｎｄから削除して処理９５６を終了するステップ９７４とを含む。
【０１８２】
インデックスｊａｓｓｉｇｎを集合Ｊｃａｎｄから削除することで、ｙｍｏｄ（ｊａｓｓｉｇｎ）は以降のインデックスｉに関する計算から除外される。
【０１８３】
<過少訳出クラストークンに関する処理〉
図３３は、図３０に示すステップ９２０の過少訳出クラストークンの修正処理を実現するサブルーチンの制御構造を示すフローチャートである。集合Ｃｘ＿ｕｎｄｅｒに登録された過少訳出クラストークンの場合、修正出力文Ｙｍｏｄに訳出されたクラストークンｃの数が入力文Ｘ内の同じトークンｃの数より小さい。したがって、このサブルーチンの機能は、修正出力文Ｙｍｏｄ内に訳出された処理対象のクラストークンｃを必ず最終的な訳出結果として保存しながら、修正出力文Ｙｍｏｄ内の他のトークンをクラストークンｃに置き換えることで、入力文Ｘ内に出現した同トークンｃとの数合わせを実施するものである。集合Ｃｘ＿ｕｎｄｅｒに登録されたクラストークンは常に修正出力文Ｙｍｏｄ（及び出力文Ｙ）内の訳出回数が入力文Ｘ内の出現回数よりも少ないため、修正出力文Ｙｍｏｄに既にあるクラストークンｃだけでは訳出が足りない。そこで、まず既に修正出力文Ｙｍｏｄ内にあるクラストークンｃを全て入力文Ｘ内の同じクラストークンｃと対応付けた後、入力文Ｘ内のまだ対応付けされていないクラストークンｃに対応するトークンを探すことになる。
【０１８４】
具体的には、このルーチンは、各クラストークンｃ∈集合Ｃｘ＿ｕｎｄｅｒに対して以下の処理９９１を実行するステップ９９０を含む。
【０１８５】
処理９９１は、入力文Ｘ内の全トークンのうち、当該クラストークンｃの出現位置のインデックスを全て含む集合Ｉｃａｎｄを計算するステップ９９２と、出力文Ｙ内の全トークンのうち、当該クラストークンｃの出現位置のインデックスを全て含む集合Ｊｃａｎｄを計算するステップ９９４と、集合Ｊｃａｎｄ内の全てのインデックスを、集合Ｉｃａｎｄ内のいずれかのインデックスと重複なく対応付けるステップ９９６とを含む。
【０１８６】
ステップ９９２は、入力文Ｘ内の全トークンのうち、処理中のクラストークンｃの出現位置のインデックスを集合Ｉｃａｎｄに保存する。ステップ９９４は、修正出力文Ｙｍｏｄ内の全トークンのうち、処理中のクラストークンｃの出現位置のインデックスを集合Ｊｃａｎｄに保存する。
【０１８７】
ステップ９９６は、集合Ｊｃａｎｄ内の各インデックスｊについて処理９９８を実行する。処理９９８は、集合Ｉｃａｎｄに属する全てのインデックスｉに対して関連度スコアａ（ｉａｓｓｉｇｎ，ｊ）≧ａ（ｉ、ｊ）を満たすインデックスｉａｓｓｉｇｎを決定するステップ１０１０と、このインデックスｉａｓｓｉｇｎを集合Ｊｄｏｎｅに追加し、集合Ｉｃａｎｄから削除してこの処理を終了するステップ１０１２とを含む。
【０１８８】
処理９９１はさらに、修正出力文Ｙｍｏｄ内のダミートークンの集合Ｊｄｕｍｍｙを集合Ｊｄｕｍｍｙ＝｛ｊ｜ｙｍｏｄ（ｊ）＝ダミートークン、ｊ＝１，…，ｎ｝により計算することにより、処理中のクラストークンｃと置き換えても良いトークンの出現位置を示すインデックスを集合Ｊｃａｎｄに保存するステップ１０００と、集合Ｉｃａｎｄ内でまだ修正出力文Ｙｍｏｄのインデックスと対応付けられていないインデックスを全て修正出力文Ｙｍｏｄ内の未割当のダミートークンのインデックスに対応付けるステップ１００２とを含む。ステップ１０００では、クラストークンｃと置換えて良いトークンとしてダミートークンのみを選択しているが、他のトークンを選択するようにしてもよい。
【０１８９】
ステップ１００２は、集合Ｉｃａｎｄ内の各インデックスｉについて処理１００４を繰返す。処理１００４の目的は、入力文Ｘ内に出現したクラストークンｃのうち、修正出力文Ｙｍｏｄ内の同じトークンのいずれとも対応付けされていないものを、修正出力文Ｙｍｏｄ内の何らかのトークンと重複なく対応付けることである。この処理では、ステップ９９６で内容が減少した集合Ｉｃａｎｄ内の全てのインデックスｉについて、何らかの処理により集合Ｊｃａｎｄ内のインデックスと対応付ける。本実施の形態では、関連度スコアａ（ｉ、ｊ）を参照して、最大値を与えるｊをこのクラストークンｃに対応付けるものとする。
【０１９０】
すなわち、処理１００４は、集合Ｊｄｕｍｍｙに属する全てのインデックスｊについてａ（ｉ、ｊａｓｓｉｇｎ）≧ａ（ｉ、ｊ）を満たすインデックスｊを決定しｊａｓｓｉｇｎとするステップ１０２０と、インデックスｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加するステップ１０２２と、クラストークンｃをトークンｙｍｏｄ（ｊａｓｓｉｇｎ）に代入するステップ１０２４と、インデックスｊａｓｓｉｇｎを集合Ｊｄｕｍｍｙから削除して処理１００４を終了するステップ１０２６とを含む。
【０１９１】
＜動作＞
この第２の実施の形態に係る機械翻訳システムは以下のように動作する。この機械翻訳システムにおいて第１の実施の形態の機械翻訳システム１６０と異なるのは、図６のクラストークン訳出保証部１９２内の、ダミートークン割当部２７４の部分である。したがってこの部分のみについて以下に動作を説明する。具体的には、この第２の実施の形態は、第１の実施の形態の図１４に示すステップ３９０を実現するサブルーチンに代えて、図３０に示すサブルーチン９００を採用する点で異なっている。ここまでの処理により、出力文Ｙには、全体のトークン数が入力文Ｘのトークン数より大きくなるようにダミートークンが挿入されていることは第１の実施の形態と同様である。
【０１９２】
図３０を参照して、この第２の実施の形態では、サブルーチン９００は、入力文Ｘ内の全てのクラストークンを抽出し、重複を全て排除した異なりクラストークンの集合Ｃｘを計算する（ステップ９１０）。さらに、集合Ｃｘ内の各クラストークンｃの、入力文Ｘ内、及び出力文Ｙ内での出現回数ＮＸ及びＮＹを計算する（ステップ９１２）。続くステップ９１４で、ＮＸとＮＹとの大小により各クラストークンｃを３つの集合Ｃｘ＿ｏｖｅｒ、集合Ｃｘ＿ｕｎｄｅｒ、集合Ｃｘ＿ｅｑｕａｌのいずれかに分類する。具体的には、ＮＹ＞ＮＸの場合、クラストークンｃを集合Ｃｘ＿ｏｖｅｒに分類する。ＮＹ＜ＮＸの場合、クラストークンｃを集合Ｃｘ＿ｕｎｄｅｒに登録する。ＮＹ＝ＮＸの場合、クラストークンｃを集合Ｃｘ＿ｅｑｕａｌに登録する。
【０１９３】
続いて、集合Ｃｘ＿ｅｑｕａｌに分類された同数訳出クラストークンに関する修正出力文Ｙｍｏｄ及び集合Ｊｄｏｎｅの更新をする（ステップ９１６）。
【０１９４】
図３１を参照して、同数訳出クラストークンに関する処理を行うステップ９１６は、集合Ｃｘ＿ｅｑｕａｌに属する各クラストークンｃに対して、変数ｋを１から修正出力文Ｙｍｏｄ内のトークン数まで１ずつ変化させながら、集合Ｊｄｏｎｅを更新する処理９３６を繰り返し実行する（ステップ９３４）。
【０１９５】
ステップ９３４では、処理中のクラストークンｃが修正出力文Ｙｍｏｄ内のｋ番目のトークンと一致するか否かを判定し（ステップ９４０）、一致していればこのときの変数ｋを集合Ｊｄｏｎｅに追加して処理を終了する（ステップ９４２）。ステップ９４０の判定が否定であるときには何もしない。この処理により、修正出力文Ｙｍｏｄ内でこの同数訳出クラストークンに対応するインデックスが全て集合Ｊｄｏｎｅに登録される。
【０１９６】
図３０に戻り、ステップ９１６の後、過剰訳出トークンの修正処理が実行される（ステップ９１８）。図３２を参照して、ステップ９１８の過剰訳出クラストークン処理を実現するサブルーチンは、集合Ｃｘ＿ｏｖｅｒに属する各クラストークンｃに対し、以下の処理９５１を繰り返し実行する（ステップ９５０）。
【０１９７】
処理９５１では、修正出力文Ｙｍｏｄ内に訳出された処理対象のクラストークンｃを、入力文Ｘ内に出現した同トークンｃに対応するものと、対応しない（本来訳出されるべきでなかったもの）に分離する。そして、前者のインデックスを集合Ｊｄｏｎｅに保存する（ステップ９５２）。続いて、インデックスｉを１から入力文Ｘ内のトークン数ｍまで１ずつ変化させながら、以下の処理９５６を実行する（ステップ９５４）。
【０１９８】
処理９５６では、トークンｘ（ｉ）がクラストークンｃの値を持っている場合、修正出力文Ｙｍｏｄ内でこのインデックスｉに対応すべきトークンの同定処理をする。すなわち、処理中の変数ｉに対応する入力文Ｘのトークンｘ（ｉ）が処理中のクラストークンｃと一致するか否かを判定し（ステップ９７０）、一致しなければこのトークンについてそれ以上の処理をせず、次のｉに対する処理に移行する。ステップ９７０の判定が肯定のときには、ステップ９７２で集合Ｊｃａｎｄに属する全てのｊに対して関連度スコアａ（ｉ、ｊａｓｓｉｇｎ）≧ａ（ｉ、ｊ）を満たす様なインデックスｊａｓｓｉｇｎを修正出力文Ｙｍｏｄ内においてトークンｘ（ｉ）に対応するトークンのインデックスとして決定する。続くステップ９７４で、このインデックスｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加し、集合Ｊｃａｎｄから削除して処理９５６を終了する。
【０１９９】
インデックスｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加することでトークンｙｍｏｄ（ｊａｓｓｉｇｎ）のインデックスｊａｓｓｉｇｎが集合Ｊｄｏｎｅに追加され、トークンｙｍｏｄ（ｊａｓｓｉｇｎ）がいずれかのトークンに割当てられたことが分かる。また、ｊａｓｓｉｇｎを集合Ｊｃａｎｄから削除することで、ｙｍｏｄ（ｊａｓｓｉｇｎ）は以降のインデックスｉに関する計算から除外される。
【０２００】
再び図３０を参照して、ステップ９１８の後、ステップ９２０の過少訳出クラストークンの修正が行われる。図３３を参照して、ステップ９２０を実現するサブルーチンは、集合Ｃｘ＿ｕｎｄｅｒに属する各クラストークンに対して、入力文Ｘ内の全トークンのうち、当該クラストークンｃの出現位置のインデックスを全て含む集合Ｉｃａｎｄを集合Ｉｃａｎｄ＝｛ｉ｜ｘ（ｉ）＝ｃ，ｉ＝１，…，ｍ｝により算出する（ステップ９９２）。このステップ９９２のサブルーチンは、修正出力文Ｙｍｏｄ内に訳出された処理対象のクラストークンｃを必ず最終的な訳出結果として保存しながら、修正出力文Ｙｍｏｄ内の他のトークンをクラストークンｃに置き換えることで、入力文Ｘ内に出現した同トークンｃとの数合わせを実施する。既に修正出力文Ｙｍｏｄ内にあるクラストークンｃを全て入力文Ｘ内の同じクラストークンｃと対応付けた後、入力文Ｘ内のまだ対応付けされていないクラストークンｃに対応するトークンを修正出力文Ｙｍｏｄ内で探すことで入出力の間でクラストークンの数を一致させる。
【０２０１】
続いて、出力文Ｙ内の全トークンのうち、当該クラストークンｃの出現位置のインデックスを全て含む集合Ｊｃａｎｄを計算する（ステップ９９４）。さらに、集合Ｊｃａｎｄ内の全てのインデックスを、集合Ｉｃａｎｄ内のいずれかのインデックスと重複なく対応付ける処理を実行する（ステップ９９６）。
【０２０２】
ステップ９９６では、集合Ｊｃａｎｄ内の各インデックスｊについて、集合Ｉｃａｎｄに属する全てのインデックスｉに対して関連度スコアａ（ｉａｓｓｉｇｎ，ｊ）≧ａ（ｉ、ｊ）を満たすインデックスｉａｓｓｉｇｎを決定する（ステップ１０１０）。続くステップ１０１２において、このインデックスｉａｓｓｉｇｎを集合Ｊｄｏｎｅに追加し、集合Ｉｃａｎｄから削除してこの処理を終了する。集合Ｊｃａｎｄ内の全てのインデックスｊについて処理９９８を実行するとステップ９９６の処理は終了し、制御はステップ１０００に移行する。
【０２０３】
ステップ１０００では、修正出力文Ｙｍｏｄ内のダミートークンの集合Ｊｄｕｍｍｙを集合Ｊｄｕｍｍｙ＝｛ｊ｜ｙｍｏｄ（ｊ）＝ダミートークン、ｊ＝１，…，ｎ｝により計算する。この処理により、処理中のクラストークンｃと置き換えても良いトークンの出現位置を示すインデックスが集合Ｊｃａｎｄに保存される。この後、ステップ１００２の処理により、集合Ｉｃａｎｄ内でまだ修正出力文Ｙｍｏｄのインデックスと対応付けられていないインデックスを全て修正出力文Ｙｍｏｄ内のいずれかのトークンとのインデックスと対応付ける。
【０２０４】
具体的には、ステップ１００２では、集合Ｉｃａｎｄ内の各インデックスｉについて、入力文Ｘ内に出現したクラストークンｃのうち、修正出力文Ｙｍｏｄ内の同じトークンのいずれとも対応付けされていないものを、修正出力文Ｙｍｏｄ内の何らかのトークンと重複なく対応付けるための処理１００４を繰返す。
【０２０５】
すなわち、処理１００４では、集合Ｊｄｕｍｍｙに属する全てのインデックスｊについてａ（ｉ、ｊａｓｓｉｇｎ）≧ａ（ｉ、ｊ）を満たすインデックスｊを決定しｊａｓｓｉｇｎとする（ステップ１０２０）。こうして求めたインデックスｊａｓｓｉｇｎを集合Ｊｄｏｎｅに追加する（ステップ１０２２）。さらに、クラストークンｃをトークンｙｍｏｄ（ｊａｓｓｉｇｎ）に代入する（ステップ１０２４）。最後に、インデックスｊａｓｓｉｇｎを集合Ｊｄｕｍｍｙから削除して処理１００４を終了する（ステップ１０２６）とを含む。
【０２０６】
＜変形例＞
上記実施の形態では、翻訳方式としてアテンションモデルを用いるＮＭＴを用いている。しかし本発明はそのような実施の形態には限定されない。翻訳の過程で、アテンションと同様、入力文Ｘのトークンと出力文Ｙのトークンとの間の関連度を何らかの形で算出したり利用したりするものであれば、その関連度を上記実施の形態のアテンションに代えて、又はアテンションと組合せて用いることができる。
【０２０７】
例えばＰＢＭＴの場合、翻訳にはフレーズテーブルが用いられる。フレーズテーブルは、事前に対訳コーパスから算出されるものであって、翻訳元のフレーズと翻訳先のフレーズとの対応関係を確率で示したものであり、この確率をアテンションと同様に用いることができる。
【０２０８】
また、翻訳の場合には、原文の単語に対して訳文の単語を選択する際の翻訳単語選択確率が単語ごと（フレーズごと）に計算される。翻訳単語選択スコアＰは、出力文Ｙのトークンの数であるｎ個の、数値（又は数値ベクトル）の集合である。その第ｊ番目の要素ｐ（ｊ）は出力トークンｙ（ｊ）の値を選択した時の確からしさ、トークンｙ（ｊ）の候補となったあらゆる翻訳先言語の単語の確からしさ（数値のベクトル）等として表現できる。これらを関連度スコアとして用いることもできる。
【０２０９】
また、翻訳単語選択スコアとしては、アテンションモデルのニューラル翻訳機で計算される、各出力トークンの単語選択確率を用いることができる。一般的な統計的翻訳システムで統計的モデルにより計算される単語生成確率を利用することもできる。翻訳先言語の辞書又は外部コーパス内の単語生成頻度等を用いることもできる。
【０２１０】
さらに、言語間の単語翻訳辞書に記載されている翻訳例を言語間トークンの関連ルールとみなすことで、アテンションと同様のスコアを定義することができ、これを上記実施の形態のアテンションに代えて、又はアテンションと組合せて用いることもできる。
【０２１１】
なお、本発明の第５の局面に係るクラストークン集合一致保証装置は、１又は複数のトークンを含む翻訳元言語の入力文を、１又は複数のトークンを含む翻訳先言語の出力文に翻訳する翻訳装置とともに用いられ、出力文に含まれるクラストークンの集合が入力文に含まれるクラストークンの集合と等しくなることを保証する。翻訳装置は、入力文に含まれる各トークンと、出力文に含まれる各トークンとの関連度を出力可能である。このクラストークン集合一致保証装置は、翻訳装置から出力文を受け、入力文に含まれるクラストークンの集合と、出力文に含まれるクラストークンの集合とからなる２つの集合が一致しているか否かを判定するための一致判定手段と、一致判定手段により２つの集合が一致しないと判定されたことに応答して、出力文に、少なくとも出力文のトークン数が入力文内のトークンの数により定まる一定数より多くなるようにダミートークンを挿入することで出力文を拡張するためのダミートークン挿入手段と、入力文のクラストークンの各々について、出力文中で当該入力文中のクラストークンに対応するトークンを関連度に基づいて割当て、当該入力文中のクラストークンに置換するトークン割当手段と、ダミートークンのうち、トークン割当手段により入力文のクラストークンのいずれにも割当てられなかったダミートークンを出力文から削除するためのダミートークン削除手段とを含む。
【０２１２】
好ましくは、トークン割当手段は、入力文のクラストークンの各々について、出力文中で当該入力文中のクラストークンに対応するトークンの候補の集合を関連度に基づいて計算する候補集合計算手段と、候補の集合から、入力文中のクラストークンとの関連度が最も高いトークンを当該入力文中のクラストークンに割当てるための手段とを含む。
【０２１３】
より好ましくは、翻訳装置は、翻訳に際して、入力文中の各トークンと出力文中の各トークンとの間の関連度を数値であるアテンションスコアにより表すアテンションモデルを用いる翻訳装置である。トークン割当手段は、入力文のクラストークンの各々について、当該入力文のクラストークンとのアテンションスコアが最も高いトークンを出力文から選択し、当該入力文中のクラストークンに置換するトークン置換手段を含む。
【０２１４】
さらに好ましくは、翻訳装置は、入力文中の各トークンに対する翻訳後のトークンを選択するための訳語選択スコアを用いる翻訳装置である。トークン割当手段は、入力文のクラストークンの各々について、当該クラストークンに対する訳語選択スコアが最も高いトークンを出力文から選択し、当該入力文中のクラストークンに置換するトークン置換手段を含む。
【０２１５】
好ましくは、トークン割当手段は、入力文中の各クラスのクラストークンの数と、出力文中に訳出された当該クラストークンの数とに応じて異なる方法にしたがって出力文を修正する修正手段を含む。
【０２１６】
より好ましくは、修正手段は、入力文中の特定クラスのクラストークンの数である第１のクラストークン数を検出するための第１の検出手段と、出力文中の特定クラスのクラストークンの数である第２のクラストークン数を検出するための第２の検出手段と、第１のクラストークン数と第２のクラストークン数とを比較するための比較手段と、比較手段により、第１のクラストークン数が第２のクラストークン数より小さいと判定されたことに応答して、入力文中の特定クラスのクラストークンの各々に対し、出力文中の、当該特定クラスのクラストークンであって入力文中の当該特定クラスのクラストークンに割当てられていないもののうち１つを、入力文中の当該クラストークンとの関連度に基づいて選択し当該クラストークンに割当てる第１の手段と、比較手段により、第１のクラストークン数が第２のクラストークン数より大きいと判定されたことに応答して、出力文中の特定クラスのクラストークンの各々に対し、入力文中の、当該特定クラスのクラストークンであってまだ出力文中の当該特定クラスのクラストークンに割当てられていないもののうち１つを、出力文中の当該クラストークンとの関連度に基づいて選択し当該クラストークンに割当て、さらに、入力文中の、当該特定クラスのクラストークンであってまだ出力文中の当該特定クラスのクラストークンに割当てられていないものの各々に対し、出力文中のダミートークンであって、入力文中の、当該特定クラスのクラストークンに割当てられていないダミートークンのうちの１つを、関連度に基づいて当該クラストークンに割当てる第２の手段と、比較手段により、第１のクラストークン数が第２のクラストークン数と等しいと判定されたことに応答して、出力文中の当該クラストークンを修正せず残す第３の手段とを含む。
【０２１７】
本発明の第６の局面に係るクラストークン集合一致保証方法は、１又は複数のトークンを含む翻訳元言語の入力文を、１又は複数のトークンを含む翻訳先言語の出力文に翻訳する翻訳装置とともに用いられ、出力文に含まれるクラストークンの集合が第１の出力文に含まれるクラストークンの集合と等しくなることを保証する、コンピュータを用いて実現される方法である。翻訳装置は、入力文に含まれる各トークンと、出力文に含まれる各トークンとの関連度を出力可能である。このクラストークン集合一致保証方法は、翻訳装置から出力文を受け、入力文に含まれるクラストークンの集合と、出力文に含まれるクラストークンの集合とからなる２つの集合が一致しているか否かを判定する一致判定ステップと、一致判定ステップにおいて２つの集合が一致しないと判定されたことに応答して、出力文に、少なくとも出力文のトークン数が入力文内のトークンの数により定まる一定数より多くなるようにダミートークンを挿入することで出力文を拡張するダミートークン挿入ステップと、入力文のクラストークンの各々について、出力文中で当該入力文中のクラストークンに対応するトークンを関連度に基づいて割当て、当該入力文中のクラストークンに置換するトークン割当ステップと、ダミートークンのうち、トークン割当ステップにおいて入力文のクラストークンのいずれにも割当てられなかったダミートークンを出力文から削除するダミートークン削除ステップとを含む。
【０２１８】
本発明の第７の局面に係るコンピュータプログラムは、コンピュータを、上記したいずれかの装置の各手段として機能させる。
【０２１９】
本発明の第８の局面に係るコンピュータ読取可能な記憶媒体は、上記第３の局面に係るコンピュータプログラムを記録した記憶媒体である。
【０２２０】
今回開示された実施の形態は単に例示であって、本発明が上記した実施の形態のみに制限されるわけではない。本発明の範囲は、発明の詳細な説明の記載を参酌した上で、特許請求の範囲の各請求項によって示され、そこに記載された文言と均等の意味及び範囲内での全ての変更を含む。
【符号の説明】
【０２２１】
Ａ  関連度スコア
Ｃ  クラストークンの集合
Ｃｘ＿ｕｎｄｅｒ  過少訳出クラストークンの集合
Ｃｘ＿ｅｑｕａｌ  同数訳出クラストークンの集合
Ｃｘ＿ｏｖｅｒ  過剰訳出クラストークンの集合
Ｊｃａｎｄ  クラストークン割当候補のインデックスの集合
Ｊｄｕｍｍｙ  ダミートークンの集合
Ｊｄｏｎｅ  クラストークン割当済のインデックスの集合
Ｘ、１６２  入力文
Ｙ  出力文
Ｙｍｏｄ  修正出力文
Ｙｏｕｔ  最終修正出力文
５０  ＮＭＴ
６０、２４０  入力文
６２  連続値ベクトルの系列
６４  特徴ベクトル
７０、１４０  出力文
１００  アテンションモデルのＮＭＴ
１６０  機械翻訳システム
１６４、２３０  訳文
１８０  単語クラス化処理部
１８４  翻訳処理部
１８８  翻訳関連情報
１９２  クラストークン訳出保証部
１９６  クラストークン置換部
２６０  アテンション取得部
２６２  記憶部
２６６  翻訳関連情報取得部
２６８  出力文取得部
２７０  入力文受付部
２７２  ダミートークン挿入部
２７４  ダミートークン割当部
２７６  不要トークン削除部
２７８  出力部
３００  アテンション情報取得部
３０２  アテンション情報記憶部
３０４  最終修正出力文取得部
３０６  入力文取得部
３０８  クラストークン抽出部
３１０  クラストークン対応決定部
３１２  クラストークン翻訳部
【図１】
2019057244.tif 000009
【図２】
2019057244.tif 000010
【図３】
2019057244.tif 000011
【図４】
2019057244.tif 000012
【図５】
2019057244.tif 000013
【図６】
2019057244.tif 000014
【図７】
2019057244.tif 000015
【図８】
2019057244.tif 000016
【図９】
2019057244.tif 000017
【図１０】
2019057244.tif 000018
【図１１】
2019057244.tif 000019
【図１２】
2019057244.tif 000020
【図１３】
2019057244.tif 000021
【図１４】
2019057244.tif 000022
【図１５】
2019057244.tif 000023
【図１６】
2019057244.tif 000024
【図１７】
2019057244.tif 000025
【図１８】
2019057244.tif 000026
【図１９】
2019057244.tif 000027
【図２０】
2019057244.tif 000028
【図２１】
2019057244.tif 000029
【図２２】
2019057244.tif 000030
【図２３】
2019057244.tif 000031
【図２４】
2019057244.tif 000032
【図２５】
2019057244.tif 000033
【図２６】
2019057244.tif 000034
【図２７】
2019057244.tif 000035
【図２８】
2019057244.tif 000036
【図２９】
2019057244.tif 000037
【図３０】
2019057244.tif 000038
【図３１】
2019057244.tif 000039
【図３２】
2019057244.tif 000040
【図３３】
2019057244.tif 000041