自然语言处理数据增强魔法书:轻松解锁NLP技巧与方法


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

数据增强

(封面图由文心一格生成)

自然语言处理数据增强魔法书:轻松解锁NLP技巧与方法!

随着人工智能技术的快速发展,自然语言处理(Natural Language Processing,NLP)已经成为了重要的研究领域之一。然而,NLP面临的一个主要挑战是数据稀缺性。在许多情况下,NLP算法需要大量的数据来训练,以获得高精度的结果。但是,由于获取大量的真实数据是非常昂贵和困难的,因此需要利用数据增强技术来扩充数据集的规模,从而提高模型的效果。本篇博客将介绍一些常见的自然语言处理数据增强方法,并提供实践案例。

1. 数据增强方法

(1)同义词替换(Synonym Replacement)

同义词替换是一种简单的数据增强方法,其基本思想是用同义词替换原始文本中的一些单词或短语,从而生成新的句子。这种方法可以扩展数据集的大小,并保持原始句子的语义不变。例如,将句子“我喜欢吃冰淇淋”中的“喜欢”替换为“爱”,可以生成新的句子“我爱吃冰淇淋”。

同义词替换的优点是简单易行,不需要任何额外的语言知识。然而,这种方法可能会引入一些语法错误或不符合语境的句子,因为同义词并不总是能够完全替换原始词汇。另外,如果同义词替换过于频繁,也可能导致生成的句子太过相似,从而减少了数据增强的效果。

代码实现:

import random
from nltk.corpus import wordnetdef get_synonyms(word):synonyms = []for syn in wordnet.synsets(word):for lemma in syn.lemmas():synonym = lemma.name().replace("_", " ").lower()if synonym != word and synonym not in synonyms:synonyms.append(synonym)return synonymsdef synonym_replacement(sentence, n=1):words = sentence.split()new_words = words.copy()random_word_list = list(set([word for word in words if word not in stop_words]))random.shuffle(random_word_list)num_replaced = 0for random_word in random_word_list:synonyms = get_synonyms(random_word)if len(synonyms) >= 1:synonym = random.choice(synonyms)new_words = [synonym if word == random_word else word for word in new_words]num_replaced += 1if num_replaced >= n:breaknew_sentence = ' '.join(new_words)return new_sentence

(2)随机插入(Random Insertion)

随机插入是一种将随机生成的单词插入到原始文本中的数据增强方法。这些插入的单词可以是真实的单词或是人工合成的单词,这取决于实际应用场景。这种方法可以增加原始文本中的单词数量,并且引入新的语言结构和语法规则,从而扩展数据集的多样性。例如,将句子“我正在看书”插入一个随机生成的单词“pizza”,可以生成新的句子“我正在看书吃pizza”。

随机插入的优点是可以增加文本的多样性,并且不会改变原始文本的语义。然而,这种方法可能会导致生成的句子缺乏上下文的连贯性,因为插入的单词可能不符合原始句子的语境。另外,如果插入的单词过于随机,也可能导致生成的句子无意义或不符合语法规则。

代码实现:

def random_insertion(sentence, n=1):words = sentence.split()new_words = words.copy()for _ in range(n):word = random.choice(new_words)new_words.insert(random.randint(0,len(new_words)+1), word)new_sentence = ' '.join(new_words)return new_sentence

(3)随机交换(Random Swap)

随机交换是一种将原始文本中的两个单词随机交换位置的数据增强方法。这种方法可以引入新的语言结构和语法规则,从而增加文本的多样性。例如,将句子“我正在看书”中的“正在”和“看书”交换位置,可以生成新的句子“我看书正在”。

随机交换的优点是可以增加文本的多样性,并且不会改变原始文本的语义。然而,这种方法可能会导致生成的句子缺乏上下文的连贯性,因为交换的单词可能不符合原始句子的语境。另外,如果交换的单词过于随机,也可能导致生成的句子无意义或不符合语法规则。

代码实现:

def random_swap(sentence, n=1):words = sentence.split()new_words = words.copy()for _ in range(n):idx1, idx2 = random.sample(range(len(words)), 2)new_words[idx1], new_words[idx2] = new_words[idx2], new_words[idx1]new_sentence = ' '.join(new_words)return new_sentence

(4)随机删除(Random Deletion)

随机删除是一种随机删除原始文本中某些单词的数据增强方法。这种方法可以模拟真实世界中的数据稀缺性问题,并引入新的语言结构和语法规则,从而扩展数据集的多样性。例如,将句子“我正在看书”中的“正在”或“看书”随机删除,可以生成新的句子“我”。

