尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

GPT4All 本地关系抽取实战:不上传数据,把文档变成私有知识图谱

GPT4All 本地关系抽取实战:不上传数据,把文档变成私有知识图谱 GPT4All 本地关系抽取实战不上传数据把文档变成私有知识图谱【免费下载链接】gpt4allGPT4All: Run Local LLMs on Any Device. Open-source and available for commercial use.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4all你手里有一批产品手册、售后记录里面藏着大量谁和谁有什么关系但数据不能出内网。这篇文章用 GPT4All 的本地大模型和嵌入Embedding能力把文档拆成(主体, 关系, 客体)三元组拼出一张私有知识图谱——全程离线核心代码不超过 50 行。为什么关系抽取要放在本地云端 API 抽关系很方便但两件事很难接受数据出境文档原文要发出去隐私和合规先过不了关成本随量涨文档一多token 费用持续发生。GPT4All 是 Nomic AI 开源的本地 LLM 运行框架可商用核心思路是环节由谁完成作用语义向量化Embed4All嵌入模型把文本变成一组数字方便比较含义远近、做实体归并关系抽取GPT4All生成模型读懂句子吐出结构化三元组文档入库桌面端 LocalDocs把整个文件夹建成可检索、可引用的本地知识库三个环节全在本地跑文档一个字都不离开你的机器。2 步装好环境并选对模型 第一步克隆仓库并安装 Python 包git clone https://gitcode.com/GitHub_Trending/gp/gpt4all cd gpt4all/gpt4all-bindings/python pip install .如果不想从源码装直接在 PyPI 执行pip install gpt4all也可以。第二步按用途选模型。嵌入模型和生成模型是两回事前者小、快、只产向量后者大、慢、负责读懂并回答。用途模型名体积特点嵌入all-MiniLM-L6-v2默认44 MiB384 维512 词上下文最省心嵌入nomic-embed-text-v1.5262 MiB维度 64~768 可调2048 词上下文生成Meta-Llama-3.1-8B-Instruct-128k-Q4_0.gguf约 5 GB8B 参数长上下文需 8 GB 以上内存from gpt4all import GPT4All, Embed4All embedder Embed4All() # 首次运行自动下载 all-MiniLM-L6-v2 model GPT4All(Meta-Llama-3.1-8B-Instruct-128k-Q4_0.gguf, n_ctx4096)n_ctx4096把上下文窗口从默认 2048 提到 4096方便一次塞进完整段落。模型首次加载会自动下载到~/.cache/gpt4all/之后离线可用。一段提示词拿到实体三元组抽取质量一半靠模型一半靠提示词约束输出格式。把只输出三元组写进系统消息模型就不会加戏SYSTEM 你是关系抽取助手只输出(主体, 关系, 客体)三元组每行一条不加任何解释。 text 智能温控器 X300 支持 Wi-Fi 与蓝牙双模连接工作温度 0~40°C需 4.5V 供电。 with model.chat_session(system_messageSYSTEM): print(model.generate(f抽取以下文本的实体关系{text}, max_tokens150))典型输出(X300, 连接方式, Wi-Fi) (X300, 连接方式, 蓝牙) (X300, 工作温度, 0~40°C) (X300, 供电, 4.5V)两个小建议温度调低抽取是要准的任务把temp调到 0.2 左右输出更稳定一条文档拆短句一次给 3~5 句话效果最好整篇塞进去容易漏。本地嵌入把文字变成可比较的向量 三元组里的实体经常叫法不统一——X300该温控器温控器 X300其实指同一个东西。嵌入就是干这个的把文本映射成向量余弦相似度越接近 1含义越近。vecs embedder.embed([X300 智能温控器, 该温控器, X300 无人机]) def cosine(a, b): dot sum(x * y for x, y in zip(a, b)) na sum(x * x for x in a) ** 0.5 nb sum(y * y for y in b) ** 0.5 return dot / (na * nb) print(f{cosine(vecs[0], vecs[1]):.4f}) # 同指物得分接近 print(f{cosine(vecs[0], vecs[2]):.4f}) # 跨领域得分明显更低拿到相似度后设个阈值比如 0.75把超阈值的实体名归并为同一节点三元组里的主体/客体就统一了图谱不会出现一堆指向同一产品的分身。想省内存可以把向量降维embedder.embed(text, dimensionality128)注意仅 Matryoshka 模型如 Nomic Embed v1.5支持默认的 all-MiniLM-L6-v2 固定 384 维。把整个文档库灌进来规模化抽取 单条句子抽完了下一步是处理整个文件夹。GPT4All 桌面端的LocalDocs就是干这个的选一个文件夹建集合Collection它会在本地把文件切成文本片段并逐个生成嵌入向量聊天时开启 LocalDocs模型会先检索语义最接近的片段作为上下文回答下方还能点开Sources查看引用了哪些文件。这套检索片段 → 注入提示 → 生成回答的流程就是本地 RAG关系抽取可以直接复用它把提示词从回答问题换成抽取三元组即可。纯 Python 侧的批处理逻辑也很直白——分块、循环、落盘chunks load_chunks(manuals/) # 你的分块函数每块 200~500 字 triples [] for chunk in chunks: with model.chat_session(system_messageSYSTEM): triples.append(model.generate( f抽取以下文本的实体关系{chunk}, max_tokens150)) with open(triples.txt, w, encodingutf-8) as f: f.write(\n.join(triples))抽出的三元组可以先存成 JSONL再导入 Neo4j 或任何图数据库用可视化工具渲染成图谱。常见问题离线、内存和上下文 ❓能完全离线吗能。模型只在首次加载时下载一次缓存在本地之后断网也能正常推理和嵌入。内存不够跑 8B 怎么办Q4_0 量化后的 8B 模型需要 8 GB 以上内存。只有 4 GB 的话换Phi-3-mini-4k-instruct.Q4_0.gguf约 2.2 GB抽取短句关系足够用有独显还可以加devicegpu加速。上下文窗口怎么定默认n_ctx2048128k 版本可按需调大但窗口越大内存占用越高够用即可。下一步可以做什么先用小模型在你自己的文档上跑通三元组抽取把阈值和提示词调顺把三元组入库后按实体 → 关系聚合检查孤点只出现一次的实体往往是切块或提示词的问题深入阅读官方文档Python API 说明 gpt4all-bindings/python/docs/gpt4all_python/home.mdLocalDocs 工作原理 gpt4all-bindings/python/docs/gpt4all_desktop/localdocs.md。【免费下载链接】gpt4allGPT4All: Run Local LLMs on Any Device. Open-source and available for commercial use.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4all创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表