NLP文本數據增強

文章目錄

  • 文本數據增強
    • 同義詞替換
      • 示例
      • Python代碼示例
    • 隨機插入
      • 示例
      • Python代碼示例
    • 隨機刪除
      • 示例
      • Python代碼示例
    • 回譯(Back Translation)
      • 示例
      • Python代碼示例
    • 文本生成模型
      • 應用方式
      • 示例
      • Python代碼示例
    • 總結

文本數據增強

文本數據增強

數據增強通過對原始數據進行變換、擴展或擾動,生成新的訓練樣本,從而提升模型的泛化能力,減少過擬合。在文本數據中,常用的數據增強技術包括:

  • 同義詞替換:將句子中的部分詞語替換為其同義詞。
  • 隨機插入:隨機在句子中插入與上下文相關的詞語。
  • 隨機刪除:隨機刪除句子中的某些詞語。
  • 隨機交換:隨機交換句子中兩個詞語的位置。
  • 回譯(Back Translation):將文本翻譯為其他語言后再翻譯回來,獲得語義相近但表達不同的新句子。
  • 文本生成模型:利用預訓練語言模型(如GPT、BERT等)生成與原句語義相似的新文本。

這些方法可以有效擴充訓練集,提高模型對不同表達方式的魯棒性。

同義詞替換

同義詞替換是一種常用的文本數據增強方法。其核心思想是將句子中的某些詞語用其同義詞進行替換,從而生成語義相近但表達不同的新句子。這種方法能夠增加訓練數據的多樣性,提高模型對不同表達方式的泛化能力。

示例

原句:

機器學習可以提升數據分析的效率。

同義詞替換后:

機器學習能夠提高數據分析的效能。

Python代碼示例

下面是一個簡單的同義詞替換實現,使用nltk庫和wordnet詞庫:

import random
from nltk.corpus import wordnet
from nltk.tokenize import word_tokenizedef get_synonyms(word):synonyms = []for syn in wordnet.synsets(word):for lemma in syn.lemmas():synonyms.append(lemma.name())return synonymsdef synonym_replacement(sentence, n=1):words = word_tokenize(sentence)new_words = words.copy()candidates = [word for word in words if get_synonyms(word)]random.shuffle(candidates)num_replaced = 0for word in candidates:synonyms = get_synonyms(word)if synonyms:synonym = random.choice(synonyms)new_words = [synonym if w == word else w for w in new_words]num_replaced += 1if num_replaced >= n:breakreturn ' '.join(new_words)# 示例
sentence = "Machine learning can improve the efficiency of data analysis."
augmented_sentence = synonym_replacement(sentence)
print(augmented_sentence)

注意:中文同義詞替換可結合中文詞庫(如同義詞詞林、哈工大LTP等)實現,英文可直接用WordNet。

隨機插入

隨機插入是一種文本數據增強方法,其核心思想是在原句中隨機選擇若干位置,插入與上下文相關的詞語,從而生成新的訓練樣本。這種方法能夠增加句子的多樣性,提高模型對不同詞序和表達方式的魯棒性。

示例

原句:

機器學習可以提升數據分析的效率。

隨機插入后(插入“顯著”):

機器學習可以顯著提升數據分析的效率。

Python代碼示例

下面是一個簡單的隨機插入實現,假設我們有一個同義詞獲取函數,可以為每個詞找到相關詞語(以英文為例,中文可結合自定義詞庫實現):

import random
from nltk.corpus import wordnet
from nltk.tokenize import word_tokenizedef get_synonyms(word):synonyms = set()for syn in wordnet.synsets(word):for lemma in syn.lemmas():synonym = lemma.name()if synonym != word:synonyms.add(synonym)return list(synonyms)def random_insertion(sentence, n=1):words = word_tokenize(sentence)new_words = words.copy()for _ in range(n):candidates = [word for word in new_words if get_synonyms(word)]if not candidates:breakword = random.choice(candidates)synonym = random.choice(get_synonyms(word))insert_pos = random.randint(0, len(new_words))new_words.insert(insert_pos, synonym)return ' '.join(new_words)# 示例
sentence = "Machine learning can improve the efficiency of data analysis."
augmented_sentence = random_insertion(sentence, n=1)
print(augmented_sentence)

注意:中文實現可結合自定義同義詞詞庫或預訓練詞向量獲取相關詞語進行插入。

隨機刪除

隨機刪除是一種常用的文本數據增強方法,其核心思想是以一定的概率隨機刪除句子中的某些詞語,從而生成新的訓練樣本。這種方法可以幫助模型適應輸入中可能出現的噪聲或缺失,提高模型的魯棒性和泛化能力。

