Русский
Русский
English
Статистика
Реклама

Русский язык

Мои статьи в видеоформате

04.03.2021 22:20:04 | Автор: admin

Дошли наконец-то руки, записал для тех, кому так удобнее:https://www.youtube.com/channel/UCL1YPFdAqbyR2N-LeYIbW1A/videosВ ближайшие дни появятся ещё видео. Под последними отличная новость для москвичей.

Статьи эти плод 8 лет теоретической и практической преподавательской работы. Взвешивал каждое слово, чтобы через минимум текста передать то, что НЕОБХОДИМО знать каждому, кто изучает иностранные языки. Одно из самых важных про развитие навыка говорения.

Подробнее..

A lie can travel halfway around the world while the truth is putting on its shoes

24.03.2021 22:11:36 | Автор: admin

Самые бредовые, несовместимые с реальностью представления об изучении иностранных языков у людей, хорошо ими владеющих. У переводчиков, например. Парадокс, да? Нет.

Почти везде языки дают очень плохо, и реально выучивают их только люди с хорошими способностями. Для обучения таких людей не требуется никакого преподавательского мастерства или специальных приёмов. Они воспримут любой способ преподавания. Что-то сами додумают. Но таких максимум 5-10%. Остальные, включая толковых людей с хорошим образованием, становятся жертвами мифов, распространяемых маркетологами языковых школ.

Всю свою преподавательскую карьеру я боролся с этими мифами с помощью статей. Тратил сотни человекочасов, пытаясь сформулировать МАКСИМАЛЬНО коротко. Убивал по полдня (!), придумывая, как сократить абзац хотя бы на одну строчку без потери смысла. Радовался, когда удавалось удалить даже одно лишнее слово. Фильм (сборник лекций) результат этой многолетней работы.

Подробнее..

Как я выучил английский

20.04.2021 20:11:13 | Автор: admin

Знакомые говорят, что история мотивирующая и надо её публиковать. Ну вот.

Сколько себя помню, всегда хотел знать иностранные языки, особенно английский, но видел перед собой огромную глухую стену, к которой не знаешь, как подступиться. На курсы денег нет. Припадки заучивания слов глохнут уже через несколько дней из-за ощущения бесперспективности, да и забываются эти слова моментально.

15 мешков картошки. Всё началось с них. Моя деревенская семья всегда выращивала картошку, взрослые продавали потом. В какой-то момент отец показал мне на мешки и сказал: Иди продавать к магазину, 50% твои. Уже через неделю у меня впервые в жизни были свободные деньги, достаточные, чтобы пойти на курсы.

На курсах объяснили, что через will выражается будущее время, have + 3-я форма глагола значит, что действие имело место ранее заданной расчётной точки, а вот ещё Present Perfect Continuous есть.

Это сейчас и чё??, а в провинции до Интернета Помните, как Моисей раздвинул воду? Вот. Наконец-то появилась возможность учить самостоятельно!

Вскоре переехал в столицу и получил дополнительную мотивацию: в Москве как-то всё про английский, всё вокруг него. После нескольких месяцев выживания и работы на трёх работах жизнь устаканилась, пора было браться за язык всерьёз.

В 7 лет, не имея доступа к детской литературе, читал дома всё, что попадалось, вплоть до русской классики. За счёт этого удалось нехило прокачать язык, ну как минимум письменную речь. Как-то в продлёнке мне навешали два третьеклассника, и меня же ещё поругали за драку! Помню, как, продолжая реветь, лежал прямо на полу и писал развёрнутое официальное обращение к учителям и ученикам школы: потому что вы Козлы! Козлы с большой буквы потому, что это ваше имя. Вручил воспитательнице продлёнки и засим удалился. Все ближайшие дни трясся от страха: в те времена назвать учителей козлами

К величайшему моему удивлению, даже родителей в школу не вызвали. День за днём все вели себя так, как будто вообще ничего не произошло. Спустя какое-то время, проходя мимо двух учительниц старших классов, услышал шёпот: и ни одной ошибки, и все запятые правильно расставлены Похоже, советские педагоги были настолько потрясены недетским слогом первоклассника, что решили не спускать собак.

Много лет спустя в Москве подумал: а вдруг с английским так же прокатит?? И взялся за неадаптированную английскую классику. В советское время её очень здорово перевели буквально предложение в предложение и очень качественно.

Взял книжку Трое в лодке в оригинале, взял русский перевод и делал следующее. Читаю абзац со словарём на английском. Это агония: почти с нуля сразу за классику. Затем беру этот же абзац в русском переводе и сравниваю, пытаясь увидеть, где и что я понял неправильно. Без словаря и на этом этапе не обойтись: оказывается, например, что неправильно понял слово blind. Это не слепой это занавеска. После всей подробнейшей проработки ещё раз читаю этот абзац на английском, уже более-менее всё понимая, и перехожу к следующему. На каждый абзац могло уходить 1-2 часа. Когда таких абзацев набиралось на 7-10 страниц, я делал то, что начинающие обычно не могут себе позволить: откидывался в кресле и читал 10 страниц сложного классического текста подряд практически без словаря. Ага, эти самые ЕЩЁ РАЗ! Мозг, таким образом, с самого начала настраивался на английский стиль мышления.

Не пытайтесь это повторить. Работает, да, но соотношение затраченного времени и выхлопа не самое выгодное.

Не могу сказать, что после тех троих в лодке стало легче: у Джерома сравнительно простой язык. Дальше пошёл Чарльз Диккенз, а потом Вальтер Скотт со своими вкраплениями староанглийского и шотландского. Всё это время, кстати, продолжал выписывать и учить отдельные слова. Big mistake. Я, конечно, упёртый товарищ несколько тысяч так выучил. Но, оглядываясь назад Время можно было потратить гораздо рациональнее.

У упорство. В какой-то момент уже работал на приличной работе с высокой зарплатой. Уверенности в своём знании английского, однако, по-прежнему не было. Решение очевидно: увольняемся с хорошей работы, устраиваемся курьером в бюро переводов и занимаемся английским по 13-14 часов в день. Если нет поездок, делаем в офисе грамматические упражнения. Что-то непонятно обращаемся к переводчикам. В поездках продолжаем читать классику Вирджиния Вулф и Теккерей, йоу! А ещё курьер часто где-то идёт пешком. Ну сделал 120 листов распечаток А4 с фразовыми глаголами и примерами их употребления и ходи себе, крути их в голове месяцами. До сих пор некоторые места в Москве ассоциируются с конкретными фразовыми глаголами.

В какой-то момент поступил на не самый лучший иняз: на первых же курсах начал поправлять преподавателей. Потом перестал поправлять преподавателей. Иняз создаёт среду, где все поголовно прямо или косвенно, так или иначе заинтересованы в английском: от экзаменов никуда не денешься. Такая среда стимулирует тебя даже в том случае, если изначально мотивации было ноль.

Моя и без того мощная мотивация взлетела до небес: уже на первом курсе появилось ощущение собственной крутости. Это наркотик, и с него так просто не слезть. Если в программе всплывала незнакомая идиома, я испытывал микростресс: Кто такая, почему не знаю?? Идиома буквально впечатывалась в память.

Fun fact: я, возможно, был единственным в истории студентом иняза, который ни разу за все 5 лет не сдавал экзамен по общему английскому, только гос. Преподаватели менялись, но вели себя на экзаменах всегда одинаково: я просто заходил, и мне без слов ставили отл.

Будучи перфекционистом, стараюсь сделать идеально либо не парюсь вообще. Когда начинал учить язык, цель стояла совершенно чёткая: выйти на такой уровень, чтобы носители-британцы не отличали меня от своего. Уже на старших курсах работал переводчиком, а через пару лет после выпуска вырос как профессионал ещё на голову.

Итак, что у меня было за спиной через 2 года после окончания иняза:

- 5 лет чтения классики в оригинале;

- несколько лет работы переводчиком и преподавателем английского;

- десятки фильмов и сериалов, просмотренных по несколько раз внимательнейшим образом, не пропуская ни одного слова или выражения;

- опыт проживания в языковой среде: Англия 3 месяца, США 8 месяцев;

- многократно проработанный мощный аудиокурс для расширения вокабуляра (созданный для носителей, btw) + я особое внимание всегда уделял фразовым глаголам как одной из самых непонятных областей английского языка.

И вот только после всего этого до меня стало доходить, во что я вообще ввязался, с каким объёмом информации я имею дело. Даже если полностью избавиться от акцента, свои идентифицируются через связки пароль-отзыв.

Мороз и солнце? Аты-баты?

В последние годы начинаю приучать себя к мысли, что, скорее всего, не добьюсь поставленной цели никогда.

________________

Меня долго не отпускало ощущение, что делаю что-то не так, поэтому всегда с интересом расспрашивал всех, кто занимался английским: преподавателей, студентов инязов, наших эмигрантов в Англии и США...

Fun fact 2: у людей, хорошо владеющих иностранными языками, обычно очень смешные представления о том, как их надо учить, особенно у переводчиков. Парадокс, да? Нет. Почти везде языки дают плохо, и реально выучивают их, как правило, люди с хорошими способностями. Для обучения таких людей не требуется никакого преподавательского мастерства или специальных приёмов. Они воспримут любой способ подачи материала. Что-то сами додумают. А потом всю жизнь рассказывают, как замечательно это работает.

Правды о принципах изучения и преподавания иностранных языков в массовом сознании не больше, чем в представлениях древних греков о строении мира. Я не преувеличиваю: волосы дыбом встают от того, что удалось натворить маркетологам языковых школ в головах людей. Даже толковых людей, даже с хорошим образованием.

Несмотря на способности и бешеную мотивацию, я, к сожалению, сделал ВСЕ мыслимые ошибки и прошёл через ВСЕ заблуждения от учить слова по карточкам до веры в чудо соприкосновения с носителями. Все эти ошибки и заблуждения впоследствии зафиксировал и сформулировал в некоторых статьях этого блога.

