我是靠谱客的博主 沉默悟空,最近开发中收集的这篇文章主要介绍nlp数据增强-back translation,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

回译

在网上学习nlp数据增强方法的时候看到了许多有趣的方法,看了看传统的中文EDA已经写的很完善了。自己就写了back translation方法方便自己用。

这边采用的翻译api是百度的,当然也可以用其他的api比如讯飞之类的,但里面架构得重新写。

首先写百度api对应接口,其实改一下官方给的demo就可以用
填入自己的appid和appkey
lang_list里是需要翻译的语种,我这里就放了5种,可根据自己需要修改

import requests
import random
from hashlib import md5

# Set your own appid/appkey.
appid = 'XXX'
appkey = 'XXX'


def get_trans(query, from_lang='en', to_lang='zh'):
    # For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21`
    endpoint = 'http://api.fanyi.baidu.com'
    path = '/api/trans/vip/translate'
    url = endpoint + path

    def make_md5(s, encoding='utf-8'):
        return md5(s.encode(encoding)).hexdigest()

    salt = random.randint(32768, 65536)
    sign = make_md5(appid + query + str(salt) + appkey)

    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}

    r = requests.post(url, params=payload, headers=headers)
    result = r.json()

    # print(result)
    return result['trans_result'][0]['dst']


def all_trans(query):
    res_end = []
    res_begin = []
    # For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21`
    lang_list = ['en', 'jp', 'fra', 'kor', 'ru']
    for temp in lang_list:
        res_begin.append(get_trans(query, 'zh', temp))

    for temp in zip(res_begin, lang_list):
        res_end.append(get_trans(temp[0], temp[1], 'zh'))
    res_end.append(query)
    return res_end


if __name__ == "__main__":
    res = all_trans('童话说雨后终会出现彩虹,却不曾说过它也会转瞬成空')

下面写一个调用程序的文件

import utils
import argparse

ap = argparse.ArgumentParser()
ap.add_argument("--input", required=True, type=str, help="原始数据的输入文件目录")
ap.add_argument("--output", required=False, type=str, help="增强数据后的输出文件目录")
args = ap.parse_args()


def back_trans(train_orig, output_file):
    writer = open(output_file, 'w', encoding='utf-8')
    lines = open(train_orig, 'r', encoding='utf-8').readlines()

    print("正在使用回译生成增强语句...")
    for i, line in enumerate(lines):
        parts = line[:-1].split('t')  # 使用[:-1]是把n去掉了
        # print(parts)
        label = parts[0]
        sentence = parts[1]
        aug_sentences = utils.all_trans(sentence)
        for aug_sentence in aug_sentences:
            writer.write(label + "t" + aug_sentence + 'n')

    writer.close()
    print("已生成增强语句!")



if __name__ == "__main__":
    back_trans(args.input, args.output)

使用时,在终端调用命令,如

python code/augment.py --input train.txt --output train_aug.txt

输入语料也有格式要求,如

0	今天天气不错哦。

1	今天天气不行啊!不能出去玩了。

0	又是阳光明媚的一天!

即,标签+一个制表符t+内容

即可运行,效果如下图所示
在这里插入图片描述
在这里插入图片描述
完整代码放github上了
代码地址

最后

以上就是沉默悟空为你收集整理的nlp数据增强-back translation的全部内容,希望文章能够帮你解决nlp数据增强-back translation所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部