-
12 -
Профи JohnnyCar
- Уровень:
- Имя:
- Виталий
- О себе:
-
2009 ноябрьскрытый текст…
2009 декабрьскрытый текст…
2010 январьскрытый текст…
2010 май
Сделал себе подарок в качестве новой клавиатуры, описание тут.
Сделал свою первую видеоклавограмму, естественно на новой клавиатуре.
2010 ноябрь
Разработка оптимальной раскладки
Текущая версия 01130
- Друзья:
- Автор словарей:
-
- Русский Частотный
- Русский Сверхдлинные
- Русский Все при деле
- Русский Левая
- Русский Правая
- Русский Синхронизация
- Русский Центр
- Русский На своих местах
- Русский Периферия
- Русский Крипта Портнова 1
- Русский Крипта Портнова 2
- Русский Портнов Упр. 1.1
- Русский Портнов Упр. 2.1
- Русский Портнов Упр. 2.2
- Русский Портнов Упр. 1.2
- Русский Мировые новости
- Русский Новости Украины
- Русский Триграммы
- Английский Триграммы
- Русский Невозвращенцы
- Русский Не забудем Левого
- Бортжурнал:
-
Безошибочный – 312 зн/мин 30 декабря 2011
Марафон – 271 зн/мин 30 декабря 2011
Безошибочный – 306 зн/мин 30 декабря 2011
«просто для меня» – 423 зн/мин 29 декабря 2011
«Соточка» – 414 зн/мин 29 декабря 2011
«Соточка» – 391 зн/мин 29 декабря 2011
«Русский Невозвнащенцы» – 76 зн/мин 17 ноября 2010
Разработка оптимальной раскладки 14 ноября 2010
«Русский Все при деле» – 328 зн/мин 9 ноября 2010
«Русский Синхронизация» – 316 зн/мин 7 ноября 2010
Марафон – 270 зн/мин 5 ноября 2010
Обычный – 339 зн/мин 23 июня 2010
«Русский Синхронизация» – 308 зн/мин 21 июня 2010
«Русский Частотный» – 379 зн/мин 21 июня 2010
Спринт – 308 зн/мин 21 июня 2010





