一粒云文档助手RAG的实战应用

一粒云RAG:基于LLM大模型实现文档办公自动化功能


1. 技术目标与需求分析

基于LLM(大语言模型)构建一粒云文档办公自动化系统,主要实现以下功能(本功能为独立项目,可与文档云无缝集成,后续计划扩展到ECM云办公中):

  • 文件自动分类:基于文档内容语义,按照用户自定义或默认分类自动归档。
  • 文档结构提取:根据用户需求提取指定字段信息。
  • 百科助手:实时回答文档相关问题,提供背景知识。
  • 划词翻译:支持多语言内容的即时翻译。
  • 文档内容语言识别:识别文档内容的语言类型,提供多语言支持。

2. 功能分解与实现方案

1. 文件办公类型的自动分类

功能描述

  • 分类体系:默认提供以下办公文件类型的分类:
    • 财务文件
    • 合同文件
    • 制度文件
    • 产品说明文件
    • 技术方案文件
    • 采购文件
    • 出入库文件
    • 工程图纸
    • 设计图纸
  • 自定义分类:支持用户添加自定义分类。
  • RAG内容识别:通过LLM的RAG系统,根据文档内容自动识别并归类,利用关键词和上下文语义分析提高准确性。
  • 目标:通过LLM的RAG能力,对文档进行语义分析并分类。
  • 实现方式
    1. 预定义分类标准(如财务文件、合同文件等)并允许用户自定义。
    2. 基于文档内容,通过向量化语义检索将文档与分类匹配。
    3. 采用监督学习微调模型,提高分类的精准度。
  • 技术选型
    • 向量检索:Pinecone、Weaviate 或 Milvus。
    • 模型:OpenAI GPT-4、Llama 2 或自定义微调模型。

2.2 文档结构提取

功能描述

  • 提供默认提取器
    • 合同内容提取器
      • 提取字段:甲方、甲方联系人、乙方、乙方联系人、合同金额、合作(服务)时间、产品(服务)清单、维护周期、续费条件等。
    • 采购内容提取单
      • 提取字段:采购方、采购人、供货方、供货清单、时间。
    • 自定义字段提取器:用户可以设置自定义字段名称及提取规则。
  • 目标:提取文档结构化信息(如合同关键字段)。
  • 实现方式
    1. 模型解析文档整体结构(如标题、段落、表格)。
    2. 使用微调或少样本学习方式提取字段(如合同金额、甲方联系人)。
    3. 提供用户自定义提取模板功能。
  • 技术选型
    • 文本解析:LangChain。
    • 模型:GPT-4、Claude 2 或微调的 T5/BERT。
    • 数据标注工具:Label Studio。

2.3 百科助手

功能描述

  • 支持用户在阅读文档时高亮或选中关键字,通过百科助手功能快速查询相关信息。
  • 信息来源:
    • 本地知识库:利用用户自定义的文档内容作为优先回答依据。
    • 在线百科整合:集成开放的百科 API(如维基百科)。
  • 目标:为用户提供文档内容的实时辅助解释和背景知识。
  • 实现方式
    1. 结合文档内容,调用知识库或API生成答案。
    2. RAG(检索增强生成)系统集成文档与外部知识库。
  • 技术选型
    • 知识库:Elasticsearch 或自定义百科 API。
    • RAG 框架:LangChain、Haystack。

2.4 划词翻译

功能描述

  • 用户在文档中选中任意段落或词组,即可快速查看翻译结果。
  • 翻译支持
    • 默认支持中英互译及多语言翻译。
    • 提供实时音频朗读功能,方便用户听取翻译。
  • 目标:支持文档内容的多语言翻译。
  • 实现方式
    1. 用户划词后调用翻译API。
    2. 提供翻译历史记录和多语言对照功能。
  • 技术选型
    • 翻译API:Google Translate API、DeepL API。
    • 模型:mBART、NLLB 或自定义翻译模型。

2.5 文档内容语言识别

  • 目标:自动识别文档语言,提供语言适配功能。
  • 实现方式
    1. 使用预训练语言识别模型对文档内容进行分析。
    2. 自动切换翻译或语义解析功能。
  • 技术选型
    • 模型:FastText、LangDetect 或 Hugging Face Transformers。

3. 技术架构设计

3.1 系统架构

  • 前端
    • 技术栈:React + Electron。
    • 功能:文件上传、分类结果展示、提取字段标注、翻译和语言识别交互。
  • 后端
    • 技术栈:Java(Spring Boot)。
    • 功能:文档解析、RAG系统对接、任务调度。
  • 模型服务
    • 平台:Dify 或自建模型部署。
    • 功能:分类、字段提取、语言识别、翻译。

3.2 数据流

  1. 用户触发操作,系统调用分类模型进行初步分类(或者索引过程中进行分类,索引过程中识别文档的内容语言)。
  2. 用户触发操作,文档通过结构提取模块,提取用户定义的关键信息。
  3. 用户触发操作翻译或百科功能,通过LLM实时处理并返回结果。
  4. 系统将结果存储并展示。

4. 技术选型总结

功能模型/工具说明
文件分类Llama 2, Pinecone支持语义匹配与向量检索
文档结构提取微调, LangChain灵活解析结构化数据
百科助手Elasticsearch文档知识与外部知识融合
划词翻译mBART,支持高效多语言翻译
语言识别FastText, Hugging Face高效识别语言类型

5. 模型微调与部署

  • 微调
    • 数据集:基于领域文档(如合同、财务文件)进行标注和训练。
    • 工具:Hugging Face、LoRA 微调。
  • 部署
    • 平台:Dify、一粒云环境。
    • 服务:REST API 或 WebSocket。

