karmiq/wikipedia-embeddings-cs-seznam-mpnet
收藏Hugging Face2024-02-29 更新2024-03-04 收录
下载链接:
https://hf-mirror.com/datasets/karmiq/wikipedia-embeddings-cs-seznam-mpnet
下载链接
链接失效反馈官方服务:
资源简介:
---
dataset_info:
features:
- name: id
dtype: string
- name: url
dtype: string
- name: title
dtype: string
- name: chunks
sequence: string
- name: embeddings
sequence:
sequence: float32
splits:
- name: train
num_bytes: 2580729273
num_examples: 534044
download_size: 2307703671
dataset_size: 2580729273
configs:
- config_name: default
data_files:
- split: train
path: data/train-*
language:
- cs
size_categories:
- 100K<n<1M
task_categories:
- text-generation
- fill-mask
license:
- cc-by-sa-3.0
- gfdl
---
This dataset contains the Czech subset of the [`wikimedia/wikipedia`](https://huggingface.co/datasets/wikimedia/wikipedia) dataset. Each page is divided into paragraphs, stored as a list in the `chunks` column. For every paragraph, embeddings are created using the [`Seznam/simcse-dist-mpnet-paracrawl-cs-en`](https://huggingface.co/Seznam/simcse-dist-mpnet-paracrawl-cs-en) model.
## Usage
Load the dataset:
```python
from datasets import load_dataset
ds = load_dataset("karmiq/wikipedia-embeddings-cs-seznam-mpnet", split="train")
ds[1]
```
```
{
'id': '1',
'url': 'https://cs.wikipedia.org/wiki/Astronomie',
'title': 'Astronomie',
'chunks': [
'Astronomie, řecky αστρονομία z άστρον ( astron ) hvězda a νόμος ( nomos ) ...',
'Novověk Roku 1514 navrhl Mikuláš Koperník nový model, ve kterém bylo ...',
...,
],
'embeddings': [
[ 0.653917670249939, -0.879465639591217, 0.3993946313858032, ... ]
[ 0.0035442777443677187, -1.0201066732406616, -0.06573136150836945, ... ]
]
}
```
The structure makes it easy to use the dataset for implementing semantic search.
<details>
<summary>Load the data in Elasticsearch</summary>
```python
def doc_generator(data, batch_size=1000):
for batch in data.with_format("numpy").iter(batch_size):
for i, id in enumerate(batch["id"]):
output = {"id": id}
output["title"] = batch["title"][i]
output["url"] = batch["url"][i]
output["parts"] = [
{ "chunk": chunk, "embedding": embedding }
for chunk, embedding in zip(batch["chunks"][i], batch["embeddings"][i])
]
yield output
num_indexed, num_failed = 0, 0,
progress = tqdm(total=ds.num_rows, unit="doc", desc="Indexing")
for ok, info in parallel_bulk(
es,
index="wikipedia-search",
actions=doc_generator(ds),
raise_on_error=False,
):
if not ok:
print(f"ERROR {info['index']['status']}: {info['index']['error']}"
progress.update(1)
```
</details>
<details>
<summary>Use <code>sentence_transformers.util.semantic_search</code></summary>
```python
import os
import textwrap
import sentence_transformers
from sentence_transformers.models import Transformer, Pooling
from sentence_transformers import SentenceTransformer
from sentence_transformers.models import Transformer, Pooling
embedding_model = Transformer("Seznam/simcse-dist-mpnet-paracrawl-cs-en")
pooling = Pooling(word_embedding_dimension=embedding_model.get_word_embedding_dimension(), pooling_mode="cls")
model = SentenceTransformer(modules=[embedding_model, pooling])
ds.set_format(type="torch", columns=["embeddings"], output_all_columns=True)
# Flatten the dataset
def explode_sequence(batch):
output = { "id": [], "url": [], "title": [], "chunk": [], "embedding": [] }
for id, url, title, chunks, embeddings in zip(
batch["id"], batch["url"], batch["title"], batch["chunks"], batch["embeddings"]
):
output["id"].extend([id for _ in range(len(chunks))])
output["url"].extend([url for _ in range(len(chunks))])
output["title"].extend([title for _ in range(len(chunks))])
output["chunk"].extend(chunks)
output["embedding"].extend(embeddings)
return output
ds_flat = ds.map(
explode_sequence,
batched=True,
remove_columns=ds.column_names,
num_proc=min(os.cpu_count(), 32),
desc="Flatten")
ds_flat
query = "Čím se zabývá fyzika?"
hits = sentence_transformers.util.semantic_search(
query_embeddings=model.encode(query),
corpus_embeddings=ds_flat["embedding"],
top_k=10)
for hit in hits[0]:
title = ds_flat[hit['corpus_id']]['title']
chunk = ds_flat[hit['corpus_id']]['chunk']
print(f"[{hit['score']:0.2f}] {textwrap.shorten(chunk, width=100, placeholder='…')} [{title}]")
# [0.72] Molekulová fyzika ( též molekulární fyzika ) je část fyziky, která zkoumá látky na úrovni atomů a… [Molekulová fyzika]
# [0.70] Fyzika ( z řeckého φυσικός ( fysikos ): přírodní, ze základu φύσις ( fysis ): příroda, archaicky… [Fyzika]
# ...
```
</details>
The embeddings generation took about 35 minutes on an NVIDIA A100 80GB.
## License
See license of the original dataset: <https://huggingface.co/datasets/wikimedia/wikipedia>.
数据集信息:
特征:
- 名称:id
数据类型:字符串(string)
- 名称:url
数据类型:字符串(string)
- 名称:title
数据类型:字符串(string)
- 名称:chunks
类型:字符串序列
- 名称:embeddings
类型:嵌套序列,元素为32位浮点型(float32)
数据划分:
- 名称:train(训练集)
字节大小:2580729273
样本数量:534044
下载体积:2307703671
数据集总体积:2580729273
配置项:
- 配置名:default(默认配置)
数据文件:
- 数据划分:train
路径:data/train-*
语言:
- 捷克语(cs)
数据规模分类:
- 100K < 样本数 < 1M
任务分类:
- 文本生成(text-generation)
- 掩码填充(fill-mask)
许可证:
- cc-by-sa-3.0
- gfdl
本数据集为[`wikimedia/wikipedia`](https://huggingface.co/datasets/wikimedia/wikipedia)数据集的捷克语子集。每个维基百科页面均被拆分为段落,存储于`chunks`列的列表中。针对每个段落,均使用[`Seznam/simcse-dist-mpnet-paracrawl-cs-en`](https://huggingface.co/Seznam/simcse-dist-mpnet-paracrawl-cs-en)模型生成嵌入向量(embeddings)。
## 使用方法
加载数据集:
python
from datasets import load_dataset
ds = load_dataset("karmiq/wikipedia-embeddings-cs-seznam-mpnet", split="train")
ds[1]
{
'id': '1',
'url': 'https://cs.wikipedia.org/wiki/Astronomie',
'title': 'Astronomie',
'chunks': [
'Astronomie, řecky αστρονομία z άστρον ( astron ) hvězda a νόμος ( nomos ) ...',
'Novověk Roku 1514 navrhl Mikuláš Koperník nový model, ve kterém bylo ...',
...,
],
'embeddings': [
[ 0.653917670249939, -0.879465639591217, 0.3993946313858032, ... ]
[ 0.0035442777443677187, -1.0201066732406616, -0.06573136150836945, ... ]
]
}
该数据集的结构十分便于实现语义搜索任务。
<details>
<summary>在Elasticsearch中加载数据</summary>
python
def doc_generator(data, batch_size=1000):
for batch in data.with_format("numpy").iter(batch_size):
for i, id in enumerate(batch["id"]):
output = {"id": id}
output["title"] = batch["title"][i]
output["url"] = batch["url"][i]
output["parts"] = [
{ "chunk": chunk, "embedding": embedding }
for chunk, embedding in zip(batch["chunks"][i], batch["embeddings"][i])
]
yield output
num_indexed, num_failed = 0, 0,
progress = tqdm(total=ds.num_rows, unit="doc", desc="正在索引")
for ok, info in parallel_bulk(
es,
index="wikipedia-search",
actions=doc_generator(ds),
raise_on_error=False,
):
if not ok:
print(f"ERROR {info['index']['status']}: {info['index']['error']}")
progress.update(1)
</details>
<details>
<summary>使用<code>sentence_transformers.util.semantic_search</code></summary>
python
import os
import textwrap
import sentence_transformers
from sentence_transformers.models import Transformer, Pooling
from sentence_transformers import SentenceTransformer
from sentence_transformers.models import Transformer, Pooling
embedding_model = Transformer("Seznam/simcse-dist-mpnet-paracrawl-cs-en")
pooling = Pooling(word_embedding_dimension=embedding_model.get_word_embedding_dimension(), pooling_mode="cls")
model = SentenceTransformer(modules=[embedding_model, pooling])
ds.set_format(type="torch", columns=["embeddings"], output_all_columns=True)
# 展平数据集
def explode_sequence(batch):
output = { "id": [], "url": [], "title": [], "chunk": [], "embedding": [] }
for id, url, title, chunks, embeddings in zip(
batch["id"], batch["url"], batch["title"], batch["chunks"], batch["embeddings"]
):
output["id"].extend([id for _ in range(len(chunks))])
output["url"].extend([url for _ in range(len(chunks))])
output["title"].extend([title for _ in range(len(chunks))])
output["chunk"].extend(chunks)
output["embedding"].extend(embeddings)
return output
ds_flat = ds.map(
explode_sequence,
batched=True,
remove_columns=ds.column_names,
num_proc=min(os.cpu_count(), 32),
desc="展平")
ds_flat
query = "Čím se zabývá fyzika?"
hits = sentence_transformers.util.semantic_search(
query_embeddings=model.encode(query),
corpus_embeddings=ds_flat["embedding"],
top_k=10)
for hit in hits[0]:
title = ds_flat[hit['corpus_id']]['title']
chunk = ds_flat[hit['corpus_id']]['chunk']
print(f"[{hit['score']:0.2f}] {textwrap.shorten(chunk, width=100, placeholder='…')} [{title}]")
# [0.72] Molekulová fyzika ( též molekulární fyzika ) je část fyziky, která zkoumá látky na úrovni atomů a… [Molekulová fyzika]
# [0.70] Fyzika ( z řeckého φυσικός ( fysikos ): přírodní, ze základu φύσις ( fysis ): příroda, archaicky… [Fyzika]
# ...
</details>
在NVIDIA A100 80GB显卡上,嵌入向量的生成过程耗时约35分钟。
## 许可证
许可证信息请参考原始数据集:<https://huggingface.co/datasets/wikimedia/wikipedia>。
提供机构:
karmiq原始信息汇总
数据集概述
数据集信息
- 特征:
id: 字符串类型url: 字符串类型title: 字符串类型chunks: 字符串序列embeddings: 浮点数序列的序列
- 分割:
train: 包含534044个样本,总大小为2580729273字节
- 下载大小: 2307703671字节
- 数据集大小: 2580729273字节
配置
- 默认配置:
- 数据文件路径:
data/train-*
- 数据文件路径:
语言
- 捷克语
大小类别
- 100K < n < 1M
任务类别
- 文本生成
- 填充掩码
许可证
- CC BY-SA 3.0
- GFDL
描述
该数据集包含wikimedia/wikipedia数据集的捷克子集。每个页面被划分为段落,存储在chunks列中。每个段落使用Seznam/simcse-dist-mpnet-paracrawl-cs-en模型生成嵌入。
使用示例
python from datasets import load_dataset
ds = load_dataset("karmiq/wikipedia-embeddings-cs-seznam-mpnet", split="train") ds[1]
输出示例: json { "id": "1", "url": "https://cs.wikipedia.org/wiki/Astronomie", "title": "Astronomie", "chunks": [ "Astronomie, řecky αστρονομία z άστρον ( astron ) hvězda a νόμος ( nomos ) ...", "Novověk Roku 1514 navrhl Mikuláš Koperník nový model, ve kterém bylo ...", ... ], "embeddings": [ [ 0.653917670249939, -0.879465639591217, 0.3993946313858032, ... ], [ 0.0035442777443677187, -1.0201066732406616, -0.06573136150836945, ... ] ] }
结构
数据集结构便于实现语义搜索。
嵌入生成时间
嵌入生成大约需要35分钟(在NVIDIA A100 80GB上)。
搜集汇总
数据集介绍

构建方式
该数据集基于维基媒体基金会提供的捷克语维基百科语料库构建而成。原始页面被精细地分割为若干段落,每个段落作为独立的文本块存储在'chunks'字段中。随后,利用预训练的句子嵌入模型Seznam/simcse-dist-mpnet-paracrawl-cs-en,为每一个段落生成对应的稠密向量表示,并存放于'embeddings'字段。整个嵌入计算过程在NVIDIA A100 80GB GPU上耗时约35分钟,最终形成包含超过53万条样本的训练集。
特点
数据集的核心特色在于其结构化的双重存储设计:每个维基百科条目不仅保留了元数据(如标题、URL),还将正文拆解为多个段落,并配备对应的语义嵌入向量。这种段落级别的向量化处理,使得数据天然适用于语义搜索与信息检索任务。此外,嵌入向量由专门针对捷克语优化的模型生成,确保了语言语义的准确捕获。数据规模适中,涵盖约53万个样本,兼顾了覆盖范围与计算效率。
使用方法
用户可通过HuggingFace的datasets库便捷加载数据,指定split='train'即可获取全部样本。加载后,每条记录包含id、url、title、chunks及embeddings字段。为实现语义搜索,可先将数据集扁平化处理,将每个段落及其嵌入向量展开为独立条目,随后利用sentence_transformers库中的semantic_search函数进行查询。示例代码展示了如何将数据索引至Elasticsearch或直接进行向量相似度检索,从而快速定位与查询语义最相关的段落及其所属文章。
背景与挑战
背景概述
在自然语言处理领域,语义搜索与文本表示学习是核心研究课题之一。捷克语作为资源相对稀缺的语言,其语义嵌入模型的构建面临数据量与标注质量的挑战。karmiq/wikipedia-embeddings-cs-seznam-mpnet数据集由研究者于近期创建,基于捷克语维基百科语料,利用Seznam公司开发的SimCSE蒸馏版MPNet模型将每篇文档的段落转化为稠密向量。该数据集包含超过53万篇文档,每个段落均配有768维的嵌入表示,旨在为捷克语的语义检索、文本聚类及相似度计算提供标准化基准。其发布填补了捷克语大规模预训练嵌入数据集的空白,对低资源语言的自然语言处理研究具有重要推动作用。
当前挑战
该数据集面临的核心挑战包括:其一,捷克语作为形态丰富的斯拉夫语言,词形变化复杂,现有MPNet模型在捕捉屈折形态与句法结构时可能产生语义偏差,影响检索精度。其二,数据集构建过程中,段落切分依赖简单的文本分块策略,未考虑语义边界,可能导致同一段落包含不连贯主题,降低嵌入表示的语义一致性。其三,嵌入生成耗时约35分钟于A100 GPU,计算成本较高,且模型依赖于Paracrawl平行语料进行蒸馏,在领域迁移时泛化能力有待验证。此外,数据仅覆盖维基百科单一来源,缺乏多领域语料,限制了在专业场景下的应用效果。
常用场景
经典使用场景
该数据集以捷克语维基百科的语料为基础,将每一页面切分为段落,并利用Seznam/simcse-dist-mpnet-paracrawl-cs-en模型为每个段落生成稠密向量表示。其最经典的使用场景在于构建语义检索系统,研究者可借助预计算的嵌入向量,通过余弦相似度或点积等度量方式,在海量段落中快速定位与查询语义最匹配的内容,从而实现对捷克语文本的高效信息检索与知识发现。
衍生相关工作
该数据集衍生了多项经典工作,包括基于Sentence-Transformers的语义搜索流程优化、嵌入向量与全文检索的混合排序策略,以及利用预计算嵌入加速大规模知识库问答的研究。此外,研究者还以此为基础探索了段落级嵌入的降维与索引技术,并开发了针对捷克语的多轮对话检索系统,这些工作共同推动了低资源语言信息检索技术的进步。
数据集最近研究
最新研究方向
该数据集聚焦于捷克语维基百科的语义化表示与高效检索,代表了多语言自然语言处理中嵌入向量预计算与语料库结构化的前沿方向。通过将每篇文章拆分为段落并利用Seznam/simcse-dist-mpnet-paracrawl-cs-en模型生成稠密嵌入,该数据集为低资源语言(如捷克语)的语义搜索、问答系统及文本生成任务提供了高质量的基准资源。其设计与Elasticsearch及sentence-transformers的兼容性,使得在大规模语料上实现实时相似性匹配成为可能,推动了非英语语种在信息检索与知识挖掘领域的实用化进程。这一工作不仅增强了捷克语数字人文研究的基础设施,也为多模态、跨语言嵌入技术的标准化探索提供了重要参考。
以上内容由遇见数据集搜集并总结生成



