成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高效打造知識(shí)圖譜,使用LlamaIndex Relik實(shí)現(xiàn)實(shí)體關(guān)聯(lián)和關(guān)系抽取 精華

發(fā)布于 2024-8-20 10:00
瀏覽
0收藏

文本信息轉(zhuǎn)化為知識(shí)圖譜的技術(shù),自問世以來一直是研究界的寵兒。大型語(yǔ)言模型(LLMs)的興起讓這個(gè)領(lǐng)域受到更多關(guān)注,但LLMs的成本之高令人卻步。然而,通過對(duì)小型模型微調(diào)優(yōu)化,我們可以找到一種更經(jīng)濟(jì)高效的解決方案。

今天向大家介紹Relik,這是由羅馬大學(xué)(Sapienza University of Rome)自然語(yǔ)言處理團(tuán)隊(duì)精心研發(fā)的快速、輕量級(jí)信息提取框架。

1 信息提取流程

在不依賴LLMs的情況下,信息提取流程通常包括:

高效打造知識(shí)圖譜,使用LlamaIndex Relik實(shí)現(xiàn)實(shí)體關(guān)聯(lián)和關(guān)系抽取-AI.x社區(qū)

上圖呈現(xiàn)了信息提取的完整流程。始于一段簡(jiǎn)單的文本輸入:“Tomaz likes to write blog posts. He is particularly interested in drawing diagrams.”。流程首先進(jìn)行指代消解,將“Tomaz”和“He”識(shí)別為同一人。緊接著,命名實(shí)體識(shí)別(NER)技術(shù)辨識(shí)出“Tomaz”、“Blog”和“Diagram”等關(guān)鍵實(shí)體。

隨后,實(shí)體鏈接環(huán)節(jié)將這些識(shí)別出的實(shí)體與數(shù)據(jù)庫(kù)或知識(shí)庫(kù)中的相應(yīng)條目相對(duì)應(yīng)。例如,“Tomaz”對(duì)應(yīng)到“Tomaz Bratanic (Q12345)”,“Blog”對(duì)應(yīng)到“Blog (Q321)”。然而,"Diagram"在知識(shí)庫(kù)中未找到匹配項(xiàng)。

接下來,關(guān)系提取步驟進(jìn)一步分析實(shí)體間的聯(lián)系,如識(shí)別出“Tomaz”與“Blog”之間存在“WRITES”關(guān)系,說明Tomaz撰寫博客;“Tomaz”與“Diagram”之間存在“INTERESTED_IN”關(guān)系,表明他對(duì)圖表有興趣。

最后,這些經(jīng)過結(jié)構(gòu)化的實(shí)體和關(guān)系信息被整合進(jìn)知識(shí)圖譜中,為后續(xù)的數(shù)據(jù)分析或信息檢索提供了有序且易于訪問的資源。

在沒有大型語(yǔ)言模型(LLMs)支持的情況下,信息提取工作通常依賴一系列專業(yè)模型來分別處理指代消解、命名實(shí)體識(shí)別、實(shí)體鏈接和關(guān)系提取等任務(wù)。整合這些模型需要付出額外的工作和細(xì)致的調(diào)整,但這種方法能夠有效降低成本。通過使用和優(yōu)化這些小型、特定任務(wù)的模型,可以在整體上減少系統(tǒng)的構(gòu)建和維護(hù)成本。

代碼可在 GitHub 上獲取:https://github.com/tomasonjo/blogs/blob/master/llm/llama_relik.ipynb

2 環(huán)境搭建與數(shù)據(jù)準(zhǔn)備

推薦使用獨(dú)立的Python環(huán)境,例如Google Colab,以便管理項(xiàng)目依賴項(xiàng)。

