采用模块化的流程方法进行语言分析,将非结构化文本转换为像spaCy的Doc对象这样的结构化数据对象。
# 下载预训练模型
$ python -m spacy download en_core_web_trf# 加载模型并进行实体识别
nlp = spacy.load("en_core_web_trf")
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.label_)
# 可视化实体
displacy.serve(doc, style="ent")通过定义模式来匹配文本结构,例如提取“治疗组”信息。
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
pattern = [
{"LOWER": "patients"},
{"POS": {"IN": ["SYM", "NUM", "PUNCT"]}, "OP": "+"},
{"LOWER": "received"},
{"POS": {"IN": ["ADJ", "NOUN", "NUM", "ADP", "SYM"]}, "OP": "+"}
]
matcher.add("TreatmentGroup", [pattern])
matches = matcher(doc, as_spans=True)
for span in matches:
print(span.text)规则匹配器帮助探索数据并理解任务复杂性,可通过弱标记引导标注过程。
通常需要针对特定领域和业务场景训练监督模型,例如:
通过配置文件(.cfg)捕获所有训练设置,实现序列化和可复现性。
$ python -m spacy init config my_config.cfg --lang en --pipeline ner,spancat配置文件中可以定义流程组件、训练参数和模型架构。
[nlp]
lang = "en"
pipeline = ["tok2vec","ner","spancat"]
batch_size = 1000
[training]
seed = 342
dropout = 0.1
max_steps = 20000
[components.spancat]
factory = "spancat"
spans_key = "sc"
# ... 其他配置训练命令如下,系统会自动保存最佳模型。
$ python -m spacy train my_config.cfg --output ./my_output# 加载训练好的最佳模型
nlp = spacy.load("my_output/model-best")
doc = nlp(text)将LLM集成到生产就绪的结构化NLP流程中。
Doc对象上的结构化注解。配置文件定义使用某机构OpenAI的GPT-3.5-turbo模型进行零样本命名实体识别。
[nlp]
lang = "en"
pipeline = ["llm"]
[components]
[components.llm]
factory = "llm"
[components.llm.backend]
@llm_backends = "spacy.REST.v1"
api = "OpenAI"
[components.llm.backend.config]
model = "gpt-3.5-turbo"
[components.llm.task]
@llm_tasks = "spacy.NER.v2"
labels = "Drug,Dose"from spacy_llm.util import assemble
nlp = assemble("my_config.cfg")
doc = nlp(text)通过修改配置文件,可以轻松地将任务从NER切换到文本分类,或将后端从某机构OpenAI的GPT模型切换到开源的Dolly模型。
通过定义指令和解析逻辑,创建自定义任务。
INSTRUCTION = """ Summarize the trial results in a structured fashion like so:
Patient group: <name>
Number of patients in the group: <number>
Treatment drug or substance: <drug>
Treatment dose: <drug>
... """
class TrialSummaryTask:
def generate_prompts(self, docs):
# 为每个文档生成提示词
pass
def parse_responses(self, docs, responses):
# 解析LLM的响应并添加到Doc对象中
pass
@registry.llm_tasks("hedgy.TrialSummary.v1")
def make_trial_task():
return TrialSummaryTask()解析函数可以将LLM的自由文本输出解析成结构化字段,并作为Doc对象的实体供下游流程使用。
三种技术在不同维度(如准确性、速度、成本、可解释性)上各有优劣。
从使用LLM进行快速原型验证开始,然后根据业务需求,逐步用监督学习、规则等进行替换、集成或微调。
利用LLM的零样本预测生成初始标注,然后通过人工筛选和校正,快速构建用于训练监督模型的训练数据和用于评估的测试数据。
在将文本发送给第三方LLM之前,使用本地的NER系统识别并替换个人身份信息,避免敏感数据泄露。
先使用文本分类器筛选出包含特定主题或实体的句子,再发送给LLM,从而降低成本和优化提示词。
利用规则或实体链接系统,对LLM返回的自由文本响应进行规范化处理,将其连接到知识库,提高下游流程的鲁棒性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。