powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / хочу странного gist(cube(array[1:300])) or more
7 сообщений из 7, страница 1 из 1
хочу странного gist(cube(array[1:300])) or more
    #39713498
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. cube(array) <-> cube(array) считается довольно шустрее чем ~
sum((X1-X2)*(X1-X2) order by o ) from unnest(array,array) with ordinality u (X1,X2,o)

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

теперь хочу еще удобств для ускорения выборок.
для отдербаев.
но засада -- размер вектора 300
Код: sql
1.
2.
3.
4.
5.
6.
CREATE INDEX 
  ON w2v.ess2cwbn
  USING gist
  (cube(tfcan[1:255]),id)
TABLESPACE indspace;
ERROR:  failed to add item to index page in "ess2cwbn_cube_id_idx1"



варианты :
0. хотелось бы для индекса загрубить до cube4 или даже cube2 . например. но таких не делают.
колхозные подходы:
1. для отсечки по расстоянию от можно юзать отсечку по подразмерностям ([1:200],[101:300]). все точно не отсекут, но сильно усечь можно. но одербай по полной размерности с лимитом так не сделаешь (поиск нескольких ближайших).

интересуют идеи -- что можно предпринять ?
с учетом того что пока макет -- размерность 300, но в бубущем рекомендуют иметь около 2000.

или имеет смысл на gpu переходить ? без индексов но грубой силой т.с. вот только распараллелятся ли кубы например PG-Strom-ом "искаропке". видимо нет. а вот агрегаты могли бы

//вылезать из базы не хочется -- по многим причинам.
...
Рейтинг: 0 / 0
хочу странного gist(cube(array[1:300])) or more
    #39714253
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме того,
помедитировав на планы
на разницу объемов н-мерных куба [fld <@ cube_enlarge(const,0.1,N)] и шара [fld <-> const < 0.1]
заключаю:

либо пж и скл не хватает кляузы
Код: sql
1.
FETCH { FIRST | NEXT } [ WHILE | UNTIL condition ] { ROW | ROWS } ONLY



в дополнение к
Код: sql
1.
FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY


(или то же про "лимит пока")
или же трехпозиционных операторов к гист-индексам.(fld <-> const < const2 ). если конечно внутре неонка не через дофильтр речека сферу усекает.

на самый херовый конец кажись пж не хватает хинта "ферст роуз" для курсора без лимита. злобные таки дятлы эти пжпейсатели

пысы. жаль что у олла так пусто с айдеями
...
Рейтинг: 0 / 0
хочу странного gist(cube(array[1:300])) or more
    #39714666
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

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