Комментарии
По поводу пункта 3 - да, учел - "Перемещения ... принимаются равными нулю..." имеются в виду горизонтальные перемещения. В модели предусмотрены 2 основных составляющих - на горизонтальное перемещение и на нажатие. Т.е. в данном для второй буквы (той же самой) остается только составляющая нажатия.
4. Может быть, кому-то "ав" нажимать удобнее, чем "ва". Я исходил из общепринятых правил, что прямой порядок проще, чем обратный. Думаю, с этим согласится большинство. Можно, конечно, сделать адресный опрос - составить некоторую анкетку и разослать ее клавогонщикам. Такие мысли у меня уже были.
5. Да, согласен, поклавишная оценка будет точнее. Но расстояние до "н" уже учитывается в горизонтальных перемещениях. Одна идея (чисто по личному опыту) заключается в том, что клавиши нижнего ряда нажимаются пальцами под другим углом (в особенности средним и безымянным), поэтому не очень удобно получается - велика вероятность соскальзывания пальца, а следовательно, ошибки. Я клавиши "ч", "с" вообще на скорости жму не подушечкой пальца, а ногтем, т.е. внешней стороной. По-другому просто не получается. Это меня тормозит и жутко злит. Конечно, можно пальцы напильником обработать (шутка) :) Т.е. таким клавишам, которые в своем ряду более сложные, нежели остальные - можно назначать еще один дополнительный штраф.
Мизинцам вроде бы нижний ряд жать даже проще, чем верхний. Указательным все равно. Средний и безымянный - нижний ряд чуть сложнее. Это личное мнение.
Вторая идея - усложнить расчет штрафа на перемещение. Т.е. учитывать смену положения не только пальцев, но и кисти. Это очень сложно, но возможно. Нужно будет составить отдельную модель. Там, где двигается кисть - например, для нажатия буквы "н", также добавляется определенный штраф. Вообще, кистью можно двигать как в радиальном, так и в тангенциальном направлении (вдоль или поперек) - опять же встает вопрос как это учитывать и что проще, а что сложнее???
Третья дикая идея - последовательность клавиш для каждой из рук должна быть оптимизирована с учетом:
а) повторного задействования того же пальца через максимальный промежуток времени. Но с учетом развитости пальцев
б) минимальных движений кисти - т.е. не пальцы не прыгают из стороны в сторону, а как бы "танцуют" на одном месте, при этом кисть плавно смещается то в одну, то в другую сторону относительно клавиатуры, но не от буквы к букве. В этом смысле идеальным был бы набор аккордами от периферии к центру, типа "ждлозщшг" и пр. Т.е. дергать кисть нужно как можно реже.
Но одними диграммами и даже триграммами здесь не ограничиться. Придется прогонять по тексту целиком. Идея заманчивая, но я пока не вижу достаточно подходящей для всех реализации.
А ты учёл, что удвоенное нажатие не равно двум отдельным?
Здесь я не совсем согласен. Тут дело не в самом направлении, но в разной длине пальцев. Например, мне ав (от короткого к длинному) набирать удобнее, чем ва (от длинного к короткому). От среднего к мизинцу длина пальцев монотонно убывает, и твой закон работает нормально. :)
Мне кажется, это слишком грубая оценка. Например, мне ь нажимать удобнее, чем н, потому что к н приходится чуть-чуть тянуться. Всё-таки поклавишная оценка будет точнее.
В целом всё очень интересно, продолжай свой НИОКР. :)
На каникулах я не терял времени даром, а почитал англоязычные статьи на тему слепой печати. Из них почерпнул кое-какую информацию, как люди пытаются учитывать то, что в процессе печати двигается кисть, а не пальцы. Достаточно простая модель предлагается в работе авторов Rumelhart; Norman (1982). В частности, предполагается, что соседний палец кисти двигается в том же направлении, что и нажимающий в данный момент клавишу, но на половинное расстояние (т.е. движения получаются как бы согласованные). Интересные расчеты приводятся в работе A Theory o Perfomance in skilled typing (B.E. John, 1996). Там модель перемещений по Румельхарту дополнена временем позиционирования пальца по закону Фитта, а также учтены времена при движении пальца вверх-вниз (нажатие/отпускание клавиши). Также очень понравилась модель процесса печати на трех уровнях: 1) восприятия, 2) когнитивном, 3) моторном. При низких скоростях печати пропускная способность процесса (самое узкое место) диктуется моторным уровнем. А при высоких (модельная скорость 800 зн/мин) - когнитивным уровнем. А вообще все эти модели идут от Model Human Processor - попытки "развалить" мозги на несколько дискретных составляющих - несколько обработчиков, несколько буферов и пр.
Теперь собственно к раскладке. Я почистил немного данные, которые предоставил мне mystes. Поначалу хотел учитывать и шифты при оптимизации раскладки, но оказалось, что данных диграмм в некоторых случаях не хватает... И первичный алгоритм сбора статистики нуждается в модификации. ну или нужно выуживать недостающие данные, перебирая все триграммы и пр. Так что пока от этой затеи я отказался. Но попутно я получил один интересный результат: самая частая комбинация клавиш - не буквенная, а пробел и шифт (без разницы какой), потом идет диграмма ", ". Вот. Так что не все можно отработать частотными абракадабрами.
Шифты оставил на будущее, но диграммы с пробелами учел. Это ведь тоже нагрузка при наборе. И она скажется при оценке того, насколько выгоднее та или иная раскладка. Т.е. пробелы должны понижать выигрыш любой альтернативной раскладки, так как они нажимаются в любом случае и для всех раскладок одинаково.
Далее преобразовал все заглавные буквы в строчные и сгруппировал повторяющиеся диграммы. Оптимизировать решил по методу отжига. Шаг оптимизации выбрал равным одной или двум перестановкам клавиш (с вероятностью 0,5). Стартовал от ЙЦУКЕН, но с переносом твердого знака на клавишу с мягким знаком, а на освобожденное место поставил запятую. Количество итераций в процессе оптимизации сделал равным 10000, пробовал и по 1000, 5000, 50000, 100000. Но наиболее приемлемые результаты при допустимых временных затратах обеспечивает именно такое число итераций, если выбирать из данного ряда.
Теперь немного о модели. Для начала сделал матрицу расстояний для постановки рук ФЫВА ОЛДЖ. Все расстояния вычисляются как функции от размера клавиши. Соответственно, я все их нормировал на размер клавиши, т.е. выразил в относительных единицах. Потом создал матрицу, в котором каждой позиции приписан номер пальца: начиная с 1 для левого мизинца, кончая 8 для правого мизинца, цифрой 9 обозначил пробел. Далее я взял кое-что с кодешарповской модели: две матрицы, в одной из который заданы в условных единицах затраты на нажатие клавиши каждым пальцем, в другой - те же условные затраты, но на единицу пути, проходимого каждым пальцем. Затраты по нажатиям для мизинцев я немного уменьшил, т.к. они показались несоразмерно высокими:
затраты на нажатия:
2,10 левый мизинец
1,45 левый безымянный
1,05 левый средний
1,05 левый указательный
1,00 правый указательный
1,00 правый средний
1,40 правый безымянный
2,00 правый мизинец
1,00 большие пальцы
Затраты на единицу перемещения:
1,60
1,00
0,55
0,75
0,70
0,50
0,90
1,50
для больших пальцев затраты на горизонтальные перемещения отсутствуют.
Т.е. для каждой нажимаемой клавиши затраты складывались из двух составляющих: на горизонтальное перемещение и на нажатие. Горизонтальное перемещение может быть нулевым, но суммарные затраты никогда не будут нулевыми, чем и объясняется выбор кодешарповской модели.
Как я начислял дополнительные бонусы и штрафы (т.е. как поощрять полезные диграммы и штрафовать плохие):
1. Бонус скорости для чередования рук. Может быть, усилия и не будут меньше при наборе диграммы разными руками, но скорость - в среднем будет значительно выше, чем при наборе одной рукой. Снимаем 60% от перемещений для второй буквы диграммы (это можно оправдать еще и тем, что большая часть пути до второй буквы будет проделана одновременно с нажатием первой).
2. Бонус перемещений для согласованных перемещений. Здесь нужно вспомнить, что пальцы движутся не беспорядочно, а как единое целое (модель Rumelhart & Norman (1982)). Т.е. если пальцы одной руки движутся к клавишам одного и того же ряда, то они проделают путь почти одновременно. Снимаем 50% от перемещений для второй буквы диграммы. Т.е. в стандартной раскладке это было бы нажатие букв ШГ или ГШ или СЧ или ЧС, т.е. стоящих на одном ряду (но не основном), но разными пальцами.
3. Штраф на нажатие той же клавиши. Перемещения для второй буквы в диграмме принимаются равными нулю, поскольку палец остается над той же позицией. А усилие на нажатие увеличиваем на 20%.
4. Штраф на обратную комбинацию одной рукой. Если диграмма набирается одной рукой в направлении от центра к краю, то усилия для второй буквы как на перемещения, так и на нажатие увеличиваются на 20% (подразумевается уменьшение удобства и скорости).
5. Штраф на однопальцевые комбинации (исключая повторное нажатие той же буквы). Усилия на перемещение и нажатие увеличиваются на 30% (подразумевается, что может значительно уменьшиться скорость).
6. Штраф на прыжок одной рукой через ряд. Опять же, вспоминая Румельхартовскую модель перемещений, можно сказать, что если происходит прыжок с верхнего на нижний ряд или наоборот, то перемещения до второй буквы будут большими, чем из исходной позиции. Увеличиваем затраты на перемещения до второй буквы на 50%.
7. Штрафование нижнего ряда. Считается, что на стандартных клавиатурах доступность нижнего ряда хуже, чем верхнего, поэтому необходимо ввести коэффициент сложности. Для любого символа нижнего ряда затраты как на перемещение, так и на нажатие увеличиваются на 25%.
Некоторые бонусы и штрафы могут пересекаться, например, может быть согласованное перемещение на нижний ряд, но диграмма набирается в обратном порядке. Т.е. получаем бонус за согласованное перемещение и штрафы за нижний ряд и штраф за обратную комбинацию другой рукой.
Погонял процедуру оптимизации энное число раз, получал различные раскладки, в некоторых гласные были сгруппированы на левой руке, в некоторых на правой. Лучшее, что мне удалось получить с точки зрения описанной модели:
ё 1! 2" 3№ 4; 5% 6: 7? -8 9( 0) *_ =+ Z
Z ц ч а к ы м в л з ш й ф \/
Z п и о е у р н т с б х Z Z
Z э ю ьъ я . г , д ж щ Z Z Z
Z Z Z Z Z Z Z Z Z Z Z Z Z
Это я скопировал массив выходных данных. Z обозначены запрещенные позиции (для текущей версии оптимизатора). Как видим, шифтов пока нет... к сожалению (а это 2,5-3% от всех нажатий клавиш). Также видно, что я подкорректировал верхний ряд вручную - перенес тире на цифру 8. Тире нажимается где-то 0,8% всех нажатий и намного опережает все другие знаки препинания, кроме точки и запятой (у которых в сумме до 3%).
Такая раскладка обеспечивает общие затраты, равные 83,5% от затрат раскладки ЙЦУКЕН. Как видим, улучшение не очень значительное (16,5%) и ни о каком громадном преимуществе говорить не приходится.
Затраты других раскладок (известных мне) относительно раскладки ЙЦУКЕН:
ЙЦУКЕН - 100% :)))
Диктор - 85,5%
Раскладка Д.Зубачева - 86,8%.
Алфавитная - 111,1%
Т.е. при учете нажатий клавиш, а не только перемещений, а также учете пробелов выигрыш становится вовсе не таким уж большим, в пределах 20%... А по скорости как, вообще не знаю. В одной из статей, которые я успел прочитать The Standard and Dvorak Keyboards Revisited. Direct Measures of Speed (1998), сравниваются Кверти и Дворак. Двораку дается преимущество в скорости где-то 4% по данным набора диграмм. С ростом мастерства оно может достигать и 10%. Но вообще разные авторы приводят преимущество в скорости Дворака от 2% до 7% для стандартного уровня мастерства. Так что насчет скорости ничего определенного сказать нельзя, но выигрыш явно будет еще меньше, чем выигрыш по затратам.
Допустим, раскладку, минимальную по модельным затратам, мы получили. А как объективно оценить ее качество. Чтобы повысить объективизм, нужно применить и другие критерии. Например, посчитать такие показатели, как частота чередования рук, относительное число диграмм, набираемых одним пальцем, долю диграмм, набираемых в обратном порядке, долю одноруких диграмм с прыжком через ряд, долю домашнего ряда в общем числе нажатий.
Немного переделав процедуру оптимизации, я сделал другую процедуру для расчета параметров раскладок. Результаты (как и оптимизация, расчеты производились по данным диграмм на основе 300МБ фантастики, данные mystes):
ЙЦУКЕН
39,3% доля чередований среди буквенных диграмм (т.е. чередования внутри слов)
2,7% доля диграмм с согласованными перемещениями
8,7% доля диграмм, набираемых в обратном порядке
14,2% доля диграмм, набираемых одним пальцем
5,1% доля диграмм, набираемых с прыжком через ряд
31,6% доля нажатий на основном ряду
Затраты в относительных единицах на одно нажатие 1.839
Перемещения на одно нажатия в относительных единицах 0.727 (за единицу взят размер клавиши)
Доля нажатий по пальцам:
2,8% левый мизинец
3,2%
9,9%
26,2%
26,4%
7,1%
3,2%
6,3% правый мизинец
14,8% большие пальцы
Левая рука 42,1%, правая рука 43,1% - без учета больших пальцев
Доля перемещений по пальцам:
3.8% левый мизинец
2.5%
10%
36.8%
29.6%
5.6%
1.2%
10.5% правый мизинец
Левая - 53,1%, правая - 46,9%
Общая разбивка усилий по рукам - 46,7%; 45,3% без учета больших пальцев, на которые приходится 100% - 46,7% - 45,3% = 8%
Диктор
54.8% чередования
1% согласованные
4.5% обратные
3.5% однопальцевые
0.9% прыжок через ряд
50.1% основной ряд
Усилие на нажатие 1,573
Перемещение на одну клавишу 0,484.
Разбивка нажатий по пальцам
2.7% л.м.
7.4%
9.2%
20.6%
18.8%
10.7%
8.2%
7.6% п.м.
14.8% большие
Левая - 40%, правая - 45,2%
Разбивка по перемещениям
1.2%
4.6%
5.2%
25.5%
30.7%
14.6%
8.6%
9.5%
Левая - 36,5%, правая - 63,5%.
Общая нагрузка на руки - левая - 38,8%, правая - 51,8%, пробелы - 9,4%.
Раскладка Д.Зубачева
53.6% чередования
1.7% согласованные перемещения
5.6% обратный порядок
3% однопальцевые
1.7% прыжок через ряд
42.7% основной ряд
Усилие на нажатие 1,595. Среднее перемещение на одну клавишу 0,517.
Разбивка нажатий по пальцам:
2.3% л.м.
8.7%
13.7%
16.4%
16.7%
12.2%
10.4%
4.8% п.м.
14.8% большие
левая - 41,1%, правая - 44,1%
Разбивка перемещений
2.1%
7%
13.9%
15.8%
25.2%
18.1%
10.3%
7.7%
левая 38,8%, правая 61,2%.
Общая разбивка нагрузки по рукам: левая - 40,6%, правая - 50,1%, большие пальцы - 9,3%.
то, что наваял я
52.6% чередования
2.4% согласованные перемещения
5.1% обратный порядок
3.5% однопальцевые
1.6% прыжок через ряд
42.1% основной ряд
Усилие 1,534. Путь - 0,520.
Разбивка нажатий по пальцам
2.9%(л.м.) 7.2% 17.1% 16.4% 18.5% 12.5% 6.6% 4.1%(п.м.) 14.8%(большие)
левая - 43,5%, правая - 41,7%.
Разбивка перемещений
1.6%(л.м.) 3.7% 15.8% 21.5% 29.5% 17.2% 4.7% 6.1%(п.м.)
левая - 42,6%, правая - 57,4%
Общая разбивка нагрузки: левая - 44,9%, правая - 45,5%, большие пальцы - 9,6%.
Как видно, по параметрам то, что насчитала моя процедура оптимизации и то, что посчитал Зубачев, почти совпадает с незначительными вариациями в пределах 1% по каждому из показателей. Причем оба пришли к такому результату независимо, по различным алгоритмам и по своим критериям. Сами раскладки, конечно, отличаются. Можно сказать, что оптимум где-то очень близко. Но в какую сторону дооптимизировать - это уже субъективизм, как и выбор значений штрафов и поощрений.
Здесь бы я хотел принять заявки на другие системы штрафов. И погонять их по тем же диграммам. Как остальные смотрят на те значения, которые я выбрал? Может, надо поощрить или оштрафовать какие-то другие комбинации?
Наконец, я решил поискать наилучшие перестановки при минимальном их числе. Т.е. отыскать первую наилучшую перестановку клавиш в смысле уменьшения усилия, вторую и т.д. до 10-15 перестановок. Получились следующие результаты:
0. нулевая перестановка (вручную) - помещение твердого знака на мягкий, и перемещение запятой на место ъ.
от этой раскладки я стартовал.
1. Ш/И (относительное улучшение относительно предыдущей раскладки 2,8%).
2. ,/Ф (-2,3%)
3. Е/В (-1,7%)
4. Щ/Я (-1,7%)
5. Т/Ы (-1,6%)
6. Ц/. (-1,3%)
7. У/Н (-1,2%)
8. Е/Л (-1%)
9. Д/С (-0,9%)
10. З/Ж (-0,5%) на этом этапе усилие - 1,581
Также я прогнал все промежуточные варианты через процедуру определения параметров. Оказалось, что почти все первые замены пар клавиш приводят только к улучшению балансировки усилий по пальцам. При этом основные показатели раскладок, такие как чередование рук, нажатие клавиш одним пальцем и т.д. могут даже ухудшаться. Т.е. ожидаемого результата я не достиг, например, такого, который описывается в carpalX при поэтапной оптимизации английской раскладки. Первая предлагаемая замена E/K приводит и к улучшению чередования рук и увеличению частотности основной позиции. В моем случае все наоборот. Пострадали почти все показатели. Только начиная с 5-6 перестановок, эти показатели начинают улучшаться.
По мере свободного времени попробую и другие варианты оптимизации (с фиксацией некоторых клавиш на определенных позициях, перемещении клавиш только внутри зон, рук и т.п.).
Теперь пару слов о раскладках в свете полученных результатов.
То, что сделали я или Дмитрий, больше соответствует оптимизации распределения нагрузок по пальцам. При этом чуть-чуть страдает чередование, в большей степени - частота основной позиции. Ну и увеличивается доля плохих комбинаций - обратные, однопальцевые, прыжки через ряд как следствие увеличения доли одноруких комбинаций.
Раскладка Диктор имеет значительно более высокую долю основной позиции, также чуть выше доля чередования рук. Доля плохих комбинаций в сумме очень мала. Т.е. раскладка сделана очень хорошо, но с применением несколько других критериев и ценой некоторого нарушения баланса между пальцами и руками. Для тех, кому не требуется хорошая балансировка (а может она вообще никому не важна) Диктор - самое оно :) Раскладку Зубачева тоже рекомендую к использованию. Тем более, что для нее созданы уже все конфигурационные файлы. Ну и свой вариант тоже рекомендую, конечно :) По прошествии нескольких месяцев копания и расчетов могу заявить это не голословно, а основываясь на многочисленных результатах. Конечно, раскладки под всех и каждого не существует. во-первых, есть субъективизм по поводу выборки текстов, но он, как правило, не очень значительный. Гораздо больше споров вызывает система назначения штрафов. Но опять же, то, что я получил похожий по параметрам раскладки результат на результат Зубачева, говорит о многом. Хотя бы о том, что мы прошли верным путем, тем более, что методики у нас достаточно разные.