五、文本特征处理与文本数据增强

本文介绍了文本特征处理在自然语言处理中的重要性,包括n-gram特征的构建、文本长度规范化以及回译数据增强方法。通过这些技术,模型训练得以优化,增强了数据的多样性。此外,还提到了使用Google翻译接口和ZhiPuiAIAPI进行数据增强的实践示例。
摘要由CSDN通过智能技术生成

文本特征的作用:

  • 文本特征处理可以为语料添加具有普适性的文本特征,如:n-gram特征
  • 文本特征处理对加入特征后的语料进行长度规范处理,保持语料长度的一致性

这些特征处理工作能够有效的将重要的文本特征加入到模型训练中,增强模型评估指标。

常见的文本特征处理方法,有:

  • 添加n-gram特征
  • 文本长度规范

文本数据增强的方法:

  • 回译数据增强法

一、n-gram特征

n-gram特征是指,给定一段文本序列,其中n个词或字的相邻共线特征,即n-gram特征,常用的n-gram特征是bi-gramtri-gram,分别对应n为2和3.

n-gram特征的详细理解,可以阅读《N-gram概率语言模型,你知道多少?》这篇博客

# 一般n-gram特征中的n取2或3,这里取2
n_gram_range = 2


def create_ngram_set(input_list):
    """从列表input_list中获取所有的n-gram特征

    Args:
        input_list (list): 输入的数值列表,可以看作是词汇映射后的列表

    Returns:
        set: n-gram特征组成的集合
    """
    #
    ngram_set = set(zip(*[input_list[i:] for i in range(n_gram_range)]))

    return ngram_set


input_list = [1, 4, 9, 4, 1, 4]
print(create_ngram_set(input_list))

输出:{(4, 9), (4, 1), (1, 4), (9, 4)}

二、文本长度规范

文本长度规范的作用:一般模型的输入需要相同尺寸大小的矩阵,因此,在进入模型前,需要对每条文本数值映射后的长度进行规范,此时,将根据句子长度分布,分析出覆盖绝大多数文本的合理长度,对超长文本进行截断,对不足文本进行补齐(一般使用数字0),这个过程就是文本长度规范。

from keras.preprocessing import sequence

# cutlen根据数据分析中句子的长度分布,覆盖90%左右语料的最短长度
def padding(sen):
    return sequence.pad_sequences(sen, cutlen)

cutlen = 10  # 假定cutlen为10,即所有的数据语料都规范到10的长度

data = [[1, 23, 4, 3, 5, 2, 3, 1, 4, 56, 34, 12, 434, 21, 12, 45, 45],
        [1, 1, 2, 3, 4]]
print(padding(data))

输出:

[[1, 4, 56, 34, 12, 434, 21, 12, 45, 45],
[0, 0, 0, 0, 0, 1, 1, 2, 3, 4]]

文本在输入模型的时候,不可能有长有短,必须要统一长度,这样才更容易进行统一的处理,这就是文本长度规范的意义。

三、回译数据增强法

回译数据增强法目前是文本数据增强方面效果较好的增强方法,一般基于Google翻译接口,将文本数据翻译成另一种语言(一般选择小语种),之后再翻译回原语言,即可认为得到与原语料同标签的新语料,新语料加入到原数据集中即可认为是对原数据集数据增强。

回译数据增强的优劣势:

  • 优势:操作简单,获得新语料质量高
  • 劣势:在短文本回译过程中,新语料与原语料可能存在很高的重复率,并不能有效增大样本的特征空间

高重复率的解决办法:

  • 进行连续的多语言翻译,如:中文-》韩文-》日语-》英语-》中文,根据经验,最多采用3次连续翻译,更多的翻译次数将产生效率低下,语意失真等问题

实现代码如下:

from google_trans_new import google_translator

# 假设取各两条已经存在的正样本和负样本
# 基于这四条样本产生同标签的四条新样本
pos_sample1 = "酒店设施非常不错"
pos_sample2 = "这家价格很便宜"
neg_sample1 = "拖鞋都发霉了,太差了"
neg_sample2 = "电视不好用,没有看到足球"

# 实例化对象
translator = google_translator(timeout=100)
# 进行第一次批量翻译,翻译目标为韩语
translations = translator.translate(
    [pos_sample1, pos_sample2, neg_sample1, neg_sample2], lang_tgt='ko', lang_src='zh-cn')

# 获得翻译后的结果
ko_res = list(map(lambda x: x.text, translations))
# 打印结果
print(f"中间翻译结果为:{ko_res}")

# 最后再翻译回中文,完成回译全部流程
translations = translator.translate(ko_res, dest='zh-cn')
cn_res = list(map(lambda x: x.text, translations))
print(f"回译增强的数据:{cn_res}")

代码没跑通,没有输出。知道这个思想行了。能翻译的库有很多,现在还可以使用一些大语言模型的API。可以现在智谱平台AI申请一个账号,会送18元免费额度,调用代码如下:

import zhipuai

# 假设取各两条已经存在的正样本和负样本
# 基于这四条样本产生同标签的四条新样本
pos_sample1 = "酒店设施非常不错。"
pos_sample2 = "这家价格很便宜。"
neg_sample1 = "拖鞋都发霉了,太差了。"
neg_sample2 = "电视不好用,没有看到足球。"

# your api key
zhipuai.api_key = "自己申请的Key"

# 同步调用
def invoke_example(prompt):
    # 调用模型,返回响应
    response = zhipuai.model_api.invoke(
        # 模型名称
        model="chatglm_turbo",
        # 输入内容,此处为一个列表,包含一个字典,字典中role为user,content为人工智能
        prompt=prompt,  # [{"role": "user", "content": "人工智能"}],
        # 概率阈值
        top_p=0.2,
        # 温度参数
        temperature=0.2,
    )
    # 打印响应
    return response['data']['choices'][0]['content']

if __name__ == "__main__":
    while True:
        lang = str(input('请输入翻译的顺序,如:韩语,日语,汉语:'))
        sentence = pos_sample1+pos_sample2+neg_sample1+neg_sample2
        sentence = str([pos_sample1, pos_sample2, neg_sample1, neg_sample2])
        for l in lang.split(','):
            content = '请将下面4个句子翻译为' + l + '只输出翻译后的语句:' + sentence
            prompt = [{"role": "user", "content": str(content)}]
            sentence = invoke_example(prompt)
            print(sentence)

输出如下:

请输入翻译的顺序,如:韩语,日语,汉语:

日语,汉语
" 1. ホテルの設備はとても良くて、満足です。\n2. このホテルの価格はとても安いです。\n3. ブーツは発霉しており、悪いです。\n4. テレビは使い心地が悪く、サッカーを見ることができません。"
" 1. 酒店设施非常好,我很满意。\n2. 这个酒店的价格非常便宜。\n3. 靴子发霉了,很糟糕。\n4. 电视使用起来不舒服,无法看足球比赛。" 

四、附录

(一)jieba词性对照表

// jieba词性对照表
- a 形容词  
    - ad 副形词  
    - ag 形容词性语素  
    - an 名形词  
- b 区别词  
- c 连词  
- d 副词  
    - df   
    - dg 副语素  
- e 叹词  
- f 方位词  
- g 语素  
- h 前接成分  
- i 成语 
- j 简称略称  
- k 后接成分  
- l 习用语  
- m 数词  
    - mg 
    - mq 数量词  
- n 名词  
    - ng 名词性语素  
    - nr 人名  
    - nrfg    
    - nrt  
    - ns 地名  
    - nt 机构团体名  
    - nz 其他专名  
- o 拟声词  
- p 介词  
- q 量词  
- r 代词  
    - rg 代词性语素  
    - rr 人称代词  
    - rz 指示代词  
- s 处所词  
- t 时间词  
    - tg 时语素  
- u 助词  
    - ud 结构助词 得
    - ug 时态助词
    - uj 结构助词 的
    - ul 时态助词 了
    - uv 结构助词 地
    - uz 时态助词 着
- v 动词  
    - vd 副动词
    - vg 动词性语素  
    - vi 不及物动词  
    - vn 名动词  
    - vq 
- x 非语素词  
- y 语气词  
- z 状态词  
    - zg 

(二)hanlp词性对照表

a    形容词
ad    副形词
ag    形容词性语素
al    形容词性惯用语
an    名形词
b    区别词
begin  仅用于始##始
bg    区别语素
bl    区别词性惯用语
c    连词
cc    并列连词
d    副词
dg    辄,俱,复之类的副词
dl    连语
e    叹词
end    仅用于终##终
f    方位词
g    学术词汇
gb    生物相关词汇
gbc    生物类别
gc    化学相关词汇
gg    地理地质相关词汇
gi    计算机相关词汇
gm    数学相关词汇
gp    物理相关词汇
h    前缀
i    成语
j    简称略语
k    后缀
l    习用语
m    数词
mg    数语素
Mg    甲乙丙丁之类的数词
mq    数量词
n    名词
nb    生物名
nba    动物名
nbc    动物纲目
nbp    植物名
nf    食品,比如“薯片”
ng    名词性语素
nh    医药疾病等健康相关名词
nhd    疾病
nhm    药品
ni    机构相关(不是独立机构名)
nic    下属机构
nis    机构后缀
nit    教育相关机构
nl    名词性惯用语
nm    物品名
nmc    化学品名
nn    工作相关名词
nnd    职业
nnt    职务职称
nr    人名
nr1    复姓
nr2    蒙古姓名
nrf    音译人名
nrj    日语人名
ns    地名
nsf    音译地名
nt    机构团体名
ntc    公司名
ntcb    银行
ntcf    工厂
ntch    酒店宾馆
nth    医院
nto    政府机构
nts    中小学
ntu    大学
nx    字母专名
nz    其他专名
o    拟声词
p    介词
pba    介词“把”
pbei    介词“被”
q    量词
qg    量词语素
qt    时量词
qv    动量词
r    代词
rg    代词性语素
Rg    古汉语代词性语素
rr    人称代词
ry    疑问代词
rys    处所疑问代词
ryt    时间疑问代词
ryv    谓词性疑问代词
rz    指示代词
rzs    处所指示代词
rzt    时间指示代词
rzv    谓词性指示代词
s    处所词
t    时间词
tg    时间词性语素
u    助词
ud    助词
ude1    的 底
ude2    地
ude3    得
udeng    等 等等 云云
udh    的话
ug    过
uguo    过
uj    助词
ul    连词
ule    了 喽
ulian    连 (“连小学生都会”)
uls    来讲 来说 而言 说来
usuo    所
uv    连词
uyy    一样 一般 似的 般
uz    着
uzhe    着
uzhi    之
v    动词
vd    副动词
vf    趋向动词
vg    动词性语素
vi    不及物动词(内动词)
vl    动词性惯用语
vn    名动词
vshi    动词“是”
vx    形式动词
vyou    动词“有”
w    标点符号
wb    百分号千分号,全角:% ‰ 半角:%
wd    逗号,全角:, 半角:,
wf    分号,全角:; 半角: ;
wh    单位符号,全角:¥ $ £ ° ℃ 半角:$
wj    句号,全角:。
wky    右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >
wkz    左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
wm    冒号,全角:: 半角: :
wn    顿号,全角:、
wp    破折号,全角:—— -- ——- 半角:— —-
ws    省略号,全角:…… …
wt    叹号,全角:!
ww    问号,全角:?
wyy    右引号,全角:” ’ 』
wyz    左引号,全角:“ ‘ 『
x    字符串
xu    网址URL
xx    非语素字
y    语气词(delete yg)
yg    语气语素
z    状态词
zg    状态词  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

并不傻的狍子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值