Перфекционизм и тут нашёл себе применение)) Fun fact 3: те статьи, которые про изучение иностранных языков, я писал и редактировал 8 лет! Тратил сотни человеко-часов, пытаясь сформулировать МАКСИМАЛЬНО коротко. Убивал по полдня (не шучу), придумывая, как сократить абзац хотя бы на одну строчку без потери смысла. Радовался, когда удавалось удалить даже одно лишнее слово.

Даже после этого не успокоился перевёл их в видеоформат. Всё равно, конечно, получилось 69 минут. Ну сорри не рекламный ролик снимал... Труд всей жизни, так сказать.

Подробнее..

Русский язык глазами инженера. Числительные

07.06.2021 20:11:26 | Автор: admin

Любой естественный язык (и русский не исключение) иногда вызывает оторопь у людей привыкших к инженерному мышлению. Кому интересна данная тема, присаживайтесь поудобнее. Поехали.

Начинается всё просто, с уникальных числительных: Один, два, три ... восемнадцать, девятнадцать.

Десятки.

Дальше идёт образование десятков, добавлением к уникальному числительному окончания:

Два - два(дцать), три - три(дцать), четыре - четыре(дцать)? Нет. Сорок! Почему? Не спрашивайте.

Пять - пять(десят). Тут снова поворот. Очередное уникальное окончание для образования десятков, но кажется самое логичное - "десят". Пять десятков - пять(десят). Вроде неплохо звучит и даже логично. И не один я, видимо так подумал, потому что дальше идут: шесть(десят), семь(десят), восемь(десят)... и вот тут опять кто-то отвлёк дядю Фёдора и Шарик дописал - девяносто!

Почему у десятков разные окончания? Почему второй десяток вообще имеет уникальные названия чисел? Почему тогда уже не все числа до сотни уникальные? Чем второй десяток так отличился?

Может у кого-то и есть ответ на эти вопросы отличный от "так сложилось исторически", но мне он не известен. Было бы интересно послушать.

Но как бы то ни было, подытожим и обобщим, что мы имеем.

Мы имеем три группы:

1. Уникальное числительное + окончание обозначающее десятки (дцать, десят)

2. Совершенно уникальные названия десятков - сорок, девяносто.

3. Для каждого числа второго десятка используется уникальное название.

Едем дальше.

Сотни.

Сто, двести, три(ста), четыре(ста)... В этом моменте похоже опять вернулся дядя Фёдор и дописал - пять(сот), шесть(сот), семь(сот), восемь(сот), девять(сот).

Складывается впечатление, что работали в паре. Один старался всё сделать получше, пологичней, а второй ОЧЕНЬ креативный! Очень творчески подходил к выдумыванию каждого следующего названия. Не любил повторяться.

Имеем две группы:

1. Уникальное числительное + окончание обозначающее сотни (ста, сот)

2. Уникальные названия сотен - сто, двести.

Итого:

1. 19 (девятнадцать) уникальных числительных.

2. 8 (восемь) уникальных названий десятков. Не смотрите, что кое где окончания повторяются, нам всё равно нужно помнить название каждого десятка.

3. 9 (девять) уникальных названий сотен.

Ну, а если бы меня попросили сделать максимально простую, удобную и логичную систему?

Ну, что ж. Попробуем.

Система при которой берётся уникальное числительное обозначающее единицы и к нему добавляется окончание обозначающее сотни или десятки вполне себе подходит под наши требования. Надо только, чтобы это окончание было одно для всех сотен и одно для всех десятков.

Сотни.

Самое массовое у нас окончание, "сот" - пять(сот), шесть(сот), семь(сот), восемь(сот), девять(сот). Оно же и самое логичное, "сот" - сотни. Ок. Значит его и оставим.

Получаем следующее: один(сот), два(сот), три(сот), четыре(сот), пять(сот), шесть(сот), семь(сот), восемь(сот), девять(сот).

Едем дальше.

Десятки.

Опять же, самое массовое, "десят" - пять(десят), шесть(десят), семь(десят), восемь(десят). Оно же, как и в случае с сотнями, самое логичное, "десят" - десятки. Определились. Оставляем его.

Но в отличие от сотен, у нас есть второй десяток, который в полном составе имеет уникальные названия чисел. Но кажется тут тоже всё очевидно. Чем этот десяток такой уникальный, что должен выбиваться из общей массы? Пусть формируется по общим принципам.

Получаем следующее: один(десят), два(десят), три(десят), четыре(десят), пять(десят), шесть(десят), семь(десят), восемь(десят), девять(десят).

Итого:

1. 9 (девять) уникальных числительных.

2. 2 (два) уникальных окончания обозначающие десятки и сотни ("десят" и "сот").

Вот и всё.

Мы получаем максимально простую, удобную, логичную систему.


P.S. На всякий случай, я не призываю устраивать революции или реформы. Я всего лишь проанализировал нынешнее положение дел глазами инженера и поразмышлял как бы могла бы быть решена данная задача, если бы за её решение изначально брался инженер.

Всего доброго!

Подробнее..

О русском языке в программировании

03.01.2021 18:23:42 | Автор: admin

Введение

Начну с мелочи. Удобно ли сейчас организована типичная смена раскладки клавиатуры? В смысле переключения на русский/латинский? На мой взгляд, в смартфонах и то удобнее. Не надо нажимать одновременно все эти Shift и Alt. На моем первом домашнем компьютере Электроника-901 (он же ai-PC16) было даже две специальных пустых клавиши примерно там, где сейчас клавиши-окна. Одна переключала на русскую раскладку постоянно, а другая - временно (на время нажатия). Это гораздо удобнее. Впрочем, самый удобный вариант переключения в свое время я сделал сам из массивной педали от швейной машинки Тула, просто соединив ее двумя проводами с контактами DTR и DSR разъема RS-232. В этом случае если программно установить бит DTR в 1, то наличие сигнала DSR означает, что педаль нажата, иначе отпущена. Переключать раскладку без рук оказалось очень эргономично. Увы, по мере распространения новых интерфейсов, RS-232 постепенно сошел на нет и сейчас в ноутбуке педаль просто некуда подключить.

Кстати, дарю идею фирмам, выпускающим всякую USB-ерунду, вроде пластикового хамелеона, периодически высовывающего язык: выпустить USB-устройство в виде педали, при нажатии на которую эмулируются нажатия заданных пользователем клавиш. Правда уже есть USB-руль с педалями, но там все-таки много лишнего. Наиболее очевидное использование нового простого устройства переключение раскладки клавиатуры без помощи рук.

Справедливости ради: на некоторых клавиатурах есть отдельная клавиша переключения (на ней обычно нарисован глобус). Сложность в том, что на многих других компьютерах ее нет. В древнем текстовом редакторе SideKick я даже когда-то использовал обе клавиши Shift, поскольку они есть всегда: правая переключала постоянно (и поэтому как Shift вообще не работала), а левая временно, первые две секунды как Shift, а уже затем как переключатель. Смысл в том, что тогда можно печатать, например, по-русски, затем, удерживая мизинцем клавишу, одно слово по-английски, затем отпустить и опять продолжать по-русски.

Но, повторю, громоздкое переключение - это мелочь, не проблема, а, скорее, следствие отношения к использованию русского языка как к чему-то второстепенному и не стоящему внимания. Хотя и эта мелочь нет-нет, да и напомнит о себе, хотя бы в виде модной, но глупой аббревиатуры КВТ (вместо RSDN) на форумах сайта RSDN.RU.

Настоящей проблемой, на мой взгляд, является появление на тех же компьютерных форумах обсуждений на тему: мешает ли русский язык программированию. С точки зрения той части российских программистов, которые работают в западных фирмах или поставили себе такую цель (с возможным и желательным отъездом за границу) русский язык в программировании это действительно зло, дополнительный барьер, мешающий быстрее адаптироваться в англоязычной среде. Но мне кажется, им мешает не русский язык в программировании, а русский язык вообще.

Естественность использования родного языка

Язык неразрывно связан с мышлением. Например, когда я пишу текст программы, я невольно мысленно произношу требуемое действие. Конечно, оно не звучит внутри голосом Левитана и даже не всегда это именно звуки, но что-то типа: если и а и б нулевые, то уходим в мыслях проносится. На типичном современном языке программирования эту мысль в виде программного текста я должен выразить как-нибудь так:

if (a==0 && b==0) return;

Т.е. мысленно про себя произношу если, уходим, а писать все-таки должен if, return. Незаметно приходится все время переводить, пусть и в самой простейшей форме. Поэтому для меня более естественна запись того же оператора в виде:

если a=0 и b=0 тогда возврат;

Я именно так и пишу. И это вовсе не псевдокод, а реальный оператор языка [1], где ключевые слова имеют русские эквиваленты, не требуется различать присваивание и сравнение (а, значит, не нужно удвоение символов), и логические операции можно писать просто как И, ИЛИ, НЕ. Оператор больше стал похож на мысленную фразу и перевод с мысленного русского на программный английский уже не требуется.

Для человека, который давно программирует, наверное, все это кажется несущественным и непривычным, поскольку с самого начала он учился составлять программный текст как последовательность специальных знаков и слов, не связанных с родным языком. Да, язык программирования никогда не совпадет с родным языком, но на этапе освоения (например, в школе) элементы родного языка очень помогают понять записываемые действия. Больше становится тех, кто быстро схватил суть и меньше тех, кто сразу же теряет интерес к изучению программирования потому, что сталкивается с цепочками непонятных иероглифов и иностранных слов.

Например, когда моя жена училась в Московском математическом техникуме, основы программирования им преподавали с помощью специального языка (нечто вроде псевдокода), который так и назывался: Русский Алгоритмический Язык, сокращенно РАЯ. (Смешно. Выходит, в нашей семье жена знакома с языком РАЯ, а муж с языком Ада). На мой взгляд, это был мудрый прием. Родной язык, конечно, не панацея и не обеспечивал выпуск суперпрограммистов, но то, что он способствовал более глубокому пониманию основ на самом важном начальном этапе несомненно.