это ведь word2vec? можете что-нибудь порекомендовать почитать про сабж? хочу поиграться, да все никак руки не дойдут(
...
Рейтинг: 0 / 0
хочу странного gist(cube(array[1:300])) or more
    #39714691
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius, популярно: rusvectores , Church R.W. Word2Vec. In: Natural Language Engineering, Volume 23, Issue, pp. 155-162. doi:10.1017/S1351324916000334.
...
Рейтинг: 0 / 0
хочу странного gist(cube(array[1:300])) or more
    #39714783
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2,

спасибо!
...
Рейтинг: 0 / 0
хочу странного gist(cube(array[1:300])) or more
    #39714790
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexiusqwwq,

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

это ведь word2vec? можете что-нибудь порекомендовать почитать про сабж? хочу поиграться, да все никак руки не дойдут(

перебирать исходники -- это не моё. я дегенерат с одной левой. мне и кодить вилы.

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


в интернетиках описаны 2 идеи (2 варианта реализации точнее) перехода от ворд2веков к семантическим векторам. обе -- на словах, без кода. через кластеризацию ворд2веков и переход "кластерным координатам" для слов и документов.

я пока пробую более короткий (слово <==> 1кластер -> частота==координата). работает но грубо. есть более гладкое "преобразование" (взвешивание слова на центроидах кластеров). тоже работает. но пока только потрогал.

обоснования (арифметики) не видел. и вообще семантика устроена как фракталы (огрубляем линейку -- на слово налипает много больше "близости", уточняем -- "контекст" слова (точнее -- "понятия", т.к. омонимия) худеет.) а не векторочки. если помедитировать над набором растокенизированных текстов.


а в2в тупо попробровать легко. если пайтон под рукой. даже не въезжая в арифметику "обосновывания"
https://habr.com/post/425507/
https://textminingonline.com/training-word2vec-model-on-english-wikipedia-by-gensim
обобосновалка какбе :
http://nlpx.net/archives/179
...
Рейтинг: 0 / 0
хочу странного gist(cube(array[1:300])) or more
    #39715154
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexiusqwwq,

тут пишут что какие-то

в "там" ещё пишут что от инд-са более скокито-мерений больше вреда на ордербае по евклиду, чем пользы. пейчаль.

хотя при 100 у меня индекс сработал неплохо. но только после прогрева. у парня памяти видимо не хватало.

Код: sql
1.
2.
3.
4.
SELECT t.cb_id, (cube(t.ax)<-> cube(0)) as r2
			,cube(t.ax[1:100])<->cube(0) as r2ch
		FROM cub.cb t
		order by cube(t.ax[1:100])<->cube(0) limit 300


холодный индекс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
'Limit  (cost=0.41..257.89 rows=300 width=24) (actual time=106733.804..106745.121 rows=300 loops=1)'
'  Output: cb_id, ((cube(ax) <-> '(0)'::cube)), ((cube(ax[1:100]) <-> '(0)'::cube))'
'  Buffers: shared hit=2730 read=20034'
'  ->  Index Scan using cb_cube_idx on cub.cb t  (cost=0.41..85830.40 rows=100000 width=24) (actual time=106733.802..106745.043 rows=300 loops=1)'
'        Output: cb_id, (cube(ax) <-> '(0)'::cube), (cube(ax[1:100]) <-> '(0)'::cube)'
'        Order By: (cube(t.ax[1:100]) <-> '(0)'::cube)'
'        Buffers: shared hit=2730 read=20034'
'Planning time: 0.127 ms'
'Execution time: 106746.048 ms'




Код: sql
1.
2.
3.
4.
SELECT t.cb_id, (cube(t.ax)<-> cube(0)) as r2
			,cube(t.ax[2:101])<->cube(0) as r2ch
		FROM cub.cb t
		order by cube(t.ax[2:101])<->cube(0) limit 300


теплый секскан
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'Limit  (cost=7350.41..7351.16 rows=300 width=24) (actual time=16660.926..16661.008 rows=300 loops=1)'
'  Output: cb_id, ((cube(ax) <-> '(0)'::cube)), ((cube(ax[2:101]) <-> '(0)'::cube))'
'  Buffers: shared hit=768324 read=34621'
'  ->  Sort  (cost=7350.41..7600.41 rows=100000 width=24) (actual time=16660.924..16660.966 rows=300 loops=1)'
'        Output: cb_id, ((cube(ax) <-> '(0)'::cube)), ((cube(ax[2:101]) <-> '(0)'::cube))'
'        Sort Key: ((cube(t.ax[2:101]) <-> '(0)'::cube))'
'        Sort Method: top-N heapsort  Memory: 48kB'
'        Buffers: shared hit=768324 read=34621'
'        ->  Seq Scan on cub.cb t  (cost=0.00..2736.00 rows=100000 width=24) (actual time=110.825..16593.831 rows=100000 loops=1)'
'              Output: cb_id, (cube(ax) <-> '(0)'::cube), (cube(ax[2:101]) <-> '(0)'::cube)'
'              Buffers: shared hit=768321 read=34621'
'Planning time: 0.163 ms'
'Execution time: 16661.060 ms'




горячий индекс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
'Limit  (cost=0.41..257.89 rows=300 width=24) (actual time=131.550..136.798 rows=300 loops=1)'
'  Output: cb_id, ((cube(ax) <-> '(0)'::cube)), ((cube(ax[1:100]) <-> '(0)'::cube))'
'  Buffers: shared hit=22742'
'  ->  Index Scan using cb_cube_idx on cub.cb t  (cost=0.41..85830.40 rows=100000 width=24) (actual time=131.549..136.752 rows=300 loops=1)'
'        Output: cb_id, (cube(ax) <-> '(0)'::cube), (cube(ax[1:100]) <-> '(0)'::cube)'
'        Order By: (cube(t.ax[1:100]) <-> '(0)'::cube)'
'        Buffers: shared hit=22742'
'Planning time: 0.138 ms'
'Execution time: 136.876 ms'




горячий секскан
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'Limit  (cost=7350.41..7351.16 rows=300 width=24) (actual time=1308.477..1308.531 rows=300 loops=1)'
'  Output: cb_id, ((cube(ax) <-> '(0)'::cube)), ((cube(ax[2:101]) <-> '(0)'::cube))'
'  Buffers: shared hit=802920'
'  ->  Sort  (cost=7350.41..7600.41 rows=100000 width=24) (actual time=1308.475..1308.504 rows=300 loops=1)'
'        Output: cb_id, ((cube(ax) <-> '(0)'::cube)), ((cube(ax[2:101]) <-> '(0)'::cube))'
'        Sort Key: ((cube(t.ax[2:101]) <-> '(0)'::cube))'
'        Sort Method: top-N heapsort  Memory: 48kB'
'        Buffers: shared hit=802920'
'        ->  Seq Scan on cub.cb t  (cost=0.00..2736.00 rows=100000 width=24) (actual time=0.101..1275.595 rows=100000 loops=1)'
'              Output: cb_id, (cube(ax) <-> '(0)'::cube), (cube(ax[2:101]) <-> '(0)'::cube)'
'              Buffers: shared hit=802920'
'Planning time: 0.167 ms'
'Execution time: 1308.567 ms'

...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / хочу странного gist(cube(array[1:300])) or more
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]