Pull to refresh

Comments 130

Для сравнения, если вбить в google «рассказ в котором раздавили бабочку», то первым результатом тоже будет ссылка на статью в википедии «И грянул гром». Аналогично и с келлской книгой.
Попробовал поэкспериментировать.

фильм про мальчика который написал сценарий и его украли

Гугл: первая же ссылка — «Большой толстый лжец» в Википедии.
Яндекс: мусор.

Фильм про злого майора

Гугл: первая же ссылка — «Майор Пэйн» в Википедии.
Яндекс: мусор.

фильм где полицейский пьет кофе с грабителем

Гугл: мусор.
Яндекс: вторая ссылка — «Схватка» на Кинопоиске.

книга в которой придумывают теорию заговора

Гугл: в основном мусор, но третья ссылка — упоминание «Маятника Фуко», не поверите, на Пикабу.
Яндекс: мусор.
фильм где полицейский пьет кофе с грабителем

Гугл: мусор.
Яндекс: вторая ссылка — «Схватка» на Кинопоиске.

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

[offtop]Да, гугл уже использует нейросети для ранжирования. Поэтому очень интересно почитать практический опыт Яндекса по внедрению данной технологии. Какие возникают проблемы, какие открываются возможности. [/offtop]
Очень интересует способ реализации схемы смыслового поиска, даже в предположении, что яндекс располагает идеальным алгоритмом анализа смысла. С обратным индексом поиска по словам все было просто: по каждому слову собираете адреса документов, в которых оно упоминалось, затем пытаетесь найти документы, в которых больше всего значимых слов из запроса.
Внимание! Как составить идекс смыслов? Я хочу указать на одну принципиальную трудность: конечная конструктивная вещь может иметь бесконечно много нетривиальных свойств, например, сколько интересных свойств двойки вам известно? Представим нелепую упрощенную ситуацию: каждый документы в мире — запись некоторого натурального числа, мой запрос — некоторое хорошее в том смысле свойство натуральных чисел, что по любому конкретному числу можно понять, удовлетворяет оно этому свойству или нет. Каким образом будет обрабатываться мой запрос?
Я хочу сказать, что один и тот же текст при смысловом анализе может отвечать на множество вопросов, предвидеть же заранее все из них может оказаться бесконечно сложной задачей, чуть более сложной, чем анализировать каждый документ на соответствие каждому запросу.
Часто говорят, а давайте сделаем ракету и полетим на Луну, в этом случае стоит спросить: «Предположим, вы сделали ракету и долетели до Луны, что дальше?»
Строго говоря, искусственные нейросети – это один из методов машинного обучения.
ЛОЛШТО???
UFO just landed and posted this here
Да, что-то не ожидал встретить непонимание здесь. Нейросеть — не метод. Обучение — метод.

Тогда и выражайте свою мысль более развернуто.
Принцип Оккама, краткость — сестра таланта… это все верно, но ЛОЛШТО??? — вот и получили лолшто.


А по сути: Вы проявляете излишнюю педантичность.

если мы переформулируем запрос, не меняя его смысла

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

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

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

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


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

+1

Или как вариант для залогиненных пользователей напротив каждой выданной ссылки выводить лайк/дислайк.

Вероятно боятся накруток. Это как голосования в социалках, побеждает не «лучший», но принцип «сто друзей».
Но ведь в яндексе всегда было так. Поэтому и пользоваться им нельзя было от сотворения, если ваши запросы сложнее, чем «вконтакте».
Дорогой Яндекс.
Верни, пожалуйста возможность принудительного поиска по словам (кавычки не спасают) с принудительным же в запросе (какой нибудь опцией) отключением всякой морфологии и «смысла».
И желательно — без бесконечной капчи (ищешь текст по слову, находит допустим киношку с тем же названием — добавляешь в запрос "-кино" "-фильм" "-посмотреть" — вываливается капча. Робот Яндекса посчитал меня роботом и хочет в том удостовериться.
Примеров у меня много, но вот под рукой сходу нету, т.п. отвечает в стиле «мы ищем по статистике, если все ищут кино, значит правильно искать кино»

Поддерживаю на 100%. У меня много запросов по которым «Яндекс» выдаёт чепуху, приходится тратить время и лазить по ссылкам только для того, чтобы убедиться, что заданных слов на страниц нет. «Гугл», если выкидывает слова, прямо об этом сообщает — по снипетами выкинутые слова будут зачёркнуты.

Да, вот у меня сейчас обращение к команде Яндекса, обратите внимание на коммент bolk на который я отвечаю. Это очень нужная, при этом не фатально сложная в реализации, фича которой в поиске яндекса нет.
«Миллионы пользователей не могут ошибаться»?
На самом деле, я тоже не понимаю, как нейросеть Яндекса может превзойти мою собственную в действительно сложных случаях. Лишь мешает планировать запрос. А все эти сказки, где монарх ходил без одежды оставьте для твиттера или ЕГЭ по литературе.
По запросу «сказки, где монарх ходил без одежды» в топ 10 сейчас эта самая статья на Хабре. Рекурсия, однако!:)
Попробуйте nigma.ru — там фильтрация очень интересная.
Поддерживаю, Nigma вообще очень хороша в плане уточнения запроса при этом для уточнения не требуется догадываться что и как сработало в самом поиске и почему именно такой результат, очень часто хватает именно фильтров Нигмы.
Так всё-же, выход нейронной сети — это один из факторов, скармливаемых Матрикснету, или вы как-то смешиваете выдачу матрикснета и нейронной сети в выдаче?