示例

原句:

機器學習可以提升數據分析的效率。

隨機刪除后(刪除“可以”):

機器學習提升數據分析的效率。

Python代碼示例

下面是一個簡單的隨機刪除實現,假設每個詞以指定概率被刪除(以英文為例,中文可用分詞工具實現):

import random
from nltk.tokenize import word_tokenizedef random_deletion(sentence, p=0.2):words = word_tokenize(sentence)if len(words) == 1:return sentence  # 單詞不刪除new_words = []for word in words:if random.uniform(0, 1) > p:new_words.append(word)if not new_words:new_words.append(random.choice(words))return ' '.join(new_words)# 示例
sentence = "Machine learning can improve the efficiency of data analysis."
augmented_sentence = random_deletion(sentence, p=0.2)
print(augmented_sentence)

注意:中文實現可結合分詞工具(如jieba)對句子進行分詞后再進行隨機刪除。

回譯(Back Translation)

回譯(Back Translation)是一種常用的文本數據增強方法,主要用于生成語義相近但表達不同的新句子。其基本流程是:先將原始文本翻譯成另一種語言(如英文),再將其翻譯回原始語言(如中文)。由于翻譯模型的多樣性和表達方式的變化,回譯能夠有效擴充訓練數據,提升模型對不同表達方式的泛化能力,尤其在低資源場景下表現突出。

示例

原句:

機器學習可以提升數據分析的效率。

回譯后(中→英→中):

機器學習能夠提高數據分析效率。

Python代碼示例

可以使用如googletranstransformers等庫實現回譯。以下以googletrans為例:

from googletrans import Translatorasync def translate_text(text, src='zh-cn', dst='en'):async with Translator() as translator:# 使用異步方式翻譯文本translated = await translator.translate(text, src=src, dest=dst)print(f"Translated text: {translated.text}")async def back_translate(text, src='zh-cn', mid='en'):translator = Translator()# 先翻譯為中間語言(如英文)translated = (await translator.translate(text, src=src, dest=mid)).text# 再翻譯回原始語言back_translated = (await translator.translate(translated, src=mid, dest=src)).textreturn back_translated# 使用已存在的變量 sentence
sentence = "機器學習可以提高數據分析的效率。"
# 異步調用翻譯函數
await translate_text(sentence)
# 異步調用回譯函數
augmented_sentence = await back_translate(sentence)
print(augmented_sentence)
    Translated text: Machine learning can improve the efficiency of data analysis.機器學習可以提高數據分析的效率。

注意:實際應用中可結合多種翻譯API(如Google、百度、騰訊等)或本地大模型實現回譯。對于大規模數據增強,建議批量處理并注意API調用頻率限制。

文本生成模型

文本生成模型(如GPT、BERT、T5等)能夠基于輸入文本自動生成與原句語義相近、表達多樣的新文本,是近年來文本數據增強的重要手段。通過生成模型,可以大規模合成高質量的訓練樣本,提升模型對不同表達方式的泛化能力,尤其適用于數據稀缺或需要多樣化表達的場景。

應用方式

  1. 同義改寫(Paraphrasing):輸入原句,生成語義相同但表達不同的新句子。
  2. 補全文本:給定部分句子,讓模型補全剩余內容,生成多樣化的句子。
  3. 條件生成:結合標簽、關鍵詞等條件,生成特定風格或內容的文本。

示例

原句:

機器學習可以提升數據分析的效率。

生成模型生成的新句子:

通過機器學習,數據分析的效率能夠得到提高。
利用機器學習方法,可以有效增強數據分析的效率。

Python代碼示例

以下以transformers庫中的GPT-2為例,演示如何利用生成模型進行文本增強(英文為例,中文可用ChatGLM、ChatGPT等模型):

