COTOHA API での英語の解析
COTOHA APIを使えば日本語の解析ができる。
だが、COTOHA API なら、日本語の解析だけでなく、英語の解析もできる。
例えば、COTOHA API で "something just like this" を解析してみると、"サムシング ジャスト ライク ディス" というカタカナ読みが得られるのだ。
未登録語の解析
しかし、COTOHA API では、辞書にない単語はアルファベット1文字の読みを連結した読みになってしまうようだ。
{"form": "london", "kana": "エルオーエヌディーオーエヌ"}
{"form": "english", "kana": "イーエヌジーエルアイエスエッチ"}
{"form": "sunday", "kana": "エスユーエヌディーエーワイ"}
※必要な要素のみ
英単語をカタカナ読みに変換
英単語をカタカナに変換するのは、まさに「翻訳」だ。
英単語をアルファベット文字の系列とみなし、カタカナ読みをカタカナ文字の系列とみなせば、アルファベットの系列をカタカナの系列に変換する encoder-decoder の問題とみなせる。
そして、学習データさえあれば、deep learning で学習して、英単語をカタカナに翻訳することができる。
※すでに誰かがやっているはずだと思うが。。。
学習データの作成
『詳解 ディープラーニング 第2版』をで紹介されている英文の学習データを COTOHA API で解析する。
そして、英単語がアルファベット読みになっていないものを抽出して、英語⇒カタカナの学習データとする。
実際の学習データの作成手順は以下のとおりだ。
[1] アルファベットからカタカナ読みに変換する変換表を作成する。
具体的には、"a" => "エー"、"b" => "ビー"、 ...、"z" => "ゼット" という変換表を作成する。
[2] 英単語を [1] の変換表を使って、アルファベット読みを生成する。
例えば、"pen" から "ピーイーエヌ" を生成する。
[3] COTOHA API の解析結果の kana とアルファベット読みを比較して、アルファベット読みと一致していないものを出力する。
例えば、"pen" の kana は "ペン" となるため、学習データとするが、"ok" の kana は "オーケー" というアルファベット読みと一致するため、学習データとはしない。
学習してみる
『詳解 ディープラーニング 第2版』を参考にして、入力:英単語 ⇒ 出力:カタカナ読み を ニューラルネットワーク(Bidirectional LSTM)で学習してみた。
学習データに含まれる英単語については、うまく学習できているようだ。
入力: city
出力: シティ
入力: answer
出力: アンサー
入力: question
出力: クエスチョン
入力: beautiful
出力: ビューティフル
入力: station
出力: ステーション
学習していない英単語で試してみる
学習していない英単語で、ニューラルネットワークの学習成果を見てみた。
入力: natural
出力: ナチュラル
自然な感じだ。
入力: language
出力: ラングエッジ
忠実なカタカナ読みだと、こんな感じになるのだろう。
入力: scientist
出力: サイエンティスト
意外にも、うまくいっている。
入力: sunday
出力: サンディ
いい感じだ。
さらに試してみる
前回の投稿で、"COTOHA" を COTOHA API で解析した結果では、"COTOHA" は辞書に登録されていないためか、読みは "シーオーティーオーエッチエー" だった。
今回、COTOHA API の解析結果を学習することで、"COTOHA" を正しく読めるようになったのだろうか?
まずは、こちらから。
入力: qiita
出力: クイット
"quit" は学習データにはないのだが。。。
さぁ、どうだろう。
入力: cotoha
出力: コール
あぁ、だめだ。。。
おわりに
最新技術の deep learning を使って、COTOHA API の解析結果を学習して、英単語をカタカナ読みに翻訳してみた。
ある程度うまくいったものの、"COTOHA" を正しく翻訳することはできなかった。
"COTOHA" に追いつくのは、まだまだ先のようだ。