SEO Python 2 Нейрона
1.54K subscribers
86 photos
4 videos
1 file
45 links
Простым языком про нейросети, python и про то, как это применять в SEO. Блог Владислава Папернюка
Download Telegram
Эмбеддинги: от ностальгии к сингулярности 🚀

Я до сих пор помню, тот день, когда впервые услышал про векторы в n-мерном пространстве, катбуст, деревья решений из уст Великого и Ужасного. В тот момент во мне, что-то перещелкнуло, в голове заиграла музыка из Интерстеллара, я оглянулся вокруг и увидел такие же одухотворенно восторженные глаза, в которых читались вера, восхищение и … полное непонимание, происходящего. А светлоликий Гуру светящийся тайным знанием, что-то вещал со снисходительной улыбкой, но это уже не имело никакого значения, ведь он пообещал нам чудо, просто чудо, Just Magic )

На этой ностальгической ноте можно было бы и закончить :-), но я же обещал вам объяснить Интерстеллар на пальцах? Поехали!

Когда компьютер видит слово "кот", он не понимает его как пушистого разбойника, который сбрасывает вещи со стола и будит вас в 5 утра. Вместо этого он видит набор чисел, например [0.24, -0.13, 0.77], — так машина кодирует значение слова. Например, нейросеть Яндекса кодирует каждое слово в виде матрицы (столбца) размерностью [1, 256]

Ок, давай ещё упростим, пусть слово “кот” представлено в виде двумерной матрицы [0.24, 0.77], “кошка” [0.28, 0.72], “барсик” [0.34, 0.58], а к примеру слово “инжектор” [-0.44, 0.21].

А, что если [0.24, 0.77] – это вектор, начало которого находится в нуле, а конец в точке с координатами Х и Y [0.24, 0.77]? Если отложить все вектора, мы обнаружим интересную особенность, “кот”, “кошка” и “барсик” направленны примерно в одну сторону, а “инжектор” в другую.

Так, что, получается, мы можем взять все слова из текстов (сниппетов, сайтов в ТОПе, Википедии, GPTChat из головы копирайтера) прогнать их через эмбеддинг слой и найти слова близкие по смыслу?


Да именно так!

Стоп, а не про LSI ли речь? Нет, LSI – использует метод сингулярного разложения. Здесь речь идет именно про семантическую близость векторов и ВАЖНО! Эти векторы мы можем вытащить напрямую из BERT. Не из какого-то там доморощенного сервиса, а реально напрямую из языковой модели Яндекса, Google и тому подобных ресурсов.

Подведем итоги: Эмбеддинги – это базис на котором строятся все современные языковые модели, каждое слово Яндекс кодирует в виде матрицы [1, 256] с цифрами, которые можно представить в виде векторов, направленных в определенную точку пространства. И да, можно найти семантически близкие слова!

Ну и красивое любителям сингулярности ) https://youtu.be/8kooIgKESYE?feature=shared
🔥2
Кот Барсик знает, что Инжектор не любит сметану, но любит БЕНЗИИН! https://youtu.be/z0wK6s-6cbo?feature=shared
1
Ещё раз про Эмбеддинги но уже без лирики и ностальгии 😊

Поисковые системы, а так же большие языковые модели, например ChatGPT работают с цифрами, что логично. Соответственно первое, что нужно сделать получив текст на вход – оцифровать его. Процесс оцифровки называется токенизация. На следующем шаге каждый токен(слово) переводится в матрицу определенной размерности. Так в Яндексе это матрица [1, 256], в моделях Сбера [1,768], а у модели ada-002 ChatGPT - [1,1536]

Провалилось? Идём дальше!
Вспомним курс школьной математики за 8 класс. Каждый вектор в пространстве X и Y можно разложить на 2 координаты, в 3-х мерном пространстве уже на 3 координаты, а в 768 мерном пространстве на матрицу [1,768].
Диапазон изменений каждой координаты от -1 до 1. Вот так на языке цифр выглядит слово окно. В силу ограничений я не стал писать все 256 значений.
[ 0.03356934 -0.02557373 -0.12902832 0.01093292 0.05551147 … -0.02572632]

