Kgt5 Wikikg90mv2
模型概述
該模型針對知識圖譜補全任務設計,能夠根據給定的主語實體和關係預測最可能的賓語實體。輸入格式為'<實體文本>|<關係文本>',輸出為預測的實體文本。
模型特點
文本到文本預測
採用T5的文本到文本框架處理知識圖譜預測任務
大規模知識圖譜訓練
基於包含9000萬實體的WikiKG90Mv2數據集訓練
採樣優化策略
通過大規模採樣(300次/輸入)和過濾提升預測準確率
模型能力
知識圖譜補全
實體關係預測
文本到文本轉換
使用案例
知識管理
姓氏預測
根據人名預測可能的姓氏
示例輸入:'Apoorv Umang Saxena|姓氏'
歷史事件關聯
預測歷史事件的後續發展
示例輸入:'第二次世界大戰|後續事件'
🚀 T5小模型(基於WikiKG90Mv2數據集)
這是一個在WikiKG90Mv2數據集上從頭開始訓練的t5-small模型。該模型主要用於尾實體預測任務,即給定主題實體和關係,預測對象實體。
🚀 快速開始
本模型是在WikiKG90Mv2數據集上進行訓練的,訓練約1.5個輪次,使用4塊1080Ti GPU,每個輪次的訓練時間約為5.5天。要評估該模型,可對每個輸入 (s, r) 對從解碼器採樣300次,然後移除無法映射回有效實體的預測結果,並根據對數概率對預測結果進行排序,最後進行過濾。該模型在驗證集上的MRR為0.22。
✨ 主要特性
- 訓練數據:使用WikiKG90Mv2數據集進行訓練。
- 訓練任務:專注於尾實體預測任務。
- 評估方法:對每個輸入採樣300次,過濾無效預測並排序。
📦 安裝指南
你可以使用以下代碼在ipython筆記本中評估預訓練模型:
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("apoorvumang/kgt5-wikikg90mv2")
model = AutoModelForSeq2SeqLM.from_pretrained("apoorvumang/kgt5-wikikg90mv2")
💻 使用示例
基礎用法
# 一個驗證集中模型預測正確的示例
# 你可以在這裡嘗試自己的示例。你的貴族頭銜是什麼?
input = "Sophie Valdemarsdottir| noble title"
out = topkSample(input, model, tokenizer, num_samples=5)
out
高級用法
以下是一些輔助函數的代碼,用於獲取序列分數、採樣和貪婪預測:
import torch
def getScores(ids, scores, pad_token_id):
"""get sequence scores from model.generate output"""
scores = torch.stack(scores, dim=1)
log_probs = torch.log_softmax(scores, dim=2)
# remove start token
ids = ids[:,1:]
# gather needed probs
x = ids.unsqueeze(-1).expand(log_probs.shape)
needed_logits = torch.gather(log_probs, 2, x)
final_logits = needed_logits[:, :, 0]
padded_mask = (ids == pad_token_id)
final_logits[padded_mask] = 0
final_scores = final_logits.sum(dim=-1)
return final_scores.cpu().detach().numpy()
def topkSample(input, model, tokenizer,
num_samples=5,
num_beams=1,
max_output_length=30):
tokenized = tokenizer(input, return_tensors="pt")
out = model.generate(**tokenized,
do_sample=True,
num_return_sequences = num_samples,
num_beams = num_beams,
eos_token_id = tokenizer.eos_token_id,
pad_token_id = tokenizer.pad_token_id,
output_scores = True,
return_dict_in_generate=True,
max_length=max_output_length,)
out_tokens = out.sequences
out_str = tokenizer.batch_decode(out_tokens, skip_special_tokens=True)
out_scores = getScores(out_tokens, out.scores, tokenizer.pad_token_id)
pair_list = [(x[0], x[1]) for x in zip(out_str, out_scores)]
sorted_pair_list = sorted(pair_list, key=lambda x:x[1], reverse=True)
return sorted_pair_list
def greedyPredict(input, model, tokenizer):
input_ids = tokenizer([input], return_tensors="pt").input_ids
out_tokens = model.generate(input_ids)
out_str = tokenizer.batch_decode(out_tokens, skip_special_tokens=True)
return out_str[0]
🔧 技術細節
- 實體和關係表示:使用原始文本標題和描述來獲取實體和關係的文本表示。這些原始文本來自ogb數據集本身(dataset/wikikg90m-v2/mapping/entity.csv和relation.csv)。實體表示設置為標題,如果兩個實體具有相同的標題,則使用描述進行消歧。如果仍然無法消歧,則使用wikidata ID(例如Q123456)。
- 評估過程:對每個輸入 (s, r) 對從解碼器採樣300次,移除無法映射回有效實體的預測結果,根據對數概率對預測結果進行排序,然後進行過濾。
📚 詳細文檔
你可以從以下鏈接獲取更多詳細信息:
- 方法詳情:https://github.com/apoorvumang/kgt5/
- 完整排行榜:https://ogb.stanford.edu/docs/lsc/leaderboards/#wikikg90mv2
📄 許可證
本項目採用MIT許可證。
其他補充說明
你可以進一步加載實體別名列表,然後過濾出有效的實體預測,再創建從別名到整數ID的反向映射,以獲得所需格式的最終預測結果。不過,將這些別名作為字典加載到內存中需要大量的RAM,並且你需要下載別名文件(可從https://storage.googleapis.com/kgt5-wikikg90mv2/ent_alias_list.pickle 下載,關係文件:https://storage.googleapis.com/kgt5-wikikg90mv2/rel_alias_list.pickle)。
以下是一些用於下載驗證集文件和評估模型的代碼示例:
# download valid.txt. you can also try same url with test.txt. however test does not contain the correct tails
!wget https://storage.googleapis.com/kgt5-wikikg90mv2/valid.txt
fname = 'valid.txt'
valid_lines = []
f = open(fname)
for line in f:
valid_lines.append(line.rstrip())
f.close()
print(valid_lines[0])
from tqdm.auto import tqdm
# try unfiltered hits@k. this is approximation since model can sample same seq multiple times
# you should run this on gpu if you want to evaluate on all points with 300 samples each
k = 1
count_at_k = 0
max_predictions = k
max_points = 1000
for line in tqdm(valid_lines[:max_points]):
input, target = line.split('\t')
model_output = topkSample(input, model, tokenizer, num_samples=max_predictions)
prediction_strings = [x[0] for x in model_output]
if target in prediction_strings:
count_at_k += 1
print('Hits at {0} unfiltered: {1}'.format(k, count_at_k/max_points))
⚠️ 重要提示
完整的實體映射到ID、過濾等過程為了簡化未包含在此處,但如有需要可按需提供。如有疑問或需要詳細信息,請聯繫Apoorv (apoorvumang@gmail.com)。
💡 使用建議
如果你想對所有點進行評估,每個點採樣300次,建議在GPU上運行代碼。
Rebel Large
REBEL是一種基於BART的序列到序列模型,用於端到端關係抽取,支持200多種不同關係類型。
知識圖譜
Transformers 英語

R
Babelscape
37.57k
219
Nel Mgenre Multilingual
基於mGENRE的多語言生成式實體檢索模型,針對歷史文本優化,支持100+種語言,特別適配法語、德語和英語的歷史文檔實體鏈接。
知識圖譜
Transformers 支持多種語言

N
impresso-project
17.13k
2
Biomednlp KRISSBERT PubMed UMLS EL
MIT
KRISSBERT是一個基於知識增強自監督學習的生物醫學實體鏈接模型,通過利用無標註文本和領域知識訓練上下文編碼器,有效解決實體名稱多樣性變異和歧義性問題。
知識圖譜
Transformers 英語

B
microsoft
4,643
29
Coder Eng
Apache-2.0
CODER是一種知識增強型跨語言醫學術語嵌入模型,專注於醫學術語規範化任務。
知識圖譜
Transformers 英語

C
GanjinZero
4,298
4
Umlsbert ENG
Apache-2.0
CODER是一個基於知識注入的跨語言醫學術語嵌入模型,專注於醫學術語標準化任務。
知識圖譜
Transformers 英語

U
GanjinZero
3,400
13
Text2cypher Gemma 2 9b It Finetuned 2024v1
Apache-2.0
該模型是基於google/gemma-2-9b-it微調的Text2Cypher模型,能夠將自然語言問題轉換為Neo4j圖數據庫的Cypher查詢語句。
知識圖譜
Safetensors 英語
T
neo4j
2,093
22
Triplex
Triplex是SciPhi.AI基於Phi3-3.8B微調的模型,專為從非結構化數據構建知識圖譜設計,可將知識圖譜創建成本降低98%。
知識圖譜
T
SciPhi
1,808
278
Genre Linking Blink
GENRE是一種基於序列到序列方法的實體檢索系統,採用微調後的BART架構,通過受約束的束搜索技術生成唯一實體名稱。
知識圖譜 英語
G
facebook
671
10
Text To Cypher Gemma 3 4B Instruct 2025.04.0
Gemma 3.4B IT 是一個基於文本到文本生成的大語言模型,專門用於將自然語言轉換為Cypher查詢語言。
知識圖譜
Safetensors
T
neo4j
596
2
Mrebel Large
REDFM是REBEL的多語言版本,用於多語言關係抽取任務,支持18種語言的關係三元組提取。
知識圖譜
Transformers 支持多種語言

M
Babelscape
573
71
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98