На прошлой неделе мы получили письмо от одного кандидата, не прошедшего собеседование на английском. Оказалось, что наши коллеги стали участниками технического эксперимента, проходившего параллельно с интервью. Приводим письмо с минимальными правками и благодарим автора за интересную идею и смелость в ее реализации.
«Полагаю, я вам не подхожу, так как «завалил» тест английского языка, к сожалению. Да, я не имею хорошей практики разговорного английского, но это мне не мешает читать data sheet’ы и общаться с зарубежной поддержкой по почте. Собственно сейчас не об этом, зная заранее, что я не пройду тест на знание языка, я не мог не воспользоваться шансом применить технический подход к данной проблеме. Хотя у меня не было возможности вживую проверить свой метод заранее, тем более в общении с человеком, хорошо владеющим английским и чувствующим особенности произношения, я решил попробовать.
Должен принести извинения за эксперимент сотруднику, проводившему тест, и за не не очень хорошее качество звука, связанное с техническими особенностями «моего» комплекса.
В качестве компенсации за участие в эксперименте, расскажу его идею. Она хотя и не нова, думаю, будет интересна вашим техническим специалистам, а при должном уровне подготовки и командном подходе на ее основе можно получить интересный результат и даже коммерческий продукт.
Опишу суть: я использовал два компьютера, подключенных к интернету, и Google Translate с распознаванием и синтезатором речи. Для этого аналоговый тракт своего мобильного телефона я соединил с аудиокартами двух системных блоков.
Один системный блок настроен на перевод с английского на русский, соответственно аудиовыход телефона был подключен к линейному входу аудиокарты. В настройках звуковой карты был выставлен режим дублирования сигнала с линейного входа на выход наушников моей гарнитуры, таким образом я слышал оригинал речи и видел правильность распознавания речи Google Translate.
Второй системный блок настроен на перевод с русского на английский, его микрофонный вход был подключен к микрофону гарнитуры, которая была на мне. Аудиовыход системного блока я соединил с аналоговым трактом телефона.
Таким образом я видел английский текст и слышал оригинал, видел перевод, а наговаривая ответ на второй компьютер, я синтезировал его в речь. Поскольку Google говорит женским голосом, я использовал цифровые фильтры Fruity Loops для придания ему мужского низкого тембра и в аналоговый тракт телефона отправлял уже обработанный звук.
Хотя я и завалил тест английского языка, причина была не в неправильном распознавании. Меня подвело узкое горлышко системы, а именно интернет-соединение 3G — к сожалению, у меня нет другой скоростной линии. Утром, насколько я понимаю, базовая станция была нагружена меньше, и мне хватало пропускной способности. Но после обеда сеть просела в самый неподходящий момент.
Результатом эксперимента стало то, что я смог продержаться на первых нескольких предложениях, затем на синтез речи перестало хватать скорости, я перешел на самостоятельные ответы и потерпел фиаско. Хотя я и видел правильный перевод, быстро строить предложения я не умею. Забавно, что собеседник не заметил переключения с робота на человека, выделив только отключение генератора комфортного шума, из-за чего в паузы мой собеседник думал, что связь пропала наглухо.
Cистему нужно усовершенствовать — сделать предобработку сигнала с микрофона, отрезав шумы, не дававшие эффекта тишины, важной для Google. Тогда он сам сможет прерывать обработку и выделять составляющую голоса, что позволит сократить исходящий трафик, поднять скорость соединения и не терять пакеты UDP. В этом случае система получается достаточно боевой. Переносим это на два Raspberry PI и получаем переводчик в реальном времени.
Сам я эту идею реализовать не могу — нужен DSP для предобработки, необходимо делать схемотехнику, разводить топологию печатной платы, писать алгоритм обработки для DSP (хотя они есть в открытом доступе), потом писать программу для Raspberry PI с удобным функционалом и правильным взаимодействием с API Google. Эта задача мне по силам, но скорее подходит для команды разработчиков. Все-таки в ней выделяется слишком много подзадач.
Думаю, идея интересная и найдет своего покупателя, компании воплотить ее будет просто, а у меня она не будет пылиться на полках собственного энтузиазма.
Спасибо за то, что рассмотрели мою кандидатуру!»
Комментарии (12)
RusikR2D2
21.10.2016 18:24не понял. Зачем нужна пропускная способность для синтеза речи? она «создается» на сервере Гугл, а потом уже передается в виде звука?
Если даже так, то он видя текст не смог его прочитать?
DataArt
21.10.2016 18:37Вероятно, скорости не хватало на то, чтобы получить звук с сервера и затем передать его в обработанном виде.
Да, к сожалению, это оказалось сложно(
CrogST
21.10.2016 21:08Нестандартно! Вдохновляюще! Вот вам и «реализация» переводчика в ухе из фильма «Обитаемый остров».
tw1911
21.10.2016 22:43+2А мне кажется весьма наивное решение. Прям какой то детский сад. Что мешает написать программу, которая будет принимать сигнал с 1 канала и переводить, со второго канала брать звук микрофона и так же переводить. Никаких Pi, никаких DSP, шумы отлично можно резать программно на лету. Если учесть, что почти все встроенные звуковые карты могут брать звук из разных источников, то даже ничего докупать специально не надо. Выход с телефона в линию, микрофон. Каналы можно разделить.
rPman
22.10.2016 18:23в windows сделать такое не так просто как с аппаратными решениями,
нет возможности сказать двум разным приложениям выдавать сигнал в свои каналы и еще сложнее — каждому ской канал для микрофона, по крайней мере штатными средствами, но можно воспользоваться виртуализацией!
полагаю с помощью pulseaudio в linux такое провернуть будет гораздо проще.Mad__Max
30.10.2016 01:31Можно, просто создается несколько виртуальных устройств на одну физическую звуковую карту. По крайней мере вариант с 2мя входящими и с 2мя исходящими каналами вообще не проблема.
Линейный вход и микрофон у всех встречавшихся мне звуковых карт это отдельные каналы, которые можно обрабатывать раздельно.
А в плане вывода даже в дешевых карточках (как у меня например — встроенная в мат. плату на какоком-то из бюджетных чипов VIA) обычно есть опция для наушников (дублировать в наушники тот же звук, что идет на основные динамики или выводить звук для наушников раздельно). Если выставить раздельно — в системе появляется 2 аудиоустройства — с одного звук идет на динамики, со 2го на наушники.
Т.е. и на уровне ОС(начиная с Win XP а может и раньше) и на уроне драйверов звуковой карты поддержка давно есть.
staker
22.10.2016 06:51+1Не будет ли кандидат выглядеть «тормозом»? Добавляется небольшая задержка на распознавание и большая на синтез.
AntonSor
22.10.2016 10:13Правильно. А потом они будут заставлять нейросеть искать ответы на заданные интервьюером вопросы. Вот такая получается организация теста Тьюринга.
AlexandrBorisov
С кандидатом всё равно решили не продолжать общение?
DataArt
Общение мы, конечно, продолжили. К сожалению, техническое собеседование по конкретным технологиям он в данный момент не прошел. Но мы желаем ему успеха!