А что бы ты предложил?
Кому интересно что у меня получилось в ходе экспериментов - получилась фигня. Пробовал двухмерную нейронку и трехмерную размерностей 5, 10, 20. Трехмерность не дала преимуществ в плане расчета "похожести" документов, скачут расстояния между проекциями одних и тех же документов в разных запусках сети с теми же параметрами. О чем это говорит - надо увеличивать сеть или размерность?
Попробовать в N-мерном пространстве, высчитанном по формуле - не получится, т.к. не хватит никаких вычислительных мощностей.
Наверняка более лучший feature selection дал бы результаты поинтереснее, я выбирал в эксперименте по 10 слов для документа, а потом перешел на выбор по 100 слов (наиболее часто встречающиеся - частота деленная на кол-во слов в документе). Т.е. идет вектор 3000 с чем-то измерений, и только 100 из них ненулевые.
Теперь я думаю опять уменьшить кол-во слов, например, 20 сделать, т.к. 100 дает слишком много ненужных слов, опять всё переиндексировать и еще раз попробовать, но надежды что-то интересное увидеть почти не осталось.
Кстати, в SOM есть такой метод ускорения работы когда сначала создается нейронка маленького размера, например 4х4, в ней идут расчеты, потом она увеличивается и уже расчитанные значения используются для новых узлов сети, таким образом, через динамическое увеличение, можно быстрее посчитать сеть, скажем, 20х20 чем если бы изначально делать 20х20 и заполнять её случайными значениями.
И я вот думаю, наверняка если бы реализовывать такую идею о глобальном пространстве, можно было бы использовать тот же принцип для увеличения размерности. Т.е. начать с размерности 2 и увеличивать до N, пока проекции не стабилизируются (не будут скакать расстояния в разных запусках той же сети). Таким образом будет найдено минимальное N для проецирования сета документов. Правда я не знаю, есть ли гарантии что проекции стабилизируются..
Упс, проглядел.
Ага, я читал что тут раз на раз не приходится. Примерно 50 на 50 (с) :)
Не знаю как это доказывать кроме как экспериментом. Ну а тут дрова будут.. Допустим, 700 документов, размерность вектора 2000, размерность пространства 2620 (Epsilon = 10%), пусть даже нейронка 3х3х3х3..
Это будет 1e+1250 нейронов, на каждой итерации для каждого считать 2000 весов и еще расстояния вычислять. Тут никакое перемножение на случайные матрицы, параллельные вычисления, динамический размер нейронки и прочие ухищрения не помогут. У меня 3D тормозит, а тут 2620D. Можно, конечно, использовать другие способы кроме SOM, но IMHO они все похожи.
Ага, восстановить или найти. Эти все вещи рядом стоят, KR (knowledge representation), NLP (natural language processing), AI, сжатие данных. Если будет прорыв в одной сфере, это потянет за собой остальные.
Ну отлично что решение нашлось. А то мне некоторые математики говорили что решения нет или что каждый раз нужно решать в частном случае.
А как же теорема компактности и т.п.?
На основе одного топика - нет. А если с ним будут проиндексированы все топики, тогда может быть. Т.е. компьютер, конечно, не начнет понимать, о чем речь, но сможет понимать насколько этот топик отличается от другого, а все они вместе от третьего.
Погодите, я тут эксперимент провожу, насколько увеличение количества входной инфы увеличит точность расстановки, о результатах напишу.
Просто у меня поисковик на пхп и медленно страницы индексирует.
:)
А откуда 4? Там ведь формула О(log(n)/epsilon^2)
Точно!
Спасибо, респект делим с sokoloff. Вообще это развитие моей полусерьезной темы, которую в курилку выкинули:
/ru/forum/79111
> Получить пространство признаков (знаний) вполне реально
таким образом мы имеем что реально получить пространство человеческих знаний на основе анализа всех документов в WWW, так? На основе этого пространства можно считать релевантность, строить какие-то отображения в 3D/2D для броузинга, и делать кучу еще разных полезных вещей.
Понял, спасибо. Т.е., получается, ответ на изначальный вопрос - это возможно, но при погрешности 10% получается потребуется 4*ln(3)/0.01 = 439.44. Т.е. 439 измерений нужно чтобы спроецировать несчастные 3 точки? Правильно я посчитал? :)
Для базы Гугла потребуется (я не знаю сколько она точно, допустим 40 млрд) 4*ln(40 000 000 000)/0.01 = 9764.
Для мелких коллекций порядка 4 тыс документов это будет около 3 тыс, т.е. где-то на уровне размерности исходных векторов.
Интересно..
Доказать не могу, но, мне кажется, это логично. Как оставить - подсказывают сами данные. Например, система индексирует много документов, и там встречается: "Маша пошла по грибы", "Петя пошел по грибы", "Маша почистила зубы", "Петя почистил зубы". В ходе уменьшения размерности Маша и Петя проецируются рядом, а идти по грибы и чистить зубы - в другом месте, а расстояния между ними отражают насколько эти понятия связаны. Изначальные факторы - правила языка, человеческие знания и личные какие-то факторы автора, при большой коллекции получается мы извлекаем только знания и язык (тоже частично обусловленный знаниями).
А откуда эта формула и как выбирать эпсилон? Можно где-то почитать про это?
Есть такое соображение, что при уменьшении размерности тут учитываются закономерности в исходных данных, значит каким-то образом учитываются взаимодействия между словами в языке (особенно при большой входной коллекции), значит при уменьшении размерности это всё нормализуется и лингвистические факторы отфильтруются, останется только смысловая нагрузка (в данном случае в виде пространства знаний). 🚬