文章目录
数据清洗知识llama的一小块功能,主文章内容太多了,拆出来单独说下。
示例
环境还基于之前的环境。
1、新建python文件clean_demo.py,代码:
python
import os
from llama_index.core import Document, VectorStoreIndex, Settings
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.node_parser import SentenceSplitter
# 引入阿里云百炼
from llama_index.embeddings.dashscope import DashScopeEmbedding
from llama_index.llms.dashscope import DashScope
# --- 1. 配置 ---
API_KEY = os.getenv("DASHSCOPE_API_KEY", "sk-你的KEY")
Settings.llm = DashScope(model_name="qwen-plus", api_key=API_KEY)
Settings.embed_model = DashScopeEmbedding(model_name="text-embedding-v2", api_key=API_KEY)
# --- 2. 数据 ---
raw_texts = [
"LlamaIndex 是一个强大的框架。",
"LlamaIndex 是一个强大的框架。", # 重复
"阿里云百炼提供了很好的模型服务。",
"这是一条垃圾广告:买鞋加微信...", # 垃圾数据
"RAG 技术可以增强大模型的知识库。"
]
documents = [Document(text=t, metadata={"source": "tech_doc" if "广告" not in t else "spam"}) for t in raw_texts]
# --- 3. 流水线与清洗 ---
pipeline = IngestionPipeline(
transformations=[
# 调大 chunk_size 避免警告
SentenceSplitter(chunk_size=128, chunk_overlap=10),
]
)
nodes = pipeline.run(documents=documents)
# 【核心修改】物理清洗:直接用 Python 列表推导式剔除垃圾数据
# 这里我们只保留 source 为 'tech_doc' 的节点,彻底扔掉 'spam'
clean_nodes = [node for node in nodes if node.metadata.get("source") == "tech_doc"]
print(f"🧹 清洗后节点数量: {len(clean_nodes)}")
print("✅ 垃圾数据已被物理移除,不会进入索引。")
# --- 4. 构建索引 ---
# 直接传入干净的数据,索引里根本就没有垃圾数据,查询时自然也就查不到
index = VectorStoreIndex(nodes=clean_nodes)
# --- 5. 查询 (最简单的写法) ---
query_engine = index.as_query_engine(similarity_top_k=5)
# 直接查询,不需要传任何 filters
response = query_engine.query("LlamaIndex 是什么?")
print("\n--- 回答 ---")
print(response)
# 验证来源
print(f"\n--- 来源验证 (应该只有 tech_doc) ---")
for node in response.source_nodes:
print(f"- 来源: {node.metadata.get('source')} | 内容: {node.text}")
输出结果:
bash
🧹 清洗后节点数量: 4
✅ 垃圾数据已被物理移除,不会进入索引。
--- 回答 ---
LlamaIndex 是一个强大的框架。
--- 来源验证 (应该只有 tech_doc) ---
- 来源: tech_doc | 内容: LlamaIndex 是一个强大的框架。
- 来源: tech_doc | 内容: LlamaIndex 是一个强大的框架。
- 来源: tech_doc | 内容: 阿里云百炼提供了很好的模型服务。
- 来源: tech_doc | 内容: RAG 技术可以增强大模型的知识库。
解读:
数据清洗
为什么要数据清洗?
因为大模型是垃圾进垃圾出,如果数据质量不高,再好的大模型也分析不出正确的结论。
常见的需要清洗的数据
缺失值 (Missing Data)
表现:数据集中某些字段是空的(NULL、NaN、空字符串)。
成因:用户未填写、系统采集故障、人工录入遗漏等。
重复值 (Duplicate Data)
表现:同一条记录出现了多次。
成因:系统多次提交、多数据源合并未去重、人工重复录入。
异常值 (Outliers)
表现:数值明显偏离正常范围(如年龄200岁、订单金额为负数)。
成因:录入错误、系统故障,或者是真实的极端情况(如双11的大额订单)。
不一致数据 (Inconsistent Data)
表现:格式、单位、编码不统一。
例子:日期有的用"2023-01-01",有的用"2023/1/1";性别有的用"男/女",有的用"1/0"。
spam数据
spam是什么意思呢?
垃圾邮件、以及二战时的罐头午餐肉也是这个词,总之spam就是表示垃圾的意思。