llama-index 数据清洗示例、数据清洗等

文章目录

数据清洗知识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就是表示垃圾的意思。

相关推荐
AC赳赳老秦25 分钟前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主32 分钟前
Java基础:list、set、map一遍过
java·开发语言
QYR-分析40 分钟前
高功率飞秒激光器行业发展现状、市场机遇及未来趋势分析
大数据·人工智能
微擎应用1 小时前
全渠道批发订货商城小程序管理系统
大数据·小程序
灵犀学长1 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
卷毛迷你猪2 小时前
快速实验篇(A1)干旱气象数据上传至HDFS
大数据·hadoop·hdfs
好家伙VCC2 小时前
【无标题】
java
小碗羊肉3 小时前
【JavaWeb | 第十一篇】文件上传(本地&阿里云OSS)
java·阿里云·servlet
吾疾唯君医3 小时前
Java SpringBoot集成积木报表实操记录
java·spring boot·spring·导出excel·积木报表·数据文件下载
Byron Loong4 小时前
【c++】为什么有了dll和.h,还需要包含lib
java·开发语言·c++