Closed alexanderpanchenko closed 11 years ago
Я попробовал thejit и несколько других библиотек, но у них у всех очень плохой алгоритм укладки графов( Самый лучший в этом плане https://github.com/anvaka/VivaGraphJS, который сейчас пока и оставил. Плюсом VivaGraph является русский разработчик, который очень быстро отвечает на вопросы :)
Да, алгоритм визуализации (graph layout algorithm) -- это ключевая состовляющая. Если граф выглядит некрасиво, нечитабельно, если узлы нагромождены друг на друга а дуги пересекаются во многих местах приложение не будет интересно пользователю. Данный интерфейс должен быть интуитивным, простым и "красивым".
Было бы неплохо сравнить в действии несколько разных методов визуализации на "живых данных". Но если это вызовет слишком много работы -- не надо.
Большинство подобных систем основаны на физических моделях (притяжение/отталкивание, пружины и т.п.) http://en.wikipedia.org/wiki/Force-based_algorithms_(graph_drawing). Какие алгоритмы испльзует VivaGraph?
Я попробовал thejit Я попробовал thejit и несколько других библиотек, но у них у всех очень плохой алгоритм укладки графов и несколько других библиотек, но у них у всех очень плохой алгоритм укладки графов
Уточни что ты имеешь ввиду. Желательно со скриншотами если можно... Несколько странно слышать это о thejit -- для простых графов там должно быть все не так плохо.
VivaGraph именно его и использует:
Force Directed - based on Barnes-Hut simulation and optimized for JavaScript language this algorithm gives N * lg(N) + V performance per iteration. GEM - Graph Embedder algorithm created by Arne Frick, Andreas Ludwig and Heiko Mehldau. Estimated compleixity of this algorithm is O(|V|^3) - though I must have made a mistake somewhere, because force directed algorithm almost always produces better results faster. This algorithm is included to demonstrate how one can implement a new layout algorithm.
Второй алгоритм - GEM, похоже, в процессе разработки.
Вот картинка для сравнения:
Мб, если как-то задать коэффициенты для расчёта, Jit будет лучше, но я не могу найти в документации, как это сделать, есть только параметр levelDistance, который не шибко-то улучшает ситуацию.
OK. Согласен VivaGraph выглядит покрасивее. Да алгоритм Барнеса-Хута распространен для быстрого построения таких визуализаций. Думаю следует действительно остановиться на VivaGraph. А ты посмотрел другие альтернативы?
Веса
А VivaGraph-е или Jit учитывает вес дуги при построении визуализации? Судя по картинкам которые ты запостил нет либо ты не передал веса либо веса примерно одинаковы. Если веса учитываются то можно указывать не абсолютный вес а относительный вес. Например:
Отношения второго порядка
Судя по картинкам ты отображаешь отношения второго порядка
Почему они отображаются только для узла avocado? Думаю это должно происходить только при нажатии на узел avocado. По умолчанию следует визуализировать отношения между парами "результат-результат" -- например peach--apricot для запроса mango (если по запросу peach возвращается в top 20 слово apricot).
Лицензия
У нас вроде бы не должно быть проблем с лицензией, что ты думаешь? Просто явно не указан тип лицензии...
Copyright (c) 2011, Andrei Kashcha All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDREI KASHCHA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
А ты посмотрел другие альтернативы?
Да, у них ещё хуже
OK. Согласен VivaGraph выглядит покрасивее
Он, к тому же, более "живой" и динамический.
Веса
В VivaGraph можно задавать, в Jit - нельзя
Отношения второго порядка
Они по дабл-клику подгружаются, т.е. два раза на слово кликнуть - добавятся первые двадцать его отношений. На картинке я просто показал для одного, что бы было представление как это выглядит
По умолчанию следует визуализировать отношения между парами "результат-результат"
Пробовал, так совсем плохо выглядит, они практически каждое с каждым( Пока думаю, как их организовать и что с ними сделать.
Лицензия
Ок, спрошу у автора, какие пункты уточнить?
Да, у них ещё хуже
OK. Так и думал.
В VivaGraph можно задавать, в Jit - нельзя
Это хорошо. По умолчанию думаю не следует учитывать веса -- чтобы сделать визаулизацию максимально простой. Однако нужно сделать данный параметр визуализации доступным. Вообще мне кажется что все параметры визуализации (учет весов, отрисовка дуг, отрисовка вторичных дуг, алгоритм визуализации, количество результатов и т.п.) нужно вывести в группу настроек визуализации. После этого нужно будет поэкспериментировать с данными настройками и наиболее удачную конфигурацию установить по умолчанию. На данном этапе трудно сказать какие параметры здесь будут оптимальными...
Они по дабл-клику подгружаются, т.е. два раза на слово кликнуть - добавятся первые двадцать его отношений. На картинке я просто показал для одного, что бы было представление как это выглядит
Да так и надо. Только не уверен про двойной клик -- это скорее стандартно для десктопа. Для веба наверное одного клика достаточно.
Пробовал, так совсем плохо выглядит, они практически каждое с каждым( Пока думаю, как их организовать и что с ними сделать.
Оставь все равно данный параметр визуализации в отладочных целях -- не по умолчанию конечно. Можно к примеру такого рода сильно связные группы слов будет объединять в одну группу/кластер (серый кружок или что-нибудь в этом духе).
некоммерческое использование ? коммерческое использование ?
да.
указание копирайта ?
нужно ли оно только в исходных кодах или необходимо указать в интерфейсе пользователя ссылку
касается вот этого пункта... "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution."
ещё что-то ?
нет
Ок, понял
Как ты думаешь реально ли будет к 22-му октября сделать первую версию визуального интерфейса (самую простую без доп.опций и т.п.)? Я хотел бы попробовать написать короткую статью (демо) на ECIR http://ecir2013.org/...
Да, вполне реально, даже с опциями, сейчас уже готовы вот такие опции:
OK. Здорово. Ты можешь здесь вывесить парочку таких же скриншотов (обычный и расширенный поиск) на английском. Только чтобы окно опиций не налезало на граф. Спасибо!
Куда девать окно опции я пока не придумал, тем более что оно ещё больше будет( Расширенный: Обычный:
Так нормально -- для пользователя это подойдет вполне. Просто для скриншота хотелось чтобы граф не был загорожен менюшкой. Еще одно -- у тебя есть кто-нибудь кто знаешь хорошо английский -- спроси сможет ли он перечитать около 3-4 страниц текста на орфогр и другие ошибки...
Гм, я поспрашиваю, но результат не гарантирую....
Кстати ты не смотрел в сторону? http://mbostock.github.com/d3/ex/force.html
Смотрел, но мне там не понравился способ задания связей, там только по индексам узлов в общем массиве узлов.
OK.
Выложи пожайлуста такой же скриншот что для запроса pizza, для запроса animal.
мерси
На trytoimagine сейчас последняя версия графового интерфейса? Нужно во вторник вывесить на основной сайт версию с графом. На каком этапе сейчас этот бранч, нужно ли еще что-нибудь доделать или базовая версию можно деплоить?
Посмотрел ту версию которая сейчас на trytoimagine. Мне кажется что следует сделать следующие изменения:
Отпишись пожалуйста как поправишь эти вещи сделать мердж в ветку develop -- тогда я разверну эту версию сервере.
Там не смерджены последние изменения из develop, те что с расположением кнопок. И ещё сегодня доделаю подгрузку слов по одинарному клику, а не двойному
Да окно с оценкой можно выключить -- мы достаточно для статьи насобирали...
Я не видел там метода, позволяющего ограничивать область.... А вообще, у меня ни разу не было такого, что бы изначальный граф вылез, он же всегда по центру......
У меня во время отрисовки иногда выезжал (в конце правда вроде возвращался). ну пока это не критично...
Я еще один момент заметил важный который было бы здорово поправить. При двойном клике в добавляются узлы но не связи между ними (в режиме отображения вторичных связей). Мне кажется что по умолчанию нужно добавлять в граф связи между новыми узлами и между новыми и старыми узлами (конечно если опция отображения вторичных связей включена). Тогда новые узлы будут органично встраиваться в текущий граф а не "висеть в воздухе". Представь что пользователь начинает поиск с запроса Jaguar. Далее он видет два кластера в реузльтатах -- машины и животные. Допустим он заинтересован в кластере машин и разворачивает связи узла BMW. Тогда дополнительные узлы должны "приклеиться" к кластеру машин (за счет связей с ними) а не быть просто связями BMW...
Ок, понял
Ну вот как-то так получилось: http://trytoimagine.org:3000/
Какой то баг нашел -- когда в расширенном режиме задаешь новый запрос иногда почему то отображаются и все узлы от старого запроса. Это происходило при включенной опции связей второго порядка и после того как у первого запроса были развернуты нсколько узлов.
Кажется они выехали тк одно из слов из нового запроса было связано со словом из старого...но не уверен.
Посмотрел еще раз -- похоже баг не связан с тем что результаты из нового запроса связаны с результатами старого. Подобный баг смог воспроизвести и для никак не связанных запросов. При этом граф накапливается. В том смысле что старые результаты отображаются вместе с новыми.
Ну вроде как пофиксил
Да вроде больше не вылезает. Выглядит очень круто, особенно со связями второго порядка! :-) Реально можно исследовать кластеры из сильно связных слов. В особенности это хорошо работает на многозначных словах вроде Jaguar, Flash или Brother. Буду накатывать завтра около 14-00 по москве -- до этого времени надо потестировать.
Развернул на основном сайте бранч visualization. Потестировал сам и дал еще паре человек -- вроде бы особых багов не нашлось. Закрываю тикет т.к. считаю что базовая функциональность уже работает и удобнее будет для доработок открыть новые более точные тикеты.
Мотивация
Сейчас визуализация результатов поиска производится в виде упорядоченного списка слов. Следует предложить так же пользователю альтернанивный способ визаулизации результатов -- в виде интерактивного графа. Это должно предоставить пользователю более быстро и удобно исследовать связи между словами, формулировать запросы, переходить по связанным словам и т.п.
Данный вид интерфейса в был реализован в некоторых проектах и показал свою эффективность при визуализации лексико-семантических сетей:
Реализация
Общие требования
На данном этапе задача состоит в реализации простейшей версии такого графового интерфейса. Должена производится визуализация результата запроса в виде графа. В центре графа отображается запрос, дугами обозначаются связанные слова. При нажатии на узел производится запрос по этому узлу, этот узел становиться центральным (например как здесь http://thejit.org/static/v20/Jit/Examples/Hypertree/example1.html). Узлы которые не являются результатами по новому запросу удаляются. Стандартные результаты в виде списка слов тоже обновляются по нажатию на узел графа. Обратное тоже верно -- при нажатии на слово из стандартного списка граф обновляется.
Это должно выглядеть примерно так:
Параметры визуализации
Детали реализации
Примерно должно быть понятно из картинок.
Варианты реализации
Используется библиотека на JavaScript.
Предложение
Начать с thejit.org -- попробовать 4 данных варианта:
http://thejit.org/static/v20/Jit/Examples/RGraph/example1.html http://thejit.org/static/v20/Jit/Examples/ForceDirected/example1.html http://thejit.org/static/v20/Jit/Examples/Hypertree/example1.html http://thejit.org/static/v20/Jit/Examples/Spacetree/example1.html
Вопросы