项目实训个人周报3

在大模型训练中,数据集划分、数据增强和数据可视化是至关重要的步骤,确保模型训练的有效性、可靠性和可解释性。下面是对这三个方面的具体实现方法的详细说明。

数据集划分:合理划分训练、验证和测试集

  1. 比例划分:

    常用的划分比例是70%用于训练,15%用于验证,15%用于测试。具体比例可以根据数据集的规模和任务的需求进行调整。

  2. 随机划分:

    使用随机数生成器确保数据集划分的随机性,避免样本顺序导致的偏差。

  3. 分层抽样:

    在分类任务中,确保各类样本在训练、验证和测试集中的比例一致,可以使用分层抽样。

  4. 时间序列数据划分:

    在时间序列数据中,按照时间顺序划分数据,确保训练集早于验证集,验证集早于测试集。

这里我使用随机划分,使用sklearn.model_selection.train_test_split函数实现:

1
2
3
4
from sklearn.model_selection import train_test_split

train_data, test_data = train_test_split(data, test_size=0.3, random_state=42)
train_data, val_data = train_test_split(train_data, test_size=0.2, random_state=42)

数据增强:同义词替换、回译、随机删除

1.同义词替换

随机选择句子中的词,替换为其同义词。

这里我使用NLTK实现:

1
2
3
4
5
6
7
8
9
10
from nltk.corpus import wordnet

def synonym_replacement(text):
words = text.split()
new_words = words.copy()
for i in range(len(words)):
synonyms = wordnet.synsets(words[i])
if synonyms:
new_words[i] = synonyms[0].lemmas()[0].name()
return ' '.join(new_words)

2.回译:

将文本翻译成另一种语言,再翻译回来,以生成新的文本。

我这里使用谷歌的翻译API(Google Translate API)实现:

1
2
3
4
5
6
7
from googletrans import Translator

def back_translation(text, src='en', dest='de'):
translator = Translator()
translated = translator.translate(text, src=src, dest=dest).text
back_translated = translator.translate(translated, src=dest, dest=src).text
return back_translated

3.随机删除:

随机删除句子中的一些词,生成新的变体。

实现如下:

1
2
3
4
5
6
7
8
import random

def random_deletion(text, p=0.1):
words = text.split()
if len(words) == 1:
return text
new_words = [word for word in words if random.uniform(0, 1) > p]
return ' '.join(new_words)

数据可视化:文本数据可视化

词频统计:使用词云(Word Cloud)展示高频词。

1
2
3
4
5
6
7
8
9
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def plot_wordcloud(text):
wordcloud = WordCloud(width=800, height=400).generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()