6. 实施计划

  1. 第一阶段:实现文件分类与文档结构提取功能。
  2. 第二阶段:上线百科助手与划词翻译功能。
  3. 第三阶段:优化模型准确性和系统性能。

该方案兼顾技术可行性与扩展性,为实现文档办公自动化提供了全面的指导。

一粒云文档云平台:智能化文档管理与数据挖掘的利器

随着信息技术的飞速发展,企业和组织面对海量非结构化文档的挑战日益严峻。在此背景下,一粒云文档云平台通过集成大语言模型(LLM)和自动翻译技术,为文库中的文档分类、分级、文件相似度对比提供了全面的解决方案。特别是在情报分析与数据挖掘领域,该平台展现了强大的技术优势和应用价值。


一粒云文档云平台的核心功能

1. 文件分类

一粒云文档云平台利用LLM对文档内容进行深度语义解析,将文库中的文件按主题、类型或功能进行分类。分类不仅基于显式的关键词,还能理解复杂语义,适应多样化的业务需求。

  • 功能亮点
    • 自动化分类:自动将文档划分为如市场报告、法律合同、技术文档等类别。
    • 细粒度标签:为每个文档添加多维度标签(如行业、时间、地点等),支持个性化检索。
  • 客户价值
    • 减少文档整理时间,提高知识管理效率。
    • 为情报分析提供快速信息定位能力。

2. 文件分级

通过LLM的语义理解和上下文分析能力,平台可以根据文档的重要性、敏感性或可信度对文件进行分级。分级标准可根据客户需求自定义,例如:

  • 高优先级文档:如敏感情报、法律协议、紧急事件报告。
  • 中优先级文档:如行业趋势分析、标准化流程文档。
  • 低优先级文档:如背景信息或普通工作记录。
  • 客户价值
    • 优化情报处理的优先级排序,聚焦关键内容。
    • 提升信息安全性,对不同级别文档设置访问权限。

3. 文件相似度对比

一粒云文档云平台基于LLM的语义相似度计算,支持文件间的精确对比和关联分析:

  • 功能亮点
    • 去重与版本管理:快速识别文库中重复或相似文件,优化存储管理。
    • 关联文档发现:通过相似度对比,挖掘不同文件间的隐性关系。
    • 动态事件追踪:对比相关情报文件,追踪同一事件的多版本发展。
  • 客户价值
    • 提高文档利用率,避免信息冗余。
    • 在情报分析中发现跨文档的重要关联,支持深度洞察。

4. 自动翻译

平台内置的自动翻译功能能够将多语言文档实时翻译为目标语言,与分类、分级和相似度分析无缝结合:

  • 功能亮点
    • 多语言支持:自动翻译多语种文件,为国际化情报整合提供便利。
    • 语义对齐:翻译保留语义一致性,确保跨语言文件的分析准确性。
    • 实时翻译:支持文档的即时翻译和更新,满足动态情报需求。
  • 客户价值
    • 跨语言信息统一处理,消除语言障碍。
    • 支持全球化情报挖掘,扩展信息来源范围。

一粒云文档云平台的集成方式

1. 数据上传与预处理

用户将文库中的文件上传至一粒云平台,支持多种文件格式(PDF、Word、TXT等)。平台会自动对文件进行内容提取和格式解析,为后续的LLM分析提供标准化输入。

2. 智能分类与分级

平台通过LLM对文档内容进行分析:

  • 使用语义模型识别文件主题与特征,将其归入相应类别。
  • 对文档内容进行评估,根据定义的规则或模型预测文件优先级或敏感性。

3. 文件相似度计算

平台为每个文件生成语义向量,通过语义向量间的距离计算文件相似度,并生成相似度矩阵。用户可以:

  • 查询某文件的关联文档。
  • 查看重复文件或版本更新记录。

4. 自动翻译与跨语言整合

对于多语言文档,平台通过自动翻译模块统一将内容转换为目标语言。翻译后的文档会与原文档保持关联,供分类、分级和相似度对比使用。

5. 数据呈现与交互

用户可通过一粒云平台的图形化界面,直观查看:

  • 文档分类结果及标签。
  • 分级标注及权限分配。
  • 文件相似度分析的可视化关联网络。

情报与数据挖掘应用中的作用

  1. 国际情报分析
    • 通过分类和自动翻译,整合多语言情报文件,识别全球动态。
    • 相似度分析帮助发现不同来源对同一事件的补充信息。
  2. 商业市场研究
    • 自动分类行业报告、市场动态、客户反馈,构建结构化情报数据库。
    • 分级筛选高价值信息,为商业决策提供支持。
  3. 安全与合规管理
    • 分级识别敏感或高风险文件,强化信息安全控制。
    • 相似度对比发现可疑文件或潜在漏洞。
  4. 学术研究与知识管理
    • 自动归类研究文献,挖掘关联文献,提高学术研究效率。
    • 跨语言整合学术资源,促进全球合作。

为客户带来的价值

  1. 提升工作效率
    • 自动分类、分级和翻译,显著减少手动操作时间。
    • 快速定位关键文件,加速情报分析和决策。
  2. 增强情报深度
    • 文件相似度对比和语义分析,挖掘文件间潜在关系,提供更全面的情报视角。
  3. 跨语言无障碍分析
    • 自动翻译功能打破语言壁垒,实现全球化情报挖掘和利用。
  4. 优化信息安全
    • 通过分级管理敏感文件,减少信息泄露风险。
    • 提供权限控制,确保文件的安全访问。
  5. 降低成本
    • 自动化处理替代大量人工工作,节省时间与成本。