Разумные границы использования

Попытки превратить язык программирования в национальный или, наоборот, избавиться от национальных особенностей в тексте программы были предприняты еще более полувека назад. Я имею в виду языки Кобол и АПЛ.

Язык Кобол предполагал, что программу можно будет писать просто по-английски. Поэтому он имел большое число зарезервированных и даже шумовых (необязательных) слов. Но ничего хорошего из этого не вышло. Текст программ все равно получался не на английском, а на ломаном английском, а их анализ усложнялся. Точно так же не получится писать программы и на любом другом настоящем, например, русском языке, поскольку обычный язык никогда не будет тождественен программному. Однако наличие некоторого множества слов и их частых сочетаний на родном языке все же улучшает и на интуитивном уровне облегчает понимание текста программы, ведь, в конце концов, человек не сканер транслятора и не анализирует текст посимвольно.

Другую крайность представлял язык АПЛ, имевший большое число специальных знаков для всяких операций. Запись программы на АПЛ внешне напоминала записи, которыми пользуются математики. АПЛ остался в истории знаменитым тем, что программу, записанную на одной строке, т.е. не более 80 знаков, можно было анализировать часами, т.е. долго разгадывать, что же, собственно говоря, она делает. Получалось, что кроме авторов в таких программах вообще никто не мог разобраться, и идея сверхкомпактной записи большим числом специальных знаков была заброшена.

На мой взгляд, программные тексты должны иметь золотую середину между этими крайностями. Они, конечно, не должны быть слишком многословными и этим напоминающими старинные поваренные книги, но и шарады из цепочек значков и скобок (можно вспомнить Лисп, где встречалось до двадцати скобок подряд) это тоже не идеал. А если в тексте программы все же используются не одни значки, но и слова, то лучше, чтобы они были на родном языке.

Опыт использования родного языка

Если обратиться к собственному опыту использования родного языка, то считаю, что мне в какой-то мере даже повезло: период обучения и освоения пришелся на время, когда русский язык использовался не то, чтобы широко, но вполне естественно, поскольку применялись программные и аппаратные средства отечественной разработки. Как программист я начинал с БЭСМ-6, операционной системы ОС-Диспак, транслятора БЭСМ-АЛГОЛ и диалоговой программы Пульт (при этом работа за терминалом VT-340 очень напоминала работу за первыми персональными компьютерами). В те времена даже в кодовой таблице сначала шел русский алфавит, а затем латинские буквы, отличающиеся по написанию от кириллицы. Вся документация была, естественно, на русском, например, в описании команд БЭСМ-6 все аббревиатуры команд были кириллицей, не было никаких MOV или JMP.

В отличие от ЕС-ЭВМ, в направлении БЭСМ (и Эльбрус) все оставалось по-русски. Правда, до тех пор, пока не появилась разработка дубнинского ядерного центра мониторная система Дубна, в составе которой был ассемблер (тогда такие языки назывались автокодами) со странным именем Мадлен. Так как транслятор сначала переводил на него, некоторые сообщения об ошибках выдавались на уровне ассемблера. И все они были по-английски! Получалось, что одни советские программисты писали сообщения для других советских программистов не на родном языке. Разумеется, Дубна изначально была предназначена для совместной работы где-нибудь в ЦЕРН, поэтому там и было все в международном варианте. Но нам она была поставлена как отечественная система и при этом бесцеремонно отодвинула от родного языка. Например, аббревиатуры команд в Мадлен стали не такими как в исходной документации на БЭСМ-6, что вызывало непонимание и раздражение.

Еще через несколько лет (для меня в 1987 году) в части родного языка все перевернулось с появлением американских персональных компьютеров. Объективно и естественно в первое время никакого русского языка там не было в принципе. Но поскольку это требовалось для набора текстов, приспосабливать их под родной язык все-таки пришлось. Т.е. пришлось перепрошивать ПЗУ видеокарт, наклеивать переводные картинки кириллицы на боковые стенки клавиш, учиться писать драйверы клавиатуры, попутно привыкая к аббревиатурам системы команд x86. Очень скоро русификацией компьютеров и принтеров уже занимались во многих организациях, имеющих ПК, и дело было поставлено буквально на поток. Но при этом русификацией получаемых вместе с компьютерами трансляторов обычно никто не занимался, в лучшем случае лишь переводились руководства.

Возможно, я стал одним из первых, кто озаботился этим и то лишь потому, что полученный вместе с IBM-PC/XT транслятор с языка PL/1 не позволял писать по-русски даже комментарии: все символы с кодом больше 7FН воспринимались им как управляющие. Из-за этого на первых порах комментарии выглядели как теперешние SMS по-русски с телефонов, не имеющих кириллицы. Но разрабатывать программы, не используя родной язык, было для меня совершенно недопустимым. Первое исправление транслятора, которое разрешило кириллицу, оказалось очень легким и привело к мысли дизассемблировать весь транслятор, чтобы стать полноправным владельцем и постепенно сделать его целиком русским. Учитывая, что в PL/1 ключевые слова не зарезервированы, можно иметь одновременно два варианта слов: английский и русский. Поэтому уже написанные программы можно было оставить английскими, зато новые программы можно было писать уже по-русски.

Впоследствии в транслятор было внесено множество доработок, приведенных в [1]. По части русификации были добавлены русские ключевые слова, включая И-ИЛИ-НЕ вместо знаков &, ! и ~. Такой перевод логических операций на русский сразу сделал тексты программ гораздо легче воспринимаемыми. Диагностические сообщения также были переведены и расширены. Много ли существует современных программных средств, которые выдают сообщения об ошибках на русском языке? А ведь это первое, с чем сталкиваются новички. Им и так-то бывает нелегко разобраться, что именно вызвало ошибку, а тут еще и сообщения не на родном языке. Поэтому часто даже вполне внятные сообщения начинают восприниматься ими одинаково: транслятор ругается, а поиск ошибок в тексте производится бессистемным образом, вне связи с полученным сообщением.

В результате всех преобразований в части родного языка я практически вернулся в тот программный мир, в котором работал до эпохи ПК, тексты программ стали выглядеть даже лучше. Например, при записи программы (кроме имен импортируемых подпрограмм, всех этих GetEnhMetaFilePaletteEntries, выглядящих в русском тексте китайской грамотой) я практически вообще могу не переключаться на латинский алфавит. Само собой, идентификаторам всегда стараюсь дать значимые имена по-русски.

Но большинство программистов моего поколения перешли на языки с Си-образным синтаксисом и практически перестали использовать в текстах программ кириллицу.

Заключение

На первый взгляд кажется, что сейчас никаких проблем с русским языком нет. Действительно, давно локализованы на национальные языки операционные системы, офисные программы и игры, а кириллица наносится на клавиши заводским способом. Но если обратится к программированию, то здесь русский язык почти полностью вытеснен. Конечно, есть и исключения, например, Бухгалтерия 1С. При этом я ни в коем случае не призываю создавать специально русские языки программирования (остряки сразу же добавят: православные). Напомню, что даже в самом первом международном документе по языку программирования [2] предполагалось три уровня его представления: эталонный, язык публикаций и конкретные представления. Т.е. с самого начала предполагалось, что знаки языка могут быть различными в разных странах, однако должно быть сохранено однозначное соответствие с эталонным представлением.

Сам я использую язык PL/1, созданный на Западе (большей частью в Великобритании), наличие готового транслятора с которого было в свое время даже одним из аргументов принятия в СССР решения копировать IBM 360 в виде ЕС ЭВМ. Но, возможно, обоснованное на тот момент решение в своей программной части в дальнейшем не было подкреплено развитием первоначально скопированного эталона. Конечно, сейчас с позиции послезнания легко советовать, что надо было делать тогда. Впрочем, и тогда многим это было понятно: урок освоения ОС ЕС ясен: можно, и иногда нужно осваивать отдельные образцы зарубежного программного обеспечения, но нельзя становиться на путь постоянного следования за ними [3].

Мой опыт энтузиаста-дилетанта (без профильного образования), показывает, что разобраться в существующем компиляторе не так уж и трудоемко. Коллектив из 4-5 человек где-нибудь в Академгородке сделал бы это быстро и качественно, например, с компилятором IBM для PL/1. Т.е. дизассемблировал бы его и научился транслировать и собирать точную копию исходного. И это надо было делать, конечно, не для русификации, а для того, чтобы стать хозяином транслятора и с этой стартовой площадки продолжить его развитие дальше, уже независимо ни от кого, снабжая армию пользователей ЕС ЭВМ качественным и, главное, совершенствующимся продуктом. А перевод на русский язык компилятора и других утилит был бы всего лишь бонусом, облегчающим сопровождение и использование. Но транслятор с языка PL/1 на ЕС ЭВМ так и не был освоен. Я делаю такой вывод потому, что он так и не был русифицирован, хотя попытки развить язык и были [5].

Я освоил транслятор и сделал русификацию уже для ПК-версии языка, причем затраты на перевод на русский оказались пренебрежимо малы по сравнению с другими доработками транслятора. И при этом получилось то самое конкретное представление, совпадающее с эталонным, поскольку результат трансляции в виде объектного модуля уже ничем не отличается от результата трансляции исходного текста программы в эталонном виде. И, кстати, простейшим переводом всегда можно вернуться к эталонному представлению исходного текста программы, т.е. такие представления обратимы.

Также аргументом против использования русского языка в программировании является утверждение, что использование английских слов превращает языки в универсальные научные, наподобие универсального отображения в математике или, например, в химии.

Однако, на мой взгляд, языки программирования имеют гораздо больше общих черт с обычными языками, чем абстрактное математическое или химическое представление. Если человек думает по-русски, в большинстве случаев он никогда не начнет думать по-английски. Запрещая использовать элементы родного языка при изучении основ программирования, мы изначально ставим наших школьников и студентов в отстающее положение по сравнению с их англоязычными сверстниками.

