Получи случайную криптовалюту за регистрацию!

nerdy vibes

Логотип телеграм канала @nerdy_vibes — nerdy vibes N
Логотип телеграм канала @nerdy_vibes — nerdy vibes
Адрес канала: @nerdy_vibes
Категории: Технологии
Язык: Русский
Количество подписчиков: 62
Описание канала:

Pasha
P2P, Decentrlized Networks, CS, Search, Rust

Рейтинги и Отзывы

3.00

2 отзыва

Оценить канал nerdy_vibes и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

0

2 звезд

1

1 звезд

0


Последние сообщения

2022-07-07 08:42:43
В Rust 1.62 подвезли более лучшие примитивы синхронизации. Вместо использования pthread стандартная библиотека переезжает на прямые вызовы futex_wait и futex_wake. Отчего бенчмарки как под контеншеном, так и без него становятся круче, чем у parking_lot.

Выигрыш получается из-за удаления одного уровня индирекции при размещении в памяти. Теперь нет ни аллокации при создании, ни лишнего хопа при обращении. Кроме того, RwLock теперь предотвращает writer starvation, для большинства случаев это полезнее старого поведения.

Хотите увидеть пример как пилить важные фичи в опенсорсном проекте и вызубрить устройство примитивов синхронизации в стандартных библиотеках? Посмотрите issue по замене примитивов синхронизации на GitHub от m-ou-se. Там и musl, и виндовые SRW локи, и даже релевантные части из Google Absl разобраны.

И хотя сложность синхронизации спрятана внутри фьютексов ядра, поэтому рокет-саенса в фиче нет, но тем даже лучше - кодовая база языка не распухает лишний раз.
25 viewsedited  05:42
Открыть/Комментировать
2022-06-28 12:29:15 Вчера Yann LeCun выложил свою программную работу A Path Towards Autonomous Machine Intelligence. Ян - один из самых известных исследователей AI в мире и вице-президент Meta. Эту публикацию он кратко описал как "my position/vision/proposal paper". В ней Ян делает подход к архитектуре машинного разума, способного планировать и обучаться как человек.

Работа длинная, я ее еще даже до половины не прочел. Присоединяйтесь, как время будет - обсудим в чате

https://openreview.net/pdf?id=BZ5a1r-kVsf
51 viewsedited  09:29
Открыть/Комментировать
2022-06-27 11:48:53
Питон под капотом потихонечку становится статически типизированным. Бинарные операции add/mul и операция subscript (a[i]) для встроенных типов теперь заменены на специализированные быстрые версии

В PEP-0659 описано все в подробностях
53 viewsedited  08:48
Открыть/Комментировать
2022-06-25 00:13:48
63 views21:13
Открыть/Комментировать
2022-06-25 00:13:29 Вот уж не хотел туда лезть! Пока тестировал как работает поиск, обнаружил препринт еще не вышедшей статьи из ACMJOE о Binary Fuse фильтрах. В итоге всрал половину дня на нее и на чуть более раннюю статью о XOR фильтрах.

Завязка - надо уметь проверять принадлежит ли элемент множеству. Пришел в БД запрос типа select * from table where key = 100500, а БД у нас хитрая - завела себе в RAM множество всех ключей и не пошла на диск за записями (это долго), а проверила существует ли запись с ключом используя множество (это быстро). Реализовать множество в лоб можно через set (set в Python, HashSet в Rust и т.д.) на хеш-таблицах или деревьях. Но такое решение займет много памяти.

Поэтому придумали approximate membership структуры. Как они работают? Если элемент ранее добавили в множество, то структура точно скажет, что элемент есть во множестве. А если элемент ранее не добавляли, то структура все равно может с небольшой вероятностью ошибочно заявить, что элемент принадлежит множеству. Для БД это чревато тем, что мы таки пойдем на диск за записью, а ее там не будет. Страшно, но пережить можно. Зато approximate membership занимают значительно меньше памяти.

Самые распространенные approximate membership структуры - Cuckoo или Bloom-фильтры. Bloom-фильтры простые для понимания, но работают не очень, так как используют на 44% больше памяти, чем идеальный вариант. Плюс блум-фильтры шастают по памяти достаточно произвольно. Чтобы исправить проблемы с памятью для Apache Impala придумали blocked Bloom, который еще больше места занимает, но обладает большей локальностью, лучше ложится в процессорный кеш и позволяет использовать SIMD-инструкции.

В 2020 году изобрели XOR фильтры, год назад Facebook выложил ribbon фильтры. Binary Fuse скрафчен автором XOR фильтров и, по сути, является их оптимизированной версией. На 30% компактнее блум-фильтра, перф в 2 раза выше. Но и строится более медленно. Важный нюанс - онлайн добавления элементов в нем нет. Из-за несколько иного подхода к хранению (фингерпринты вместо хеш-функций), вероятность ложноположительного срабатывания у блума растет с ростом количества элементов, а у XOR/Binary Fuse - фиксирована.

Читать лучше последнюю статью, она в аттаче ниже.

P.S. Для Rust крутая имплементация тут
58 viewsedited  21:13
Открыть/Комментировать
2022-06-21 21:26:02 На картинке видно входную точку - молекулу mTOR. Откуда-то взявшаяся молекула mTOR цепляется к двум другим молекулам и образует два белковых комплекса mTOR1 и mTOR2. mTOR1 вступает в реакцию с факторами роста и с некоторыми другими молекулами внутри клетки. Таким образом mTOR1 реагирует на окружающую среду. В результате взаимодействий mTOR1 принимает определенную форму, как ключ подходящую к двум другим молекулам p70-S6 Kinase 1 и 4E-BP1. Ну и дальше ключ-mTOR действительно встречается с этими двумя замочками и обменивается с ними фосфорными группами, чем активирует их. Дальше две последние молекулы начинают свой собственный танец.

Еще mTOR1 может вступить в реакцию с молекулой AMPK. Молекула AMPK появляется в клетке только тогда, когда запасенная энергия клетки падает ниже некоторого уровня. Эта реакция отключает mTOR1 и деление клетки замедляется или прекращается - так mTOR1 реагирует на отсутствие энергии. Какой смысл запускать деление, если на него не хватит энергии?

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

Замедление деления через снижение энергетических уровней клетки человек может вызвать самостоятельно. Достаточно для этого перестать жрать сколько надо и начать голодать. И здесь пазл наконец-то складывается. Ограничение калорий - научно обоснованный и доступный способ продления жизни, опробованный на приматах. Исследования показывают, что замедление клеточного деления ограничением калорий опосредовано именно mTOR pathway. Другой вопрос - что же это будет за жизнь такая, если постоянно хочется жрать. Ведь для изменения метаболических путей требуется снижение общего калоража на 30% при сохранении разнообразия питания на протяжении долгих лет.

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

У молекулы mTOR, несмотря на ее самостоятельную роль, на самом деле очень вторичное название. mTOR расшифровывается как mammalian Target of Rapamycin, то есть - мишень рапамицина млекопитающих. Обидно быть самым важным для деления и прослыть какой-то там мишенью, но что поделать - такова история.

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

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

Уже сейчас понятно, что противовозрастная терапия будет требовать сложной комплексной терапии. Но производные рапамицина, вероятнее всего, займут свое место в этом сложном коктейле.
56 viewsedited  18:26
Открыть/Комментировать
2022-06-21 21:25:39
Жизнь клетки, в том числе цикл деления, управляется танцем большого количества молекул. В клетку попадают молекулы, запускается синтез других молекул. В процессе одни молекулы цепляются ко вторым молекулам и разрушают третьи. Цепочки химических реакций могут быть длиной в сотни шагов. Каждая цепочка, играющая свою роль, называется метаболическим путем клетки. Благодаря этим путям клетка реагирует на изменения в ее окружении и может выполнять свои функции. Одни пути готовят клетку к делению, другие - к смерти, третьи запускают внутриклеточные фабрики по производству белков.

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

На картинке выше важный метаболический путь внутри клетки, mTOR pathway. Задача mTOR pathway - собрать информацию об окружении клетки и принять решение о запуске цикла клеточного деления. Как это происходит?
47 views18:25
Открыть/Комментировать
2022-06-14 23:24:57 Крутой обзор техник расширения поискового запроса (Query Expansion). Лонгрид на 30-40 минут, осторожно.

Пару слов о QE. Смысл техники заключается в добавлении в пользовательский поисковый запрос новых слов. Качество выдачи растет, если делать это правильно; precision может быть увеличен на ~10%.

Причины:
- пользователи не всегда говорят на одном языке с поисковой системой
- запросы формулируются короткими и потому упускают часть документов
- пользователь не уверен в том, что ищет

Процесс QE описывается как подбор новых слов и последующий отбор самых подходящих из них. Оба этапа одинаково важны - накидать кучу синонимов в запрос не прокатит, это может ухудшить precision поисковой выдачи. Слова-кандидаты нужно взвесить, выбрать лучшие и только в этом случае как recall, так и precision будут расти.
76 viewsedited  20:24
Открыть/Комментировать
2022-06-13 21:36:53 Первый вопрос при настройке своего поискового индекса - нужно ли проводить стемминг/лемматизацию (далее на обе техники буду ссылаться как на стемминг) слов корпуса или нет?

Стемминг - это приведение словоформы к некоторой каноничной форме. Нужно, чтобы в момент поиска запрос "скачать котов" нашел в том числе и документы со словами "скачать кота", "скачка кот" и т.д.

Большая часть гайдов, как для ES, так и для Tantivy советуют использовать стемминг. Проблема в том, что качественных state-of-the-art методов стемминга в свободном доступе просто нет. Есть Porter/Snowball stemmers, которые старше автора канала, есть MyStem Яндекса 20-летней давности, а все более современные версии не публикуются и охраняются поисковыми компаниями. У них там все гораздо более круче. В поисковом индексе на самом низком уровне хранится как каноничная словоформа, так и конкретная форма слова. Можно прямо во время обхода индекса проводить фильтрацию, что сильно расширяет возможности по ранжированию документов. Пользователям опенсорсных поисков остается только кусать локти. Но есть и хорошие новости - стеммить не обязательно.

В [1] исследовалось как Google делает стемминг. Никаким Porter там не пахнет. TLDR - во-первых решения о стемминге принимаются для каждого документа отдельно, во-вторых стемминг более консервативный. Формы единственного и множественного числа практически всегда стеммятся, а вот различные формы глаголов нет, не всегда. Такой стеммер можно попытаться реализовать самому. Кроме того, видно, что индекс хранит информацию и об обрезанной и о первоначальной форме слова.

Так как добавлять поддержку словоформ на уровень индекса - тяжело и муторно, то остается другой, дешевый способ. Можно не стеммить документы во время индексации, а расширять запрос словоформами во время поиска. То есть вместо "скачать коты" получить запрос "(скачать ИЛИ скачка ИЛИ выкачать) (коты ИЛИ кот ИЛИ котов)".

Тут есть и возможность более тонкой настройки, и нет необходимости переиндексировать корпус документов после правок алгоритма. Для Python и английского языка есть WordNet в библиотеке nltk. Либо вполне себе справится с добавлением словоформ.

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

[1] Google stemming mechanisms
[2] Text Stemming: Approaches, Applications, and Challenges
64 viewsedited  18:36
Открыть/Комментировать