instruct ner
1.0.0
최신 LLM(대형 언어 모델)을 기반으로 하는 복잡한 명명된 엔터티 인식 작업(및 하위 작업 Nested NER) 솔루션입니다.
모든 텍스트와 라벨에 대해 Python 사전을 구성해야 합니다. RuDReC(Russian Drug Reaction Corpus)의 간단한 예를 살펴보겠습니다.
Это старый-добрый Римантадин, только в сиропе.
Римантадин - Drugname, сиропе - Drugform
Instruction
생성 - LLM에 대한 작업 설명영어:
NER 문제를 해결하고 있습니다. 약물 이름, 약물 클래스, DI, ADR, 조사 결과 각각과 관련된 텍스트 단어를 추출합니다.
영어:
NER 문제를 해결하고 있습니다. 약물 이름, 약물 클래스, DI, ADR, 조사 결과 각각과 관련된 텍스트 단어를 추출합니다.
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
에 따라 LLM 교육 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': [], 'Finding': []} | {'약물 이름': [], '약물 등급': [], '약제 형태': [], 'DI': [], 'ADR': [], 'Finding': []} |
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과 인코더 모델은 훈련 및 추론 시간이 엄청나게 다른 평면 데이터 세트에서 비슷한 결과를 생성합니다.
T5, Llama, Mistral과 같은 HF의 기타 모델: poteminr