Неограниченный доступ к знаниям: библиотека Стандартных Шаблонных Конструкций

Есть много причин почему доступ научным статьям и книгам должен быть свободным:

  • Это прекрасно

  • Знания меняют реальность в лучшую сторону. Вы хотите лечиться у врачей, которые в курсе последних достижений медицины? Летать на безопасных самолетах? Жить в стране, чье сельское хозяйство продуктивно и способно накормить голодные рты? Знать, как воспитывать следующее поколение так, чтобы не было мучительно больно смотреть новости?

  • Доступ к накопленным знаниям ускоряет получение новых. Достать до небес мы можем лишь стоя на плечах предыдущих поколений; огромное количество проблем, с которыми сталкиваются люди, были уже решены, но вот узнать об этом у нас не всегда получается

  • Обучение языковых моделей — нового фактора в нашей жизни — требует гигантских массивов текстов. Можно получить 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

Тулинг дорабатывется и иногда что-то непоправимо меняется, так что лучше обращаться к первоисточникам.

Ссылки

  1. Больше документации

  2. Reddit со ссылками на зеркала и дальнейшей навигацией по проекту

  3. Инструкция по созданию реплик

Habrahabr.ru прочитано 81305 раз