Судя по описанию, технология находится на уровне proof of concept, поскольку вязать текст запроса только на заголовок страницы — это шаг назад лет на 20-30. Неужели в прод пустили?
Совершенно верно, выход нейронной сети используется как один из множества факторов.
Хорошо. Советую посмотреть в сторону кластеров токенов, получаемых одним из методов дистрибутивной семантики (Word2Vec, Glove). У меня прекрасно разделяет даже близкие «по смыслу» тексты на всего-лишь 2048 кластерах. Тогда любой текст представляется в виде вектора фиксированного размера, и на нём уже учиться как душе угодно. Что-бы не бить по площадям миллионами биграмм.
Речь ведь о опубликованном методе с кластеризацией векторных представлений слов?
Не отказался бы от набора векторов, если не затруднит.

Word2Vec упоминается в статье как пример неудачного опыта.

Просто надо двигаться дальше. Word2Vec — хорош для токенов, но плох для текстов. А вот если кластеризовать токены Word2Vec, а потом для каждого токены вычислить дистанцию до центра кластеров — получится новый вектор. И такие вектора уже весьма хороши для текстов.
вычислить дистанцию до центра кластеров

w2v не выдает веса по кластерам. Значит, центры кластеров можно получить, как я понимаю, только один путем: по порядковому номеру слова в кластере. Не очень понятно, что это дает — центры будут у всех где-то в центре словаря. Идея же в другом: понизить ранг низко информационных кластеров (типа частотных слов) и поднять у семантически наполненных.
Хотя ваша идея сравнивать «семантическую» сигнатуру документов очень правильная.
a Doc2vec пробовали?

Спросите у автора статьи.

Любопытно, а можно ли обучить другой ИИ анализировать выдачу Яндекса, чтобы формировать страницы которые будут высоко ранжироваться ИИ «Палех»?
Не можно, нужно. Получается классический автоэнкодер, только одна его часть — это ранжёр Яндекса, а другая — ранжёр SMM'щиков. Но на практике не работает, из-за слишком больших затрат на подготовку обучающих примеров (1 пример — 1 запрос).
Рынок СЕО тоже большой, это вопрос времени. Хотя, с другой стороны, в примерах в основном низкочастотные запросы и с длинными хвостами, а не «ХХХХХ купить недорого» каждого второго интернет-магазина.
Очень показательна последняя таблица. В ответ на вопрос мы получаем… ссылку на похожий вопрос в другом месте. Хорошо, если это stackoverflow. А если это Вопросы@Mail.ru? Или того хуже — «помогите найти рассказ в котором раздавили бабочку» с «кликнул по ссылке, ввёл код с телефона, всё в порядке!».
Не уверен, что Яндекс это та компания которая может похвалиться качеством поиска, в 90% случаев он не дотягивает даже до хорошего.

При словах "поиск по смыслу" на ум приходит Compreno от ABBYY, есть какие-то планы по добавлению его в свои алгоритмы?

UFO just landed and posted this here
Это смотря как использовать.

Например:

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

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

Ещё столько же будут биться. Контекст продаётся и все довольны.
Большое вам спасибо за вам труд, но пожалуйста, можно я сам буду решать какой именно смысл я вкладываю в поисковый запрос?
Вот имхо зря человека минусуют. Выше есть ветка затрагивающая, по сути, туже проблему с другой стороны, переформулирую: результаты поиска частенько не очевидны и уточнить их не представляется возможным, а уж «смысл» и так каждый видит свой. Так что опасения muxa_ru вполне оправданы ибо потенциально это изменение может усугубить и без того тяжёлое решение задачи: «найти что то конкретное и редко упоминаемое при недостаточности собственных знаний по теме или отсутствии возможности для уточнения запроса». Это серьёзная проблема на самом деле и как по мне для конечного пользователя наиболее сложно решаемая с учётом общего сверхбольшого объёма данных, также выше правильно пишут про проблемы «ручного» уточнения запроса в поиске яндекса, эта, казалось бы, мелочь с уточнением очень сильно мешает жить при поиске редкого или первоисточников информации.