一粒云文档云平台通过LLM和自动翻译技术,构建了一个功能强大、易用的文档管理与数据挖掘平台。其在文件分类、分级、相似度对比和翻译上的智能化能力,为情报分析、商业决策和知识管理提供了重要支撑。这不仅让客户能够更高效地管理信息资源,更助力其在数据驱动的时代中抢占先机,实现更大的价值。

一粒云文档云内容分析了领域功能介绍

一粒云文档云系统使用了NLP领域的NER与KG实现对文档内容的分析和信息挖掘。

在自然语言处理(NLP)领域,命名实体识别(NER)知识图谱(Knowledge Graph, KG) 是文档分析和信息挖掘中的两个重要组成部分。它们的结合在许多场景中能显著提升数据分析与理解的能力。


一粒云NER在文档分析中的作用

命名实体识别(NER) 是从文本中识别并提取出具有特定意义的实体(如人名、地名、组织名、日期、数量等)的任务。NER 提供了结构化的信息,是文档分析的基础。

具体作用

  1. 提取关键实体信息
    • 从非结构化文档中提取核心信息,如合同中的当事方、协议时间、金额等。
    • 应用于新闻分析中抽取事件的主要参与者和时间。
  2. 增强上下文理解
    • 识别实体及其类型(如公司 vs. 产品),帮助上下文语义理解。
    • 通过关联实体类型,可以实现更精确的语义分类和搜索。
  3. 信息结构化
    • 将文本中的非结构化信息转化为结构化数据表,有助于进一步的统计分析、检索和可视化。
  4. 支持进一步分析任务
    • 结合实体关系提取,可以识别实体之间的关联(如“某公司并购某公司”)。
    • 为知识图谱的构建提供输入数据。

一粒云文档云知识图谱在文档分析中的作用

知识图谱(KG) 是以实体为节点、关系为边的一种结构化知识表示方式。它能帮助人类和机器更好地理解和推理数据。

具体作用

  1. 知识整合
    • 将从不同文档中提取的信息整合到统一的图谱结构中,消除冗余并形成知识网络。
    • 例如,在学术文献中,将不同论文中的相似概念连接起来,形成领域知识图谱。
  2. 信息关联和推理
    • 通过图谱中的关系,可以推导出隐含信息。例如,通过 “公司A -> 子公司 -> 公司B” 和 “公司B -> 产品 -> 产品X” 关系,可以得出 “公司A -> 产品 -> 产品X”。
  3. 增强搜索和问答
    • 支持基于实体和关系的语义搜索,比关键词搜索更加精准。
    • 在问答系统中,知识图谱提供了快速找到答案的能力。
  4. 动态更新知识
    • 随着新文档的加入,知识图谱可以动态扩展,保持对领域最新知识的跟踪。

一粒云稳定见分析NER与知识图谱结合的作用

NER 和知识图谱结合后,可以进一步提升文档分析能力,具体表现为以下几个方面:

1. 从文档到图谱的构建

  • NER提取实体:识别文档中的命名实体(如人名、地名、公司名等)。
  • 关系提取:识别这些实体之间的关系(如 “合作”、”拥有”、”隶属” 等)。
  • 图谱构建:以提取的实体为节点、关系为边,构建知识图谱。
    • 示例:从法律文书中提取“原告—诉讼对象—被告”的关系。

2. 提供背景知识

  • 在文档分析中,通过知识图谱提供实体的上下文信息。
    • 示例:一个文档提到“某科技公司”,知识图谱可以提供该公司的详细背景信息(如所在行业、主要产品、关联公司)。

3. 支持信息推理与补全

  • NER识别的实体可能在文档中存在不全的情况,通过知识图谱,可以补全未明确提到的隐含信息。
    • 示例:通过 “Apple -> CEO -> Tim Cook” 的图谱关系,可以在文档中提到“Apple”时自动联想到其CEO。

4. 数据分析与可视化

  • 结合 NER 和知识图谱,可以将文档中的信息可视化为知识网络,便于分析和理解。
    • 示例:新闻报道的事件参与者图谱,显示不同人和机构之间的关系。

5. 智能问答和决策支持

  • 在企业应用中,结合NER和知识图谱可以实现智能问答或决策支持系统。例如:
    • 问题:“某公司最近的并购有哪些?”
    • 基于NER提取并购事件和知识图谱中的关联信息,系统可以返回精准答案。

应用场景

  1. 法律与合同分析
    • 识别合同中的当事方、日期、金额等关键信息,通过知识图谱建立关联。
  2. 金融与市场情报
    • 提取新闻中的公司动态,结合行业知识图谱分析行业趋势。
  3. 医疗文档分析
    • 识别医学术语和患者数据,构建病人健康知识图谱,支持临床决策。
  4. 学术研究
    • 提取研究领域关键术语,构建学术知识图谱,促进研究协作。

总结

一粒云文档云在NLP文档分析中,NER和知识图谱共同作用于数据抽取、关联、推理和呈现。NER提供细粒度的信息提取能力,而知识图谱通过将实体和关系整合为网络,进一步提升了数据分析的深度与广度。二者结合是文档智能化分析的重要技术路径。

一粒云V5.0:文件对比协助重要文件分析

在信息爆炸的时代,文件和数据的管理变得愈发复杂。尤其是在处理大量文档、报告和科研成果时,如何快速而准确地识别文件之间的相似度,成为了提高工作效率、确保数据安全和优化文档管理的重要课题。今天,我们为您推荐一款强大的工具——一粒云V5.0文件对比协助重要文件分析软件,这款软件不仅能够帮助您轻松完成文件相似度分析,还能为您提供多维度的数据洞察,助力您在信息管理上迈向新高峰。

1️⃣全面的文件相似度分析,助力高效决策

