понедельник, 8 декабря 2014 г.

О том как Твиттер прикидывается шлангом (firehose)

Как оказалось, Streaming API Твиттера не очень хорошо подходит для надежного распространения информации. Согласно официальным данным, каждое приложение, запрашивающее "статусы" по определенным ключевым словам, получает, на самом деле, фильтрованные по усмотрению самого Твиттера результаты. В общем, те же "грабли", что и в "родном" поиске Твиттера.

Представители Твиттера утверждают, что данное ограничение связано с тем, что каждый клиент API, из вполне обоснованных соображений производительности, имеет возможность получить максимум 1% сообщений, генерируемых пользователями сервиса. По их словам, если твиты на запрошенную тему составляют менее 1%, то клиент получит их все. К сожалению, с сервисом ПрайсЛайн вырисовывается несколько иная картина. Здесь сейчас производится мониторинг сообщений по скидкам и с тегом #прайслайн. В среднем мы получаем 10 сообщений в минуту. Опять же, согласно официальной информации, через Твиттер проходит 500 миллионов сообщений в день, то есть примерно 350000 в минуту. Поскольку я обнаружил, что сервисом сохраняются не все релевантные сообщения, лимит видимо достигнут, и наши 10 сообщений составляют 1% от всего потока Твиттера по скидкам. Значит 100% информации о скидках - это 1000 сообщений в минуту, то есть 1/350 от всего Твиттера.

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

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

воскресенье, 7 декабря 2014 г.

Обновление сервиса онлайн мониторинга Твиттера

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

москв%%билет

Этот запрос найдет все твиты, в которых встречаются оба фрагмента - "москв" и "билет". Порядок слов учитывается. Регистр - нет.

Также исправлены мелкие недочеты в интерфейсе.

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

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

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

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

Именно отсутствие толковых функций поиска дает простор для сторонних сервисов Твиттер-аналитики. В общем-то, и облегченная версия ПрайсЛайн тоже к ним относится.

суббота, 6 декабря 2014 г.

Продолжаем анализ информации в Твиттере

Запуск сервиса мониторинга Твиттера позволяет посчитать некоторую статистику и сделать первые выводы.

  • Дубликаты одинаковых сообщений с разных учетных записей, в том числе ботов (не ретвиты) - более 25%;
  • Дубликаты, сделанные реальными пользователями в виде ретвитов, - более 10%;
  • Твиты с ссылками для перехода куда-то (то есть, либо рекламные, либо не содержащие самодостаточного количества информации) - более 50%;
  • 5% - это вопросы по теме, а не ответы;

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

Возвращаясь к вышеуказанным трем пунктам, в сообщениях ПрайсЛайн по замыслу должна содержаться вся полезная информация о товаре и цене, так что никаких "лишних движений" для принятия решений о покупке не потребуется. А спам можно будет убрать и здесь. Более подробно об этом - в следующей публикации.

Между прочим, одно и то же ключевое слово пользователи предпочитают писать без тега в 2-4 раза чаще, чем с хэштегом - поэтому искать в полнотекстовом индексе однозначно лучше просто по словам, а не по тегам. Ну а если такая статистика из-за того, что кому-то из пользователей трудно вводить "решетку" в браузере - предлагаю обратить внимание на расширения для Chrome - HashTagger ;-).

пятница, 5 декабря 2014 г.

Мониторинг сообщений Твиттера в реальном времени на сайте ПрайсЛайн

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

Это первая, пробная версия (сообщайте о проблемах на почту или в Твиттер).

четверг, 4 декабря 2014 г.

Удобный набор хэштегов в браузере Chrome

Как я и обещал ранее, публикую подробности о расширении для браузера Chrome, которое облегчает набор русских хэштегов на социальных сервисах вроде Твиттера. Напомню проблему: символ решетки '#' доступен только в латинской раскладке, и переключаться на английский и обратно при вводе русского твита не удобно, особенно, если приходится это делать несколько раз. Для решения проблемы в браузерах Chrome и аналогах предлагается расширение HashTagger - ссылка на него расположена в левом меню.

Скачайте файл, перетащите его мышью на страницу расширений вашего браузера (способ открытия этой страницы может отличаться в зависимости от браузера, например, Инструменты -> Расширения или Настройки -> Расширения) и утвердительно ответьте на запрос об установке. (Если Вы не доверяете программам, скачанным не из Chrome Web Store, можете изменить расширение файла на zip и заглянуть в него обычным архиватором или файл-менеджером - там только JavaScript и HTML, без обращений в Интернет; если все еще сомневаетесь - найдите знакомого программиста - он подтвердит ;-)).

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

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

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

среда, 3 декабря 2014 г.

Твиттер и анализ информации о розничных ценах и не только

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