Вот в этом комменте фактически, пусть и косвенно, поднимается та же тема.

P.S. я понимаю, что ответ «42» из известного произведения хорошо описывает сложность решения подобной задачи, но это не значит что её не надо решать :)

P.P.S. очень хочется иметь возможность ранжирования с учётом даты и либо выводить наиболее ранние либо наиболее поздние упоминания. Возможно уже можно, но я балбес и не нашёл.
Спасибо, очень интересно. Небольшое занудство — «аттрактивность» режет глаз, лучше — «привлекательность».
Да, вероятно, это не самая удачная калька с английского. На мой взгляд, при наличии хорошего русскоязычного аналога лучше использовать его.
«притягательность» тоже подходит
Спасибо за статью!

Скажите пожалуйста, есть ли у вас уже научные публикации по этой теме?
Могли бы вы предоставить ссылки на них?
Интересно почитать подробнее.
Спасибо за статью!
Кстати, было бы весьма интересно узнать каким именно поисковиком в работе пользуются хабровчане. Я, по старой привычке, использую Google — ибо когда-то поселил в голове мысль, что для поиска технических вопросов он подходит лучше (лет пять назад даже проверял — мысль подтвердилась).
Не использую гугль просто из чувства противоречия. Сравнивал по русскоязычным запросам — примерно одна фигня. На английском гугль ищет однозначно лучше. Но я лично редко делаю такие запросы. Но вопрос с кавычками в яндексе очень донимает (в смысле дословного поиска). Плз, верните взад.
Вот весьма вероятно, что моя приязнь к Гуглу относится к привычке формулировать запрос на техническую тематику на английском языке (стойкое осознание, что в англоязычном сегменте интернета я скорее найду ответ). К примеру даже физически быстрее вбить запрос «firefox selinux policy template», чем «шаблон политики selinux для firefox» (переключение раскладки, опять же). А запрос типа «IPv4 security options» я на русском даже сформулировать на бегу не могу.
Отсюда и интерес к тому, какой поисковик среди хабровчан популярнее.
Думаю, что большинство из молодежи перетекло к гуглю из мобилок, а большинство прогеров из необходимости поиска на английском. Русскоязычных инженеров все меньше. Яндекс популярен среди инженеров закрытых/полузакрытых контор. Там часто гугль просто забанен.
Брр, какие то очень странные доводы. Английский имхо нужно знать многим и не только инженерам и не только разработчикам ПО, хотя бы потому что им пользуется больше народу и в большем количестве, в первую очередь, наиболее развитых стран (у меня практика: на английском я не только с европейцами, но и с индусами и с израильтянами спокойно разговариваю), да и прочитать материал на английском обычно получается раньше ибо пока переведут, например книги, проходят иногда годы, не говоря уж о потере игры слов для оригиналов произведения. Более того, английский я рекомендую изучать с раннего детства вторым языком ибо словарный запас для уверенного, в т. ч. художественного английского нужен в районе 2 — 3 тысяч слов, а это, примерно, на порядок меньше чем для русского, в котором очень часто употребляются одновременно и устаревшие и вводные и ещё пара вариантов для одного и тоже понятия.

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

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

Так что учите языки, дружище ;)

Отвечая на вопрос ветки: я тоже, в основном, пользуюсь Google для повседневных запросов ибо есть многие для меня удобные вещи, которых нет в других поисковиках. При этом я часто пользуюсь Nigma когда нужно прецизионно задать запрос или DuckDuckGo когда нужно гарантированно получить полностью деперсонализированный поиск. В двух последних используется поиск Яндекса. Непосредственно Яндекс использую не часто, но когда нужна информация из области объектов или событий в России Яндекс, особенно в связке с 2ГИС справляются лучше чем любое другое решение. В принципе на русском (не в рунете, а вообще для любых материалов на русском) Яндекс ищет тоже в целом лучше, с чем конкретно это связано осознанно сказать не могу. Благо для меня использовать несколько поисковиков абсолютно не проблема ибо в Firefox искать в разных поисковиках очень просто и удобно, дополнительно я ещё расширение Context Search использую, которое делает процесс ещё более простым удобным.

P.S. и для ddPechkin тоже
Не против учить английский с раннего детства. Мама, роди меня обратно! ))
И я не думаю, что закрытые и полузакрытые конторы скоро загнутся. Скорее они будут разрастаться и расползаться на новые области. По факту практически вся реальная наука и все реальные современные технологии в нашей стране напрямую связаны с обороной. Наверно хотелось бы это изменить и продвинуть необоронные отрасли знаний, но пока так, как есть.
У меня есть некоторый опыт общения с молодыми людьми. И мне кажется, что молодые люди не очень увлечены чтением книг вообще, и чтением иностранных книг на языке оригинала в частности. Да, есть читающие, есть читающие на английском. Но это не просто нетипично, а скорее исключение. Скорее молодые люди учат язык для просмотра непереведенных приличных сериалов и игры в нелокализованные игры. Ну и для поездок.
Это все относится к неайтишным инженерам, ибо айтишник без английского — как без рук.
Не против учить английский с раннего детства. Мама, роди меня обратно! ))

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

