Relik实事实体关联和相关抽取 经常使用LlamaIndex 高效打造常识图谱

  • 电脑网络维修
  • 2024-11-14

文本消息转化为常识图谱的技术,自问世以来不时是钻研界的宠儿。大型言语模型(LLMs)的兴起让这个畛域遭到更多关注,但LLMs的老本之高令人却步。但是,经过对小型模型微调优化,咱们可以找到一种更经济高效的处置计划。

当天向大家引见Relik,这是由罗马大学(Sapienza University of Rome)人造言语处置团队精心研发的极速、轻量级消息提取框架。

1 消息提取流程

在不依赖LLMs的状况下,消息提取流程理论包括:

上图出现了消息提取的完整流程。始于一段方便的文本输入:“Tomaz likes to write blog posts. He is particularly interested in drawing diagrams.”。流程首先启动指代消解,将“Tomaz”和“He”辨以为同一人。紧接着,命名实体识别(NER)技术辨识出“Tomaz”、“Blog”和“Diagram”等主要实体。

随后,实体链接环节将这些识别出的实体与数据库或常识库中的相应条目相对应。例如,“Tomaz”对应到“Tomaz Bratanic (Q12345)”,“Blog”对应到“Blog (Q321)”。但是,"Diagram"在常识库中未找到婚配项。

接上去,相关提取步骤进一步剖析实体间的咨询,如识别出“Tomaz”与“Blog”之间存在“WRITES”相关,说明Tomaz撰写博客;“Tomaz”与“Diagram”之间存在“INTERESTED_IN”相关,标明他对图表有兴味。

最后,这些经过结构化的实体和相关消息被整合进常识图谱中,为后续的数据剖析或消息检索提供了有序且易于访问的资源。

在没有大型言语模型(LLMs)允许的状况下,消息提取上班理论依赖一系列专业模型来区分处置指代消解、命名实体识别、实体链接和相关提取等义务。整合这些模型须要付出额外的上班和粗疏的调整,但这种方法能够有效降落老本。经过经常使用和优化这些小型、特定义务的模型,可以在全体上缩小系统的构建和保养老本。

代码可在 GitHub 上失掉:

2 环境搭建与数据预备

介绍经常使用独立的Python环境,例如Google Colab,以便治理名目依赖项。

接上去性能Neo4j图数据库以存储解析出的数据。介绍经常使用Neo4j Aura(),它提供方便的收费云服务,且与Google Colab笔记本完美兼容。

成功数据库的搭建后,可经过LlamaIndex建设数据库衔接。

from llama_index.graph_stores.neo4j import Neo4jPGStoreusername="neo4j"password="rubber-cuffs-radiator"url="bolt://54.89.19.156:7687"graph_store = Neo4jPGStore(username=username,password=password,url=url,refresh_schema=False)

数据集

这里经常使用一个资讯数据集启动剖析,这个数据集是经过Diffbot API()失掉的。

import pandas as pdNUMBER_OF_ARTICLES = 100news = pd.read_csv("https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/news_articles.csv")news = news.head(NUMBER_OF_ARTICLES)

3 技术成功

消息提取流程首先从指代消解着手,其义务是识别文本中指代相反实体的不同表述。

据了解,目前可用于指代消解的开源模型相对较少。经过尝试比拟,这里选用经常使用spaCy的Coreferee()。须要留意的是,经常使用Coreferee或许会遇到一些依赖性疑问。

加载spaCy中的指代消解模型,经常使用以下代码成功:

import spacy, corefereecoref_nlp = spacy.load('en_core_web_lg')coref_nlp.add_pipe('coreferee')

Coreferee模型能够识别文本中指代相反实体或实体组的表白式集群。为了依据这些识别出的集群对文本启动重写,须要自定义函数来成功这一环节。

def coref_text(text):coref_doc = coref_nlp(text)resolved_text = ""for token in coref_doc:repres = coref_doc._.coref_chains.resolve(token)if repres:resolved_text += " " + "and".join([t.textif t.ent_type_ == ""else [e.text for e in coref_doc.ents if t in e][0]for t in repres])else:resolved_text += " " + token.textreturn resolved_text

测试下这个函数,确保模型和依赖项设置正确:

print(coref_text("Tomaz is so cool. He can solve various Python dependencies and not cry"))

在这个例子中,模型成功识别出“Tomaz”和“He”实践上指向同一实体。经过运行coref_text函数,将“Tomaz”交流“He”。

请留意,这种重写机制并不总能生成齐全合乎语法规定的句子,由于它驳回了一种间接的交流逻辑来处置文本中的实体集群。虽然如此,关于大少数运行场景,这种方法曾经足够有效。

如今把这一指代消解技术运行于咱们的资讯数据集,并将其转换为LlamaIndex文档格局:

from llama_index.core import Documentnews["coref_text"] = news["text"].apply(coref_text)documents = [Document(text=f"{row['title']}: {row['coref_text']}")for i, row in news.iterrows()]

实体链接和相关提取

Relik库集成了实体链接和相关提取两大性能,能够将这两种技术融合运行。实体链接时,Relik以维基百科为附丽,成功文本实体与百科条目标精准对应。

将实体链接到维基百科

在相关提取方面,Relik经过辨识和定义文本中实体间的相关,协助咱们将原始的非结构化数据转化为有序的结构化消息。

相关提取

假设你经常使用的是Colab的收费版本,请选用relik-ie/relik-relation-extraction-small模型,这个模型专门担任相关提取。假设有Colab Pro版本,或许计划在本地更高性能的机器上运转,那么可以尝试relik-ie/relik-cie-small模型,它不只蕴含相关提取,还能启动实体链接的性能。

from llama_index.extractors.relik.base import RelikPathExtractorrelik = RelikPathExtractor(model="relik-ie/relik-relation-extraction-small")# 在Pro Collab上经常使用GPU# relik = RelikPathExtractor(#model="relik-ie/relik-cie-small", model_cnotallow={"skip_metadata": True, "device":"cuda"}# )

此外,咱们必定定义将用于嵌入实体的嵌入模型,以及用于问答流程的LLM:

import osfrom llama_index.embeddings.openai import OpenAIEmbeddingfrom llama_index.llms.openai import OpenAIos.environ["OPENAI_API_KEY"] = "sk-"llm = OpenAI(model="gpt-4o", temperature=0.0)embed_model = OpenAIEmbedding(model_name="text-embedding-3-small")

留意在构建常识图谱的环节中,不会经常使用大型言语模型(LLM)。

4 常识图谱的构建与运行

目前,一切预备上班曾经就绪。接上去,可以创立PropertyGraphIndex实例,并将资讯文档作为数据输入,整合进常识图谱中。

此外,为了提取文档中的相关,须要将relik模型设置为kg_extractors参数的值。

from llama_index.core import PropertyGraphIndexindex = PropertyGraphIndex.from_documents(documents,kg_extractors=[relik],llm=llm,embed_model=embed_model,property_graph_store=graph_store,show_progress=True,)

构建图后,可以关上Neo4j阅读器来验证导入的图。经过运转以下Cypher语句取得相似的可视化:

MATCH p=(:__Entity__)--(:__Entity__)RETURN p LIMIT 250

结果:

5 问答性能成功

经常使用LlamaIndex,如今可以轻松地启动问答。只无应用系统自带的图检索器,便能够间接提出疑问:

query_engine = index.as_query_engine(include_text=True)response = query_engine.query("What happened at Ryanair?")print(str(response))

这就是定义的 LLM 和嵌入模型施展作用的中央。

6 总结

不依赖大型言语模型构建常识图谱是实际可行,具备老本效益且效率高。经过优化调整如Relik框架中的小型、义务专精的模型,检索增强型生成运行便能高效提敞开息。

实体链接作为主要步骤,确保了识别出的实体能够准确映射到常识库中的对应条目,从而维持了常识图谱的完整性与适用性。

借助Relik框架和Neo4j平台,咱们能够构建出性能弱小的常识图谱,这些图谱可以助力复杂的数据剖析和检索义务,而且防止了部署大型言语模型所带来的高昂老本。这种方法不只让先进的数据处置工具变得愈加亲民,也推进了消息提取流程的翻新与效率。

本文转载自​​,作者:

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:http://www.duobeib.com/diannaowangluoweixiu/5536.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号