Неограниченный доступ к знаниям: библиотека Стандартных Шаблонных Конструкций
Есть много причин почему доступ научным статьям и книгам должен быть свободным:
Это прекрасно
Знания меняют реальность в лучшую сторону. Вы хотите лечиться у врачей, которые в курсе последних достижений медицины? Летать на безопасных самолетах? Жить в стране, чье сельское хозяйство продуктивно и способно накормить голодные рты? Знать, как воспитывать следующее поколение так, чтобы не было мучительно больно смотреть новости?
Доступ к накопленным знаниям ускоряет получение новых. Достать до небес мы можем лишь стоя на плечах предыдущих поколений; огромное количество проблем, с которыми сталкиваются люди, были уже решены, но вот узнать об этом у нас не всегда получается
Обучение языковых моделей — нового фактора в нашей жизни — требует гигантских массивов текстов. Можно получить AI-«дебила», тренируя параметры моделей на комментариях к новостям в Интернете, но что-то умнее Шарикова получится лишь если обучение вести на текстах высокого качества, причем в промышленных объемах
До конца статьи вы узнаете как получить доступ к коллекции научных текстов и книг бесплатно, без регистраций и ограничений, в браузере и в терминале. Но прежде — небольшой экскурс в историю проблемы.
Как распространяется научное знание?
В широком смысле — через систему образования, книгопечатание, Интернет. В более узком смысле новое академическое знание сначала появляется в умах исследователей, а затем обретает физическую форму в виде научной публикации. Научные публикации отличаются от обычных постов в интернете тем, что публикуются они в рецензируемых журналах, проходят ревью, имеют определенное оформление и опираются на предыдущие публикации. Это — исследовательский фронтир, в то время как книги и учебники оперируют относительно устоявшимся знанием, систематизированным и дополнительно обработанным для удобства восприятия. И уже отсюда знание расползается дальше, по головам студентов, википедиям и индустриям, изменяя наши жизни.
В момент исследования и работы ученому необходим неограниченный доступ к телу науки. Бегло проглядеть несколько десятков публикаций или внимательно прочитать несколько статей во время работы над собственным исследованием — необходимость, а не прихоть.
Врачам нужны последние данные о терапиях и лекарствах, материаловеды хотят знать все о новых материалах. Актуальные статистические данные тоже часто появляются сначала в публикациях. Помните LK-99? Первое упоминание было на arXiv, сервере предварительной публикации. Новые алгоритмы описываются в журналах ACM, новые стандарты радиоэлектроники — в IEEE. Даже бетон, лежащий под вашими окнами, имеет отдельный журнал с описанием новых структур и смесей. И это уже не говоря про более наукоемкие отрасли типа ракетостроения, космонавтики, микробиологии. Миллионы исследователей по всему миру ежедневно читают книги, справочники и публикации и продолжают толкать прогресс вперед.
Где живут публикации?
В основном — в научных журналах, а сами журналы зачастую принадлежат либо одному из крупнейших издателей: Springer, Taylor & Francis, Elsevier, Wiley, и SAGE, либо университетской печати: Oxford University Press, Cambridge University Press и десяткам других.
И в чем проблема?
Процесс публикации и доступ к опубликованному — предмет бесконечных батхертов в исследовательской среде. Коротко описать существующую схизму можно так: одни исследователи платят деньги издателю за публикацию и бесплатно проводят peer-review, а другие исследователи платят издателю за то, чтобы прочитать опубликованное.
Что делают издатели? Ну, они собирают денежки, тоже тяжелая работа организуют peer-review, доступ к статьям, ведут статистику. В общем-то, обычная посредническая работа, вот только внезапно у этого бизнеса прибыльность оказывается выше чем у Apple или Google. Откуда столько денег?
Выше упомянута наукометрическая работа — в ней весь цимес. Следите за пальцами: публикации и ученые в академической среде имеют рейтинги; возможно вы слышали про индексы Хирша, импакт-факторы и вот это всё. Финансирование ученых и лабораторий часто оказываются привязаны к этим рейтингам. Твой рейтинг как ученого оказывается выше, в том числе, если ты публикуешься в журналах с высоким импакт-фактором, а не на последней странице в Московском Комсомольце.
А импакт-факторы высокие там, где подороже. Да не просто где подороже, а где охренеть как дорого. Ну ты понял — плати издателями, чтобы государство/университет платили тебе.
Чтобы поделиться с человечеством рецептом нового лекарства от рака или способом создать светящихся собак, исследователю надо отвалить круглую сумму. Из своего кармана отслюнявливать деньги никто не будет, а вот ты, юзернейм, как законопослушный гражданин и спонсор работы академий наук на налоговой родине, заплатишь за все. И потом еще раз заплатишь за то, чтобы прочитать опубликованное.
Ну, а с книгами-то что не так?
Казалось бы, что компьютеры и Интернет должны были снизить логистические расходы и расходы на производство последующих копий книг до нуля, но этого не произошло и сегодня цены на электронные книги порой бывают даже выше цен на их бумажные аналоги.
Причина заключается в нерыночной модели, поддерживаемой издателями. Издатели устанавливают фиксированные цены на каждую проданную единицу, а ретейлеры типа Амазона вынуждены подчиниться этой цене. Авторам уходить некуда, так как рынок зачищен. Часть издателей и ретейлеров не гнушаются картельных сговоров для завышения цен, да и в целом издательская индустрия довольно дурно пахнет. Как пример — Elsevier, известный своим агрессивным лоббированием против открытого доступа к научным публикациям. Когда говорят об «издательской мафии», то не сильно преувеличивают.
И как все живут?
Не очень. Университеты, библиотеки и лаборатории платят за подписки издателям из бюджета; их сотрудники и студенты получают доступ к публикациям в рамках подписок. Тем не менее, проблема неравного доступа или его отсутствия остается, просто переносится она с индивидуального уровня на университетский или даже на национальный. Богатые университеты могут позволить себе элитные подписки, а остальные пусть доедают крошки со стола. Независимые исследователи вообще оказываются в пролете. Хорошо ли это?
Надеюсь, что большинство согласится с тем, что образование и наука — это скорее социальное благо нежели часть рыночных отношений, и от их всеобщей доступности выгод больше, чем недостатков. Потому-то такое неравенство в доступе рассматривается как проблема, а не как естественное положение вещей.
Теневые библиотеки
И не всем нравится такой беспредел. В ответ на невозможность читать десятилетия назад выделился отдельный вид пиратства освободительного движения — книжно-научное.
Технологии как делиться интересным забесплатно уходят корнями далеко во времена Самиздата и Советского Союза. Цензура тех лет научила людей по-тихому избегать контроля и заодно оказалась благодатной почвой для бурного развития теневых библиотек уже в России.
На сегодняшний день самые активные теневые электронные библиотеки — это
Library Genesis, самозародившаяся из коллекций книг на rutracker.ru в 2008 году
Z-Library, форк LibGen, отправившийся в самостоятельное плавание спустя некоторое время
Sci-Hub, позволяющий получить доступ к публикациям по DOI, но прекративший обновляться в конце 2021 года
Библиотека Nexus/STC, дающая доступ к более свежим публикациям, а также коллекциям LibGen, Sci-Hub и части Z-Library
Библиотека Стандартных Шаблонных Конструкций (STC)
Изначально Nexus (авторы STC) давали доступ к коллекциям LibGen и Sci-Hub через боты в Telegram, но за последние пару лет нарастили собственную базу: добавили часть книг из Z-Library и поглощают независимые мелкие коллекции стандартов, отдельных журналов и издателей.
Основная фишка коллекции — полнотекстовый индекс по большой части базы и публикация самой базы данных и интерфейса к ней в распределенной системе IPFS. Самый ненадежный узел теневых библиотек — хостинг — в таком случае просто отсутствует. Как это работает?
IPFS
Можно представить себе IPFS как BitTorrent, но с человеческим лицом. IPFS — это глобальная файловая система (ФС), натянутая на десятки тысяч участников сети. Клиент на локальной машине подключается к IPFS и получает возможность читать из этой ФС. Ещё IPFS Desktop имеет HTTP-proxy: вы можете открывать контент из IPFS используя браузер и обычные GET-запросы. Вы же заходили браузером на FTP-серверы? Тут примерно также.
Если у вас есть нечто, дающее абстракцию ФС, то поверх можно запустить всё что работает с файлами. Например, базу данных или поисковый движок. Обычно сетевые ФС обладают ужасной производительностью, но если высокие скорости не требуются, а со стороны базы данных сделаны доработки по снижению числа обращений к ФС, то такой подход может сработать. Так и было сделано библиотекой STC.
Библиотека STC в IPFS
Из чего состоит STC?
Дамп поисковой базы в формате инвертированного индекса Tantivy
JS-модуль для открытия базы данных с ленивой подгрузкой данных по HTTP.
Веб-интерфейс, использующий JS-модуль
Положите веб-интерфейс со скомпилированным JS-модулем в папку, рядом расстелите поисковую базу. Залейте все это в IPFS и откройте веб-интерфейс через HTTP-proxy. Готово!
Nexus публикует готовый веб-интерфейс STC по адресу /ipns/standard-template-construct.org, а файлы базы данных находятся в папке /ipns/standard-template-construct.org/data. При установленном IPFS Desktop ссылки выше откроются через P2P и продолжат работать таким же способом при выполнении поисковых запросов (для работы требуются свежие версии браузеров).
В случае, если IPFS Desktop не установлен, то откроется публичный гейт IPFS. Работоспособность гейтов не всегда хорошая; список рабочих гейтов поддерживается проектом, но для их открытия может требоваться VPN.
STC обновляется примерно раз в месяц и сейчас содержит 130 миллионов записей + поисковый индекс по всем записям. Источники базы — LibGen, Z-Library, CrossRef, PubMed и результаты собственного скрейпинга. Около 2 миллионов научных статей и 250 000 книг проиндексировано целиком и в следующем выпуске ожидается 1 000 000 книг — больше, чем в Books3, использованном для тренировки известных GPT-моделей. 6 миллионов записей имеют IPFS-хеш, позволяющий скачать оригинальный файл произведения.
База поиска занимает порядка 200GB, собственная коллекция STC — около 8TB, а вместе с LibGen — все 50TB. IPFS прожорлив к ресурсам и требует 16–32GB RAM и пару ядер для таких объемов данных. Тем не менее, скачать поисковую базу себе при установленном IPFS очень просто:
ipfs pin add /ipns/standard-template-construct.org/ --progress
После этого, при открытии сайта через HTTP-proxy, вы будете использовать сохраненную версию.
Сохранить публикации и книги к себе можно несколькими способами:
# Самый удобный способ, но база сильно отстает от акутальной
# и содержит только публикации
ipfs pin add /ipns/hub.standard-template-construct.org/ --progress
# Требуется Python и установленный клиент STC.
# Грепаем всю базу данных и извлекаем из нее CIDы контента,
# после чего скачиваем его
pip install stc-geck
geck - documents | jq -r "select (.links != null) .links[].cid" | xargs -n 1 -P 8 -I{} ipfs pin add {} --timeout 600s
Nexus активно пропагандирует создание независимых реплик, есть подробная инструкция как настроить свою копию STC. Могу лишь прокомментировать важные нюансы: сидбокс должен быть мощным и желательно иметь свое доменное имя с SSL-сертификатом, так как веб-приложение STC может работать только в Secure Context браузера. Без сертификата придется либо возиться с self-signed сертификатами, либо добавлять исключения в браузере.
Доступ к STC через CLI
В случае, если вам нужно получить программный доступ к STC, то можно воспользоваться собственным тулингом: GECK и Cybrex
GECK
GECK дает доступ к содержанию библиотеки из консоли и Python. Требуется установленный IPFS и Python пакет:
pip install stc-geck
После установки можно обращаться к базе с поисковыми запросами так, будто она у вас запущена где-то локально
geck - search "additive manufacturing"
Или все тоже самое, но используя Python
import asyncio
from stc_geck.advices import format_document
from stc_geck.client import StcGeck
async def main():
async with StcGeck(timeout=300) as geck:
summa_client = geck.get_summa_client()
documents = await summa_client.search_documents({
"index_alias": "nexus_science",
"query": {
"match": {
"value": "additive manufacturing",
"query_parser_config": {"default_fields": ["abstract", "title", "content"]}
}
},
"collectors": [{"top_docs": {"limit": 5}}],
"is_fieldnorms_scoring_enabled": False,
})
for document in documents:
print(format_document(document) + '\n')
asyncio.run(main())
У STC развитый синтаксис запросов, но перебарщивать со сложностью не стоит — походы за кусками данных по IPFS дорогие, а чем сложнее запрос, тем больше надо грузить по сети.
Можно и просто вывалить в stdout все, что есть в базе:
# Осторожно, сотни гигабайт джейсонов
geck - documents
Cybrex
Набор обвязок для интеграции STC с базой для семантического поиска qdrant и с LLM. Для запуска нужно все тоже самое, что в предыдущем пункте + qdrant:
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
а также пакет Cybrex и сгенерированный конфиг для него:
pip install cybrex[petals]
# Записать конфиг в ~/.cybrex/config.yaml
cybrex - write-config --force -l petals-stable-beluga
Можно попробовать семантический поиск по корпусу или даже поговорить с копипастой задать вопрос LLM, куда промптом скармливаются релевантные части из всей библиотеки STC:
# Требует много диска и много памяти, так как загружает LLM модели с HuggingFace
# Семантический поиск
cybrex - semantic-search "What types of cancer do exist?" --n-chunks 5 --n-documents 10
# Семантический поиск и отправка найденного вместе с вопросом в LLM
cybrex - chat-sci "What types of cancer do exist?" --n-chunks 7 --n-document 0
Тулинг дорабатывется и иногда что-то непоправимо меняется, так что лучше обращаться к первоисточникам.
Ссылки
Больше документации
Reddit со ссылками на зеркала и дальнейшей навигацией по проекту
Инструкция по созданию реплик
Habrahabr.ru прочитано 81305 раз