Вот как раз поэтому российская наука и технологии это меньше 2% в мировом научном и технологическом потенциале, сейчас, скорее всего, ещё меньше. Закрыте забюрокраченные шаражки это один из самых тормозящих развитие этой страны процессов, именно они и роняют производительность труда до чрезвычайно низких показателей в критически важных областях до уровня, сравнимого с отсталыми неиндустриальными странами. Благо что правительство это поняло и процесс закрытия и реструктуризации этих «идеальных бюрократических аппаратов» идёт уже несколько лет (примерно с начала международного кризиса в 2008 г, хотя первые попытки начали ещё в 2006 г), так что не сомневайтесь, разгонят все эти помойки, надеюсь что скоро ибо эффективность экономики надо повышать в разы.
Да, есть читающие, есть читающие на английском. Но это не просто нетипично, а скорее исключение. Скорее молодые люди учат язык для просмотра непереведенных приличных сериалов и игры в нелокализованные игры. Ну и для поездок.

Молодые люди увлечены чтением книг если они интересные. Толкиена, Роулинг, Стругацских и многих-многих других читают так, что не оторвать ;) Проблема в том, что предлагаемое читать по литературе в школе даже мне в 1990х было неинтересно читать абсолютно, к сожалению, сегодня программы мало в чём улучшились в этой области и там до сих пор много депрессивного уныния в виде русской классики и просто скучных произведений оторванных либо от современности либо от реальности полностью, бррр. При этом родители часто детям не показывают культуру чтения, а раз родители сами не читают то и дети не пытаются особо, а школа окончательно отбивает всё желание читать унылыми и скучными книжками.
У меня старший читал (начал в 10 классе) и читает, а младший — нет. И ни Роулинг, ни Стругацкие его не могут вдохновить на это. Думаю, что изменилась парадигма получения знаний — старшие поколения еще уповают на знания, молодые — на поиск. А обучение (в школе и институте) продолжает настаивать на старом способе. Думаю, что необоснованно, но изменить резко смысл обучения практически невозможно. При этом, как мне кажется, унылая классика — это именно то, что делает из русского русского, из британца — британца, из китайца — китайца. Это как прививка — неприятно, но надо.
А по поводу закрытых контор есть два аспекта: во-первых, во всех странах конторы, связанные с обороноспособностью закрыты. И в Штатах, и в Европе, и в Израиле… И мы в этом не оригинальны. А во-вторых, я тут сравнивал производительность труда в наших и импортных конторах. И выводы не такие печальные, как я сам ожидал. К примеру, по выработке на одного работника моя контора в два-три раза отличается от среднеамериканской. От Эпла — в 10-20 раз. Но Эпл ничего не производит (в Штатах уж точно), поэтому сравниваться с ним некорректно. И при этом через пару-тройку лет производительность у нас вырастет в пару раз точно, возможно и раньше и больше.
А наука — она и в СССР была не очень. В ОИЯИ она и сейчас ничего, чему примером названия последних элементов в таблице Менделеева. Идей у нас всегда было полно, реализаций никогда не было, нет и сейчас. Это вопрос не науки, а менеджмента науки, с моей точки зрения.
А как это работает в поиске? Вы вычисляете скалярное произведение выхода сети для запроса со всеми документами? Если так, то насколько быстро это работает, ведь документов очень много.
Закономерный вопрос. Наше ранжирование состоит из нескольких последовательных стадий, различных по количеству обрабатываемых документов и сложности применяемых на них алгоритмов. Сначала работает очень быстрое ранжирование, которое находит, например, сотни тысяч документов. Затем мы используем более умное и медленное ранжирование и оставляем десятки тысяч документов и так далее. Таким образом, самые тяжелые алгоритмы применяются не ко всем документам вэба, а к некоторому большому, но всё же ограниченному топу наиболее перспективных документов.
Спасибо за ответ. Но в таком случае, эта первичная фильтрация должна быть или очень мягкой, или знать что «и грянет гром википедиа» подходит под запрос «рассказ в котором раздавили бабочку» (а тут даже совпадающих слов нет), иначе до вашего алгоритма документ не дойдет. Если не секрет, то сколько документов в среднем доходит до описаного в статье алгоритма?
Поиск по словам в тексте документа — на самом деле меньшая часть поиска. Сильно играют тексты, содержащие ссылки на данный документ, метрики поведения пользователей (клики и переходы).

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

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