在日常的文件管理中,很多文件看似相似但又难以区分。无论是研究论文、商业文档,还是合同协议,文件内容的重合度都可能影响您的决策和工作流程。这时,使用我们的文件对比分析软件,您可以从多个维度对文件进行深度对比:

  1. 文件元信息分析
    通过分析文件的元数据(如文件名、大小、创建和修改时间等),您可以快速了解文件的基本信息,并通过字符串相似度和关键词提取,识别文件之间潜在的重复或关联。
  2. 文本内容的精准对比
    我们的软件结合了强大的文本处理能力,可以通过词频统计(TF-IDF)、深度向量嵌入(如BERT、Word2Vec等)进行内容比对。通过余弦相似度或Jaccard系数等算法,精准计算文本的相似度,帮助您发现文件中相似或重叠的部分。
  3. 命名实体识别(NER)对比
    我们的软件不仅仅局限于表面内容的比对,还能深入分析文件中的命名实体(如人名、地名、机构名等)。通过对比实体的重叠度,您能够更全面地了解文件之间的潜在联系,尤其对于学术文献和法律文件尤为重要。
  4. 文档结构与格式的对比
    在许多情况下,文件的结构和格式也是判断文件相似度的重要因素。我们通过智能算法对文件的段落、章节、表格及图表布局进行比对,让您在细节上也能发现文件之间的差异或相似之处。
  5. 引文与参考文献的精确分析
    参考文献部分常常是判断文献相似度的关键。我们的软件通过提取和分析引文内容,准确比较不同文件中的引文来源和内容重叠度,帮助您追踪和评估文献引用的可靠性与创新性。

2️⃣智能化界面,操作便捷

我们深知,技术再强大也需易于使用。为此,我们精心设计了直观且智能化的UI界面,让您在繁忙的工作中也能轻松上手:

  • 简洁明了的主界面:通过顶部导航栏、左侧文件浏览面板和主分析区域,您可以迅速找到所需功能并导入文件进行分析。
  • 实时反馈与操作面板:文件分析过程中的每个细节都会在右侧面板中显示,帮助您实时了解进度,并导出详细的报告和分析结果。

3️⃣深度分析,助力精准决策

我们的文件对比分析软件,不仅提供了文本层面的比对,还通过主题建模与聚类分析知识图谱关联分析等先进功能,帮助您洞察文件背后的深层次信息。

  • 主题建模:通过LDA(潜在狄利克雷分配)等算法提取文件的主题分布,分析文件的核心内容是否存在重叠,帮助您快速识别重复的研究主题或内容。
  • 知识图谱分析:我们将文档中的重要概念构建为知识图谱,通过语义关联网络的方式,比对不同文件之间的概念重叠与关联程度,精准识别文件之间的关系。

4️⃣从文件相似度到数据洞察,全面提升工作效率

无论您是学术研究人员,法律专家,还是情报人员分析师,文件对比协助重要数据分析软件都能为您提供精准、全面的文件相似度分析,帮助您快速识别文件间的相似或重合部分。通过智能化分析和可视化展示,您将能够节省大量的时间和精力,专注于更高层次的数据洞察与决策支持。

选择我们的文件对比协助工具,让您的文件管理与数据分析更高效、精准和智能,助力您在复杂的信息世界中游刃有余。

一粒云V5.0:立即体验文件对比协助重要数据分析软件,开启您的高效工作之旅!

Milvus 详细介绍与上手教程

什么是 Milvus?

Milvus 是一个开源的向量数据库,专为管理和检索大量向量数据而设计,广泛应用于人工智能、推荐系统、图像检索、自然语言处理等领域。它支持 PB 级别的数据存储,提供高性能的向量检索服务。

Milvus 的核心功能

1. 高效检索: 支持 ANN(近似最近邻)检索,适用于超大规模向量检索任务。

2. 多数据类型: 支持文本、图像、视频等多种嵌入向量数据。

3. 弹性扩展: 支持水平扩展和分布式部署。

4. 多种索引类型: 包括 IVF、HNSW、DiskANN 等。

5. 多语言 SDK 支持: 提供 Python、Java、Go、C++ 等多种 SDK。

6. 云原生架构: 支持 Kubernetes 部署,便于云上运行。

Milvus 的应用场景

1. 图像和视频检索(内容推荐)

2. 自然语言处理(语义检索与推荐)

3. 推荐系统(个性化推荐)

4. 生物医学数据分析(DNA 比对)

5. 安全监控(面部识别)

Milvus 快速上手教程

1. 环境准备

• 操作系统:Linux/macOS/Windows

• 安装 Docker(推荐)或 Kubernetes(用于生产环境)

2. 安装 Milvus

使用 Docker 快速启动:

docker pull milvusdb/milvus:latest

docker run -d –name milvus-standalone -p 19530:19530 -p 8080:8080 milvusdb/milvus:latest

3. 创建 Milvus 客户端

安装 Milvus Python SDK:

pip install pymilvus

4. 连接到 Milvus

from pymilvus import connections

connections.connect(

    alias=”default”,

    host=”localhost”,

    port=”19530″

)

5. 创建集合与插入数据

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType

# 定义字段

fields = [

    FieldSchema(name=”id”, dtype=DataType.INT64, is_primary=True, auto_id=True),

    FieldSchema(name=”embedding”, dtype=DataType.FLOAT_VECTOR, dim=128)

]

# 定义集合架构

schema = CollectionSchema(fields, “向量数据集合”)

# 创建集合

collection = Collection(“example_collection”, schema)

# 插入数据

import numpy as np

data = [

    [i for i in range(1000)],              # id

    np.random.random([1000, 128]).tolist() # 随机向量

]

collection.insert(data)

6. 创建索引与检索

# 创建索引

index_params = {

    “metric_type”: “L2”,

    “index_type”: “IVF_FLAT”,

    “params”: {“nlist”: 100}

}

collection.create_index(field_name=”embedding”, index_params=index_params)

# 搜索向量

search_params = {

    “metric_type”: “L2”,

    “params”: {“nprobe”: 10}

}

query_vector = np.random.random([1, 128]).tolist()

results = collection.search(

    data=query_vector,

    anns_field=”embedding”,

    param=search_params,

    limit=5

)

# 输出结果

for result in results[0]:

    print(f”ID: {result.id}, Distance: {result.distance}”)

Milvus 官方资源

• 官网:Milvus 官方网站

• 文档:Milvus 文档中心

• GitHub:Milvus GitHub 仓库

如果需要更详细的教程或针对特定场景的使用指导,请告诉我!

Python 语言检测

Python 中有多种优秀的语言识别工具,以下是一些常用的工具和库:

1. langdetect

简介: langdetect 是一个非常流行的语言检测库,基于 Google 的 language-detection 项目。它可以检测多种语言,并且对于短文本也有不错的识别效果。

安装:

pip install langdetect

使用示例:

from langdetect import detect

text = “Bonjour tout le monde”

language = detect(text)

print(language)  # 输出: ‘fr’ (法语)

2. langid

简介: langid 是另一个非常强大的语言识别库,支持97种语言。它的特点是完全自包含且无需外部依赖。

安装:

pip install langid

使用示例:

import langid

text = “Hola, ¿cómo estás?”

language, _ = langid.classify(text)

print(language)  # 输出: ‘es’ (西班牙语)

3. polyglot

简介: polyglot 是一个支持多语言处理的库,它不仅提供语言识别功能,还支持情感分析、实体识别等多种自然语言处理任务。

安装:

pip install polyglot

使用示例:

from polyglot.detect import Detector

text = “Ceci est un exemple de texte en français”

detector = Detector(text)

language = detector.language.code

print(language)  # 输出: ‘fr’ (法语)

4. TextBlob

简介: TextBlob 是一个简洁易用的自然语言处理工具包,虽然它主要用于情感分析、词性标注等任务,但也支持语言识别。

安装:

pip install textblob

使用示例:

from textblob import TextBlob

text = “Hello, how are you?”

blob = TextBlob(text)

print(blob.detect_language())  # 输出: ‘en’ (英语)

5. FastText (by Facebook)

简介: FastText 是一个由 Facebook 提供的开源库,除了高效的词向量表示外,它也能很好地进行语言识别。它支持多达170多种语言。

安装:

pip install fasttext

使用示例:

import fasttext

model = fasttext.load_model(‘lid.176.bin’)  # 下载预训练模型

text = “Ceci est un texte en français”

prediction = model.predict(text)

print(prediction)  # 输出: (‘__label__fr’,)

6. cld3 (Compact Language Detector v3)

简介: cld3 是一个高效的语言检测库,基于 Google 的 Compact Language Detector v3。它对短文本和多语言文本都有不错的支持。

安装:

pip install cld3

使用示例:

import cld3

text = “Hola, ¿cómo estás?”

language = cld3.get_language(text)

print(language)  # 输出: Language: es (西班牙语)

总结:

• 如果需要一个简单、易用的工具,langdetect 和 langid 都是不错的选择。

• 如果对处理多语言的文本和需要其他 NLP 功能有需求,可以考虑使用 polyglot 或 TextBlob。

• 如果需要更高精度的检测,尤其是在短文本的情况下,FastText 和 cld3 是更强大的选择。

你可以根据具体需求选择适合的工具!

使用RAGFlow+iText2KG针对文档进行搜索与知识图片生成(一)

1、RAGFlow 的使用指南

RAGFlow 是一个基于对文档的深入理解的开源 RAG(检索增强生成)引擎。它为任何规模的企业提供了简化的 RAG 工作流程,结合了 LLM(大型语言模型)以提供真实的问答功能,并以来自各种复杂格式数据的有根据的引文为后盾。

demo链接:RAGFlow

特点:

1、有一定的数据质量保证,能从复杂的非结构化数据中提取基于文档理解的深度知识。

2、内置模板,可以基于模板形成知识库;文档分块可以实现人工干预,提高文档质量;

3、可以兼容异构数据源,支持 Word、幻灯片、excel、txt、图像、扫描副本、结构化数据、网页等。

4、 自动化且轻松的 RAG 工作流程

  • 简化的 RAG 编排同时满足了个人和大型企业的需求。
  • 可配置的 LLM 以及嵌入模型。
  • 多重召回与融合的重新排名配对。
  • 直观的 API,可与业务无缝集成。
    RAGFlow架构图

部署要求:

  • CPU >= 4 cores
  • RAM >= 16 GB
  • Disk >= 50 GB
  • Docker >= 24.0.0 & Docker Compose >= v2.26.1

启动 服务器

  1. 确保 >= 262144:vm.max_map_count要检查 的值 :vm.max_map_count$ sysctl vm.max_map_count如果不是,则重置为至少 262144 的值。vm.max_map_count
  1. # In this case, we set it to 262144:$ sudo sysctl -w vm.max_map_count=262144此更改将在系统重启后重置。为了确保您的更改保持永久,请相应地在 /etc/sysctl.conf 中添加或更新该值:vm.max_map_count
  2. vm.max_map_count=262144
  3. 克隆存储库:$ git clone https://github.com/infiniflow/ragflow.git构建预构建的 Docker 镜像并启动服务器:
  4. 以下命令下载 RAGFlow slim () 的开发版本 Docker 映像。请注意,RAGFlow slim Docker 映像不包括嵌入模型或 Python 库,因此大小约为 1GB。dev-slim$ cd ragflow/docker$ docker compose -f docker-compose.yml up -d注意:包含嵌入模型和 Python 库的 RAGFlow Docker 映像的大小约为 9GB,加载时间可能要长得多。
    • 要下载特定版本的 RAGFlow slim Docker 镜像,请将 docker/.env 中的变量更新为所需版本。例如。进行此更改后,请重新运行上述命令以启动下载。RAGFlow_IMAGERAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0-slim
    • 要下载 RAGFlow Docker 映像的开发版本(包括嵌入模型和 Python 库),请将 docker/.env 中的变量更新为 。进行此更改后,请重新运行上述命令以启动下载。RAGFlow_IMAGERAGFLOW_IMAGE=infiniflow/ragflow:dev
    • 要下载特定版本的 RAGFlow Docker 映像(包括嵌入模型和 Python 库),请将 docker/.env 中的变量更新为所需的版本。例如。进行此更改后,请重新运行上述命令以启动下载。RAGFlow_IMAGERAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0
  5. 在服务器启动并运行后检查服务器状态:$ docker logs -f ragflow-server以下输出确认系统已成功启动:
  6. ____ ___ ______ ______ __
    / __ \ / | / ____// ____// /____ _ __
    / /_/ // /| | / / __ / /_ / // __ \| | /| / /
    / _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
    /_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/

    * Running on all addresses (0.0.0.0)
    * Running on http://127.0.0.1:9380
    * Running on http://x.x.x.x:9380 INFO:werkzeug:Press CTRL+C to quit如果您跳过此确认步骤并直接登录 RAGFlow,您的浏览器可能会提示错误,因为此时您的 RAGFlow 可能没有完全初始化。network abnormal
  1. 在您的 Web 浏览器中,输入服务器的 IP 地址并登录 RAGFlow。使用默认设置时,您只需输入 (sans port number) 作为使用默认配置时可以省略默认 HTTP 服务端口。http://IP_OF_YOUR_MACHINE80
  2. 在 service_conf.yaml 中,选择所需的 LLM 工厂,并使用相应的 API 密钥更新字段。user_default_llmAPI_KEY有关更多信息,请参阅 llm_api_key_setup。

部署完成后,还需要对RAGFlow进行配置,需要关注以下几点:

  • .env:保留系统的基本设置,例如SVR_HTTP_PORTMYSQL_PASSWORDMINIO_PASSWORD
  • service_conf.yaml:配置后端服务。
  • docker-compose.yml:系统依赖 docker-compose.yml 启动。

您必须确保对 .env 文件的更改与 service_conf.yaml 文件中的更改一致。

./docker/README 文件提供了环境设置和服务配置的详细描述,您需要确保 ./docker/README 文件中列出的所有环境设置都与 service_conf.yaml 文件中的相应配置保持一致。

要更新默认 HTTP 服务端口 (80),请转到 docker-compose.yml 并更改为 。80:80<YOUR_SERVING_PORT>:80

对上述配置的更新需要重启所有容器才能生效:

$ docker compose -f docker/docker-compose.yml up -d

🔧 在不嵌入模型的情况下构建 Docker 镜像

此映像的大小约为 1 GB,依赖于外部 LLM 和嵌入服务。

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile.slim -t infiniflow/ragflow:dev-slim .

🔧 构建包含嵌入模型的 Docker 镜像

此映像的大小约为 9 GB。由于它包括嵌入模型,因此它仅依赖于外部 LLM 服务。

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile -t infiniflow/ragflow:dev .

🔨 从源头启动服务进行开发

  1. 安装 Poetry,如果已安装,请跳过此步骤:curl -sSL https://install.python-poetry.org | python3 –
  2. 克隆源码并安装 Python 依赖项:git clone https://github.com/infiniflow/ragflow.git
    cd ragflow/
    export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true
    ~/.local/bin/poetry install –sync –no-root # install RAGFlow dependent python modules
  3. 使用 Docker Compose 启动依赖服务(MinIO、Elasticsearch、Redis 和 MySQL):docker compose -f docker/docker-compose-base.yml up -d
  4. 添加以下行以将 docker/service_conf.yaml 中指定的所有主机解析为:/etc/hosts127.0.0.1
  1. 127.0.0.1 es01 mysql minio redis
  2. 在 docker/service_conf.yaml 中,将 mysql 端口更新为 ,将 es 端口更新为 ,如 docker/.env 中指定。54551200
  1. 如果无法访问 HuggingFace,请将环境变量设置为使用镜像站点:HF_ENDPOINTexport HF_ENDPOINT=https://hf-mirror.com启动 backend service:
  2. source .venv/bin/activate
    export PYTHONPATH=$(pwd)bash docker/launch_backend_service.sh
  3. 安装前端依赖项:
  4. cd webnpm install –force
  5. 将前端配置为在 .umirc.ts 更新为:proxy.targethttp://127.0.0.1:9380

启动前端服务:

npm run dev 以下输出确认系统已成功启动完成。



1、Text2KG 的使用



Text2KG是一个开源项目,能够利用大型语言模型(zero-shot)跨领域从文本中提取实体和关系,自动构建和更新知识图谱,并通过Neo4j进行可视化。