接下來配置Neo4j圖數(shù)據(jù)庫(kù)以存儲(chǔ)解析出的數(shù)據(jù)。推薦使用Neo4j Aura(https://neo4j.com/cloud/platform/aura-graph-database/),它提供便捷的免費(fèi)云服務(wù),且與Google Colab筆記本完美兼容。

完成數(shù)據(jù)庫(kù)的搭建后,可通過LlamaIndex建立數(shù)據(jù)庫(kù)連接。

from llama_index.graph_stores.neo4j import Neo4jPGStore

username="neo4j"
password="rubber-cuffs-radiator"
url="bolt://54.89.19.156:7687"

graph_store = Neo4jPGStore(
    username=username,
    password=password,
    url=url,
    refresh_schema=False
)

數(shù)據(jù)集

這里使用一個(gè)新聞數(shù)據(jù)集進(jìn)行分析,這個(gè)數(shù)據(jù)集是通過Diffbot API(https://www.diffbot.com/data/article/)獲取的。

import pandas as pd

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

3 技術(shù)實(shí)現(xiàn)

信息提取流程首先從指代消解著手,其任務(wù)是識(shí)別文本中指代相同實(shí)體的不同表述。

據(jù)了解,目前可用于指代消解的開源模型相對(duì)較少。經(jīng)過嘗試比較,這里選擇使用spaCy的Coreferee(https://spacy.io/universe/project/coreferee)。需要注意的是,使用Coreferee可能會(huì)遇到一些依賴性問題。

加載spaCy中的指代消解模型,使用以下代碼實(shí)現(xiàn):

import spacy, coreferee

coref_nlp = spacy.load('en_core_web_lg')
coref_nlp.add_pipe('coreferee')

Coreferee模型能夠識(shí)別文本中指代相同實(shí)體或?qū)嶓w組的表達(dá)式集群。為了根據(jù)這些識(shí)別出的集群對(duì)文本進(jìn)行重寫,需要自定義函數(shù)來實(shí)現(xiàn)這一過程。

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.text
                    if 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.text

    return resolved_text

測(cè)試下這個(gè)函數(shù),確保模型和依賴項(xiàng)設(shè)置正確:

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

在這個(gè)例子中,模型成功識(shí)別出“Tomaz”和“He”實(shí)際上指向同一實(shí)體。通過應(yīng)用coref_text函數(shù),將“Tomaz”替換“He”。

請(qǐng)注意,這種重寫機(jī)制并不總能生成完全符合語(yǔ)法規(guī)則的句子,因?yàn)樗捎昧艘环N直接的替換邏輯來處理文本中的實(shí)體集群。盡管如此,對(duì)于大多數(shù)應(yīng)用場(chǎng)景,這種方法已經(jīng)足夠有效。

現(xiàn)在把這一指代消解技術(shù)應(yīng)用于我們的新聞數(shù)據(jù)集,并將其轉(zhuǎn)換為L(zhǎng)lamaIndex文檔格式:

from llama_index.core import Document

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

實(shí)體鏈接和關(guān)系提取

Relik庫(kù)集成了實(shí)體鏈接和關(guān)系提取兩大功能,能夠?qū)⑦@兩種技術(shù)融合應(yīng)用。實(shí)體鏈接時(shí),Relik以維基百科為依托,實(shí)現(xiàn)文本實(shí)體與百科條目的精準(zhǔn)對(duì)應(yīng)。

高效打造知識(shí)圖譜,使用LlamaIndex Relik實(shí)現(xiàn)實(shí)體關(guān)聯(lián)和關(guān)系抽取-AI.x社區(qū)

將實(shí)體鏈接到維基百科

在關(guān)系提取方面,Relik通過辨識(shí)和定義文本中實(shí)體間的關(guān)系,幫助我們將原始的非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為有序的結(jié)構(gòu)化信息。

高效打造知識(shí)圖譜,使用LlamaIndex Relik實(shí)現(xiàn)實(shí)體關(guān)聯(lián)和關(guān)系抽取-AI.x社區(qū)

關(guān)系提取

如果你使用的是Colab的免費(fèi)版本,請(qǐng)選擇relik-ie/relik-relation-extraction-small模型,這個(gè)模型專門負(fù)責(zé)關(guān)系提取。如果有Colab Pro版本,或者打算在本地更高性能的機(jī)器上運(yùn)行,那么可以嘗試relik-ie/relik-cie-small模型,它不僅包含關(guān)系提取,還能進(jìn)行實(shí)體鏈接的功能。

from llama_index.extractors.relik.base import RelikPathExtractor

relik = 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"}
# )

此外,我們必須定義將用于嵌入實(shí)體的嵌入模型,以及用于問答流程的LLM:

import os

from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI

os.environ["OPENAI_API_KEY"] = "sk-"

llm = OpenAI(model="gpt-4o", temperature=0.0)
embed_model = OpenAIEmbedding(model_name="text-embedding-3-small")

注意在構(gòu)建知識(shí)圖譜的過程中,不會(huì)使用大型語(yǔ)言模型(LLM)。

4 知識(shí)圖譜的構(gòu)建與應(yīng)用

目前,一切準(zhǔn)備工作已經(jīng)就緒。接下來,可以創(chuàng)建PropertyGraphIndex實(shí)例,并將新聞文檔作為數(shù)據(jù)輸入,整合進(jìn)知識(shí)圖譜中。

此外,為了提取文檔中的關(guān)系,需要將relik模型設(shè)置為kg_extractors參數(shù)的值。

from llama_index.core import PropertyGraphIndex

index = PropertyGraphIndex.from_documents(
    documents,
    kg_extractors=[relik],
    llm=llm,
    embed_model=embed_model,
    property_graph_store=graph_store,
    show_progress=True,
)

構(gòu)建圖后,可以打開Neo4j瀏覽器來驗(yàn)證導(dǎo)入的圖。通過運(yùn)行以下Cypher語(yǔ)句獲得類似的可視化:

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

結(jié)果:

高效打造知識(shí)圖譜,使用LlamaIndex Relik實(shí)現(xiàn)實(shí)體關(guān)聯(lián)和關(guān)系抽取-AI.x社區(qū)

5 問答功能實(shí)現(xiàn)

使用LlamaIndex,現(xiàn)在可以輕松地進(jìn)行問答。只需利用系統(tǒng)自帶的圖檢索器,便能夠直接提出問題:

query_engine = index.as_query_engine(include_text=True)

response = query_engine.query("What happened at Ryanair?")
print(str(response))

這就是定義的 LLM 和嵌入模型發(fā)揮作用的地方。

6 總結(jié)

不依賴大型語(yǔ)言模型構(gòu)建知識(shí)圖譜是切實(shí)可行,具有成本效益且效率高。通過優(yōu)化調(diào)整如Relik框架中的小型、任務(wù)專精的模型,檢索增強(qiáng)型生成應(yīng)用便能高效提取信息。

實(shí)體鏈接作為關(guān)鍵步驟,確保了識(shí)別出的實(shí)體能夠準(zhǔn)確映射到知識(shí)庫(kù)中的對(duì)應(yīng)條目,從而維持了知識(shí)圖譜的完整性與實(shí)用性。

借助Relik框架和Neo4j平臺(tái),我們能夠構(gòu)建出功能強(qiáng)大的知識(shí)圖譜,這些圖譜可以助力復(fù)雜的數(shù)據(jù)分析和檢索任務(wù),而且避免了部署大型語(yǔ)言模型所帶來的高昂成本。這種方法不僅讓先進(jìn)的數(shù)據(jù)處理工具變得更加親民,也推動(dòng)了信息提取流程的創(chuàng)新與效率。

本文轉(zhuǎn)載自 ??AI科技論談??,作者:小AI


標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
主站蜘蛛池模板: 国产精品国产成人国产三级 | 国产a区 | 九九热这里| 最新中文字幕第一页视频 | 中文字幕一区在线 | 成人国产精品 | av不卡一区| 亚洲免费在线 | 日韩精品一区在线 | 日韩精品在线播放 | 欧美黄色精品 | 日本成人福利 | 亚洲精品在线播放 | 亚洲精品久久久久中文字幕二区 | 久草新视频| 欧美视频第二页 | 在线免费观看黄视频 | 日韩精品一区二区三区 | 日韩欧美国产一区二区三区 | 午夜影院网站 | 国内精品久久久久久 | 成人av一区 | 久久久久久久亚洲精品 | 一区二区三区精品视频 | 玖玖综合网 | 美女网站视频免费黄 | 性视频一区 | 久久久999免费视频 999久久久久久久久6666 | 久操av在线 | 亚洲精品综合 | 亚洲手机视频在线 | 久久精品一区二区三区四区 | 欧美激情精品久久久久 | 色综合成人网 | 黄色国产视频 | 国产亚洲精品久久19p | 久久久久久久综合 | 大陆一级毛片免费视频观看 | 久草中文在线 | 日韩精品在线看 | 91黄色片免费看 |