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就是表示垃圾的意思。

相关推荐
zhangphil2 小时前
Kotlin高阶函数作为参数与Java普通接口interface等效性
java·kotlin
2601_949818092 小时前
记录 idea 启动 tomcat 控制台输出乱码问题解决
java·tomcat·intellij-idea
爱丽_2 小时前
缓存一致性:Cache Aside、双删/延迟双删、穿透/击穿/雪崩与 CDC
java·spring·缓存
majingming1232 小时前
接口的嵌入式实现
java·后端·spring
eEKI DAND2 小时前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
-Da-2 小时前
【ai应用开发日记】通用未注入Bean AI提示词
java·数据库·人工智能·spring boot·sqlserver
黑马源码库miui520862 小时前
JAVA国际版同城上门服务上门送水桶装水配送源码同城上门配送系统源码支持Android+IOS+H5
android·java·ios
piepis2 小时前
Flink一致性实现原理
大数据·flink
xdscode2 小时前
Spring AI 中的 Flux 与 SSE:流式输出完全解析
java·flux·sse·springai·stream流式输出