Интересно, почему нейронные сети отождествляют с искусственным интеллектом.

Думаю, из-за того, что в основе лежит упрощенный принцип работы нейронов, на который работает и наш «естественный» интеллект.
Это прям как называть гидроэлектростанцию вечным двигателем.

А чем плох уже существующий вариант Statistical Learning?

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

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

Ссылку на aliexpess где предлагают купить адронный коллайдер для дома, недорого!

Т.е топом выдана типовая подманка от SEOшников. У которых на запрос любого товара в любом городе заготовлено тысячи бесполезных ссылок.
Грош цена такому поиску!

Это почти идеал, ищет точно то что ему говорят, работает исключение из поиска "-"
жаль вот только кавычки не работают.
Несколько не хочу принизить возможности других поисковых систем, серебряной пули ведь как известно не существует…
iPumbaza кстати спасибо, очень верно напомнили, что есть Спутник. Ему бы базы побольше и en результаты подмешивать. ps а я не выдержал свой парсер написал, ищу по локальной базе.
Также придерживаюсь мнения, что внедрение нового компьютерного алгоритма никак не повлияет на релевантность выдачи по информационным запросам. Причины в другом, не в поведенческих факторах, которые хотят анализировать «нейросетью».
Тем не менее спасибо за статью, очень интересно.
а я не выдержал свой парсер написал, ищу по локальной базе.
По локальной базе интернета? Вау!

Представил комнату из жестких дисков и пару десятков серверов с ожиданием ответа от 10 минут.

И ошиблись. Я парсил только главные, не более 15 миллионов, масштабы у меня не те и ответы ждал чаще часами. Но и запросы у меня не как для ПС.
На самом деле, ага, финансово не тяну проект. Совсем.
Но попытка! Достойная уважения.
Снимаю шляпу, я думал это огворока или для красного словца, даже неловко перед самим собой, что нехорошо про Вас подумал.
Кстати говоря, сейчас совсем не обязательно иметь совсем личный crawler и совсем локальную базу ибо есть Yacy а уже к нему можно и свой фильтр прикрутить, так сказать, к голым данным ;)

Так что присоединяйтесь, значительно оптимизируете процесс и потребление ресурсов у себя на индексацию ;) Польза от Yacy очень большая ибо он распределённый, никем нецензурируемый, и также может индексировать не только открытый интернет но и deep web, в т. ч. и все скрытосети (I2P, Tor).

Только сразу предупреждаю: встроенное ранжирование там, мягко говоря, устарело лет на 10-15 и развивается пока очень вяло ибо всё на добровольных началах.

и для 4ebriking и для springimport тоже.
ибо есть Yacy а уже к нему можно и свой фильтр прикрутить

Вы всё таки меня не совсем понимаете. Ну вот пример, в robots.txt распространяют дополнительные данные, например бинарника программ или dll, которые подгружают всякие негодяи. Как вы их поищете в Yacy, который ищет по словам?
Идеи мои схожи, я изначально думал о распределенных серверах (но никому было не интересно) и обмениваться только md5 суммами страниц. Вот с поиском у меня туго. Планы значительно улучшить время ответа применив колоночную таблицу у меня есть — но времени на это хобби нет. Можно хоть сейчас в разы улучшить поиск просто поставив второй пк с данными для поиска + кеши, только вот второй пк стоит денег.
Благодарю за разъяснения. Теперь понимаю лучше, получается что у вас довольно специализированный поисковик. Тогда да, Yacy, скорее всего, не подойдёт.
Идеал должен в данном конкретном случае выдать: «По вашему запросу ничего не найдено». Увы и ах — где найти тот идеал…
В моем залогиненном гугле ссылок на Али нет, он вообще исключил из запроса слово «коллайдер»
У меня так https://yadi.sk/i/bFM4zfxmxyhYi
Аналогично! Выдача гугла значительно осмысленней в данном случае.
Ну не знаю, что там у вас… Я вижу вот такую выдачу.
Никаких адронных коллайдеров задешево нет. И количество найденных ссылок разительно отличается: у гугла порядка 8 тысяч, а у яндекса более 200 тысяч.
Вот такую выдачу: http://clip2net.com/s/3DZ2ny1
Вот Гоша, кстати, уже проиндексировал эти комментарии и данная статья выходит в первую десятку выдачи на запрос «купить коллайдер витебск». На Яше — 3 страницы все тех же SEO ссылок, дальше не искал.
Кхм и чем конкретно плох ответ Яндекса? Поясните, пожалуйста, у меня там первой ссылкой Алиэкспресс (доставка по всему миру в т. ч. в Витебск соответственно) с постерами и книгами про БАК. И таки Яндекс нашёл как раз самое адекватное по теме! Ибо что ещё в Витебске может потребоваться купить по такому запросу? Oo