Зато появились уже поколения программистов, которые считают, что так и должно быть. Попадалась даже парадоксальная точка зрения, что не использование родного языка это как раз наше преимущество над англоязычными программистами, потому, что собственно конструкции операторов программы не похожи, например, на текст комментариев, а, дескать, у них все это смешивается. По такой логике надо предложить англоязычным использовать в программах русские ключевые слова, чтобы, так сказать, догнать нас. А лучше сразу перейти на китайские иероглифы, чтобы все (кроме, разумеется, несчастных китайцев) имели это преимущество непохожести исходного кода на родной язык .

Использование русского языка отражает и общее состояние дел в развитии программирования. Пока в СССР шли собственные разработки - использовался, естественно, и русский язык, например, в таком выдающемся проекте, как Эль-76, где были задействованы большие силы всей страны: в разработке ПО для Эльбруса участвовал ряд университетов, включая Таллин и Кишинев. Прекратились разработки вот русский язык и исчез, а попытки возрождения, например, проект Национальной Программной Платформы, терпят неудачу.

Русский язык это то, что всех нас (и программистов и не программистов) объединяет. Использование родного языка в программировании является и признаком независимого развития этой отрасли и одновременно объективной базой такого развития.

Напоследок приведу исторический анекдот: когда Петр Первый организовывал выпуск нового российского рубля (монеты), ему советовали все надписи сделать на латыни, иначе, мол, такие деньги не будут принимать за границей. Спасибо тому скажу, кто придумает, как оставить деньги в Отечестве, а не тому, кто выведет их иноземцам ответил Петр.

Литература

1. Д.Ю. Караваев К вопросу о совершенствовании языка программирования RSDN Magazine #4 2011

2. А.П. Ершов, С.С. Лавров, М.Р. Шура-Бура Алгоритмический язык АЛГОЛ-60. Пересмотренное сообщение. Москва Мир 1965

3. Г.С. Цейтин Доклад Итоги освоения ОС ЕС (заметки пользователя) 29.08.1983

4. В.М. Табаков Специализированная система гиперпрограммирования для языка ПЛ/1 : диссертация кандидата физико-математических наук : 05.13.11. Калинин, 1984.

Подробнее..

В русском языке не менее 15 падежей (к международному дню русского языка)

07.06.2021 04:17:51 | Автор: admin

А ЗНАЕТЕ ЛИ В, что в русском языке не менее 15 падежей. Не только было, а всё ещё есть. Не верите?

и никогда не теряйте дара речи - этой фразой я заканчивала каждую телепрограмму Знают ли русские русский?

Как странно, есть же фраза он просто ДАР речи потерял, но при это не теряйте ДАРА речи. Почему дара? Это лишительный падеж, он используется с глаголами с частицей не. Я не хочу знать правды (сравним: хочу знать правду), он не имеет права (а когда имеет, то право)

Помните фразеологизм Врачу, исцелися сам! (это на церковно-славянком, на латыни: Medice, cura te ipsum)? Что это за врачу? Это звательный падеж! В некоторых языках, например, в чешском, он сохранился в полной мере.

Несколько лет назад я услышала, как моя чешская знакомая зовёт своего пса по кличке Арчик:

- Арчику! Арчику!

- В чешском есть звательный падеж? сразу заинтересовалась я.

Оказалось, да, есть и он образуется так же, как врачу из фразеологизма.

Звательный падеж: Отче, княже, старче... Что тебе надобно, старче? - это как раз из Пушкина, чей день рождения сегодня отмечаем.

Сейчас, конечно, чаще используется новозвательный падеж: мам, пап, Танюш, Саш...

Баллотироваться в мэры. Взять в жёны. Пойти в лётчики Что это за форма? Это же не множественное число в именительном падеже)) Это превратительный (включительный) падеж. Он пошёл превращаться в лётчика, включаться в категорию лётчики

Счетный падеж встречается с числительным, когда мы что-то считаем: машины едут в два рядА (родительный падеж: из левого рЯда), а до смерти четыре шагА (не шАга).

Местный падеж - обычно употребляется с предлогами При, В и На. Характеризующий вопрос: где? В лесу, в аэропорту. Казалось бы, предложный падеж. Но предложный падеже дал бы окончание е - в лесе, в аэропорте, но мы так не говорим. Мы даже не зададим вопрос в чём? по отношению к лесу или аэропорту. Мы спросим: Где? Интуитивно мы чувствуем ткань и логику языка.

Не буду расписывать все падежи. Вы легко заметите в русской речи те падежи, которые не изучают в школе, - если будете слушать внимательно;)

Кстати, Вам налить чая или чаю?

Подробнее..

Event2Mind для русского языка. Как мы обучили модель читать между строк и понимать намерения собеседника

18.06.2020 18:21:58 | Автор: admin
Умение модели распознавать намерения собеседника, то есть понимать зачем человек совершил то или иное действие, применимо в большом числе прикладных NLP-задач. К примеру, чат-ботам, голосовым помощникам и другим диалоговые системам это позволит эмоционально реагировать на высказывания собеседника, проявлять понимание, сочувствие и другие эмоции. Кроме того, задача распознавания намерения это еще один шаг на пути к пониманию человеческой речи (human understanding).



Уже было предпринято несколько попыток решить данную задачу в той или иной форме. Например, на NLP-progress публикуются последние достижения в области commonsense reasoning. Слабость большинства существующих моделей заключается в том, что в их основе лежит supervised подход, то есть им требуются большие размеченные датасеты для обучения. А в силу специфичности задачи разметка часто бывает весьма нестандартной и достаточно сложной.

Для английского существует ряд корпусов и benchmarkов, а вот для русского языка ситуация с данными намного печальнее. Отсутствие размеченных данных для русского часто является одним из основных препятствий, которое мешает русифицировать работающие английские модели.

В этом посте мы расскажем, как мы создали датасет для задачи Common Sense Reasoning в одной из ее возможных формулировок, предложенной в статье event2mind, а также адаптировали английскую модель event2mind от AllenNLP для русского языка. Для начала немного расскажем, что же из себя представляет задача Common Sense Reasoning.

На самом деле, правильнее было бы рассматривать это как целое направление задач, направленных на распознавание намерений и эмоций действующего лица. Единой формулировки у нее нет, и в данном посте мы возьмем за основу вот такой ее вариант, предложенный авторами event2mind: по короткому тексту в свободной форме, содержащему некоторое действие или событие (например, PersonX eats breakfast in the morning), определить намерения субъекта (X wants to satisfy hunger), его эмоции/реакции (X feels satiated, full) и возможные эмоции/реакции других участников события, если таковые присутствуют. Рисунок 1 это наглядно иллюстрирует.

Рисунок 1. Задача Commonsense Reasoning по короткому тексту-событию определить намерения, эмоции/реакции субъекта и эмоции/реакции окружающих


В оригинальной английской статье авторы предложили модель event2mind для решения этой задачи, а также большой размеченный корпус для ее обучения для английского языка. Нашей задачей было русифицировать эту модель, адаптировав для русского языка. Данную модель мы хотели потом встроить в чат-бота, чтобы научить его понимать намерения пользователя и правильно реагировать на эмоции. Для этого мы собрали датасет для русского языка, в формате, аналогичному английскому, а также обучили и протестировали несколько моделей архитектуры event2mind на собранных данных.

Данные, данные и еще раз данные


Итак, нашей задачей было собрать корпус размеченных текстов в свободной форме в формате, пригодном для обучения event2mind. Для простоты дальше мы будем называть такие короткие тексты просто событиями. При этом мы старались максимально расширить common sense reasoning кругозор модели, собрав события на самые разные темы из повседневной жизни.

Часть первая. Crowdsourced corpus


На первом этапе нам предстояло собрать достаточное количество сырых событий для последующей разметки. За основу мы взяли три источника данных:
  1. Короткие посерийные описания сериалов и мыльных опер. Мы вручную отобрали 50 сериалов с сюжетами из повседневной жизни, такие как Друзья, Секс в большом городе, Санта-Барбара, Универ, Кухня и другие. При этом мы старались выбирать сериалы о повседневной жизни с сюжетами на общие темы. Фантастика или профессиональные сериалы нам не подходили, так как они содержат очень много специальной лексики, и события там из своей специфичной области. Вы представляете, что может выучить модель, обученная на Докторе Хаусе или Звездном пути? Еще начнет подозревать у всех волчанку и сыпать рассказами о сражениях с инопланетянами.
  2. Краткие содержания книг. Суммарно нам удалось набрать краткие содержания 1512 книг.
  3. Тексты из SynTagRus, который является частью Русского Национального корпуса и содержит художественные тексты вместе с новостями.


На следующем шаге мы извлекли события из собранных текстов. События для тренировки event2mind можно определить как комбинацию глагольного предиката с входящими в составляющую глагола аргументами. Для поиска подобных паттернов был использован синтаксический парсер UdPipe, с помощью которого мы выделяли в текстах паттерны вида глагол + зависимые слова в синтаксическом дереве, как например на рисунке 2, которые удовлетворяли одному из следующих правил:

  • nsubj + root + obj
  • nsubj + root + iobj
  • nsubj + advmod + root
  • nsubj + root + case + obl
  • etc.


Рисунок 2. Синтаксические паттерны, использованные для извлечения событий из текстов



Отобранные события обезличиваются. По аналогии с оригинальным event2mind все действующие лица и именованные сущности были заменены на единообразные PersonX, а также PersonY и PersonZ, если в предложении упоминается более одного действующего лица. Для распознавания именованных сущностей (Named Entity Recognition) и дальнейшей замены мы вновь воспользовались UdPipe: в событиях, которые отвечают паттернам выше мы деперсонилизировали токены, помеченные тегами PROPN или PRONOUN. В завершении мы исключили события, которые не содержат одушевленных субъектов. Например, по этому критерию было отсеяно предложение Идет дождь. В итоге в корпус вошли только события с одушевленными именованными сущностями (person named entities).