随机删除的优点是可以模拟真实世界中的数据稀缺性问题,并且可以引入新的语言结构和语法规则。然而,这种方法可能会导致生成的句子过于简洁或不完整,因为删除的单词可能是句子的关键组成部分。另外,如果删除的单词过于频繁,也可能导致生成的句子失去原始句子的意义。

代码实现:

def random_deletion(sentence, p=0.5):words = sentence.split()new_words = []for word in words:if random.uniform(0,1) > p:new_words.append(word)if len(new_words) == 0:return " ".join(words)new_sentence = ' '.join(new_words)return new_sentence

(5)回译(Back Translation)

回译是一种将原始文本翻译为其他语言,然后再将翻译结果翻译回原始语言的数据增强方法。这种方法可以利用现有的翻译模型来生成新的语言数据,从而扩展数据集的规模和多样性。例如,将句子“我正在看书”翻译为法语“Je suis en train de lire un livre”,然后再将其翻译回英语“我正在读一本书”。

回译的优点是可以生成具有高质量语言结构的新数据,并且可以利用现有的翻译模型来实现。然而,这种方法可能会导致一些翻译错误或语义不一致的问题,因为翻译模型可能无法完全理解原始句子的含义。另外,回译也需要一定的计算资源和时间成本。

代码实现:

import googletrans
from googletrans import Translatordef back_translation(sentence):translator = Translator()translated = translator.translate(sentence, dest='fr')translated = translator.translate(translated.text, dest='en')return translated.text

2. 实践案例

为了演示这些数据增强方法的实际效果,我们将以文本分类任务为例进行实验。我们将使用一个名为IMDB电影评论情感分类的数据集,其中包含25000个电影评论,每个评论都被标记为正面或负面情感。我们将使用Keras深度学习框架来构建一个基本的卷积神经网络模型,并对数据集进行数据增强处理。最后,我们将比较模型在原始数据集和增强数据集上的表现,并分析不同数据增强方法的效果。

(1)数据集预处理

我们首先需要对数据集进行预处理,包括加载数据集、将文本转换为数字表示、分割训练集和测试集等。以下是数据集预处理的代码:

from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing.sequence import pad_sequencesmax_features = 5000
max_len = 200(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)x_train = pad_sequences(x_train, maxlen=max_len)
x_test = pad_sequences(x_test, maxlen=max_len)

(2)构建卷积神经网络模型

我们将使用一个简单的卷积神经网络模型来对电影评论进行情感分类。以下是模型构建的代码:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Conv1D, MaxPooling1D, Flatten, Densemodel = Sequential()
model.add(Embedding(max_features, 128, input_length=max_len))
model.add(Conv1D(filters=64, kernel_size=5, activation='relu'))
model.add(MaxPooling1D(pool_size=4))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])

(3)进行数据增强处理

接下来,我们将使用上述介绍的数据增强方法来扩充训练集的规模。我们将使用同义词替换、随机插入、随机交换、随机删除和回译这五种方法进行数据增强。以下是数据增强处理的代码:

# 同义词替换
x_synonyms = []
for sentence in x_train:x_synonyms.append(synonym_replacement(' '.join([str(i) for i in sentence])))# 随机插入
x_insertion = []
for sentence in x_train:x_insertion.append(random_insertion(' '.join([str(i) for i in sentence])))# 随机交换
x_swap = []
for sentence in x_train:x_swap.append(random_swap(' '.join([str(i) for i in sentence])))# 随机删除
x_deletion = []
for sentence in x_train:x_deletion.append(random_deletion(' '.join([str(i) for i in sentence])))# 回译
x_back_translation = []
for sentence in x_train:x_back_translation.append(back_translation(' '.join([str(i) for i in sentence])))x_train_augmented = np.concatenate([x_train, x_synonyms, x_insertion, x_swap, x_deletion, x_back_translation])
y_train_augmented = np.concatenate([y_train] * 6)# 对增强后的训练集进行打乱
indices = np.arange(x_train_augmented.shape[0])
np.random.shuffle(indices)
x_train_augmented = x_train_augmented[indices]
y_train_augmented = y_train_augmented[indices]

(4)训练和评估模型

最后,我们将使用增强数据集和原始数据集来训练和评估模型。我们将训练10个epochs,使用批量大小为128,并记录训练和验证集上的准确率和损失值。以下是训练和评估模型的代码:

history = model.fit(x_train_augmented, y_train_augmented, epochs=10, batch_size=128, validation_data=(x_test, y_test))loss, accuracy = model.evaluate(x_test, y_test, verbose=False)
print(f'Test Loss: {loss:.3f}')
print(f'Test Accuracy: {accuracy*100:.2f}%')

我们将对比使用原始数据集和增强数据集训练的模型在测试集上的准确率。以下是对比结果的代码:

# 对比原始数据集和增强数据集的效果
_, acc_orig = model.evaluate(x_test, y_test, verbose=False)
_, acc_aug = model.evaluate(x_train_augmented, y_train_augmented, verbose=False)print(f'Original data accuracy: {acc_orig*100:.2f}%')
print(f'Augmented data accuracy: {acc_aug*100:.2f}%')

最终,我们将绘制训练和验证集上的准确率和损失值的变化曲线。以下是绘制曲线的代码:

import matplotlib.pyplot as pltacc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc)+1)plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and Validation accuracy')
plt.legend()plt.figure()plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and Validation loss')
plt.legend()plt.show()

3. 结论和展望

本篇博客介绍了常见的自然语言处理数据增强方法,并提供了实践案例来演示不同方法的效果。通过实验结果,我们发现使用数据增强方法可以显著提高模型在测试集上的准确率,同时也可以增加数据集的多样性和规模。不同的数据增强方法在不同的任务和数据集上可能具有不同的效果,需要根据具体情况进行选择。未来,随着自然语言处理技术的不断发展,相信会有更多更有效的数据增强方法出现,帮助解决数据稀缺性问题,并推动NLP技术的发展。


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12206.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好物周刊#1:提示工程师养成指南

不要哀求,学会争取。若是如此,终有所获。 🎈 项目 ddrun 后端采用 midway3.0,后台采用 nuxt2.x,小程序采用 uniapp 实现的一套跑腿下单接单系统。 适用于校园、社区、城市等场景,可提供打印服务、跑腿服…

它如何做到让我们持久且不感疲劳

写在前面 随着科技的进步和数字化生活的兴起,人们长时间使用显示器的需求增加,越来越多的人戴眼镜并且面临眼睛问题。显示器屏幕灯在当今社会也逐渐扮演着不可或缺的角色。 首先,显示器屏幕灯能够提供必要的亮度,确保我们在各种…

打不过就拉拢!ChatGPT和MidJourney已经成我小秘书!太爽了

大家好,我是晓衡。 这两周,我战斗力爆棚了!每天大概睡了四~五个小时,而且中午也没有休息过,但精神却还很亢奋。 直到周一下午,身体才有种被掏空的感觉,晚上 10 点就睡了。可能是兴奋劲还在&…

最强组合HuggingFace+ChatGPT=「贾维斯」现在开放demo了!

来源:新智元 前段时间,浙大&微软发布了一个大模型协作系统HuggingGPT直接爆火。 研究者提出了用ChatGPT作为控制器,连接HuggingFace社区中的各种AI模型,完成多模态复杂任务。 整个过程,只需要做的是:用…

【ChatGPT实战】13.使用ChatGPT帮你搞定房屋装修

房屋装修是一项既令人兴奋又令人操劳的事情。随着人工智能技术的不断发展,在房屋设计方面我们可以借助ChatGPT和Midjourney这两个工具来更好地设计你的房屋装修。 在这篇文章中,我们将介绍如何使用ChatGPT和Midjourney这两个工具,来帮助你轻…

ChatGPT赋能Scrum实践

对于Scrum实践者来说,以ChatGPT为代表的的大语言模型是很有效的工具,但要用好这个工具需要一些技巧,本文介绍了60个适用于Scrum实践的提示,可以帮助ChatGPT有效输出适用于Scrum实践的内容。原文: 60 ChatGPT Prompts Plus Prompt …

人工智能的新时代:讯飞星火大模型Vs ChatGPT

近日,科大讯飞召开了星火认知大模型成果发布会,会上表示讯飞星火大模型将突破开放式问答,对标ChatGPT,在中文能力上超过ChatGPT,在英文能力上与ChatGPT相当。对此,你怎么看? 一、你有使用过这种…

5620亿参数,最大多模态模型控制机器人,谷歌把具身智能玩出新高度

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 机器人越来越像人了!谷歌等的这项研究将现实世界的信息通过传感器纳入多模态语言模型&a…