И для CEPBAHTEC и для iPumbaza
Или же это китайцы уже подсуетились? ))) Тем не менее, Яндекс молодец. Это вот как раз то самое поведение «на русском Яндекс ищет лучше чем любой другой поисковик», о котором я выше писал.
Собственно Google тоже отчасти молодец ибо нашёл книги на местных площадках, но при этом не нашёл целый раздел на Aliexpress.

В общем как всегда: хочешь найти редкое ищи сразу в нескольких поисковиках и будет хорошо :)

И таки запрос вовсе не бредовый, это вполне рабочая, формализованная и укороченная версия мысли «купить что нибудь, без уточнения что именно, по теме „адронный коллайдер“ в г. Витебск» ;) Жаль фотообои не нашлись, может их конечно вообще в природе нет :). Этот запрос нечем не хуже чем, например, «купить железную дорогу в Витебске» на который должны выдаваться соответственно игрушки и модели и они выдаются ;)

Всё круто, результаты интересные. Но как эта модель обрабатывает омонимию?

Поскольку она построена на биграммах, то таковые шансы у неё есть.

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


Также не ясно, как обрабатываются спам-документы?


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


  • Если мы анализируем только TITLE — что делать с сайтами, где идёт глупая генерация этих заголовков и они на половину состоят из например названия сайта?
  • Насколько в принципе эффективно работать именно с заголовками, учитывая, что количество уникальных и заполненных заголовков в принципе существенно мало по сравнению с общим количеством документов в интернете?
Парадокс: «Один из лучших алгоритмов машинного обучения изобрели в Яндексе», а Гугл ищет лучше.
Один из

Где парадокс?

Строго говоря, неверно даже утверждение «лучший алгоритм машинного обучения» -> «лучший поиск».

Какой стэк использовали для имплементации алгоритма ПС?

Вопрос который толком и не связан с постом, но предполагает, что тут все эксперты по нейронным сетям:
Кто мне подскажет какая архитектура сети хорошо поведет себя под эту задачу: Allstate Claims Severity ?


Анонимизированные данные, сколько-то численных, сколько-то категорийных. Задача предсказать на какую сумму предъявят страховой компании. Метрика: mean absolute error


Что-то я валандаюсь, но ничего толком не поулчается. При cross validation предсказания очень нестабильные.


Что делать? Как быть? Какая литература поможет мне разобраться какую сеть выбрать под эти данные и эту метрику?

Я интереса ради тоже переформулировал переформулированный запрос:
>>> рассказ в котором раздавили бабочку
на
>>> рассказ в котором раздавили насекомое

Яндекс не справился совсем, А Гугл справился хорошо.

С запросом:
>>> рассказ в котором раздавили живое существо с крылышками

Гугл также частично справился.

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

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

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

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

Кхм…
Поиск по русскоязычноу запросу ddg.gg выполняет через API Яндекса.
https://duck.co/help/results/sources


In fact, DuckDuckGo gets its results from over four hundred sources. These include hundreds of vertical sources delivering niche Instant Answers, DuckDuckBot (our crawler) and crowd-sourced sites (like Wikipedia, stored in our answer indexes). We also of course have more traditional links in the search results, which we source from Bing, Yahoo, and Yandex.
Уже сделан и не только без умностей, но и полностью распределённый (с соответствующими плюсами и минусами) Yacy, с ним конечно есть тонкости и его надо настроить перед использованием, но инструмент восхитительный. Алгоритмы поиска там вяло развиваются и находятся на уровне 10-15 летней давности.

И для nivorbud и для Theo_from_Sed и для spitty
Из научных публикаций известно довольно много подходов к решению проблемы. Вероятно, самым простым методом здесь является представление текстов в виде векторов с помощью алгоритма word2vec (к сожалению, практический опыт говорит о том, что для рассматриваемой задачи это довольно неудачное решение)

Не могли бы вы подробнее рассказать об этом? Можете ли вы привести примеры, где word2vec имеет гораздо лучшие альтернативы? Что это за задачи?
Меня в школе учили, что смысл передается предложениями, а в поисковом запросе юзеры по-дефолту из предложения опускают знаки препинания, заглавные буквы, части слов и целые слова. В таких условиях понять смысл еще тяжелее.
На этот счет есть интересная лекция моего коллеги: Андрей Плахов. Язык поисковых запросов как естественный язык.
Если коротко, то язык поисковых запросов (или человеко-машинный пиджин), конечно, отличается от литературного языка, но, судя по всему, его выразительных средств достаточно для решения поисковых задач пользователя.
Объясните пожалуйста, почему для запроса «евангелие из келлса» ВМ25 для заголовков «келлская книга википедия» и «ученые исследуют келлскую книгу вокруг света» выдал 0? У него не получилось просклонять «келлс»?