После деперсонализации и фильтрации мы воспользовались частотным анализом и расстоянием Левенштейна для отобора наиболее распространенных событий и фильтрации нестандартных примеров, которые встретились лишь единожды. Во-первых, мы взяли все события, которые встретились в первоначальной выборке больше одного раза. Для оставшейся части данных мы посчитали попарные расстояния Левенштейна $L(phrase_1,phrase_2)$, ), отобрали пары, для которых оно не превосходило 5 и из каждой пары взяли более короткое предложение. При таком методе мы руководствовались следующим соображением: если для пары событий их расстояние Левенштейна мало (в данном случае порог 5), то эти предложения отличаются весьма незначительно, например, в роде глагола или прилагательного. Фактически это вариации одного и того же события. А более короткое предложения из пары мы выбирали потому, что оно скорее будет содержать начальные формы слов (они чаще короче, хотя и не всегда).

После сбора данных события предстояло разметить, выделив в них намерения PersonX, его эмоции/реакции, а также эмоции/реакции PersonY и PersonZ, если таковые присутствуют. Для этого мы создали задание в Яндекс.Толоке. Пример из него вы можете видеть на рисунке 3. Для каждого события мы спрашивали разметчиков:

  • содержит ли оно осмысленное событие;
  • можно ли по тексту события понять намерения действующего лица;
  • можно ли по событию понять эмоции/реакцию действующего лица;
  • может ли это событие вызвать реакцию окружающий.


Рисунок 3. Пример задания из Яндекс.Толоки



Для облегчения труда толокеров мы подготовили для них подсказки ответы пробной модели event2mind, обученной на переведенном английском корпусе event2mind. Так что им оставалось только верифицировать ответы черновой модели и по возможности предложить свои.

Тут стоит оговориться, что поскольку переведенные данные получились достаточно сырыми, то обученная на них модель оказалась слабой. До полноценной модели она не дотягивала, но в некоторых случаях ей достаточно точно удавалось угадывать эмоции и намерения субъектов.

В итоге нам удалось собрать 6756 событий на различные повседневные темы.

Часть 2. Translated English corpus


Помимо того, что мы использовали размеченный русский датасет, мы частично перевели английский корпус с помощью переводчика Google, а затем отфильтровали и откорректировали результат. Почему это было необходимо? Понятно же, что автоматический перевод несколько хуже исходно русских данных, размеченных вручную.

Дело в том, что разметка подобного датасета трудоемкое дело, требующее большого количества ресурсов, денег и средств. У нас просто не было возможности разметить корпус, по размерам сопоставимый с английским, который состоит из 46 тысяч примеров. Поскольку собранный на русском датасет оказался меньшего размера, мы решили оценить, хватит ли такого объема данных для обучения. Для этого мы обучили английскую модель на частях оригинального корпуса и измерили, как меняется качество в зависимости от размера обучающего датасета. Результаты приведены в таблице. Качество для намерений (intent) и эмоций/реакций (react) оценивалось, по аналогии с оригинальной статьей, по метрике recall@10 на валидации. recall@10 отражает долю случаев, когда истинный ответ golden standard попадает в топ-10 предсказаний модели. Метрика меняется от 0 до 1, чем больше, тем лучше.

Таблица 1. Зависимость качества английской модели от размера корпуса для обучения



Сразу можно сказать, что 5000 примеров недостаточно для полноценного обучения модели. Однако уже при 30000 примеров, loss и recall практически не отличаются от результатов на полном объеме данных. Получается, что размеченных нами 7000 примеров не хватает для обучения модели и необходимо каким-то способом увеличить размер обучающей выборки.

