数据集:

cointegrated/ru-paraphrase-NMT-Leipzig

英文

cointegrated/ru-paraphrase-NMT-Leipzig数据集卡

数据集摘要

该数据集包含100万个俄语句子及其自动生成的同义句。

该数据集是由David Dale ( @cointegrated )通过将rus-ru_web-public_2019_1M语料库从 the Leipzig collection 转为英语,再转回俄语而创建的一部分生成的同义句是无效的,需要进行过滤。

博客文章 "Перефразирование русских текстов: корпуса, модели, метрики" 详细描述了数据集及其属性。

可使用以下代码加载数据集:

import datasets
data = datasets.load_dataset(
    'cointegrated/ru-paraphrase-NMT-Leipzig', 
    data_files={"train": "train.csv","val": "val.csv","test": "test.csv"},
)

其输出应如下所示:

DatasetDict({
    train: Dataset({
        features: ['idx', 'original', 'en', 'ru', 'chrf_sim', 'labse_sim'],
        num_rows: 980000
    })
    val: Dataset({
        features: ['idx', 'original', 'en', 'ru', 'chrf_sim', 'labse_sim'],
        num_rows: 10000
    })
    test: Dataset({
        features: ['idx', 'original', 'en', 'ru', 'chrf_sim', 'labse_sim'],
        num_rows: 10000
    })
})

支持的任务和排行榜

该数据集可用于训练和验证同义句生成模型,或者(如果使用负采样)用于同义句检测。

语言

俄语(主要),英语(辅助)。

数据集结构

数据示例

数据示例如下所示:

{
  "labse_sim": 0.93502015,
  "chrf_sim": 0.4946451012684782,
  "idx": 646422,
  "ru": "О перспективах развития новых медиа-технологий в РФ расскажут на медиафоруме Енисея.",
  "original": "Перспективы развития новых медиатехнологий в Российской Федерации обсудят участники медиафорума «Енисей.",
  "en": "Prospects for the development of new media technologies in the Russian Federation will be discussed at the Yenisey Media Forum."
}

其中,original是原始句子,ru是其机器生成的同义句。

数据字段

  • idx:原始语料库中实例的ID
  • original:原始句子
  • en:original的自动翻译成英语的结果
  • ru:en自动回译为俄语的结果,即original的同义句
  • chrf_sim:original和ru之间的相似度 ChrF++
  • labse_sim:original和ru的嵌入的余弦相似度 LaBSE
  • forward_entailment:original蕴含ru的预测概率
  • backward_entailment:ru蕴含original的预测概率
  • p_good:ru和original具有相同意义的预测概率

数据拆分

训练集 - 980K,验证集 - 10K,测试集 - 10K。分割是随机生成的。

数据集创建

策划原因

尽管存在其他俄语同义句语料库,但它们存在一些主要缺点:

当前的语料库是具有双重目标的生成的:同义句应在语义上尽可能接近原始句子,同时在词汇上与其不同。使用受限词汇的反向翻译似乎经常可以实现这一目标。

来源数据

初始数据收集和规范化

源自 the Leipzig collection 的rus-ru_web-public_2019_1M语料库。

其创建过程详见 in this paper

D. Goldhahn,T. Eckart和U. Quasthoff:Building Large Monolingual Dictionaries at the Leipzig Corpora Collection:From 100 to 200 Languages.In:Proceedings of the 8th International Language Resources and Evaluation (LREC'12), 2012 .

自动同义句生成

使用将原始句子翻译为英语,然后再翻译回俄语的方式进行了同义句生成。使用了模型 facebook/wmt19-ru-en facebook/wmt19-en-ru 进行了翻译。为确保反向翻译的文本与原始文本不完全相同,最终解码器禁止使用原始文本的标记n-gram。下面的代码实现了同义句生成函数。

import torch
from transformers import FSMTModel, FSMTTokenizer, FSMTForConditionalGeneration
tokenizer = FSMTTokenizer.from_pretrained("facebook/wmt19-en-ru")
model = FSMTForConditionalGeneration.from_pretrained("facebook/wmt19-en-ru")
inverse_tokenizer = FSMTTokenizer.from_pretrained("facebook/wmt19-ru-en")
inverse_model = FSMTForConditionalGeneration.from_pretrained("facebook/wmt19-ru-en")
model.cuda();
inverse_model.cuda();

def paraphrase(text, gram=4, num_beams=5, **kwargs):
    """ Generate a paraphrase using back translation. 
    Parameter `gram` denotes size of token n-grams of the original sentence that cannot appear in the paraphrase.
    """
    input_ids = inverse_tokenizer.encode(text, return_tensors="pt")
    with torch.no_grad():
        outputs = inverse_model.generate(input_ids.to(inverse_model.device), num_beams=num_beams, **kwargs)
    other_lang = inverse_tokenizer.decode(outputs[0], skip_special_tokens=True)
    # print(other_lang)
    input_ids = input_ids[0, :-1].tolist()
    bad_word_ids = [input_ids[i:(i+gram)] for i in range(len(input_ids)-gram)]
    input_ids = tokenizer.encode(other_lang, return_tensors="pt")
    with torch.no_grad():
        outputs = model.generate(input_ids.to(model.device), num_beams=num_beams, bad_words_ids=bad_word_ids, **kwargs)
    decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return decoded

通过以gram = 3,num_beams = 5,repetition_penalty = 3.14,no_repeat_ngram_size = 6为参数对原始句子运行以上同义句生成函数,创建了该语料库。

注释

注释过程

数据集通过多个自动度量进行了注释:

  • original和ru之间的 ChrF++
  • 这些句子的 LaBSE 嵌入的余弦相似度
  • 通过 rubert-base-cased-nli-twoway 模型预测出的前向和后向包含关系概率
  • p_good,将上述四个度量聚合成一个数字的指标。它是通过对从训练集中随机选择的100个手动标注的句子对进行逻辑回归训练获得的。
注释者是谁?

人工注释仅用于用于训练p_good模型的小型子集。由数据集的作者 @cointegrated 进行了注释。

个人和敏感信息

未知该数据集是否包含任何个人或敏感信息。原始数据收集的来源和过程在 https://wortschatz.uni-leipzig.de/en/download 中描述。

使用数据时的注意事项

数据的社会影响

该数据集可能促使同义句系统的创建,这些系统既可用于“好”的目的(例如协助作者或增加文本数据集),也可用于“坏”的目的(例如掩盖剽窃)。作者对数据集的任何用途概不负责。

偏见讨论

该数据集可能继承了 the underlying Leipzig web corpus 或生成它的神经机器翻译模型( 1 , 2 )的某些偏见。

其他已知限制

数据集中大多数同义句是有效的(根据粗略估计,至少80%)。然而,在一些句子对中存在错误:

  • 实体名通常以不同的方式拼写(例如“Джейкоб” -> “Яков”)或甚至被其他实体替换(例如“Оймякон” -> “Оймянск”或“Верхоянск” -> “Тольятти”)。
  • 有时词或短语的含义发生显著变化,例如“полустанок” -> “полумашина”,或“были по колено в грязи” -> “лежали на коленях в иле”。
  • 有时句法以会改变含义的方式进行了更改,例如“Интеллектуальное преимущество Вавилова и его соратников над демагогами из рядов сторонников новой агробиологии разительно очевидно。” -> “Интеллектуал Вавилов и его приспешники в новой аграрной биологии явно превзошли демогогов。”。
  • 俄语中具有但英语中不存在的语法属性,例如性别,通常会丢失,例如“Я не хотела тебя пугать” -> “Я не хотел пугать вас”。

labse_sim字段反映了句子之间的语义相似度,可以用来过滤掉一些质量较差的同义句。

附加信息

数据集策划者

该数据集由 David Dale (即 @cointegrated )创建。

许可信息

该语料库以及原始的Leipzig语料库都受到 CC BY 许可。

引用信息

可引用 This blog post

@misc{dale_paraphrasing_2021, 
   author = "Dale, David",
   title  = "Перефразирование русских текстов: корпуса, модели, метрики", 
   editor = "habr.com", 
   url    = "https://habr.com/ru/post/564916/", 
   month  = {June},
   year   = {2021},   
   note = {[Online; posted 28-June-2021]},
}

贡献

感谢 @avidale 添加了该数据集。