数据集:
cointegrated/ru-paraphrase-NMT-Leipzig
任务:
语言:
计算机处理:
translation大小:
100K<n<1M语言创建人:
machine-generated批注创建人:
no-annotation源数据集:
extended|other许可:
该数据集包含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是其机器生成的同义句。
训练集 - 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为参数对原始句子运行以上同义句生成函数,创建了该语料库。
数据集通过多个自动度量进行了注释:
人工注释仅用于用于训练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 添加了该数据集。