Для этого мы подготовили дополнительный корпус, полученный из английского с помощью автоматического перевода Google Переводчиком. Как уже отмечалось выше, при автоматическом переводе всего корпуса некоторые переводы оказывались некорректными или полностью теряли смысл. Поэтому мы отобрали ту часть английских данных, которая переводилась наиболее адекватно. Изначально английский корпус собран из нескольких источников: ROC Story training set, the GoogleSyntactic N-grams, the Spinn3r corpus и idioms. При этом предложения из некоторых источников оказались проще для перевода, чем из других. Например, адекватный перевод идиом без ручной правки оказался не под силу компьютеру. Поэтому мы взяли только примеры из ROC-story. По результатам оригинальной статьи (см. таблицу 2), у этого источника коэффициент согласованности аннотаторов (Cohen's kappa coefficient), равный 0.57. А это, скорее всего, свидетельствует о том, что события оттуда проще для понимания и разметки, а значит меньше подвержены ошибкам при переводе.

Таблица 2 Данные и Cohen's kappa coefficient для разных источников в английском корпусе


После этого мы отфильтровали отобранные данные, удалили оттуда примеры, в которых после перевода остались английские слова и примеры, которые были переведены некорректно. Оставшаяся часть была отредактирована редакторами.

Стоит отметить, что несмотря на все уловки, фильтрацию и редактуру, переведенный корпус все равно отстает по качеству предложений от размеченного толокерами датасета.

В итоге нам удалось набрать 23409 переведенных событий, а объем объединенного корпуса с учетом размеченной русской части составил 30165. Этого, как мы выяснили во время экспериментов, должно было хватить для обучения русской модели.

А теперь к экспериментам!


Итак, данные собраны, пора переходить к обучению модели и экспериментам. Модель event2mind представляет собой нейросетевую архитектуру вида encoder-decoder с одним энкодером и тремя декодарами для каждого вида предсказаний (см. рисунок 4): намерение субъекта, его эмоции/реакции и эмоции/реакции других участников события, если таковые имеются (subjects intent, subjectss reaction и others events participants reactions). Исходные предложения изначально векторизуются с помощью одного из методов векторных представлений слов (например, word2vec или fasttext) и кодируются с помощью энкодера в вектор $h^E\in \mathbb{R}^H$. А затем с помощью трех RNN декодеров генерируются предсказания. Благодаря этому модель может генерировать ответы даже для намерений и реакций, которые она до этого не видела.

Рисунок 4. Архитектура модели event2mind


Для экспериментов мы использовали объединенный корпус для русского языка, размеченную и переведенную части. А чтобы сделать распределение русских и переведенных примеров более равномерным, мы дополнительно перемешали данные. Отметим, что мы также попробовали обучить модель только на размеченных данных, но из-за маленького объема датасета, она показала очень плохие результаты. Мы протестировали различные слои в энкодере LSTM и GRU, а также попробовали различные векторные представления fasttext и word2vec с RusVectores. Результаты приведены в таблице 3, результаты по intentам и reactам, как и ранее считались по метрике recall@10.

Таблица 3. результаты моделей для русского языка, intent и react оценивались по recall@10


Итак, какие выводы можно сделать из результатов экспериментов? Во-первых, word2vec embeddings оказались немного лучше, чем fasttext. При этом fasttext embeddings, обученные на ruscorpora показали себя лучше обученных на araneum. Во-вторых, можно отметить, что при использовании word2vec, GRU в энкодере оказывается лучше LSTM. И наконец, лучшая модель (areneum word2vec + GRU) практически повторяет результаты для английского языка.

И напоследок посмотрим на реальные примеры!





Весьма неплохо! Намерения выглядят весьма правдоподобно и действительно отражают какие-то общечеловеческие понятия и знания. А вот с эмоциями/реакциями модель справилась несколько хуже, они получились более примитивными и однообразными. Возможно, это связано с тем, что эмоции зависят от большего объема текста и короткого текста-события недостаточно, чтобы правильно его определить.

Вместо заключения


Итак, мы создали русскоязычный корпус для обучения модели event2mind. Помимо этого, мы провели эксперименты, которые показали, что архитектура event2mind работает для русского языка, который по своей природе грамматически сложнее английского. Несмотря на сложность русского языка, удалось достичь сравнимого с английским качества. Лучшая модель и данные выложены в репозитории.



Такой большой проект стал возможен, только благодаря совместным усилиям нашей команды. В адаптации event2mind для русского языка также принимали участие alenusch и onetwotrickster.
Подробнее..

Из песочницы Конфуций и Маргарита

16.08.2020 18:20:26 | Автор: admin


Вступление


Соревнований по машинному обучению как и платформ, на которых они проводятся, существует немало и на любой вкус. Но не так часто темой контеста является человеческий язык и его обработка, еще реже такое соревнование связано с русским языком. Недавно я принимал участие в соревновании по машинному переводу с китайского на русский, прошедшего на платформе ML Boot Camp от Mail.ru. Не обладая большим опытом в соревновательном программировании, и проведя, благодаря карантину, все майские праздники дома, удалось занять первое место. Про это, а также про языки и подмену одной задачи другой я постараюсь рассказать в статье.

Глава 1. Никогда не разговаривайте на китайском


Авторами данного соревнования предлагалось создать систему машинного перевода общего назначения, так как перевод даже от крупных компаний в паре китайский-русский значительно отстает от более популярных пар. Но так как валидация проходила на новостях и художественной литературе, то стало понятно, что обучаться надо именно на новостных корпусах и книгах. Метрика для оценки переводов была стандартная BLEU. Эта метрика сравнивает человеческий перевод с машинным и, грубо говоря, за счет количества найденных совпадений оценивает близость текстов по 100-балльной шкале. Русский язык богат своей морфологией, поэтому данная метрика всегда заметно ниже при переводе на него чем на языки с меньшим количеством способов словообразования (например, романские языки французский, итальянский и т.д.).

Каждый, кто занимается машинным обучением, знает, что это в первую очередь данные и их очистка. Займемся же поиском корпусов и параллельно будем разбираться в дебрях машинного перевода. Итак, в белом плаще

Глава 2. Пон Тий Пи Лат


В белом плаще с кровавым подбоем, шаркающей кавалерийской походкой мы лезем в поисковик за параллельным русско-китайским корпусом. Как мы позже поймем, того, что мы нашли недостаточно, но пока взглянем на наши первые находки (найденные и почищенные мной датасеты я собрал вместе и выложил в открытый доступ [1]):


OPUS довольно большой и в языковом плане разнообразный корпус, посмотрим на примеры из него:
То, что мы с ней пережили, еще необычнее того, что пережили вы...


Я расскажу вам об этом.


Маленький городок, где я родился...
...

Как видно из названия, это в основном субтитры к фильмам и сериалам. К такому же типу принадлежат и субтитры TED'a, которые после парсинга и очистки тоже превращаются во вполне себе параллельный корпус:

Вот чем обернулся наш исторический эксперимент в наказании:


молодые люди боятся, что в любой момент их могут остановить, обыскать, задержать.


И не только на улице, но и в их собственных домах,
WikiMatrix это выровненные LASER'ом тексты из интернет страничек (так называемый common crawling) на различных языках, но для нашей задачи их мало, да и выглядят они странновато:
Збраньки (укр.


Но вам лучше поститься, если бы вы только знали!


Он отверг такое утверждение.
После первого этапа поиска данных, возникает вопрос с нашей моделью. Какие есть инструменты и как вообще подойти к задаче?

Есть очень понравившийся мне NLP курс от МФТИ на Степике [2], особенно полезный при прохождении онлайн, там на семинарах разбираются в том числе и системы машинного перевода, причем пишешь их ты сам. Помню восторг от того, что написанная с нуля сеть после обучения в Colab, выдала адекватный русский перевод в ответ на немецкий текст. Модели мы строили на архитектуре трансформеров с механизмом внимания, который в свое время стал прорывной идеей [3].

Естественно, первой мыслью было просто дать модели другие данные на вход и выиграть уже. Но, как знает любой китайский школьник, в китайской письменности пробелы отсутствуют, а наша модель на вход принимает наборы токенов, которыми в ней являлись слова. Разбить китайский текст на слова с какой-то точностью позволяют библиотеки типа jieba. Встроив токенизацию по словам в модель и прогнав ее на найденных корпусах, я получил BLEU около 0,5 (а шкала-то 100-балльная).

Глава 3. Машинный перевод и его разоблачение


К соревнованию был предложен официальный baseline (простое, но работающее решение-пример), который основывался на OpenMNT. Это открытый инструмент для обучения переводу с множеством гиперпараметров для подкрутки. На этом шаге давайте обучать и делать вывод модели через него. Обучать будем на платформе kaggle, так как она дает 40 часов обучения на GPU бесплатно [4].

Надо отметить, что к этому моменту участников конкурса было настолько немного, что войдя в него, можно было бы попасть сразу в пятерку, и на то были причины. Форматом решения был docker-контейнер, к которому в процессе инференса монтировались папки и модель должна была читать из одной, а ответ класть в другую. Так как официальный бейзлайн не заводился (я лично сходу его не собрал) и был без весов, то я решил собрать свой и выложил в открытый доступ [5]. После этого начали обращаться участники с просьбой правильно собрать решение и вообще помочь с докером. Мораль, контейнеры это стандарт в сегодняшней разработке, используйте их, оркестрируйте и упрощайте себе жизнь (с последним утверждением согласны не все).

Давайте теперь добавим к найденным на предыдущем шаге корпусам еще парочку:


Первый это огромный корпус юридических документов с заседаний ООН. Доступен он, кстати, на всех официальных языках этой организации и выровнен по предложениям. Второй еще более интересен, так как непосредственно является новостным корпусом с одной особенностью, он китайско-английский. Нас этот факт не смущает, потому что современный машинный перевод с английского на русский очень качественный, и в ход идут Amazon Translate, Google Translate, Bing и Яндекс. Для полноты картины покажем примеры из того, что получилось.

Документы ООН
Этот микроспутник представляет собой недорогостоящую платформу которая имеет умеренно продолжительный срок службы и в будущем может быть модифицирована.


В частности в нем представлена подробная информация о разработанных самими участниками планах осуществления ряда проектов регионального уровня представляющих определенный интерес.

UM-Corpus

Facebook закрыл сделку на покупку Little Eye Labs в начале января.
1Little Eye Labs

Четыре инженера в Бангалоре запустили Little Eye Labs около полутора лет назад.
Little Eye Labs

Компания строит программные инструменты для мобильных приложений, сделка будет стоить от 10 до 15 миллионов долларов.
10001500

Итак, наши новые ингредиенты: OpenNMT + качественные корпуса + BPE (про BPE токенизацию можно почитать здесь). Обучаем, собираем в контейнер, и после отладки/очистки и стандартных трюков получаем BLEU 6,0 (шкала по-прежнему 100-балльная).

Глава 4. Параллельные рукописи не горят


До этого момента мы шаг за шагом мы улучшали нашу модель и самый большой прирост дало использование новостного корпуса, одного из проверочных доменов. Кроме новостей неплохо было бы обзавестись и корпусом литературы. Потратив изрядное количество времени стало понятно что машинный перевод книг с китайского ни одна популярная система предоставить не может Настасья Филипповна становится чем то вроде Ностоси Филипауны, а Рогожин Рого Реном. Имена персонажей обычно составляют довольно большой процент от всего произведения и часто это имена редкие, поэтому, если модель их никогда не видела, то и перевести корректно скорее всего не сможет. Надо обучаться на книгах.

Тут мы подменяем задачу перевода на задачу выравнивания текстов. Сразу скажу, что эта часть мне понравилась больше всего, потому что сам я увлекаюсь изучением языков и параллельные тексты книг и рассказов, по-моему мнению, это один из наиболее продуктивных способов обучения. Идей для выравнивания было несколько, самой продуктивной оказалось переводить предложения в векторное пространство и считать косинусное расстояние между кандидатами на соответствие. Перевод чего-нибудь в вектора называется embedding, в данном случае это sentence embedding. Для этих целей есть несколько хороших библиотек [6]. При визуализации результата видно, что китайский текст немного сползает за счет того, что сложные предложения на русском часто переводят как два или три на китайском.



Найдя все что можно на просторах интернета, и самостоятельно выравнивая книжки добавляем их к нашему корпусу.

Он был в дорогом сером костюме, в заграничных, в цвет костюма, туфлях.


Серый берет он лихо заломил на ухо, под мышкой нес трость с черным набалдашником в виде головы пуделя.


По виду лет сорока с лишним.

После обучения на новом корпусе, BLEU вырос до 20 на публичном датасете и до 19,7 на приватном. Тут сыграло и то, что в обучение очевидно попали произведения из валидации. В реальности так никогда делать нельзя, это называется утечкой, а метрика перестает быть показательной.

Заключение


Машинный перевод прошел немалый путь от эвристик и статистических методов до нейросетей и трансформеров. Я рад, что удалось найти время и познакомиться с этой темой, она определенно заслуживает пристального внимания со стороны сообщества. Хочу поблагодарить авторов соревнования и других участников за интересное общение и новые идеи!

[1] Параллельные русско-китайские корпуса
[2] Курс по Natural Language Processing от МФТИ
[3] Прорывная статья Attention is all you need
[4] Ноутбук с примером обучения на kaggle
[5] Публичный docker бейзлайн
[6] Библиотека для multilingual sentence embeddings
Подробнее..

Recovery mode Как научить бабушку писать мемуары на самоизоляции с помощью VOSK-API. Речь в текст спешит на помощь

09.11.2020 20:17:29 | Автор: admin
В ряде статей, опубликованных на этом сайте, есть описание того, что на рынок вышла новая Open Source платформа AI речь в текст VOSK-API. Ее инсталляция и один из способов применения расписан достаточно подробно в ее документации. Привожу ссылку на Гитхаб VOSK-API, рекомендую пробовать октябрьскую версию 2020 года.



Ознакомившись с комментариями и критикой в статье мне захотелось рассказать о моем полугодовом опыте работы с данной системой, привести четыре примера решенных на ней задач.

Основная проблема у начинающего пользователя установка самого KALDI (на котором она основана). Основные вопросы рассмотрены в подробном мануале. Одна из задач создания голосового бота решена в статье. Для экспериментов мы выбрали виртуальную машину с Ubuntu 18.04, четырехядерным десктопным процессором и 8ГБ оперативной памяти. Замечено, что необходимо не менее 10ГБ свободного места для ее пересборки на диске и установка ряда дополнительных пакетов.
По времени полная ее пересборка из исходников по инструкции автора заняла около 2 часов времени вместе с выкачиванием зависимостей. Дополнительно надо помнить и выкачать требуемые словари нужных языков. Из настоятельных рекомендаций просмотреть статью про Яндекс станцию.Мини касательно микрофонов. Настройка распознавания KALDI в файле mfcc.conf оставлена по дефолту.

Достигнутое быстродействие 3 часа речи в текст за 45 минут без CUDA. С CUDA скорость вырастет раза в три.

Цель моей статьи: показать полученные решения четырех очень важных примеров из жизни, которые вы можете использовать на момент нахождения на самоизоляции. Использование команд, которые будут приведены, не требует никакой подготовки. Достаточно базовых знаний операционной системы. Если вы смогли самостоятельно поставить данный продукт, то они могут быть рассмотрены как углубленный анализ результата работы демо-скриптов, идущих с данной системой.

Устанавливаем очень полезную утилиту jq.
sudo apt-get install jq


Первая задача. Бабушка пишет мемуары для своих внуков.

После проведённых экспериментов, автор рекомендует посадить бабушку перед хорошей веб-камерой, чтобы она показывала семейный альбом и надиктовывала свои воспоминания о каждой фотографии.

К сожалению, средней дикции пожилого человека недостаточно, чтобы нейросеть могла выполнить дальнейшую обработку из-за большого количества ошибок.

Вторая задача. Многие столкнулись с тем, что учитель, уходя на удалённую работу, обязан поставить оценки всему классу. Допустим, за стихотворение Алексея Плещеева Травка зеленеет, солнышко блестит, которое было задано выучить наизусть, необходимо прослушать 1 минуту аудиозаписи на каждого ученика. Приведем это стихотворение полностью.

Травка зеленеет,
Солнышко блестит;
Ласточка с весною
В сени к нам летит.
С нею солнце краше
И весна милей
Прощебечь с дороги
Нам привет скорей!
Дам тебе я зерен,
А ты песню спой,
Что из стран далеких
Принесла с собой


Если этот текст вам расскажут девяносто человек, то вы получите 90 отдельных файлов. Хорошо, если они у вас лежат в одной директории, допустим в Облаке Школьного портала.
Еще лучше, если учащиеся не забыли, что надо перед чтением стиха произносить свое имя, класс, представлять автора стиха и проговаривать его название. Совсем хорошо, если файлы будет писать родитель и поименует файл понятным для учителя образом.

Результаты работы нейросети следующие. Ребенок 11 лет.

ксюша иванова его третьего класса травка зеленеет солнышко блестит
травка зеленеет солнышко блестит ласточка с весною к сенью к нам летит
с нею солнца краше и весна милей прощай дейзи с дороги нам привет скорей дам тебе я зёрен а ты песню спою чтоб стран далёких принесла с собой

Для сравнения родитель, возраст более 50 лет.

юрий иванов третьей главе класс
автор алексей плещеев стихотворение травка зеленеет солнышко блестит
травка зеленеет
солнышко блестит
ласточка с весною
в сени к нам летит
с нею солнца краше
и весна милей прыщи бич с дороги
нам привет скорей
дам тебе я зёрен
а ты песню спой
что из стран далёких принесла с собой

Что мы можем видеть сразу? При достаточном уровне выполнения условий ясная речь и хороший микрофон нейросеть позволяет качественно проводить анализ того, был ли факт сдачи домашнего задания, нет ли ошибок и оговорок в распространенных словах. Для автора статьи данный тест очень показателен с точки зрения достижения AI определенного уровня зрелости. Заметим, что очень хотелось бы видеть правильные знаки препинания, но из-за наличия большого количества авторских знаков в поэзии, на текущий момент нейросистемам данная задача недоступна.

Код для решения данной задачи.
cd ~/vosk-api/python/example/ffmpeg <конкатенация файлов от учеников> <итоговый файл>test_ffmpeg.py <итоговый файл> > <распознанный файл.txt>

JSON-структура распознанного файла.
{  "result" : [{      "conf" : 1.000000,      "end" : 11.670000,      "start" : 11.190659,      "word" : "автор"    }, {      "conf" : 0.999981,      "end" : 12.329875,      "start" : 11.730000,      "word" : "алексей"    }, {      "conf" : 1.000000,      "end" : 13.170000,      "start" : 12.330000,      "word" : "плещеев"    }, {      "conf" : 0.499391,      "end" : 14.730000,      "start" : 13.620000,      "word" : "стихотворение"    }, {      "conf" : 1.000000,      "end" : 15.720000,      "start" : 15.090000,      "word" : "травка"    }, {      "conf" : 1.000000,      "end" : 16.620000,      "start" : 15.720000,      "word" : "зеленеет"    }, {      "conf" : 1.000000,      "end" : 17.970000,      "start" : 16.950000,      "word" : "солнышко"    }, {      "conf" : 1.000000,      "end" : 18.840000,      "start" : 18.090000,      "word" : "блестит"    }],  "text" : "автор алексей плещеев стихотворение травка зеленеет солнышко блестит"}

cat <распознанный файл.txt> | jq -e '.text // empty'

"""юрий иванов третьей главе класс""автор алексей плещеев стихотворение травка зеленеет солнышко блестит""травка зеленеет""солнышко блестит""ласточка с весною""в сени к нам летит""с нею солнца краше""и весна милей прыщи бич с дороги""нам привет скорей""дам тебе я зёрен""а ты песню спой""что из стран далёких принесла с собой"


Где найти словарь и слово прыщи бич?
cd ~/vosk-api/python/example/model/graphgedit words.txt

Всего строк в файле 709157, слово прощебечь отсутствует. Слово щебетать есть строка щебетать 693280.

Третья задача. Проверена работа VOSK-API при записи конференций на программах Zoom и Skype.

Результат экспериментов следующий. Zoom показал себя несколько лучше Skype. Так как конференции чаще всего ведут гарнитурами телефонов, то приемлемого уровня транскрибирования получить не удается. До 40% процентов записей необходимо править и переслушивать запись. Из очень сильной стороны VOSK-API требуется отметить наличие словарей на 16 языков. Перемена словаря иногда помогает в распознавании речи, если данный язык или акцент вам не знаком. Но надо помнить, что речь должна быть не скороговоркой, а с точным соблюдением последовательности слов и ударений в тех языках, где оно явно приводит к смене смысла отдельного слова.
cd ~/vosk-api/python/example/test_microphone.py > > <файл, куда будет идти вывод текста с микрофона> --- при работе с микрофономtest_ffmpeg.py  <аудиофайл, где записана конференция> > <файл, куда будет записан распознанный текст>


Четвертая задача. Решение задач кадрового администрирования у людей, которые переболели COVID-19. К сожалению, из-за отдельных неврологических проблем после перенесения гриппа, люди, вернувшиеся обратно к активной деятельности, чаще всего некоторое время не полностью работоспособны это признают врачи-неврологи, поэтому автор рекомендует делать три теста, которые позволяют определить степень расстройства.

Тест первый. Чтение собственной биографии с рукописного текста.
Тест второй. Проверка знаний по технике безопасности и служебных обязанностей, особенно, если при выполнении служебных обязанностей требуется работа на иностранных языках.
Тест третий. Решение задач на логику/подбор цифр/подбор цветов.

Общее решение сравнить речь человека до и после болезни. Перед запуском этого скрипта необходимо скачать словарь Speaker identification model.
./test_speaker.py test.wavText: what zero zero zero oneX-vector: [-1.065311, 0.14455, 1.310549, 0.596016, -0.151356, -0.362094, 0.745858, -0.264195, 0.307014, 0.058419, 0.738315, 0.635655, -0.495874, 0.139377, 0.356549, -0.173395, 0.074023, -0.83072, -1.736858, -0.570139, 0.89358, 0.075338, 0.886154, -0.137121, -0.722118, -0.586631, -0.923351, -1.145369, 0.721946, 0.855906, -0.527137, -0.602525, -0.404175, 0.14571, 0.481054, 1.070324, -0.452989, 0.440212, 0.95773, 0.607813, -0.748662, 0.248267, 0.281229, -1.602895, -1.129104, 0.378493, -1.342542, 0.312861, -0.405486, 0.232147, -0.883148, 0.215719, -0.720657, 0.241228, -0.856604, -0.454164, 1.092535, -1.528371, -0.849456, -0.413601, 0.011528, -0.619541, 1.089719, -1.076719, 0.778474, -1.022505, -0.282122, 1.959929, -1.417458, -0.375822, 1.581648, 0.906027, -0.800187, 1.231653, 0.859697, 1.284286, -1.040324, -1.228232, -0.971846, -0.594426, -1.413725, -0.99551, 2.357713, -1.907972, -0.16593, 0.183826, -1.341422, -1.380152, -0.252688, 0.401448, 1.342474, -1.904654, 1.280014, 0.632759, 0.323294, -0.3574, 1.516961, -2.11078, -1.839827, -0.427943, 0.832596, -1.724944, -0.031242, -1.266902, 3.215793, 0.2991, -0.187186, 1.585431, 0.9225, -0.128613, 0.383765, -0.972161, 0.774282, 0.43021, -1.750064, 1.274774, 0.026617, 0.428113, -0.443698, 0.896994, -0.522293, -1.237508, -2.001688, -0.641555, -1.942122, 0.561793, 1.141983, -0.478895]Speaker distance: 0.01602843768494866 based on 174 framesLOG (VoskAPI:~CachingOptimizingCompiler():nnet-optimize.cc:710) 0.0117 seconds taken in nnet3 compilation total (breakdown: 0.0107 compilation, 0.000635 optimization, 0 shortcut expansion, 0.000121 checking, 9.54e-07 computing indexes, 0.000215 misc.) + 0 I/O.Text: no no to unoX-vector: [-0.315216, 0.088054, 1.967613, 0.440483, -1.425646, 0.299931, 0.621808, -0.920581, 0.263069, -0.216305, -0.384349, 0.078719, 0.15704, 2.007216, -1.331602, 0.720121, 0.508036, -0.768363, -0.074315, 0.113592, 1.173006, 1.21138, -0.294857, 0.835466, -0.270718, 1.132135, -1.588558, 0.406705, -0.531724, 0.092602, 1.5677, -0.245982, 0.655816, 0.376164, 0.077411, -0.547771, 0.196848, 1.530783, 0.557785, -0.846675, -1.288608, 0.140275, 0.06392, 0.709163, -1.025039, -1.477721, -0.179096, 0.316264, -0.566066, 1.153895, 0.654089, 0.084374, -0.510161, 1.186644, -0.202071, -0.915526, -0.196917, -0.162389, 1.817603, -1.664899, -0.072249, -0.117305, 1.670558, -3.026185, -0.49294, -1.51643, -0.205612, 1.918243, 0.776788, -0.101979, 2.172074, 0.091645, 0.411623, 1.020418, -0.71609, -0.034635, -0.32363, -0.673635, -0.972474, 0.851203, 0.621995, -0.112647, 1.024791, -1.764144, 1.312728, -1.02536, -1.223556, -2.747352, 0.381789, 0.217219, 0.347767, 0.004582, -0.838587, 1.136404, -1.049031, -0.575243, 0.848262, -0.057954, -1.762913, 0.393559, 0.84619, 0.221667, 0.608691, 1.417057, -1.322821, -1.321385, 0.973689, -1.175761, -0.317987, 0.373828, -0.192994, 0.854224, 2.230777, 0.627181, -1.071384, -1.809651, 0.849013, 0.41032, -0.045185, -0.073063, -0.428079, -0.577237, -0.861689, 1.305788, -1.700222, -1.188621, 1.197436, 0.943091]Speaker distance: 0.7495460914450667 based on 72 framesNote that second distance is not very reliable because utterance is too short. Utterances longer than 4 seconds give better xvectorLOG (VoskAPI:~CachingOptimizingCompiler():nnet-optimize.cc:710) 0.0136 seconds taken in nnet3 compilation total (breakdown: 0.0121 compilation, 0.00063 optimization, 0 shortcut expansion, 0.00017 checking, 1.19e-06 computing indexes, 0.000646 misc.) + 0 I/O.Text: cyril one eight zero threeX-vector: [-0.880006, 0.186606, 1.848107, 0.674361, -0.747068, 0.03707, 0.332981, -0.223074, -0.26606, 0.252309, 1.311052, 0.731834, -0.347791, -0.015727, 0.264074, -0.045843, 0.053776, -0.341771, -0.984138, -0.346953, 0.937853, -0.316124, 2.276106, -0.589401, 0.283398, 0.678342, -0.392648, -1.73645, 0.341099, 1.257073, 0.82611, -1.22818, 0.039835, -0.080493, -0.912248, 1.685127, 0.177878, 0.660492, 1.094303, 0.473059, -1.256159, 0.937267, 0.0417, -0.292262, -0.285039, -0.921979, -1.534441, -0.211981, -1.994463, 0.512648, 0.114646, 2.468064, -1.15914, -0.797758, -0.199447, -0.672875, 0.452033, -0.163903, -0.109623, 0.564099, -1.081989, -1.362331, 0.484899, -1.329233, 0.515784, -1.341571, -0.899612, 1.492324, -0.498962, -0.926496, 2.493385, 0.475057, 0.597296, 1.374582, 0.777272, 1.556976, -0.215508, -1.401148, -0.779485, -0.165828, 0.1682, -0.165277, 1.167712, -0.748817, -0.668321, -0.006841, -1.870955, 0.296376, 0.362641, 0.246981, -0.74697, -1.148609, -0.256512, -0.708602, -0.910755, -0.65048, 0.785714, -1.613403, -1.52025, -0.366386, 1.112397, -1.063604, -0.169103, -0.115601, 2.725785, 1.206273, -0.047244, -1.942164, -0.144012, 0.981502, 0.374681, 0.070751, 1.332015, -0.631551, -1.297623, 2.502249, 0.580735, 0.215355, 0.008061, -0.758196, -0.870196, -0.198494, 0.504556, 0.333052, -1.248781, 1.009707, 1.975181, 1.947483]Speaker distance: 0.40815495072293917 based on 177 frames


Так как набор служебной информации у всех на работе разный, напомним несколько важных цифр, которые установили учёные-нейролингвисты.

Обычный человек в сутки может произнести: мужского пола десять тысяч слов, женского пола пятнадцать тысяч. Средний темп говорения на европейском языке у его носителя: сто пятьдесят слов в минуту, а темп написания только сорок.

При взаимодействии с различными системами искусственного интеллекта нужно понимать, что мы добиваемся от них гладкого диалога. Диалоги вида да или нет приводят человека к психологическим проблемам.

Установлено, что если при взаимодействии с системой искусственного интеллекта можно поменять голос на голос любимого родственника, то этот нехитрый прием позволяет старым людям продлить жизнь на очень долгое время.

При отклике голосом, который является не безликим голосом, а более персонализированным через две минуты общения с ним у человека, как правило, возникает положительная эмоция, которая способствует выздоровлению, если мы говорим в целом об использовании голосовых помощников в медицине.

О той массе голосовых навыков, которая есть рынке, требуется заметить, что фактически API JScript и умение писать диалоги это и все, что нужно для овладения этой востребованной профессией.

Если я скажу, что есть не менее 5000 навыков для всех голосовых ассистентов на рынке, то могу ошибиться на тысячу-другую.

В медицинских центрах, где врачи работали с минимальными диалогами, и там, где часто используется система речевой поддержки больных, было замечено, что если человек за десять- пятнадцать минут до визита к доктору надиктует своё текущее состояние и система распознает его речь и сделает предположение о его состоянии, то врач примет более взвешенное решение о его здоровье.

Голосовые системы, встроенные в пробки упаковок для принятия лекарств, спасли уже не одну жизнь, потому что они заставили людей принимать не только лекарства, но и воду в при гриппе через правильно высчитанное время, допустим каждые два часа.

Статья была написана с использованием VOSK-API. Вычеркнуто неверно распознанных слов 20, исправлено 15 ошибок в окончаниях. Расставлены знаки препинания.

Хочу выразить Николаю Шныреву из компании AC Technologies LLC г. Новосибирск искреннюю благодарность за платформу VOSK-API и представленные с ней модели.

Подробнее..

Вариант записи текстов на русском языке с помощью латиницы

18.02.2021 22:12:39 | Автор: admin

Статья написана в порядке зарядки для хвоста ума, не претендует на всестороннесть освещения проблемы, не призывает совершать описанное в ней чисто поржать, как сейчас принято выражаться.

В Telegram-чате, где я участвую (чат любителей самодельных по-настоящему эргономичных клавиатур к слову, моя клавиатура сейчас выглядит вот так, а раскладка на ней вот такая), на текущий момент называется Клавиатуры: эргономика и раскладки) недавно затронули тему кириллицы и латиницы в русском языке, вспомнили проблемы, с которыми столкнулись наши братские народы (бывшие республики СССР) при переходе на самостийную (я не про Украину) латиницу, и вот какая у меня появилась мысль. Начну немного издали

Общеизвестно, что компьютеры были изобретены англопишущими людьми, которые пользуются латиницей, посему в любом компьютере (да и в другой интеллектуальной технике) безусловно есть в наличии латинские буквы, а вот других, к примеру, кириллицы, может не быть. Сейчас-то в ОСях (операционных системах) проблемы национальных алфавитов решены чуть более, чем полностью, но многие ещё помнят, какие в 90-х совершались телодвижения для того, чтобы вывести на экран и на принтер кириллицу (русские буквы).
Так вот, в процессе обсуждения опять затронули тему, что-де, лучше было бы в русской письменности использовать латиницу (кому-то нравится вид текста, кому-то сравнительно меньшее количество букв, кому-то та самая совместимость с компьютерами). Кстати, несмотря на существующее мнение, что текст на латинице обладает некой визуальной красотой, коей лишён текст на кириллице моё мнение диаметрально противоположно: дизайн кириллических букв очень гармоничный и текст на русском языке читать одно удовольствие.
Так-то, существует даже несколько стандартов транскрибации русского текста на международную латиницу, но, согласитесь, использование апострофов, неоднозначность фонетического соответствия, а также такие монстры, как Ч=ch, Ш=sh, Я=ja (или ya), и, коронное, Щ=shch делают такой вариант не очень привлекательным. Но ведь латиницы (26 букв) не хватает для однозначного отображения русских букв (33 буквы и да, я считаю букву Ё значимой, несмотря на то, что она засунута в даже в UniCode).
И вот тут-то мне и пришла в голову мысль (а мысль убивать нельзя, как говорил мой учитель!): а почему бы, действительно, не попытаться использовать латинские буквы в русском языке?
Сразу сформировалась концепция:

  1. никаких над-под-и_прочих-строчных значков (умляут, гравис и т. п.);

  2. никаких диграфов (и тем более три- и квадра-графов та самая shch);

  3. установить соответствие латинских букв не русским буквам, а их звучанию (звукам);

  4. использовать буквы не прямолинейно, типа i=и, h=х, d=д, а ближе к кириллическому написанию (u=и, x=х и т. д.).

После обдумывания данной концепции она устройнилась и родилась вот такая таблица:

Основная мысль: при ленивом разговоре и не очень отчётливой артикуляции довольно похожими получаются звуки Д и Т, Ц и Ч, И и Й, Б и П и т. д. и т. п. То есть, фонетически их можно объединить одной буквой, точное звучание которой будет определяться контекстом. Ведь, к примеру, букву И мы произносим совершенно разными звуками в словах ишак и третьи и не паримся, а в украинском алфавите это вполне себе две большие разницы разные буквы. А в некоторых словах мы произносим букву И как звук (замечали?)
К тому же, сейчас повальная грамотность не в моде, так что этот недостаток и недостатком как-то считать не получится А насчёт читается как пишется то это не (совсем) о русском языке. Очень много слов, которые, не зная, как они пишутся, по произношению (а ещёсуществует ведь куча различных говоров) не сразу напишешь.

Итого, получалась вполне стройная система: 16 букв, из них 10 согласных, 5 гласных и одна (в будущем) необязательная (J=ЬЪ) она же единственная с точкой вверху (ага, расставим точки над мягкими знаками, да). Сильно непохожие латинские буквы не используются. Буква Ё слинкована с О по звучанию, мягкий и твёрдый знаки естественно, вместе (вот от твёрдого можно было бы и избавиться и в нормальном русском алфавите никто там обычно не приглядывается, есть у буквы хвостик или нет). Алфавит выстроен в соответствии с порядком латиницы тупо в целях лёгкой сортировки.

Кому интересно, то вот таблица сравнения частотности букв в текстах (русский и русская латиница):

О, как и положено, на первом месте, на второе прорвались объединённые И, на третьем ДТ, но уже четвёртое по праву занимает Е (ну, и дальше в таком духе).

Текст после перекодировки вполне читаемый при минимальном напряжении, при небольшой практике, думаю, будет вполне однозначно восприниматься. Первый фрагмент начало известной книги Александра Никонова Апгрейд обезьяны русскими буквами.

Вторая картинка тот же фрагмент, но перекодированный латинскими буквами.

Засим позвольте откланяться, ибо, как говорил мой учитель: я вам гвоздь забил, а вам его вытаскивать! Всем добра и не воспринимайте всё это всерьёз.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru