instruct ner
1.0.0
基於現代大型語言模型 (LLM) 的複雜命名實體辨識任務(和子任務嵌套 NER)的解決方案。
你應該為每個文本和標籤建立Python字典。讓我們來看看俄羅斯藥物反應語料庫 (RuDReC) 中的一個簡化範例。
Это старый-добрый Римантадин, только в сиропе.
Римантадин - Drugname, сиропе - Drugform
Instruction
-LLM的任務描述英語:
您正在解決 NER 問題。從與以下每個實體相關的文字單字中摘錄:藥物名稱、藥物類別、DI、ADR、Finding。
英語:
您正在解決 NER 問題。從與以下每個實體相關的文字單字中摘錄:藥物名稱、藥物類別、DI、ADR、Finding。
dictionary with labels
。您可以使用兩個受支援的版本之一。
raw_entities = {
'Drugname' : [ 'Римантадин' ],
'Drugclass' : [],
'Drugform' : [ 'сиропе' ],
'DI' : [],
'ADR' : [],
'Finding' : []
}
short_form_output = True ( available with Nerel - BIO and MultiCoNER )
raw_entities = {
'Drugname' : [ 'Римантадин' ],
'Drugform' : [ 'сиропе' ]
}
MODEL_INPUT_TEMPLATE
。 MODEL_INPUT_TEMPLATE = {
'prompts_input' : "### Задание: {instruction} n ### Вход: {inp} n ### Ответ: " ,
'output_separator' : "Ответ: "
}
或者英文版
MODEL_INPUT_TEMPLATE = {
'prompts_input' : "### Task: {instruction} n ### Input: {inp} n ### Answer: " ,
'output_separator' : "Answer: "
}
Instruction
instruction_ner/utils/instruct_dataset.py
class Instruction ( TypedDict ):
instruction : str
input : str
output : str
source : str
raw_entities : dict [ str , list [ str ]]
id : str
{ 'instruction' : 'Ты решаешь задачу NER. Извлеки из текста слова, относящиеся к каждой из следующих сущностей: Drugname, Drugclass, DI, ADR, Finding.' ,
'input' : 'Это старый-добрый Римантадин, только в сиропе. n ' ,
'output' : 'Drugname: Римантадин n Drugclass: n Drugform: сиропе n DI: n ADR: n Finding: n ' ,
'source' : '### Задание: Ты решаешь задачу NER. Извлеки из текста слова, относящиеся к каждой из следующих сущностей: Drugname, Drugclass, DI, ADR, Finding. n ### Вход: Это старый-добрый Римантадин, только в сиропе. n ### Ответ: ' ,
'raw_entities' : { 'Drugname' : [ 'Римантадин' ],
'Drugclass' : [],
'Drugform' : [ 'сиропе' ],
'DI' : [],
'ADR' : [],
'Finding' : []},
'id' : '1_2555494.tsv' }
instruction_ner/utils/
instructions
培訓您的法學碩士 python medner / instruction_ner / train_instruct . py
- - config_file medner / instruction_ner / configs / mistral_7b . json
- - model_type mistral
- - dataset_name conll2003
- - max_instances - 1
- - push_to_hub True
- - hf_name_postfix _extended_instruction
prediction.json
的instructions
推斷您的 LLM python medner / instruction_ner / inference_instruct . py
- - batch_size 16
- - dataset_name conll2003
- - model_type mistral
- - model_name poteminr / mistral - conll2003_extended_instruction
- - max_instances - 1
instruction_ner/metric.py
您可以將實作的函數與 inference_instruct 的輸出一起使用來計算指標。
import pandas as pd
from utils . rudrec . rudrec_utis import ENTITY_TYPES
from metric import calculate_metrics_from_dataframe
prediction = pd . read_json ( 'prediction.json' )
prediction . head ( 3 )
ID | 提取的 | 目標 | |
---|---|---|---|
0 | 8_1443820.tsv | {'藥物名稱': [], '藥物類別': [], '藥物形式': ['片劑'], 'DI': [], 'ADR': [], '發現': []} | {'藥物名稱': [], '藥物類別': [], '藥物形式': ['片劑'], 'DI': [], 'ADR': [], '發現': []} |
1 | 1_2555494.tsv | {'藥物名稱': ['金剛乙胺'], '藥物類別': [], '藥物形式': ['糖漿'], 'DI': [], 'ADR': [], '發現' : []} | {'藥物名稱': ['金剛乙胺'], '藥物類別': [], '藥物形式': ['糖漿'], 'DI': [], 'ADR': [], '發現' : []} |
2 | 1_618967.tsv | {'藥物名稱': [], '藥物類別': [], '藥物形式': [], 'DI': [], 'ADR': [], '發現': []} | {'藥物名稱': [], '藥物類別': [], '藥物形式': [], 'DI': [], 'ADR': [], '發現': []} |
from metric import calculate_metrics_from_dataframe
metrics = calculate_metrics_from_dataframe ( prediction , ENTITY_TYPES )
{ 'Drugname' : { 'precision' : 0.9670250896057347 ,
'recall' : 0.9195637355146558 ,
'f1' : 0.9426974143955277 }, ...}
您可以探索 5 種類型的模型錯誤:
錯誤辨識的混淆矩陣是可用的。
NER 的指令 LLM 在平面實體上表現良好,但在具有大型標記集和嵌套實體的資料集上表現不佳。
因此,LLM 和編碼器模型在訓練和推理時間極其不同的扁平資料集上產生了可比較的結果。
以及 HF 上的其他型號,例如 T5、Llama、Mistral:poteminr