数据集:
cointegrated/ru-paraphrase-NMT-Leipzig
任务:
文本生成语言:
ru计算机处理:
translation大小:
100K<n<1M语言创建人:
machine-generated批注创建人:
no-annotation源数据集:
extended|other许可:
cc-by-4.0该数据集包含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 添加了该数据集。