mentaiko_gumaふと、キーボードの配列は文字の入力に適しているのかが気になった。QWERTY配列は歴史的に入力効率とかを考えて作られているわけではなさそう。文字の出現回数などを考慮して作られたキー配列としてはDvorak配列が有名。誰かが(それこそDvorak配列を生み出す過程で)まじめに考えてるだろうけど、気になってしまったので自分でも分析してみる。今回は日本語と英語のWikipediaのデータ(の一部)を使って文字の頻度からキー配列について考える。ついでに、隠れマルコフモデルでどの文字がどの指に対応するべきかを推論してみる。結論から言うと、Dvorak配列はよく考えられていた。データと前処理wikipediaの2020/01/01のdumpデータを使う。今回は英語と日本語について分析したいので、この二言語を次のURLから探してダウンロードする。英語:https://dumps.wikimedia.org/enwiki/20200101/日本語:https://dumps.wikimedia.org/jawiki/20200101/全部のデータを使うと永遠に分析が終わらないので、いくつかの記事を適当にサンプリングして使う(後述)。出現するすべての文字を考慮していてはキリがないので、今回はアルファベットと数字、コロンとカンマだけを対象にした。具体的に考慮する文字種は以下のとおりである。アルファベット:abcdefghijklmnopqrstuvwxyz数字:0123456789コロン、カンマ:.,上記に含まれない文字はすべて削除した。日本語はローマ字で入力されることを想定し、記事に含まれるすべてのテキストをローマ字に変換した。日本語からローマ字への変換にはpythonのパッケージであるkakasiを使用した。テキストは次のようになる。BC.alexanderwastagusordespotofpheraeinthessaly,andruledfrom369toc.356bc.『メタルギアシリーズ』を長年作り続けた為か、正統続編(ナンバリングタイトル)を出すたびに「これでストーリーは完結」「次は作らない」と幾度も発言している。英語,日本語のデータで,各文字の出現割合(文字ユニグラム確率)を眺める.割合なので,全ての文字の出現割合p(x)を全部足すと1になる.全体的には,まあ,そんなもんか,という感じ.どちらの言語でも母音の使用頻度は高いが,英語でeが突出してるのはちょっと面白い.もっと面白いのは日本語で子音kが多く使われていること.これは星野ルネさんが以下の漫画で紹介していた,日本語は「カ行の存在感が強い」というイメージとも合致する.聞きなれないジャンルの音楽って、どの曲も同じように感じる。聞きなれると1つ1つ全く違う曲だと感じられる。フォローで応援、ジョギング頑張ります。リツイートで絶対音感のカナリアが生まれます。いいねでサ行がはかどります。HMM)を学習し,各文字がどの指から生成されたかを推論する.HMMだと思って今回の問題を考えると,テキストに含まれる各文字はそれぞれいずれかの指から入力される.もちろん指の数に対して文字の種類の方が多いから,一つの指がいくつかの文字を担当することになる.それだけではなく,ある指を使った後にどの指を使いやすいか,という点も考慮に入れる.例えば同じ指を連続して使うよりも,異なる指,できれば反対の手のいずれかの指を使って交互に入力した方が負担は少ない.テキストにはどの指で入力されたかという情報はないが,テキストに対してHMMを学習することで,各文字がどの指に割り当てられるべきかを知ることができる.と仮定する.学習する際に、使う指の遷移について確率をあらかじめ与えてやることで、理想的な運指を学習することができそう。単純な分析として,各文字がどちらの手に割り当てられるべきかを考える.ここでは各指に関しては考えず,ざっくりと左右どちらの手で入力すると効率が良いかを調べる.Dvorak配列の設計理念を参考にすると,タイピングは左右の手で交互に行うことで効率的な入力ができるらしい.そこで,左右の手を80%の確率で交代して入力するという制約の元でHMMを学習する.つまり,ある文字を右手で入力したら,80%の確率で次の文字を左手で入力する.もちろん,20%の確率で同じ右手で入力する.この制約のもとでHMMを学習し,各文字がどちらの手に割り当てると良いかを見る.以下は学習されたHMMによる,各手ごとの文字出現確率.学習時に右手とか左手とかといった指定をする意味はないので,単純にhand1,hand2とした.各文字ごとに,hand1とhand2での出現確率の差でソートをすると,グラフのようにだいたいどの文字がどちらの手で入力されるべきかが見えてくる.例えばhand1を右手,hand2を左手と考えると,英日どちらの言語も左手で母音を担当し,右手で子音を担当すると入力の効率が良さそうである.これを見ると,Dvorak配列はなるほど考えられているなという気持ちになる.試みに,QWERTY配列とDvorak配列のキーを,それぞれ上で学習された確率で色付けしてみる.色は各手から出力される各文字の確率の差を表す.すなわち,赤に近いほどhand1(左手),青に近いほどhand2(右手)にその文字が割り当てられるべきである,とみる.QWERTY配列(日本語)Dvorak配列(日本語)それぞれ、日本語のデータで学習した確率で色付けした。Dvorak配列がいかに考えられてるかがよくわかる。最後に,各指を考慮してHMMを学習してみる.親指以外の8本を使えるとし,同じ指を連続して使う確率は0.2*0.1,同じ手の異なる指を使う確率は0.2*0.3,異なる手の指を使う確率は0.8*0.25とした.要は,「同じ指を使う<同じ手の異なる指を使う<異なる手の指を使う」という順に遷移しやすくなっている.もちろん確率は8本分足すと1になる.結果のいい見せ方が思いつかなかったので,学習された行列をそのまま載せる.hand1,hand2はそれぞれ指としてfig1~fig4を持つ.色が濃いほど,ある文字がその指に割り当てられる確率が高い.図として見やすいように各文字ごとに最も確率が高い数値が1になるように数値を調整しているので,純粋に確率ではない.例えばhand1を右手,hand2を左手と考えると,左手で全ての母音を担当し,右手でほとんどの子音を担当することになる.さらに指ごとに担当が分かれていて,日本語ならaとuを担当する指が同じだと良さそうかもしれない,ということがわかる.ここまでくるとごちゃごちゃしてきて,もっと真面目に考えないといけなくなるのでこの辺で打ち切ろう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト明太子熊(@mentaiko_guma)音楽を作ったり言葉で遊んだりしてましたが、いまは自然言語処理やってます。