Chrome расширение для скрытия отвлекающих рекомендации на YouTube

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


    Рекомендации на YouTube очень полезны, так как подсказывают релевантные видео к текущему, но и опасны потому что содержат ещё и в принципе интересные и отвлекающие ролики (не на тему видео).




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


    Предлагаемое решение


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


    Поэтому решил, что можно попробовать сделать что-то, что будет блокировать не тематические рекомендации.


    Идея реализация


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


    Но для обучения нужны огромные объемы информации. Да, и кто будет размечать рекомендации — непонятно.


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


    Сосредоточился на локальном решении — chrome расширение, которое на основе ролика и описания, классифицирует рекомендации на тематические и нет. Плюсом будет безопасность, данные не покидают клиента.


    Реализация


    Chrome расширение умеет инъектировать код. Прописываем в manifest.json:


    "content_scripts": [
        {
          "matches": ["https://www.youtube.com/*"],
          "css": ["styles.css"],
          "js": ["page-script.js"]
        }
    ],

    Селекторами достаем заголовок и описание, и рекомендованные видео. Делается достаточно просто:


    // заголовок текущего ролика
    document.querySelector('h1'), 
    // описание текущего ролика
    document.querySelector('#description'), 
    // заголовки рекомендаций
    document.querySelectorAll('ytd-compact-video-renderer')

    Можем добавить css класс, реализующий блюр и его исчезновение при ховере:


    .youtube-stay-focused__blur {
        filter: blur(5px) grayscale(100%);
        opacity: 0.3;
    }
    
    .youtube-stay-focused__blur:hover {
        filter: none;
        opacity: 1;
    }


    Данные у нас есть и воздействовать на страницу тоже умеем, теперь пишем алгоритм.


    Оценка рекомендаций


    Ранжирование это и есть оценка тематичности документа.


    Есть много алгоритмов ранжирования например TF-IDF, BM25 и прочее, можно было для них выставить пороговое значение 0. То есть если вглядеться в формулу




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


    Итоговый код простой "класификации" и тесты на него.


    Подготовка текстов


    Сначала все текста нужно "почистить":


    • убирать лишние пробелы, переносы и т.п.;
    • привести все к нижнему регистру;
    • убрать всю пунктуацию и другие символы "#", "$", кавычки и т.п.;
    • убрать числа, потому что не несут информации о тематике;
    • удалить ссылки;
    • убрать служебные слова, такие как trailer, audio, video и т.п.;

    Токенизация


    Любое предложение можно разбить на слова и называется это умным словом токенизация текста:


    "Как написать красивый и понятный код?" 
    => 
    ["Как", "написать", "красивый", "и", "понятный", "код", "?"]

    Стемминг


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


    код, кода, коду, кодом, коде => код

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


    Естественно реализация стемминга зависит от языка текста. И самостоятельного npm пакета русского стемминга не нашлось. Под руку попался лишь natural, https://www.npmjs.com/package/natural, но он заточен под nodejs (использует fshttps://www.npmjs.com/package/fs), но можно подключить модульно только тот код который нужен из всего пакета!


    const porterStemmerRu = require('natural/lib/natural/stemmers/porter_stemmer_ru');
    const porterStemmer = require('natural/lib/natural/stemmers/porter_stemmer');
    // ...
    const stem = (words) =>
      words
        .map((word) => porterStemmerRu.stem(word))
        .map((word) => porterStemmer.stem(word));

    Таким образом заголовок преобразовывается в


    "Как написать красивый и понятный код?"
    =>
    ["как", "напис", "красив", "понят", "код"]

    Итоговый код подготовки текстов.


    И тесты к нему.


    Итог


    Получилось Chrome расширение для скрывания НЕ тематических рекомендации на YouTube.




    Исходники можно посмотреть.


    Опубликовано в официальном chrome маркете, можно прямо сейчас установить и попробовать как оно работает:
    https://chrome.google.com/webstore/detail/youtube-stay-focused/enhfmpfmofdnhelhegdjanoaomlcieen


    Кто знает как сделать лучше welcome в комментарии или в контребьютеры ;)


    Цените свое время.

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 44

      +4
      А существует ли расширение, где можно вручную банить определённые каналы в выдаче? Чтоб, например, я заблокировал какого-нибудь школьника с челленджами и не видел больше его в рекомендациях, поиске или трендах? Или возможно в вашем расширении такой функционал реализовать?
        +11

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

          0

          У меня когда-то правило для юблока было, оно по ключевым словам (именам авторов) скрывало блоки со статьями. Правило самописное, кривое и делалось методом тыка, я в итоге после очереденого обновления хабра забил на него.
          P.s. но вообще говоря было удобно.

            0

            Если использовать habr фиды через какую-нибудь rss читалку, то можно добавить свои фильтры достаточно легко подняв простой сервер. Вот решение на коленке.

            +1
            Video Blocker
            Chrome: chrome.google.com/webstore/detail/video-blocker/jknkjnpcbbgcbdbaampbjlhkcghmgfhk
            Firefox: addons.mozilla.org/firefox/addon/video-blocker

            Расширение гораздо удобнее чем нативное, т.к. телодвижений меньше, а возможностей больше (блокировка каналов, видео, словам и умеет в подстановки).
              0
              Спасибо огромное! А ларчик просто открывался. Прекрасно блокирует каналы через контекстное меню.
                +1
                На FF у меня Video Blocker ничего не блокирует. А вот BlockTube — на «ура».
                +1
                Есть же всё нативно:
                image
                  +3
                  Это не блокирует канал в выдаче. Только в рекомендациях, да и не особо работает.
                    +1
                    В трендах этот канал все равно будет показываться
                      +1
                      У меня там только «Не интересует» и «Пожаловаться»
                        +1

                        Не баньте Редрум, он классный!

                        0

                        Я все никак не добью эту вещь, но концепцию можете взять на вооружение. Суть удалять что-то со страницы по селектору
                        https://github.com/DmitryOlkhovoi/ShitBlocker

                        0
                        удалено
                          +1
                          Классное решение. Не пробовали просто Turn Off The Lights использовать?

                          PS: Единственное чтобы хотел увидеть в плане youtube — плагин, блокирующий всплывание рекомендованных видео когда нажимаешь на паузу. Может кто знает такой?
                            0
                            Использую для этого AdGuard, хотя он кучу всего кроме этого делает. chrome.google.com/webstore/detail/adguard-adblocker/bgnkhhnnamicmpeenaelnjfhikgbkllg?hl=en
                              0
                              AdGuard же предназначен для скрытия рекламы, а это для не тематических рекомендаций самого youtube.
                                0
                                Так вопрос был
                                Единственное чтобы хотел увидеть в плане youtube — плагин, блокирующий всплывание рекомендованных видео когда нажимаешь на паузу. Может кто знает такой?
                                AdGuard полностью блокирует всё, что всплывает при нажатии на паузу. Хотя и блокирует кучу всего другого, он вполне подходит под запрос.
                              0
                              Turn Off The Lights затеняет весь интерфейс, а это расширение блюрит только посторонее, не относящееся к теме, и самое главное ничего делать не нужно, все само происходит
                                0
                                На реддите нашел правила для блокировки, добавил в ublock, вроде бы справляются хорошо:

                                www.youtube.com##.ytp-ce-element-show
                                www.youtube.com##.ytp-cards-teaser
                                youtube.com,youtube-nocookie.com##.ytp-expand-pause-overlay .ytp-pause-overlay

                                Конкретно последняя строчка сумела блокировать рекомендации на встраиваемых youtube видео, а именно они — наиболее ужасно реализованы.

                                можно на этом встраиваемом видео проверить

                                +5
                                Я надеюсь, что мы все доживем до этого прекрасного момента, когда:

                                1. Тренды youtube будут формироваться с учётом того, что ты смотришь.
                                2. Когда главная страница не будет забита тем, что уже было просмотрено дцать дней/лет назад.
                                3. Когда youtube будете рекомендовать видео не только топовых каналов, но и новичков (не редко подписываешься на те каналы, где меньше 1к подписчиков, но человек делает годный тебе контент)
                                4. Когда youtube перестанет рекомендовать какое-то странное на видео на какую-то странную тематику (вспомните: возможно у вас было такое, когда переходишь на это видео, а комментарии забиты, мол, «почему youtube это мне рекомендует спустя 5 лет?»)
                                  0
                                  Когда главная страница не будет забита тем, что уже было просмотрено дцать дней/лет назад.
                                  Чистое любопытство — зачем вообще заходить на главную страницу? Просто интересно зачем люди это делают. Я вот захожу только в подписки, поиск и страницы конкретных каналов, там исключительно то, что я хотел бы увидеть. А главная — какая-то помойка, непонятно как наполняемая, состоящая в основном из просмотренных видео и видео из подписок.
                                    0
                                    Да банально когда нечего делать, а хочется что-то посмотреть или поставить на фоне. Не придумывать же самому что-то и искать, для этого есть эта страница.
                                    Я раньше вроде тоже не открывал ее и думал а откуда же у меня все эти каналы на которые я подписан, как я нашел их. А вот большинство через главную.
                                    0
                                    Но ведь это всё уже и так есть, не?

                                    1. Персональные тренды формируются с учётом того, что ты смотришь. Иногда даже слишком агрессивно, когда стоит посмотреть пару видосов по теме и тебе начинают массово переть в фид похожий контент. В целом, чем более популярна и обширна тема, тем лучше подбираются рекомендации. Ещё, кстати, они с недавних пор вводят блок тегов по интересам, сформированным из истории просмотров, и лично у меня он прям достаточно точно опиывает мои увеления на текущий момент, с несколькими радномными исключениями.
                                    2. Не знаю, но по ощущениям уже как несколько лет, наверно, просмотренных видео на главной стало гораздо меньше. Помню когда-то скроллил через толщу контента, который уже видел, иногда неоднократно. Сейчас же только если изредка встретится случайный, зачастую вообще уже забытый, видос.
                                    3. С этим сложнее. Таких каналов огромное количество и Ютубу сложно распознать где контент качественный, а где нет. К сожалению, или к счастью, у Ютуба пока нет системы анализа видео по качеству содержания. Но по сути для многих контент-мейкеров один выстреливший видос это путь к очень быстрому появлению десятков и сотен тысяч подписчиков.
                                    4. Ну раз люди оставляют комментарии, значит они открыли видео. А раз они открыли видео, оно их заинтересовало. А значит алгоритмы Ютуба выполнили свою цель.
                                      0

                                      С учётом просмотренного формируется главная. Тренды — это тренды. Туда лучше просто не заходить.

                                        0
                                        А есть такое расширение которое ну хоть как-нибудь форсит обновление главное страницы? сейчас там так все уныло
                                        +1
                                        Дополнение в использовании за 10 минут понравилось.
                                        Было бы отлично иметь возможность отключить его работу на отдельной вкладке или наоборот —
                                        выключить действие для всех, но на отдельной задействовать в меню.
                                          0
                                          если будет востребовано, конечно)
                                          +2
                                          Хорошая идея, отлично.

                                          Любопытно есть ли возможность внедрять в список youtube autoplay свои видео? То есть, чтобы кроме того, что youtube подсовывал, можно было с какой-то регулируемой вероятностью в список включать свой список видео?

                                          К чему я спрашиваю:
                                          Первая причина — дети. Недавно где-то читал мнение, что алгоритмы youtube любят сваливаться в рекомендацию экстремального или упрощенного (чисто развлекательного) контента со временем. Отсюда вопрос и возник. Рекомендации на главной youtube странице ребенок может легко фильтровать, а вот автоплей не всегда. Да и просто было бы неплохо в развлекательный контент, включать образовательный. То есть не просто мульт-мульт-мульт-мульт..., а например мульт-мульт-[BBC Earth Kids]-мульт-мульт-[SciShow Kids]- и т.д.
                                          Понятно, что скриптами проблему не решить и правильно, что с детьми нужно лично заниматься. Но думаю, что будет полезно дать родителям возможность рекомендовать более осмысленный контент.

                                          Вторая причина — если оставить комп на автоплее на час без внимания, даже свои собственные рекомендации иногда скатываются в греховную гомеопатию и «пусть говорят». И тем более хочется в мои рекомендации подкидывать более сложные и важные видео. Watch later легко забывается, а вот если видео из него будут попадать в рекомендации для автоплея, то будет круто.

                                          Как я это вижу: список забитый в расширение, плейлист или список watch later.
                                          PS. речь про этот autoplay



                                            0
                                            О! Лекции Хирьянова просто супер.
                                              +1
                                              навсегда теперь со мной, большое вам спасибо. Развитий у этой идеи можно миллион придумать, просто класс.
                                                0
                                                Подключил себе расширение в PaleMoon (fiefox) — «VLC Youtube Shortcut 0.8.3.2» на клик колёсиком, которое запукает видео в VLC плеере, сразу со скоростью 2.75 (все информационные видео я смотрю на ускорении, а понизить скорость можно колёсиком с контролом это вообще не напрягает) и в 1080p, без всякой рекламы на полное окно, с возможностью в два клика перейти в полноэкранный… Это чудо! Какой там ютьюб в страничке…
                                                Из недостатков, просмотренные видео не попадают в историю.
                                                  0
                                                  Вопрос в тему — есть плагины для браузера (ну и для Андроида), не позволяющие ютубу предлагать пользователю видео?
                                                  А то ютуб показывает старшему поколению нескончаемый шарлатанский бред про лечение содой, лимонным соком и когацелом с гомеопатией всего — от рака до коронавируса.
                                                    +1
                                                    Расширений полно, можно взять любое по сочетанию «remove youtube recommendations».

                                                    Но скорее всего лучше добавить фильтры для блокировщика рекламы youtube.adblockplus.me. И вероятно еще нужно будет выключить опции автовоспроизведения в видео. На андроид можно поставить firefox с адблоком или любой другой вариант с резалкой рекламы до потребителя (возможно будет работать только в desktop режиме, тогда ручками пробовать доработать).
                                                      0

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

                                                      0
                                                      Отвлекающие рекомендации меня не так бесят как например реклама в ютубе которая длится минуту и ее нельзя пропустить после этого идет еще одна на 40 секунд при этом само видео идет минут 5.
                                                        +1

                                                        Ставим uBlock Origin и рекламы нет.

                                                          0
                                                          Есть YouTube Premium, который стоит копейки. Если их нет или религия не позволяет платить, то есть AdBlock и тысячи его аналогов. Все они отлично убирают рекламу перед видео.
                                                            0
                                                            Я тут недавно в гостях хотел показать ролик в ютубе — так мне тоже подряд 2 ролика по 40 секунд хотели показать. Я был удивлен, а хозяева говорят что привыкли уже к этому. браузер был заменен на brave и больше ютуб просмотров рекламы с этого адреса не получит — ни перед видео, ни в процессе просмотра
                                                            +1
                                                            Так же работает и на firefox(отладка расширений -> временные расширения). Рекомендую автору выложить его еще и в firefox addons. Вроде как достаточно будет немного подправить манифест.
                                                              +3
                                                              1. Хирьянов выкладывает классные лекции.
                                                              2. Рекомендации Youtube это очень очень мощный инструмент. С помощью него люди формируют «своё» мнение по самым разным вопросам. Точнее подтверждают его. Т.е к примеру, вы однажды вы искали и посмотрели видео про плоскую землю и после этого youtube будет выдавать вам в рекомендациях только видео подтверждающие данную теорию. И, если не понимать что это всего лишь персональные рекомендации, у человека может сложиться впечатления что всем вокруг уже очевидно что южный полюс выдумали, а на самом деле там ледяная стена не дающая нам упасть с диска.
                                                                +2
                                                                полезная штука, поюзаю
                                                                  0
                                                                  А есть такое же по смыслу расширение, чтоб Яндекс.Дзен убить нафиг? Помойка же. Но Яндекс его везде пихает.
                                                                    0
                                                                    Для выдачи Google есть uBlacklist. Я так себе навсегда скрыл автопереводной qaru. site из результатов.

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

                                                                  Самое читаемое