from transformers import GPT2LMHeadModel, GPT2Tokenizerdef generate_paraphrases(sentence, model_name='gpt2', num_return_sequences=3, max_length=50):tokenizer = GPT2Tokenizer.from_pretrained(model_name)model = GPT2LMHeadModel.from_pretrained(model_name)input_ids = tokenizer.encode(sentence, return_tensors='pt')outputs = model.generate(input_ids,max_length=max_length,num_return_sequences=num_return_sequences,do_sample=True,top_k=50,top_p=0.95,temperature=0.8,pad_token_id=tokenizer.eos_token_id)paraphrases = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs]return paraphrases# 示例
sentence = "Machine learning can improve the efficiency of data analysis."
augmented_sentences = generate_paraphrases(sentence)
for idx, aug in enumerate(augmented_sentences, 1):print(f"Paraphrase {idx}: {aug}")
```
Paraphrase 1: Machine learning can improve the efficiency of data analysis. With the recent introduction of machine learning, we will be able to build deep neural networks with an even wider variety of input, and more importantly, have a richer understanding of the neural network architecture.Paraphrase 2: Machine learning can improve the efficiency of data analysis. This leads us to two questions:What is the best way to implement a new algorithm that can achieve this goal?How well are the algorithms used in the data analysis?Paraphrase 3: Machine learning can improve the efficiency of data analysis. Data analysis is often used to build predictive models of large data sets. The problem is that it requires very high energy and time-consuming computation.I've been working on this problem for many
```

注意:中文可使用如ChatGLM、T5、BART等中文生成模型,調用方式類似。生成結果需人工篩選以保證質量。

文本生成模型不僅能擴充訓練數據,還能提升模型對復雜表達和多樣語境的適應能力,是現代NLP數據增強的重要工具。

總結

本文介紹了文本數據增強的常用方法,包括同義詞替換、隨機插入、隨機刪除、隨機交換、回譯和基于生成模型的增強。每種方法均配有原理說明、示例和Python代碼實現。通過這些技術,可以有效擴充訓練數據,提高模型的泛化能力和魯棒性,尤其適用于數據稀缺或表達多樣性要求高的NLP任務。實際應用中可根據具體場景選擇合適的增強方法,并結合中文處理工具和生成模型進一步提升數據質量和多樣性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89406.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(LeetCode 每日一題) 594. 最長和諧子序列 (哈希表)

題目:594. 最長和諧子序列 思路:哈希表,時間復雜度0(n)。 用哈希表mp來記錄每個元素值出現的次數,然后枚舉所有值x,看其x1是否存在,存在的話就可以維護最長的子序列長度mx。 C版本: class Sol…

FreePDF:讓看英文文獻像喝水一樣簡單

前言 第一次看英文文獻,遇到不少看不懂的英文單詞,一個個查非常費勁。 后來,學會了使用劃詞翻譯,整段整段翻譯查看,極大提升看文獻效率。 最近,想到了一種更快的看文獻的方式,那就是把英文PD…

Scikit-learn:機器學習的「萬能工具箱」

——三行代碼構建AI模型的全棧指南** ### **一、誕生背景:讓機器學習從實驗室走向大眾** **2010年前的AI困境**: - 學術界模型難以工程化 - 算法實現碎片化(MATLAB/C主導) - 企業應用門檻極高 > **破局者**:Da…

GPT-1論文閱讀:Improving Language Understanding by Generative Pre-Training

這篇論文提出了 GPT (Generative Pre-Training) 模型,這是 GPT系列(包括 GPT-2, GPT-3, ChatGPT, GPT-4 等)的奠基之作。它標志著自然語言處理領域向大規模無監督預訓練任務特定微調范式的重大轉變,并取得了顯著的成功。 文章鏈接…

Hadoop大數據-Mysql的數據同步工具Maxwell安裝與使用( 詳解)

目錄 一、前置基礎知識 1、主從復制(Replication) 2、數據恢復 3、數據庫熱備 4、讀寫分離 5、存儲位置及命名 二、Maxwell簡介 1、簡介 2、Maxwell同步數據特點 2.1.歷史記錄同步 2.2.斷點續傳 三、前期準備 1、查看網卡: 2、…

分布式系統的一致性模型:核心算法與工程實踐

目錄 一、分布式一致性的核心挑戰二、主流一致性算法原理剖析1. Paxos:理論基礎奠基者2. Raft:工業級首選方案3. ZAB:ZooKeeper的引擎 三、算法實現與代碼實戰Paxos基礎實現(Python偽代碼)Raft日志復制核心邏輯 四、關…

Apache HTTP Server部署全攻略

httpd 簡介 httpd(Apache HTTP Server)是一款歷史悠久的開源 Web 服務器軟件,由 Apache 軟件基金會開發和維護。自 1995 年首次發布以來,Apache 一直是 Web 服務器領域的領導者,以其穩定性、安全性和靈活性著稱。根據…

信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡(下)

書接上文: 信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡(上)-CSDN博客 接下來是重要的代碼復現!!!GitHub - ChenQian0618/TFN: this is the open code of paper entitled "TFN: A…

線上故障排查:簽單合同提交報錯分析-對接e簽寶