Пожалуй, самая большая проблема Твиттера в том, что он не знает русского языка, точнее его морфологии. Разумеется, мы можем легко строчить твиты на русском, но, в зависимости от контекста, одно и то же слово может быть введено в различных словоформах, которые затем не будут найдены штатными средствами поиска Твиттера. Есть несколько способов решения проблемы - каждый со своими недостатками. Можно придерживаться правил ввода значащей информации (название товара, его характеристики, название магазина) в именительном падеже, правда вряд ли все пользователи смогут придерживаться такой дисциплины. А можно создать внешний индексирующий сервис для Твиттера. Существующие службы аналитической обработки твитов (например, Twitonomy), к сожалению, тоже не очень жалуют русский, а стандартные поисковые сайты, похоже не опускаются до уровня твита, - по крайней мере на Google поиск по ключевым словам в Твиттере выдает в первую очередь совпадения по именам пользователей, а не содержательную часть сообщений. Но в любом случае, для анализа цен, буквально проскакивающих в Твиттере, важна оперативность индексации и выдачи результатов, а ни один общеизвестный поисковик эту задачу не решает.

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

Тут мы подходим к еще одной проблеме. К сожалению, сейчас поиск в Твиттере по одному и тому же слову вместе с символом решетки и без него выдает совершенно разные результаты, то есть хэштеги индексируются независимо от простых слов, хотя было бы намного удобнее, если бы символы после '#' попадали в общий индекс слов. Это вынуждает опытных пользователей упоминать в твите важные слова 2 раза - один раз сами по себе, а другой - в качестве хэштега. А тем, кто что-либо ищет, для надежности приходится указывать при поиске два запроса - и хэштег, и просто слово без решетки. Объединить их в одном запросе не получится, потому что хэштег, судя по всему, "перебивает" по "важности" простое слово, и среди результатов Вы в первую очередь увидите более старые твиты с хэшем, вместо более свежих с простым словом.

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

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

воскресенье, 30 ноября 2014 г.

Твиттер как инструмент социального мониторинга цен

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

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

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

Здесь мы упираемся еще в одно неприятное ограничение Твиттера. Я не могу добавить свой профиль в созданный мной список чтения. К чему такое ограничение - не очень понятно. Оно вынуждает желающих подписаться на некоторую тему, подписываться сразу на несколько разных источников - в данном случае на сам профиль ПрайсЛайн и на список его "активистов".

В принципе, как уже видно из вышесказанного, подписка на персоналии - не очень хороший инструмент для обобщения информации по какой-либо теме. В идеале, было бы хорошо иметь возможность подписаться на тег, но её нет. Вместо неё Твиттер предлагает искать по тегу (в нашем случае #прайслайн). Но и тут обнаруживается палка в колесе: Твиттер фильтрует поисковую выдачу по собственному усмотрению, исходя из каких-то подспудных соображений о релевантности. Таким образом, поиск по тегу выдаст, как правило, неполную и неактуальную информацию. Для решения этой проблемы необходимо написать собственный серверный движок "наблюдения" за Твиттером с использование Streaming API. Такие сервисы есть на рынке и пользование ими стоит недешево.

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

До сих пор речь шла о фундаментальных "недочетах" Твиттера, которые препятствуют его использованию в качестве средства социального мониторинга. Осталось упомянуть о мелочах. Например, в Твиттере до сих пор не реализована функция редактирования сообщения, даже в течение какого-нибудь краткого периода (например, 5 минут) после создания. Это работает на многих других сайтах, но здесь - на Твиттере - приходится быть предельно внимательным при вводе поста: чуть что не так - нужно его удалять и вводить все по-новой.

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

Другой способ упрощения ввода решетки на русском - использовать расширение для браузера (разумеется, если работа с Твиттером ведется из браузера). Первая версия такого расширения под названием HashTagger для браузеров Chrome (и всех совместимых, типа Яндекс-браузера или Iron) доступна на этом сайте - в меню слева. Расширение налету, прямо во время ввода сообщений или строки поиска в Твиттере, заменяет на решетку либо последовательность двух пробелов (это редкое явление в постах Твиттера), либо символ номера (№, в зависимости от настроек). Расширение довольно легко освоить, но в одной из следующих публикаций я расскажу о нем более подробно. Скачайте crx-файл, откройте страницу настроек с расширениями в браузере, и перетащите туда скачанный crx-файл.

пятница, 28 ноября 2014 г.

Цена имеет значение

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

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

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

#прайслайн: #товар (#EAN0123456789012) [цена] за [количество] в #магазин

Существует всего несколько простых правил, которых следует придерживаться:

  • вставьте тег #прайслайн - именно по нему будет осуществляться фильтрация сообщений сервиса;
  • укажите название товара #товар (важно - в именительном падеже); можно ввести несколько тегов с характеристиками товара и именем производителя, например #бренд;
  • укажите цену;
  • если необходимо, укажите количество и единицу измерения (например, 450 гр., используйте общеупотретибельные сокращения);
  • укажите название магазина #магазин (важно - в именительном падеже);
  • если есть возможность, укажите штрих-код в формате #EAN0123456789012 - это облегчит поиск по конкретному товару;

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

Присоединяйтесь. Это увлекательно и выгодно.