2016年2月28日 星期日

無聊至極,分析不同鍵盤的效率

可能是最近無聊過頭,想到一個有趣的分析題目

稍微有點了解的人就知道,現在大家最常用的qwerty鍵盤當初的設計,是因為早期打字機打太快會卡住,這個排法就是為了讓大家打字不要這麼快,其「主要」的對手:Dvorak 鍵盤的wiki 條目條列了下面的幾個設計原理:https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
Many common letter combinations require awkward finger motions.
Many common letter combinations require a finger to jump over the home row.
Many common letter combinations are typed with one hand. (e.g. was, were)
Most typing is done with the left hand, which for most people is not the dominant hand.
About 16% of typing is done on the lower row, 52% on the top row and only 32% on the home row.

那麼我們是不是能數據化這些設計概念呢?

試找了一下English frequency ,找到這個網站
http://norvig.com/mayzner.html
它裡面有詳述它的方式,從google book raw data 中,把裡面的1-gram 全爬過,建出一張book 的單字表,大小約1.5 MB:
http://norvig.com/google-books-common-words.txt
從這裡我們可以得到相當完整的 1-gram count 跟bigram count

要有個數據化的比較,我們要提出我們的比較基礎,什麼樣的狀況會有速度的差異?例如我們可以假設,手指放在中行,不用上下移動可以打得比較快,所以常用字母放在中行的鍵盤會打得比較快:

首先我們要先算一下1-gram的頻率跟 bigram 的頻率,既然檔案都建好了(老實說它去parse 23 GB 的檔案才是大工程,我這都是小case 而已),用python 可以輕鬆 parse(告訴你有多簡單,我打這篇文章的時間還比我打code 的時間長):
上排:qwerty 0.516, dvorak 0.218
中排:qwerty 0.325, dvorak 0.704
下排:qwerty 0.160, dvorak 0.079
這個統計和上面說的About 16% of typing is done on the lower row, 52% on the top row and only 32% on the home row. 相符,Dvorak 鍵盤手不用動就能打完 70 % 的字,相對qwerty 只能打出 32%

再來是左右手,這個分別就比較沒那麼明顯了,大約都是6:4,而且左手雖然是非慣用手,打起字來似乎也不會慢上多少,不過假設確實有此事好了,一樣dvorak 勝:
qwerty 左手0.587, 右手0.433
dvorak 左手0.413, 右手0.567

影響更大可能是字跟字之間的移動,例如上面舉例的was, were,都是左手末指,打起來就會卡卡的,這個就需要bi-gram了,我們可以算出,在26*26=676 個bigram 中,對應到出現在qwerty鍵盤跟dvorak 鍵盤,是在左右手間打的頻率是多少:
qwerty: 0.529
dvorak: 0.712

另外像require a finger to jump over the home row,就算算bigram在兩個鍵盤,需要跳過home row 打字的狀況(好奇這樣真的會比較慢嗎=w=):
qwerty: 0.211
dvorak: 0.017
dvorak 頻率好低,qwerty 打字有1/5 的頻率需要跳過home row,一方面dvorak 70%的字母都在中排,要換到上下排兩個的頻率自然小得多。

當然這裡提的都是一些簡單的模型,例如上面第一點說的:awkward finger motion,基本上就是許焉不詳…,要先決定哪些手指移動是awkward (是說awkward 這個字在qwerty 鍵盤裡有夠難打的...),再用數據下去跑,我們可以簡化一點,像是:連續不同字母用同隻手指打就算awkward finger motion,當然這點跟每個人的打字習慣有關,大概就好:
qwerty: 0.069
dvorak: 0.025
好了反正就是dvorak 勝就對了

上面提的淨是些簡單的模型,其實提個適合的模型,大家都可以用python去建n-gram,比較兩者的差異
不過話又說回來,儘管dvorak 鍵盤可能真的比較優秀,連世界打字最快的記錄據傳都是dvorak 創的,我活到現在,看過用dvorak 鍵盤的也就只有傳說中的謝安大神而已,ptt 的programming 版上有句話說得好:「技術標準就是這麼一回事,不需要最好,只要最早且堪用」