数据集:

deutsche-telekom/ger-backtrans-paraphrase

英文

德语返回选词复述数据集

这是一个包含超过2100万个德语选词复述的数据集。这些是具有相同含义但用不同词语表达的文本对。选词复述的来源是不同的德语/英文平行文本语料库。英文文本被机器翻译回德语以获得选词复述。

例如,可以使用 SentenceTransformers MultipleNegativesRankingLoss 来训练语义文本嵌入。

维护者

该数据集是由 Philip May 开源,并由 One Conversation 团队的 Deutsche Telekom AG 维护。

我们的预处理

除了反向翻译之外,我们还添加了更多列(详见下文)。我们进行了以下预处理和筛选:

  • 我们删除了一对文本中一个文本长度超过499个字符的情况。
  • GlobalVoices v2018q4 文本中,我们去除了“·全球之声”后缀。

你的后处理

你可能不想直接使用数据集,而是进一步筛选。数据集的附加列就是为此而设的。对我们来说,删除以下句子对非常有用:

  • min_char_len小于15
  • jaccard_similarity大于0.3
  • de_token_count大于30
  • en_de_token_count大于30
  • cos_sim小于0.85

列描述

  • uuid:使用Python uuid.uuid4()计算得到的uuid
  • en:来自语料库的原始英文文本
  • de:来自语料库的原始德语文本
  • en_de:从英语翻译回来的德语文本(从en中翻译得到)
  • corpus:语料库的名称
  • min_char_len:最短文本的字符数
  • jaccard_similarity:两个句子的Jaccard相似度-详见下文
  • de_token_count:de文本的标记数,使用 deepset/gbert-large 进行分词
  • en_de_token_count:de文本的标记数,使用 deepset/gbert-large 进行分词
  • cos_sim:使用 sentence-transformers/paraphrase-multilingual-mpnet-base-v2 测量的两个句子的余弦相似度

文本中的异常

明显的是, OpenSubtitles 文本有奇怪的破折号前缀。具体情况如下:

- Hast du was draufgetan?

你可以应用以下函数来去除它们:

import re

def clean_text(text):
    text = re.sub("^[-\s]*", "", text)
    text = re.sub("[-\s]*$", "", text)
    return text

df["de"] = df["de"].apply(clean_text)
df["en_de"] = df["en_de"].apply(clean_text)

使用的平行文本语料库

Corpus name & link Number of paraphrases
12320321 18,764,810
12321321 1,569,231
12322321 313,105
12323321 289,374
12324321 285,722
12325321 70,547
sum . 21,292,789

反向翻译

我们通过 Fairseq 的帮助从英语翻译回德语。我们使用transformer.wmt19.en-de模型来实现这个目的:

en2de = torch.hub.load(
    "pytorch/fairseq",
    "transformer.wmt19.en-de",
    checkpoint_file="model1.pt:model2.pt:model3.pt:model4.pt",
    tokenizer="moses",
    bpe="fastbpe",
)

如何计算Jaccard相似度

为了计算Jaccard相似度,我们使用 SoMaJo tokenizer 将文本拆分为标记。然后,我们使用lower()对标记进行处理,使得大小写字母不再有差别。下面是一段代码片段,详细说明了这个过程:

from somajo import SoMaJo

LANGUAGE = "de_CMC"
somajo_tokenizer = SoMaJo(LANGUAGE)

def get_token_set(text, somajo_tokenizer):
    sentences = somajo_tokenizer.tokenize_text([text])
    tokens = [t.text.lower() for sentence in sentences for t in sentence]
    token_set = set(tokens)
    return token_set

def jaccard_similarity(text1, text2, somajo_tokenizer):
    token_set1 = get_token_set(text1, somajo_tokenizer=somajo_tokenizer)
    token_set2 = get_token_set(text2, somajo_tokenizer=somajo_tokenizer)
    intersection = token_set1.intersection(token_set2)
    union = token_set1.union(token_set2)
    jaccard_similarity = float(len(intersection)) / len(union)
    return jaccard_similarity

加载此数据集

使用Hugging Face Datasets库

# pip install datasets
from datasets import load_dataset

dataset = load_dataset("deutsche-telekom/ger-backtrans-paraphrase")
train_dataset = dataset["train"]

使用Pandas库

如果你想下载csv文件,然后使用Pandas加载它,可以像这样操作:

df = pd.read_csv("train.csv")

引用、致谢和许可

OpenSubtitles

WikiMatrix v1

Tatoeba v2022-03-03

TED2020 v1

News-Commentary v16

  • citation: J. Tiedemann, 2012, Parallel Data, Tools and Interfaces in OPUS . In Proceedings of the 8th International Conference on Language Resources and Evaluation (LREC 2012)
  • license:对于这个数据集,OPUS没有提供特殊许可证

GlobalVoices v2018q4

  • citation: J. Tiedemann, 2012, Parallel Data, Tools and Interfaces in OPUS . In Proceedings of the 8th International Conference on Language Resources and Evaluation (LREC 2012)
  • license:对于这个数据集,OPUS没有提供特殊许可证

引用

@misc{ger-backtrans-paraphrase,
  title={Deutsche-Telekom/ger-backtrans-paraphrase - dataset at Hugging Face},
  url={https://huggingface.co/datasets/deutsche-telekom/ger-backtrans-paraphrase},
  year={2022},
  author={May, Philip}
}

许可

版权所有 2022 Philip May , Deutsche Telekom AG

本作品在 CC-BY-SA 4.0 下获得许可。