Я правильно понимаю, что модель строилась не только по заголовкам, но и по тексту. Если только по заголовкам, то как нейронная сеть смогла дать для запроса «келлская книга» высокий рейтинг для заголовка «ирландские иллюстрированные евангелия vii viii вв», т.е. установить связь между «келлская книга» и «ирландское евангелие»?
Не обязательно анализировать текст для того чтобы идентифицировать связь между этими двумя фразами. Для этого достаточно располагать соответствующими представлениями слов. Созданием подобного рода представлений как раз и занимается глубокое обучение (deep learning). Собственно, это является одной из главных особенностей глубоких нейронных сетей — это продукт их работы (посмотрите на word2vec и text2vec). В случае с «Палех», полагаю, происходит нечто подобное.
Я имею приблизительное представление о том, как работают нейронные сети и, на сколько я понимаю, в обучающей выборке должны были как-то сопоставляться «келлская книга» с «ирландское евангелие», т.е. они либо должны были быть в одном заголовке, либо в обучающей выборке должно было быть указано, что эти понятия связаны. Вопрос в том, откуда это сопоставление взялось.

Если сопоставление взялось из текста, тогда мне кажется некорректным сравнение с ВМ25, который искал только по заголовкам.
т.е. установить связь между «келлская книга» и «ирландское евангелие»?

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

>>> «Что такое келлская книга (ирландское евангелие)»
Согласен, очень может быть.
В случае с «келлс» и «келлский» речь идет не о словоизменении, а о словообразовании, то есть с определенной точки зрения это — разные слова. В статье для наглядности использовался вариант BM25, который именно так и считает. Но о том, что слова «келлс» и «келлский» как-то связаны, большой поиск Яндекса, конечно, знает и без DSSM.

Очень интересная мне тема, спасибо за статью. Остался один вопрос, если он глупый, не пинайте сильно. Статью про DSSM просмотрел, ответа там тоже не увидел. Как я понял, если в запросе встретилась определенная триграмма (или слово, словосочетание), то на соответствующий ей вход сети подается единица. Для тех триграмм, которых в запросе нет, на входы подаются нули. А если триграмма встречается в запросе несколько раз, это как-то учитывается? Или это неважно, главное, что она есть?
В оригинальном DSSM частотность триграмм не учитывается, используются только 0 и 1.
Какое максимальное кол-во символом из заголовка сайта, возьмутся для анализа, весь заголовок?
В общем, если я правильно понял, то данная нейронная сеть является ни чем иным как самообучающимся словарем синонимов. С тем отличием, что синонимами являются не слова, а мешки слов и не с жесткими связями между синонимичными мешками, а вероятностными. И думаю, что его можно использовать так, чтобы для поданной на вход фразы получать на выходе список наиболее синонимичных фраз. Таким образом данный алгоритм можно было бы использовать просто как дополнение к уже работающим алгоритмам ранжирования (т.е. не трогая их) — просто расширяя фразу запроса синонимичными фразами. Вроде как-то так новый алгоритм Гугла (брэйн ранк) и работает (могу ошибаться, детально не изучал).
Мне нравится идея, в особенности тем, что если её удастся развить и удачно применять, то это позволит существенно снизить значимость перенасыщенных ключевыми словами текстов. А это до сих пор является общим принципом работы большинства оптимизаторов. В результате мы можем получить не только более качественный поиск, но и — что важнее — более качественный Интернет, где люди перестанут, наконец, писать бессодержательные тексты с одной лишь целью — добиться вхождения ключевых слов в продвигаемую страницу.
Мне кажется, это шаг в нужном направлении.
В статье читаем: “Выходом модели является результат скалярного умножения последних векторов заголовка и запроса (если быть совсем точным, то вычисляется косинус угла между векторами). Модель обучается таким образом, чтобы для положительны обучающих примеров выходное значение было большим, а для отрицательных — маленьким.”

Не совсем понятно, как обучается модель. Если я не ошибаюсь, здесь речь идет о сравнении векторов методом Cosine similarity (https://en.wikipedia.org/wiki/Cosine_similarity). Чем меньше угол между двумя векторами и соответственно косинус этого угла ближе к 1, тем более похожими считаются вектора. А косинус угла тем ближе к 1, чем больше значений компонент совпадают в этих векторах.

В обучающей выборке очень даже могут быть такие два примера:
1)
PNeg1 — негативный пример, заголовок по смыслу не соответствует запросу.
Q1 — вектор первого запроса.
H1 — вектор заголовка с которым сравнивается первый запрос.
C1 = 0.9 — косинус угла между Q1 и H1, т.е
вектора сильно похожи.
2)
PPos2 — позитивный пример, заголовок и запрос хорошо похожи по смыслу.
Q2 — вектор второго запроса.
H2 — вектор заголовка с которым сравнивается второй запрос.
C2 = 0.1 — косинус угла между Q2 и H2, т.е
вектора очень мало похожи.

Поскольку вектора запроса и заголовка строятся из триграмм и комбинаций слов без учета их семантики, вполне возможна ситуация, при которой многие компоненты двух векторов совпадут, в то время как по смыслу никакого совпадения между запросом и заголовком нет. И наоборот. Например:
Q: “В какой статье пишут о том как наши атлеты вырываются вперед?”
H: “Наши вырываются вперед!” — заголовок статьи о получении букеровской премии нашего автора.

В момент написания этого текста, Яндекс, в ответ на данный запрос, выдает:

“Эксперт: эффект разорвавшейся бомбы, или о том, как Трамп вырвался вперед”

А Google:

“Болеем в Рио за спортсменов от Краснодарского края”

Правда, интересно получается?

Поскольку любые два вектора характеризуются одним и только одним косинусом угла между ними, то изменить этот косинус (меру похожести), можно только меняя сами вектора.
Если я не ошибаюсь, то в алгоритме Палех это выглядит примерно так:
1) Bq — мешок триграмм и слов построенных из запроса.
Строим всевозможные вектора Vq заданной длинны N комбинируя элементы из мешка Bq.
2) Bh — мешок триграмм и слов построенных из заголовка.
Строим всевозможные вектора Vh заданной длинны N комбинируя элементы из мешка Bh.

Затем строим всевозможные пары векторов (vq, vh), беря по одному вектору из каждого набора Vq, Vh.
Обучая нейронную сеть, для положительных примеров выбираем пару с максимальным косинусом угла между векторами входящими в пару, а для отрицательных примеров — с минимальным.
Так получается? Поправьте, пожалуйста, если где ошибся.
C1 = 0.9 — косинус угла между Q1 и H1, т.е
вектора сильно похожи.

Теоретически слова (лучше сказать «токены»), входящие в оставшиеся 0.1, должны при обучении на большой и разнообразной выборке в итоге резко понижать вес таких связей. Но на практике скорей всего получится именно то, о чем вы пишете далее:
Q: “В какой статье пишут о том как наши атлеты вырываются вперед?”
H: “Наши вырываются вперед!” — заголовок статьи о получении букеровской премии нашего автора.

В момент написания этого текста, Яндекс, в ответ на данный запрос, выдает:

“Эксперт: эффект разорвавшейся бомбы, или о том, как Трамп вырвался вперед”

А Google:

“Болеем в Рио за спортсменов от Краснодарского края”

Правда, интересно получается?


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

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

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

И в примерах автора статьи можно заметить, что совершенно левые ответы (про Икею и варенье) имеют значительный вес — они хоть и не попадут в ТОП5, но могут оказаться в ТОП20, что не хорошо.

В общем я такой алгоритм как основной для ранжирования не брал бы — слишком всё сыро. А вот для разнообразия выдачи, как дополнение к основному классическому алгоритму, можно было бы и взять.
Хмм, многие жалуются, что теперь с новым «поиском по смыслу» запросами стало управлять труднее. Одновременно подобное выглядит полезным — например, искать рассказ по основам сюжета. Да, как уже заметили выше, меньший вес станут иметь многочисленные оптимизации поиска в духе «купить недорого без смс».
Мне кажется, в идеале должна быть галочка — искать напрямую или с коррекцией запросов нейросетью.
Конечно же, никакого поиска по смыслу Яндекс не делает, поскольку в Яндексе не умеют извлекать смысл из естественно-язычного текста (ЕЯТ).

Нейросеть, умеющая находить закономерности в потоке или в матрице, по определению не способна на смыловую обработку ЕЯТ.

В принципе, все эти Компрено и Палехи — есть суть семантические сети Ёлкина С.В., разработанные ещё 20 лет назад.

Автор путает термин «семантический» с понятием «смысловой».
А в чём именно неудачность word2vec?
Или это просто «по факту» — попробовали и не взлетело?
Сам по себе word2vec — штука довольно интересная. Просто он плохо проявил себя в нашей конкретной задаче по улучшению поиска. Мое объяснение состоит в том, что обучение «классического» word2vec происходит без привлечения информации о поведении пользователей. В отличие от word2vec, целевая функция при обучении DSSM непосредственно связана с задачей ранжирования.
Я предполагаю, что его можно использовать чисто как feature extraction на самом входном слое.
Там, где у вас биграммы/слова/триграммы.

Наверно, можно даже сами буквотриграммы раскрасить по ембеддингу исходных слов (но с неоднозначностью).
Sign up to leave a comment.