在企業管理系統中,合同生成與簽署環節至關重要,尤其是在使用第三方平臺進行電子簽署時。本文將通過實際的報錯信息,分析如何進行線上故障排查,解決合同生成過程中出現的問題。 #### 1. 錯誤描述 在嘗試生成合同并提交至電子簽署…

知攻善防靶機 Linux easy溯源

知攻善防 【護網訓練-Linux】應急響應靶場-Easy溯源 小張是個剛入門的程序猿,在公司開發產品的時候突然被叫去應急,小張心想"早知道簡歷上不寫會應急了",于是call了運維小王的電話,小王說"你面試的時候不是說會應急…

原神八分屏角色展示頁面(純前端html,學習交流)

原神八分屏角色展示頁面 - 一個精美的前端交互項目 項目簡介 這是一個基于原神游戲角色制作的八分屏展示頁面,采用純前端技術實現,包含了豐富的動畫效果、音頻交互和視覺設計。項目展示了一些熱門原神角色,每個角色都有獨立的介紹頁面和專屬…

華為認證二選一:物聯網 VS 人工智能,你的賽道在哪里?

一篇不講情懷只講干貨的科普指南 一、華為物聯網 & 人工智能到底在搞什么? 華為物聯網(IoT) 的核心是 “萬物互聯”。 通過傳感器、通信技術(如NB-IoT/5G)、云計算平臺(如OceanConnect)&…

CloudLens for PolarDB:解鎖數據庫性能優化與智能運維的終極指南

隨著企業數據規模的爆炸式增長,數據庫性能管理已成為技術團隊的關鍵挑戰。本文深入探討如何利用CloudLens for PolarDB實現高級監控、智能診斷和自動化運維,幫助您構建一個自我修復、高效運行的數據庫環境。 引言:數據庫監控的演進 在云原生時代,傳統的數據庫監控方式已不…

MySQL中TINYINT/INT/BIGINT的典型應用場景及實例

以下是MySQL中TINYINT/INT/BIGINT的典型應用場景及實例說明: 一、TINYINT(1字節) 1.狀態標識 -- 用戶激活狀態(0未激活/1已激活) ALTER TABLE users ADD is_active TINYINT(1) DEFAULT 0; 適用于布爾值存儲和狀態碼…

YOLOv13:最新的YOLO目標檢測算法

[2506.17733] YOLOv13: Real-Time Object Detection with Hypergraph-Enhanced Adaptive Visual Perception Github: https://github.com/iMoonLab/yolov13 YOLOv13:利用超圖增強型自適應視覺感知進行實時物體檢測 主要的創新點提出了HyperACE機制、FullPAD范式、輕…

【深入淺出:計算流體力學(CFD)基礎與核心原理--從NS方程到工業仿真實踐】

關鍵詞:#CFD、#Navier-Stokes方程、#有限體積法、#湍流模型、#網格收斂性、#工業仿真驗證 一、CFD是什么?為何重要? 計算流體力學(Computational Fluid Dynamics, CFD) 是通過數值方法求解流體流動控制方程&#xff0…

qt常用控件--04

文章目錄 qt常用控件labelLCD NumberProgressBar結語 很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!! 今天我們進一步c11中常見的新增表達 作者:?( ‘ω’ )?260 我的專欄:qt&am…

Redmine:一款基于Web的開源項目管理軟件

Redmine 是一款基于 Ruby on Rails 框架開發的開源、跨平臺、基于 Web 的項目管理、問題跟蹤和文檔協作軟件。 Redmine 官方網站自身就是基于它構建的一個 Web 應用。 功能特性 Redmine 的主要特點和功能包括: 多項目管理: Redmine 可以同時管理多個項…

FPGA FMC 接口

1 FMC 介紹 FMC 接口即 FPGA Mezzanine Card 接口,中文名為 FPGA 中間層板卡接口。以下是對它的詳細介紹: 標準起源:2008 年 7 月,美國國家標準協會(ANSI)批準和發布了 VITA 57 FMC 標準。該標準由從 FPGA 供應商到最終用戶的公司聯盟開發,旨在為位于基板(載卡)上的 …

C++中std::atomic_bool詳解和實戰示例

std::atomic_bool 是 C 標準庫中提供的一種 原子類型,用于在多線程環境下對布爾值進行 線程安全的讀寫操作,避免使用 std::mutex 帶來的性能開銷。 1. 基本作用 在多線程環境中,多個線程同時訪問一個 bool 類型變量可能會出現 競態條件&…