终结者最强大脑!谷歌发布史上最大「通才」模型PaLM-E,5620亿参数,看图说话还能操控机器人...

新智元报道 本文转载自新智元。 谷歌近日公布了一个炸弹级「通才」模型PaLM-E,足足有5620亿参数。它是一种多模态具身视觉语言模型,从引导机器人执行任务,到回答关于可观察世界的问题,全都能搞定。 大语言模型的飞速「变异」&am…

摊牌了,微软始料未及,Excel和WPS用户:我们已经在使用了

ChatGPT嵌入 Power Platform 3月6日,微软公司宣布,将 ChatGPT 的技术扩展到其 Power Platform 无代码开发平台上,这将允许其用户在很少甚至不需要编写代码的情况下,就能开发自己的应用程序。 从人工智能到ChatGPT,一次…

领域知识网络即服务:知识助力产业升级“无形的手”?

文|智能相对论 作者|叶远风 你用过ChatGPT了吗? 这个风靡全球的AI应用,以出圈的方式展现着AI的能量。 一个对话的界面,可以聊任何你想聊的话题,可以写出任何你想要的文字。 似乎有无限的人类知识,被集中到了一起&…

炸了!谷歌发布史上最大通才模型PaLM-E,5620亿参数!看图说话还能操控机器人...

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自:新智元 【导读】谷歌刚刚上线了一个炸弹级「通才」模型PaLM-E,足足有5620亿参数。它是一种多模态具身视觉语言模…

Arduino实训-可移动机械臂(智能小车)

Arduino课程设计的实训要求通过UNO开发板设计工程项目并且与自主开发的AndroidAPP实现连接,最后选择了完成一个可移动机械臂。下面是最终成果图。 最终的效果:可通过手机开发的AndroidApp实现控制小车上的蓝牙模块进行连接并且控制小车的运动和机械臂的运…

30分钟!从0到1,用ChatGPT+Python做一个AI起名网!

坚持6年,第629篇原创 现在利用ChatGPT可以做很多很多事情,而对于我们程序员来说,是机会也是挑战!因为原来很多工种,很多技术问题现在可以用非常廉价的技术去获取,成本更低了! 打个比方&#xff…

ChatGPT 加持,决策大模型距离 AGI 更进一步

过去短短不到一年里,ChatGPT、GPT-4 的相继面世,不断刷新人们对 AI 的认知。 新技术带来变革,也引发了外界对 AI 是否会取代人的讨论,OpenAI 首席执行官 Sam Altman 也公开表示,对人工智能技术的强大能力有些担忧。 …

人工智能从来不是一帆风顺的

不久之前,人们还常说,计算机视觉的辨别能力尚不如一岁大的孩子。如今看来,这句话要改写了。 ----- 特伦斯谢诺夫斯基 目录 人工智能初现端倪 人工智能初现 人工智能“第一次危机”——“设计派”行不通 第一次危机破局——学习派初见成效…

融入ChatGPT生成能力后,员工AI助手实力狂飙

聊天机器人ChatGPT爆火“出圈”,让公众的视线再次聚焦在AI办公领域,随着企业数字化转型的深入,AI技术也悄悄渗透进办公室里,并在逐步颠覆企业当前的办公方式。 雇主评论网站Glassdoor旗下的社交平台Fishball的一份调查报告显示&a…

ChatGPT只是开胃菜,AIGC风口真的来了

去年OpenAI发布的ChatGPT在全球疯狂刷屏成为一款现象级产品,并成功出圈受到IT、新闻媒体、学术研究、教育等领域的广泛好评和应用。甚至有一位美国学生用ChatGPT 写论文拿下全班最高分,受到了全球媒体的热议。 比尔盖茨曾在今年“Reddit AMA大会”表示&…

2023年的深度学习入门指南(5) - 动手写第一个语言模型

2023年的深度学习入门指南(5) - 动手写第一个语言模型 上一篇我们介绍了openai的API,其实也就是给openai的API写前端。在其它各家的大模型跟gpt4还有代差的情况下,prompt工程是目前使用大模型的最好方式。 不过,很多编程出身的同学还是对于…

知识工作者如何面对ChatGPT的竞争?

什么是ChatGPT ChatGPT的全名是Chat Generative Pre-Trained Transfomer,是一款在2022年11月份推出的人工智能聊天机器人。特点是可以通过大型语言模型进行强化学习训练,对话模式非常接近人类自然对话。 ——维基百科 ChatGPT能做什么? Chat…