# 全任务零样本学习-mT5中文-base实操手册:批量增强结果去重与质量过滤Python脚本
## 1. 模型概述与环境准备
全任务零样本学习-mT5中文-base是一个基于mT5架构的文本增强模型,专门针对中文场景进行了深度优化。该模型使用了大量中文数据进行训练,并引入了零样本分类增强技术,显著提升了输出稳定性和生成质量。
在实际应用中,当我们使用批量增强功能生成大量文本变体时,经常会遇到两个问题:一是生成结果中存在大量重复或相似内容,二是部分生成结果质量不佳。本文将介绍如何通过Python脚本解决这两个问题。
**环境要求**:
- Python 3.7+
- 已部署的全任务零样本学习-mT5中文-base服务
- 基本的Python编程知识
**前置准备**:
```bash
# 安装所需依赖
pip install requests numpy scikit-learn
```
## 2. 批量增强结果获取
首先我们需要从mT5服务获取批量增强结果。以下是一个简单的获取脚本:
```python
import requests
import json
def get_batch_augmentations(texts, num_sequences=3, temperature=0.9):
"""
批量获取文本增强结果
:param texts: 原始文本列表
:param num_sequences: 每条文本生成的数量
:param temperature: 生成温度
:return: 增强结果列表
"""
url = "http://localhost:7860/augment_batch"
payload = {
"texts": texts,
"num_return_sequences": num_sequences,
"temperature": temperature
}
try:
response = requests.post(url, json=payload, timeout=30)
response.raise_for_status()
return response.json()["results"]
except Exception as e:
print(f"获取增强结果失败: {e}")
return None
# 使用示例
original_texts = [
"今天天气很好,适合外出散步",
"人工智能技术正在快速发展",
"这家餐厅的食物味道很不错"
]
augmented_results = get_batch_augmentations(original_texts, num_sequences=5)
```
## 3. 文本去重处理方案
### 3.1 基于相似度的去重
当生成大量文本变体时,重复或高度相似的内容很常见。以下是一个基于文本相似度的去重脚本:
```python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
def remove_duplicates(texts, similarity_threshold=0.8):
"""
基于余弦相似度去除重复文本
:param texts: 文本列表
:param similarity_threshold: 相似度阈值,高于此值视为重复
:return: 去重后的文本列表
"""
if len(texts) <= 1:
return texts
# 创建TF-IDF向量器
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(texts)
# 计算相似度矩阵
similarity_matrix = cosine_similarity(tfidf_matrix)
# 找出需要保留的索引
keep_indices = []
seen_indices = set()
for i in range(len(texts)):
if i in seen_indices:
continue
keep_indices.append(i)
# 找到所有与当前文本相似的文本索引
similar_indices = np.where(similarity_matrix[i] > similarity_threshold)[0]
seen_indices.update(similar_indices)
return [texts[i] for i in keep_indices]
# 使用示例
augmented_texts = [
"今天天气很好,适合外出散步",
"今日天气不错,适宜户外活动",
"天气晴朗,很适合出去走走",
"人工智能技术发展迅速",
"AI技术正在快速进步"
]
unique_texts = remove_duplicates(augmented_texts)
print(f"去重前: {len(augmented_texts)} 条")
print(f"去重后: {len(unique_texts)} 条")
```
### 3.2 基于MinHash的大规模去重
对于大量文本,可以使用MinHash算法提高去重效率:
```python
from datasketch import MinHash, MinHashLSH
import jieba
def chinese_text_to_minhash(text, num_perm=128):
"""将中文文本转换为MinHash"""
words = list(jieba.cut(text))
m = MinHash(num_perm=num_perm)
for word in words:
m.update(word.encode('utf8'))
return m
def minhash_deduplicate(texts, threshold=0.8):
"""
使用MinHash进行大规模文本去重
:param texts: 文本列表
:param threshold: 相似度阈值
:return: 去重后的文本列表
"""
lsh = MinHashLSH(threshold=threshold, num_perm=128)
minhashes = {}
# 为每个文本创建MinHash
for i, text in enumerate(texts):
minhash = chinese_text_to_minhash(text)
lsh.insert(i, minhash)
minhashes[i] = minhash
# 找出重复的文本
duplicate_indices = set()
unique_indices = []
for i in range(len(texts)):
if i in duplicate_indices:
continue
unique_indices.append(i)
# 查找相似文本
similar_indices = lsh.query(minhashes[i])
duplicate_indices.update(similar_indices)
return [texts[i] for i in unique_indices]
```
## 4. 质量过滤策略
### 4.1 基于语言质量的过滤
生成文本可能存在语法错误、不通顺等问题,以下是一些质量过滤方法:
```python
import re
def quality_filter(texts, min_length=5, max_length=100):
"""
基础质量过滤:长度检查、重复字符检查等
:param texts: 文本列表
:param min_length: 最小长度
:param max_length: 最大长度
:return: 过滤后的文本列表
"""
filtered_texts = []
for text in texts:
# 长度检查
if len(text) < min_length or len(text) > max_length:
continue
# 重复字符检查(避免如"好好好好"这样的文本)
if has_repeated_chars(text, max_repeat=3):
continue
# 特殊字符比例检查
if has_too_many_special_chars(text, max_ratio=0.3):
continue
filtered_texts.append(text)
return filtered_texts
def has_repeated_chars(text, max_repeat=3):
"""检查文本中是否有过多重复字符"""
for char in set(text):
if char * (max_repeat + 1) in text:
return True
return False
def has_too_many_special_chars(text, max_ratio=0.3):
"""检查特殊字符比例是否过高"""
special_chars = re.findall(r'[^\w\u4e00-\u9fff]', text)
if len(special_chars) / len(text) > max_ratio:
return True
return False
```
### 4.2 基于语义一致性的过滤
确保生成文本与原始文本语义一致:
```python
def semantic_consistency_filter(original_text, augmented_texts, similarity_threshold=0.6):
"""
基于语义一致性的过滤
:param original_text: 原始文本
:param augmented_texts: 增强文本列表
:param similarity_threshold: 语义相似度阈值
:return: 过滤后的文本列表
"""
from sentence_transformers import SentenceTransformer
import numpy as np
# 加载中文语义模型
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
# 编码所有文本
all_texts = [original_text] + augmented_texts
embeddings = model.encode(all_texts)
# 计算与原始文本的相似度
original_embedding = embeddings[0]
augmented_embeddings = embeddings[1:]
similarities = []
for emb in augmented_embeddings:
similarity = np.dot(original_embedding, emb) / (
np.linalg.norm(original_embedding) * np.linalg.norm(emb))
similarities.append(similarity)
# 过滤低相似度文本
filtered_texts = []
for i, similarity in enumerate(similarities):
if similarity >= similarity_threshold:
filtered_texts.append(augmented_texts[i])
return filtered_texts
```
## 5. 完整处理流程示例
下面是一个完整的批量增强结果处理流程:
```python
def process_batch_augmentation(original_texts, num_sequences=5):
"""
完整的批量增强处理流程
:param original_texts: 原始文本列表
:param num_sequences: 每条文本生成数量
:return: 处理后的增强结果
"""
# 1. 获取批量增强结果
print("正在获取增强结果...")
all_augmented = get_batch_augmentations(original_texts, num_sequences)
if not all_augmented:
return None
processed_results = {}
for i, original_text in enumerate(original_texts):
augmented_texts = all_augmented[i]
print(f"处理第 {i+1} 条文本,原始生成: {len(augmented_texts)} 条")
# 2. 去重处理
unique_texts = remove_duplicates(augmented_texts, similarity_threshold=0.75)
print(f" 去重后: {len(unique_texts)} 条")
# 3. 质量过滤
quality_texts = quality_filter(unique_texts, min_length=3, max_length=150)
print(f" 质量过滤后: {len(quality_texts)} 条")
# 4. 语义一致性过滤
final_texts = semantic_consistency_filter(
original_text, quality_texts, similarity_threshold=0.6
)
print(f" 语义过滤后: {len(final_texts)} 条")
processed_results[original_text] = final_texts
return processed_results
# 使用示例
original_texts = [
"机器学习是人工智能的重要分支",
"自然语言处理让计算机理解人类语言",
"深度学习在图像识别领域表现突出"
]
results = process_batch_augmentation(original_texts, num_sequences=5)
# 输出结果
for original, augmented_list in results.items():
print(f"\n原始文本: {original}")
print("增强结果:")
for i, text in enumerate(augmented_list, 1):
print(f" {i}. {text}")
```
## 6. 高级功能与优化建议
### 6.1 并行处理优化
对于大规模批量处理,可以使用并行计算加速:
```python
from concurrent.futures import ThreadPoolExecutor
import time
def parallel_batch_process(original_texts, batch_size=10, max_workers=4):
"""
并行处理大批量文本
:param original_texts: 原始文本列表
:param batch_size: 每批处理数量
:param max_workers: 最大线程数
:return: 处理结果
"""
results = {}
def process_batch(batch_texts):
return process_batch_augmentation(batch_texts)
# 分批处理
batches = [original_texts[i:i+batch_size]
for i in range(0, len(original_texts), batch_size)]
with ThreadPoolExecutor(max_workers=max_workers) as executor:
future_to_batch = {
executor.submit(process_batch, batch): i
for i, batch in enumerate(batches)
}
for future in concurrent.futures.as_completed(future_to_batch):
batch_index = future_to_batch[future]
try:
batch_result = future.result()
results.update(batch_result)
except Exception as e:
print(f"处理批次 {batch_index} 时出错: {e}")
return results
```
### 6.2 结果保存与导出
将处理结果保存到文件以便后续使用:
```python
import json
import csv
from datetime import datetime
def save_results(results, format='json'):
"""
保存处理结果到文件
:param results: 处理结果
:param format: 保存格式
"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
if format == 'json':
filename = f"augmentation_results_{timestamp}.json"
with open(filename, 'w', encoding='utf-8') as f:
json.dump(results, f, ensure_ascii=False, indent=2)
elif format == 'csv':
filename = f"augmentation_results_{timestamp}.csv"
with open(filename, 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(['原始文本', '增强文本'])
for original, augmented_list in results.items():
for augmented in augmented_list:
writer.writerow([original, augmented])
print(f"结果已保存到: {filename}")
return filename
```
## 7. 总结
通过本文介绍的Python脚本,您可以有效处理全任务零样本学习-mT5中文-base模型的批量增强结果,实现以下目标:
**主要功能**:
- 自动去除重复和高度相似的生成文本
- 过滤质量不佳的生成结果(语法错误、语义不一致等)
- 保持生成文本与原始文本的语义一致性
- 支持大规模批量处理和高并发优化
**实用建议**:
1. 根据实际需求调整相似度阈值和质量过滤参数
2. 对于大规模处理,使用并行计算提高效率
3. 定期检查过滤效果,优化过滤策略
4. 保存处理结果以便后续分析和使用
**注意事项**:
- 确保mT5服务正常运行且网络连接稳定
- 根据文本特点调整过滤参数(如技术文档和文学创作可能需要不同的参数)
- 大规模处理时注意内存使用情况
这些脚本可以帮助您从批量增强结果中筛选出高质量、多样化且语义一致的文本变体,提升数据增强效果和应用价值。
---
> **获取更多AI镜像**
>
> 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。