Ок, а причем тут SEO?
Фишка в том, что когда люди начали смотреть куда направлены вектора, выяснилось, что у слов близких по тематике вектора направленны в одну и ту же область. И получилось так, что это свойство очень удобно использовать для поиска информации, для классификации текстов и массы других задач. То есть мы можем повысить общую релевантность документа используя данную технологию.

Сама идея повышения релевантности за счет семантически близких слов не нова, она уже используется в ряде сервисов, например Акварель-генератор, Seolemma или ГАР, разница в подходе и в технологиях.


Как вы считаете, что является более достоверным подходом, вытаскивать эти слова напрямую из BERT или довериться разработчикам сервисов?
👍3👏1
Вот так нейросеть видит слово "окно"
🔥2👌1
Косинусная близость, как мера сравнения релевантности + инструмент поиграться!

Степень близости векторов можно оценить на глаз в 256 мерном пространстве по формуле, приводить её нет смысла, кому интересно https://clck.ru/3AihMV вот ссылка на Википедию

Всю математику и все эмбеддинги я засунул под капот бота @words_comparison_bot. Велкам, что называется, тестите, сравнивайте, пишите пожелания.

Как интерпретировать результаты?
Приведу несколько цифр из школьной математики cos(0) = 1, cos(90) = 0, все, что посередине лежит в диапазоне от 0..1
Сначала предлагаю сократить название “косинусная близость” до CS( ‘’word1,’word2’ ).

Приведу 2 примера:
CS( ‘пластиковые окна’, ‘ПВХ окна’ ) = 0,93
CS( ‘пластиковые окна’, ‘балет лебединое озеро’ ) = 0,30
Какие значения являются пороговыми? ХЗ, честно говоря, исходя из SEOшного опыта я бы сделал 3 уровня
1 – 0.7 – высокая релевантность
0.5 – 0.69 – средняя релевантность
0 – 0.49 – низкая релевантность

Но выставлять пороги – это все равно, что задавать вопрос «С каким DR покупать ссылки?» Поэтому решайте сами для себя.

PS @words_comparison_bot позволяет сравнивать не только отдельные слова но и целые тексты. Так например можно сравнивать ключ и текст.
🔥1
Пример работы бота по сравнению 2-х ключей. cs ('кот барсик', 'инжекторный двигатель' = 0,25)
1
Ну и классика жанра: 'пластиковые окна' и 'окна ПВХ' cs = 0.91
1
Да блин, это полный бред интерпретировать меру косинусной близости с помощью векторов в 2-мерном пространстве. Но, куда деваться, я же обещал на пальцах 😇
1
Стоп! Зачем изобретать велосипед, когда есть TF/IDF и целая россыпь текстовых анализаторов?

Давным давно в далекой галактике, когда работали ссылки в Яндексе, в каждом втором резюме SEO Джуна не упоминались курсы Антона Маркина, а Рома Морозов и Андрей Буйлов жили в РФ, в Яндексе и Google работали языковые модели основанные на алгоритмах обработки мешка слов. Существует множество вариаций этих моделей, некоторые из которых, судя по прошлогодним сливам из Яндекса успешно используются и сейчас для ряда задач. TF/IDF, BM-25, BM25F, LSI – все эти модели так или иначе основаны на частотных словарях, глобальных IDF и документных TF. Но, мир не стоит на месте летит в преисподнюю поэтому рано или поздно от мешка слов пришлось отказаться в пользу трансформеров

Недостатки TF-IDF и BM25 по сравнению с трансформерами:

1. Ограниченная модель языка
TF-IDF и BM25: Эти модели ранжирования опираются на простую статистику в оценке важности слов, игнорируя контекст. Слово "ключ" может использоваться в значении "ключ к машине" и "ключ от квартиры", но оба метода не способны различить их контекст.
Трансформеры: Трансформеры строят глубокие представления слов в контексте всего текста. Так, используя внимание, модель различит, что "ключ" в контексте "машины" относится к автомобилю, а "ключ от квартиры" — к жилому помещению.

2. Синонимы и формулировки
TF-IDF и BM25: Эти модели полагаются на точное совпадение слов. Если пользователь ищет "лекарство от боли", документ, содержащий "обезболивающее средство", может быть ранжирован ниже из-за разницы в формулировке.
Трансформеры: Модели с использованием эмбеддингов способны обнаруживать схожесть между синонимами и близкими понятиями, поэтому могут выдать релевантные результаты, даже если терминология в запросе и документе отличается.

3. Фиксированное ранжирование
TF-IDF и BM25: Оба метода устанавливают весовые коэффициенты для каждого слова независимо от запроса пользователя. Это приводит к фиксированному ранжированию, при котором одинаковый запрос всегда получает одни и те же результаты.
Трансформеры: Модели трансформеров могут динамически ранжировать результаты, обрабатывая контекст запроса и документов. Например, запрос "лучшие смартфоны" будет давать разные результаты для статей о "самых доступных смартфонах" и "смартфонах премиум-класса".

4. Нормализация и длина документа
TF-IDF и BM25: Эти модели могут неверно ранжировать длинные документы, если они содержат повторяющиеся ключевые слова, или недооценивать короткие, хотя и содержательные, статьи.
Трансформеры: Трансформеры учитывают весь текст, а не просто набор ключевых слов, поэтому они способны лучше учитывать контекст даже в длинных или коротких документах.
Трансформеры более эффективно ранжируют и анализируют тексты благодаря своему пониманию контекста и сложным отношениям между словами, что делает их предпочтительнее для обработки естественного языка в современных системах поиска.

5. Ну и самое главное, ради которого всё и задумывалось – учет порядка слов
TF-IDF и BM25: Игнорируют порядок слов, что может привести к одинаковому ранжированию запросов с различным интентом, например "авиабилеты Москва Сочи" и "авиабилеты Сочи Москва".
Трансформеры: Учитывают порядок слов в запросе, позволяя различать и корректно интерпретировать намерения пользователей для каждого направления полёта.

Подведем итоги! Модель TF-IDF и BM25 и её вариации живы до сих пор, более того тот же самый Magic и ГАР и векторный анализ дают похожие результаты, но собака, что называется зарыта в нюансах, а их поверьте мне масса!
👍4👏2
🤖🤖🤖 Акуальные боты на 23.05.2024 🤖🤖🤖

@vector_keywords_bot – поиск n-грамм по ключу
@words_comparison_bot - сравнение двух текстов по косинусному схоству
@vector_text_bot - на вход ключ и текст, на выходе размеченный по сходству текст
Пример работы бота @vector_text_bot
Результат. Близкие слова - жирным, стоп слова и далекие зачеркнуты, остальные обычным шрифтом
Лень – двигатель прогресса!

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

В такие моменты мгновенно приходит в голову мысль: “Блин, а можно это как-то автоматизировать?” И вот на этом месте я открываю любимый pycharm и сажусь писать автоматизацию на python. Да, иногда быстрее все сделать руками и забыть, но! Неприятных ощущений то никто не отменял, а когда я погружен в процесс кодинга на python – приятное тепло разливается по всему телу, кислотно-щелочной баланс нормализуется, а волосы становятся густыми и шелковистыми 🥸!

К чему эта лирика?
Выкладываю наш внутренний инструмент, родившийся как раз в процессе автоматизации рутины.

Встречайте новый бот 🤖 - @clean_param_bot 🤖

Для чего?
Позволяет составлять инструкцию для Clean-param в несколько кликов.
Экономит ппц как много времени!

Как юзать?
Выкачиваете из вебмастера эксель файл, кидаете его в бот и буквально через пару секунд получаете инструкцию

Мануал тут https://sait-activator.ru/clean_param
👍62🐳1
Как обучаются нейросети, или почему GPT-4 такая умная. Лёгкое субботнее чтиво )🍹

Первые попытки генерации контента с помощью нейросетей я пробовал еще в 2021 году. Это были seq-to-seq модели с механизмом attention. Результат был мягко говоря не очень. Поэтому, когда появилась модель GPT-3, я, помня свой прошлый опыт изначально отнесся скептически, но когда я увидел GPT-4 я просто охренел!

Да именно в GPT-4 произошел квантовый скачок, переход от количества в качество!

Почему GPT-4 такая умная и как происходит обучение модели?
В процессе обучения на вход по очереди подаются тексты с масками, например:

(Маска) дядя самых честных правил
Мой (маска) самых честных правил
Мой дядя (маска) честных правил