iText2KG由四个主要模块组成:文档提取器、增量实体提取器、增量关系提取器、图形集成器和可视化。它们协同工作,从非结构化文本构建和可视化知识图谱。

  • 文档提取器(Document Distiller):该模块处理原始文档,并根据用户定义的模式将其重新表述为语义块。它通过关注相关信息并以预定义的格式对其进行结构化来提高信噪比。
  • 增量实体提取器(Incremental Entity Extractor):此模块从语义块中提取唯一实体并解决歧义以确保每个实体都有明确定义。它使用余弦相似度度量将局部实体与全局实体进行匹配。
  • 增量关系提取器(Incremental Relation Extractor):此模块识别提取实体之间的关系。它可以以两种模式运行:使用全局实体丰富图形中的潜在信息,或使用局部实体建立更精确的关系。
  • 图形集成器和可视化(Graph Integrator and Visualization):此模块将提取的实体和关系集成到 Neo4j 数据库中,提供知识图谱的可视化表示。它允许对结构化数据进行交互式探索和分析。

四个模块中,增量实体提取器与增量关系提取器最为关键,采用大模型来实现LLM提取代表一个唯一概念的实体,以避免语义混合的实体。显示了使用 Langchain JSON 解析器的实体和关系提取prompt。分类如下:蓝色 – 由 Langchain 自动格式化的prompt;常规 – iText2KG设计的prompt;斜体 – 专门为实体和关系提取设计的prompt。(a)关系提取prompt和(b)实体提取prompt。

为了说明知识图谱构建的结果,在三种不同场景下,将基线方法与iText2KG进行了比较:

  • 基线方法在所有三种知识图谱构建场景中都揭示了存在没有关系的孤立节点。这种现象可能归因于实体提取和关系提取的同时执行,这可能会在语言模型中引起幻觉效应,导致“遗忘”效应,即分离实体和关系提取的过程可以提高性能。
  • 在“网站到知识图谱”的场景中,输入文档数量的增加与图中噪声节点的出现有关。这强调了对文档进行有效精炼和蒸馏的模块1的关键需求。
  • iText2KG方法在三种知识图谱构建场景中展示了改进的实体和关系解析能力。当输入文档较少且由简单、非复杂短语组成时,语言模型在实体和关系解析方面表现出高效率,如“简历到知识图谱”过程中所证明的。相反,随着数据集变得更加复杂和庞大,挑战也随之增加,如“网站到知识图谱”场景所示。此外,重要的是要强调输入文档的分块大小和阈值对知识图谱构建的影响。文档分馏器的输入文档可以是独立的文档或分块。如果分块大小较小,则语义块将从文档中捕获更具体的详细信息,反之亦然

一种由 LLM 驱动的零样本方法,使用大型语言模型构建增量知识图谱(KG)

iText2KG 是一个 Python 包,通过利用大型语言模型从文本文档中提取实体和关系,逐步构建具有已解析实体和关系的一致知识图谱。

它具有零样本能力,无需专门的训练即可跨各个领域提取知识。

它包含四个模块:文档提炼器、增量实体提取器、增量关系提取器和图形集成器与可视化。

  • 文档提取器:此模块将原始文档重新表述为预定义的语义块,并由指导 LLM 提取特定信息的模式引导。
  • 增量实体提取器:此模块识别并解析语义块内的唯一语义实体,确保实体之间的清晰度和区别。
  • 增量关系提取器:此组件处理已解析的实体以检测语义上唯一的关系,解决语义重复的挑战。
  • Neo4j 图形集成器:最后一个模块以图形格式可视化关系和实体,利用 Neo4j 进行有效表示。

对于我们的 iText2KG 它包含了两大特点

  • 增量构建:iText2KG 允许增量构建 KG,这意味着它可以在新数据可用时不断更新和扩展图,而无需进行大量重新处理。
  • 零样本学习:该框架利用 LLM 的零样本功能,使其无需预定义集或外部本体即可运行。这种灵活性使其能够适应各种 KG 构建场景,而无需进行大量训练或微调。

一 、设置模型

在运行 iText2KG 之前,我们先设置好大模型,我这里选择的是 OpenAi 的模型以及 HuggingFace 的 bge-large-zh embedding 模型。这么选择也是考虑到构建 KG 的准确度。

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
import os
os.environ["OPENAI_API_KEY"] = "*****"
openai_api_key = os.environ["OPENAI_API_KEY"]
openai_llm_model = llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
messages = [
(
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
),
("human", "I love programming."),
]

ai_msg=openai_llm_model.invoke(messages)

开始部署我们的 Embedding 模型:

from langchain_huggingface.embeddings import HuggingFaceEmbeddings
openai_embeddings_model = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
text = "This is a test document."
query_result = openai_embeddings_model.embed_query(text)
query_result[:3]
doc_result = openai_embeddings_model.embed_documents([text])

二 、使用 iText2KG 构建 KG

我们这里的场景是,给出一篇简历,使用知识图谱将在线职位描述与生成的简历联系起来。

设定目标是评估候选人是否适合这份工作。

我们可以为 iText2KG 的每个模块使用不同的 LLM 或嵌入模型。但是,重要的是确保节点和关系嵌入的维度在各个模型之间保持一致。

如果嵌入维度不同,余弦相似度可能难以准确测量向量距离以进行进一步匹配。

我们的简历放到根目录,加载简历:

from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader(f"./CV_Emily_Davis.pdf")
pages = loader.load_and_split()

初始化 DocumentDistiller 引入 llm :

from itext2kg.documents_distiller import DocumentsDisiller, CV
document_distiller = DocumentsDisiller(llm_model = openai_llm_model)

信息提炼:

IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a CV.
- If you do not find the right information, keep its place empty.
'''
# 使用定义好的查询和输出数据结构提炼文档。
distilled_cv = document_distiller.distill(documents=[page.page_content.replace("{", '[').replace("}", "]") for page in pages], IE_query=IE_query, output_data_structure=CV)

将提炼后的文档格式化为语义部分。

semantic_blocks_cv = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_cv.items() if value !=[] and value != ""  and value != None]

我们可以自定义输出数据结构,我们这里定义了4种,工作经历模型,岗位,技能,证书。

from pydantic import BaseModel, Field
from typing import List, Optional

class JobResponsibility(BaseModel):
description: str = Field(..., description="A specific responsibility in the job role")

class JobQualification(BaseModel):
skill: str = Field(..., description="A required or preferred skill for the job")

class JobCertification(BaseModel):
certification: str = Field(..., description="Required or preferred certifications for the job")

class JobOffer(BaseModel):
job_offer_title: str = Field(..., description="The job title")
company: str = Field(..., description="The name of the company offering the job")
location: str = Field(..., description="The job location (can specify if remote/hybrid)")
job_type: str = Field(..., description="Type of job (e.g., full-time, part-time, contract)")
responsibilities: List[JobResponsibility] = Field(..., description="List of key responsibilities")
qualifications: List[JobQualification] = Field(..., description="List of required or preferred qualifications")
certifications: Optional[List[JobCertification]] = Field(None, description="Required or preferred certifications")
benefits: Optional[List[str]] = Field(None, description="List of job benefits")
experience_required: str = Field(..., description="Required years of experience")
salary_range: Optional[str] = Field(None, description="Salary range for the position")
apply_url: Optional[str] = Field(None, description="URL to apply for the job")

定义一个招聘工作需求的描述:

job_offer = """
About the Job Offer
THE FICTITIOUS COMPANY

FICTITIOUS COMPANY is a high-end French fashion brand known for its graphic and poetic style, driven by the values of authenticity and transparency upheld by its creator Simon Porte Jacquemus.

Your Role

Craft visual stories that captivate, inform, and inspire. Transform concepts and ideas into visual representations. As a member of the studio, in collaboration with the designers and under the direction of the Creative Designer, you should be able to take written or spoken ideas and convert them into designs that resonate. You need to have a deep understanding of the brand image and DNA, being able to find the style and layout suited to each project.

Your Missions

Translate creative direction into high-quality silhouettes using Photoshop
Work on a wide range of projects to visualize and develop graphic designs that meet each brief
Work independently as well as in collaboration with the studio team to meet deadlines, potentially handling five or more projects simultaneously
Develop color schemes and renderings in Photoshop, categorized by themes, subjects, etc.
Your Profile

Bachelor’s degree (Bac+3/5) in Graphic Design or Art
3 years of experience in similar roles within a luxury brand's studio
Proficiency in Adobe Suite, including Illustrator, InDesign, Photoshop
Excellent communication and presentation skills
Strong organizational and time management skills to meet deadlines in a fast-paced environment
Good understanding of the design process
Freelance cont

继续使用上面方法做信息提炼:

IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a job offer description.
- If you do not find the right information, keep its place empty.
'''
distilled_Job_Offer = document_distiller.distill(documents=[job_offer], IE_query=IE_query, output_data_structure=JobOffer)
print(distilled_Job_Offer)
semantic_blocks_job_offer = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_Job_Offer.items() if value !=[] and value != "" and value != None]

到这里准备工作完成,简历和工作需求都已经提炼完毕,然后正式开始构建 graph,我们将简历的所有语义块作为一个块传递给了 LLM

也将工作需求作为另一个语义块传递,也可以在构建图时将语义块分开。

我们需要注意每个块中包含多少信息,然后好将它与其他块连接起来,我们在这里做的就是一次性传递所有语义块。

from itext2kg import iText2KG
itext2kg = iText2KG(llm_model = openai_llm_model, embeddings_model = openai_embeddings_model)

global_ent, global_rel = itext2kg.build_graph(sections=[semantic_blocks_cv], ent_threshold=0.6, rel_threshold=0.6)

global_ent_, global_rel_ = itext2kg.build_graph(sections=[semantic_blocks_job_offer], existing_global_entities = global_ent, existing_global_relationships = global_rel, ent_threshold=0.6, rel_threshold=0.6)

iText2KG 构建 KG 的过程我们看到有很多参数,下面分贝是对每个参数的表示做一些解释:

  • llm_model:用于从文本中提取实体和关系的语言模型实例。
  • embeddings_model:用于创建提取实体的向量表示的嵌入模型实例。
  • sleep_time (int):遇到速率限制或错误时等待的时间(以秒为单位)(仅适用于 OpenAI)。默认为 5 秒。

iText2KG 的 build_graph 参数:

  • sections (List[str]):字符串(语义块)列表,其中每个字符串代表文档的一部分,将从中提取实体和关系。
  • existing_global_entities (List[dict], optional):与新提取的实体进行匹配的现有全局实体列表。每个实体都表示为一个字典。
  • existing_global_relationships (List[dict], optional):与新提取的关系匹配的现有全局关系列表。每个关系都表示为一个字典。
  • ent_threshold (float, optional):实体匹配的阈值,用于合并不同部分的实体。默认值为 0.7。
  • rel_threshold (float, optional):关系匹配的阈值,用于合并不同部分的关系。默认值为 0.7。

从图中结果看到我们构建过程中的实体,和关联关系。

最后使用 GraphIntegrator 对构建的知识图谱进行可视化。

使用指定的凭据访问图形数据库 Neo4j,并对生成的图形进行可视化,以提供从文档中提取的关系和实体的视觉表示。

from itext2kg.graph_integration import GraphIntegrator
URI = "bolt://3.216.93.32:7687"
USERNAME = "neo4j"
PASSWORD = "selection-cosal-cubes"
new_graph = {}
new_graph["nodes"] = global_ent_
new_graph["relationships"] = global_rel_
GraphIntegrator(uri=URI, username=USERNAME, password=PASSWORD).visualize_graph(json_graph=new_graph)

打开我们的 Neo4j 图形数据库: