Большинство текстовых корпусов открытого веба заражены: сгенерированный LLM текст просочился в Reddit, Stack Overflow, GitHub и блоги, так что модель, обученная на них, отчасти учится у других моделей. Usenet отличается. Это десятилетия флеймов, технических вопросов-ответов и споров в новостных группах, все написанные людьми, полностью предшествующие сегодняшним языковым моделям. Для всех, кто обучает или оценивает языковые и речевые модели, большой архив написанного людьми текста с чистым провенансом — это именно те данные, которые становится всё труднее найти.
Usenet как до-ИИ корпус
Usenet получает тысячи постов в день по сотням активных групп. Архивируйте назад до 1980-х, и у вас есть миллионы статей — каждая сигнал того, что людей на самом деле волновало, о чём они спорили, что хотели узнать — с провенансом, достаточно чистым, чтобы цитировать.
Мы построили инструмент под названием usenet, который делает сбор этого простым:
from usenet import UsenetServer
# Connect to a public news server (no account required)
with UsenetServer("news.neodome.net") as server:
articles = server.get_articles("comp.lang.python", limit=100)
for article in articles:
print(f"{article.subject} by {article.author}")
Большинство публичных серверов больше не поддерживают NEWNEWS (запрос по дате), так что просмотр на основе групп — это стандартный подход. Вы скрейпите по одной группе за раз — не барьер, просто реальность протокола.
Чтобы превратить новостную группу в обучающий датасет, dataset.py собирает статьи в JSONL:
{
"group": "comp.lang.python",
"message_id": "<12345@example.com>",
"subject": "Best practices for list comprehensions",
"author": "Alice",
"date": "1999-03-15T10:22:00Z",
"language": "en",
"text": "In my experience, list comprehensions are most readable when...",
}
Одна статья на строку. Отправьте пару тысяч таких на Hugging Face, и у вас есть публично доступный, написанный людьми, с чистым провенансом датасет, который вы можете цитировать и переопубликовывать.
Репозиторий: github.com/TigreGotico/usenet
Чтение Usenet без аккаунта
Большинство публичных новостных серверов позволяют читать без регистрации:
from usenet import UsenetServer
servers = [
"news.neodome.net",
"news.samoylyk.net",
"freenews.netfront.net"
]
for server in servers:
try:
with UsenetServer(server) as s:
articles = s.get_articles("alt.test", limit=5)
print(f"Success on {server}: {len(articles)} articles")
break
except OSError:
continue
Почему это важно
Usenet — это архив с чистым провенансом человеческого текста в масштабе, предшествующий эпохе машинно-сгенерированного контента. Обучаете ли вы модели, строите датасеты или изучаете интернет-дискурс до того, как его разбавил сгенерированный ИИ текст — этот архив всё ещё там и продолжает расти.
Репозиторий: github.com/TigreGotico/usenet — собирайте Usenet в обучающие датасеты; читайте публично без аккаунта.