Нейросеть пытается угадать какое слово должно быть вместо маски, результат оценивается с помощью метода back propagation (говоря простым языком - поощряется или штрафуется)

В итоге получаются устойчивые связки фраз, которые и обеспечивает гладкий слог. Но нужно понимать, что появление того или иного слова не данность, а вероятность. Именно за этот фактор и отвечает параметр temperature в моделях Open AI

Вопрос, какой текст будет если подать на вход:
Бобр (маска)?
Ответ тут 😆

Мем старый но очень смешной ). ОК а теперь вопросы. А на каком текстовом корпусе обучались всем известные GPT модели? На книгах Толстого и Достоевского? На Википедии? На школьных чатах или может быть на всем сразу?

Какой корпус русского языка они использовали? И использовали ли они вообще корпус русского языка, или как все модели Open AI сначала думают на английском а потом переводят на все остальные языки мира?

В процессе написания @vector_keywords_bot я перепробовал разные модели и в итоге остановился на одной, которая мне показалась наиболее адекватной. Какой именно? Сохраним интригу для следующих постов 😉.
👍11🐳2
Ваш текстовый анализатор 💩!

Ну, что, клюнули на кликбейтный заголовок? 😉 А теперь ближе к телу! Великий и Ужасный был прав – порядок слов важен! Насколько, спросите вы?

Проведем эксперимент, посмотрим меру cs (косинусного сходства) между ключом и предложением с помощью @words_comparison_bot.

1 пара:
Ключ: пластиковые окна
Текст: Покупайте пластиковые окна в компании Оконика со скидкой в Москве недорого с установкой и бесплатной гарантией.
cs = 0.8

2 пара:
Ключ: пластиковые окна
Текст: В компании Оконика покупайте недорого со скидкой и установкой с бесплатной гарантией пластиковые окна в Москве.
cs = 0.73


Разница не столь значительна, но ощутима. Скажите, вам знакомо, чувство, когда вы вылизали посадочную по вхождениям, чуть проспамили, употребили весь LSI арсенал, а она, сволочь такая, даже не шелохнулась? В чем же дело?

Порядок слов в предложении зашит на уровне архитектуры нейросети с помощью метода positional encoding (позиционное кодирование.)

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


Ещё раз!
Итоговый вектор = вектор слова + вектор позиции слова

Для чего это было сделано? Классический пример: «авиабилеты Москва Сочи» и «авиабилеты Сочи Москва».

Как SEOшники обходили эту проблему раньше? Использовали n-граммы, а не только униграммы.

Ок, скажете вы, пришел, поумничал, а нам простым SEOшникам как с этим жить дальше?

Не претендуя на роль SEO гуру могу сделать несколько простых выводов:
1. Все старые методики текстового анализа и большинство текстовых анализаторов основанных, на модели «мешок слов», что-то считают… Как это юзать – вопрос уже больше не технический а религиозный.
2. Ищите копирайтеров и SEOшников с бэкграундом в определенных нишах.
3. Используйте биграммы, чтобы хоть как-то подстроиться под порядок слов
4. Юзайте моих ботов, ну и тут тоже без религии никуда )))

Анонс! В ближайшие день/два выкачу новый функционал у одного из ботов, отвечаю, будет бомба!💥
👍191
Йу-ху! Держите @vector_keywords_bot версия 2.0!

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

Как это работает?
1. /start – стартуете бота
2. подаете ключ в первом сообщении
3. url – во втором сообщении, либо цифру «0» если url не нужен
4. наслаждаетесь результатом

Всем продуктивных трудовыебудней! 👷
👍8🔥3🏆1
Как читать результаты для @vector_keywords_bot?

Здесь cs – косинусная близость
Вхождений в url – вхождения лемматизированной n-граммы в тело страницы

PS Сloudflare и антиботов пока не проходит, это следующая задача.
👍6
Легкое субботнее чтиво🍹, или как я пытался прогнозировать крипту с помощью нейросетей 🤑

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

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

И каковы же результаты твоих исследований спросите вы ?

Спойлер: Ламбу не купил, в Дубай 🏙️ не переехал, дальше продолжать? 😆

Ну, как говорится у самурая нет цели, есть только путь, а вот о нем как раз я и хочу рассказать.

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

В вложении – схема моей LSTM модельки и результат
👍3