当前位置: 首页 > news >正文

知识图谱构架

目录

知识图谱构架

一、StanfordNLP 和 spaCy 工具介绍

(一)StanfordNLP

主要功能

使用示例

(二)spaCy

主要功能

使用示例

二、CRF 和 BERT 的基本原理和入门

(一)CRF(条件随机场)

基本原理

训练与解码

(二)BERT(Bidirectional Encoder Representations from Transformers)

基本原理

使用示例

三、BERT 的使用

(一)文本分类

(二)问答系统

(三)命名实体识别(NER)


一、StanfordNLP 和 spaCy 工具介绍

(一)StanfordNLP

StanfordNLP 是一组用于自然语言处理的工具包,由斯坦福大学开发。它支持多种语言,并提供了丰富的功能,包括分词、词性标注、命名实体识别、句法分析、语义角色标注等。

主要功能
  1. 分词

    • 将文本分割成单词或短语。例如,在中文中,将“我喜欢自然语言处理”分割为“我/喜欢/自然/语言/处理”。

  2. 词性标注

    • 为文本中的每个单词标注其词性。例如,“run” 可以标注为动词(“跑步”)或名词(“跑道”)。

  3. 命名实体识别(NER)

    • 识别文本中的实体,如人名、地名、组织名等。例如,在文本“苹果公司发布了新一代iPhone”中,识别“苹果公司”为组织名,“iPhone”为产品名。

  4. 句法分析

    • 分析句子的结构,生成句法树。例如,分析句子“我爱自然语言处理”的句法结构,确定主语、谓语和宾语。

  5. 语义角色标注

    • 识别句子中的语义角色,如施事、受事、工具等。例如,在句子“他用刀切苹果”中,识别“他”为施事,“苹果”为受事,“刀”为工具。

使用示例
from stanfordnlp.server import CoreNLPClient# 启动 CoreNLP 服务器
with CoreNLPClient(annotators=['tokenize', 'ssplit', 'pos', 'lemma', 'ner', 'parse', 'depparse'], timeout=30000, memory='16G') as client:# 提交请求doc = client.annotate("我爱自然语言处理。")# 打印结果print(doc)

(二)spaCy

spaCy 是一个高效的 NLP 库,专为生产环境设计。它支持多种语言,并提供了丰富的预训练模型,能够快速处理大规模文本数据。

主要功能
  1. 分词

    • 将文本分割成单词或短语。例如,在英文中,将“I love natural language processing.”分割为“I/love/natural/language/processing”。

  2. 词性标注

    • 为文本中的每个单词标注其词性。例如,“run” 可以标注为动词(“VB”)或名词(“NN”)。

  3. 命名实体识别(NER)

    • 识别文本中的实体,如人名、地名、组织名等。例如,在文本“Apple Inc. released a new iPhone.”中,识别“Apple Inc.”为组织名,“iPhone”为产品名。

  4. 依存句法分析

    • 分析句子中单词之间的依存关系。例如,在句子“I love natural language processing.”中,分析“love”和“I”之间的主谓关系,“love”和“natural language processing”之间的动宾关系。

  5. 文本分类

    • 对文本进行分类,如情感分析、主题分类等。例如,判断一条评论是正面还是负面。

使用示例
import spacy# 加载英文模型
nlp = spacy.load("en_core_web_sm")# 处理文本
doc = nlp("I love natural language processing.")# 打印结果
for token in doc:print(token.text, token.pos_, token.dep_)

二、CRF 和 BERT 的基本原理和入门

(一)CRF(条件随机场)

基本原理

CRF 是一种判别式模型,用于序列标注任务。它通过定义条件概率分布来建模标注序列和观测序列之间的关系。CRF 的核心思想是:在给定观测序列的情况下,找到使条件概率最大的标注序列。

CRF 的条件概率分布定义为:

P(Y∣X)=∑Y′​exp(∑i=1n​∑k=1K​λk​fk​(yi−1′​,yi′​,X,i)))exp(∑i=1n​∑k=1K​λk​fk​(yi−1​,yi​,X,i))​

其中:

  • Y 是标注序列

  • X 是观测序列

  • fk​ 是特征函数

  • λk​ 是特征权重

  • n 是序列长度

  • K 是特征数量

训练与解码
  1. 训练

    • 使用动态规划算法计算特征函数的期望值。

    • 使用梯度下降或 L-BFGS 等优化算法更新特征权重。

  2. 解码

    • 使用维特比算法找到使条件概率最大的标注序列。

(二)BERT(Bidirectional Encoder Representations from Transformers)

基本原理

BERT 是一种基于 Transformer 的预训练语言模型,用于生成文本的深度双向表示。BERT 的核心思想是:通过在大规模无监督语料上进行预训练,学习文本的通用语言知识,然后在特定任务上进行微调,以适应具体的应用场景。

BERT 的架构基于 Transformer 的编码器部分,采用多层自注意力机制捕捉文本中的长距离依赖关系。BERT 的预训练任务主要包括:

  1. 掩盖语言模型(Masked Language Model, MLM)

    • 随机掩盖输入序列中的一部分单词,让模型预测这些被掩盖单词的值。

  2. 下一句预测(Next Sentence Prediction, NSP)

    • 判断两个句子是否是连续的文本。

使用示例
from transformers import BertTokenizer, BertModel# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')# 分词和编码
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)# 获取最后一层的隐藏状态
last_hidden_states = outputs.last_hidden_state

三、BERT 的使用

BERT 在多种 NLP 任务中表现出色,以下是一些常见的应用:

(一)文本分类

BERT 可用于文本分类任务。通过在预训练的 BERT 模型基础上添加一个分类层,可以对文本进行分类。例如,在情感分析任务中,判断评论文本是正面还是负面。

from transformers import BertTokenizer, BertForSequenceClassification
import torch# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')# 分词和编码
inputs = tokenizer("I love natural language processing.", return_tensors="pt")
labels = torch.tensor([1]).unsqueeze(0)  # 假设是正面情感# 训练
outputs = model(**inputs, labels=labels)
loss = outputs.loss
logits = outputs.logits

(二)问答系统

BERT 可用于问答系统。通过在预训练的 BERT 模型基础上添加一个问答层,可以回答与给定上下文相关的问题。

from transformers import BertTokenizer, BertForQuestionAnswering# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
model = BertForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')# 分词和编码
question = "Who is the founder of Apple Inc.?"
context = "Apple Inc. was founded by Steve Jobs, Steve Wozniak, and Ronald Wayne."
inputs = tokenizer(question, context, return_tensors="pt")
start_positions = torch.tensor([1])
end_positions = torch.tensor([3])# 训练
outputs = model(**inputs, start_positions=start_positions, end_positions=end_positions)
loss = outputs.loss
start_scores = outputs.start_logits
end_scores = outputs.end_logits

(三)命名实体识别(NER)

BERT 可用于命名实体识别任务。通过在预训练的 BERT 模型基础上添加一个 NER 层,可以识别文本中的实体。

from transformers import BertTokenizer, BertForTokenClassification# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('dbmdz/bert-large-cased-finetuned-conll03-english')
model = BertForTokenClassification.from_pretrained('dbmdz/bert-large-cased-finetuned-conll03-english')# 分词和编码
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
labels = torch.tensor([1, 2, 3, 4, 5]).unsqueeze(0)  # 假设标签# 训练
outputs = model(**inputs, labels=labels)
loss = outputs.loss
logits = outputs.logits

BERT 的使用方法灵活多样,可以根据具体任务进行微调,以实现最佳性能。通过合理利用 BERT 的预训练能力和强大的语言理解能力,可以显著提升 NLP 应用的效果。

http://www.xdnf.cn/news/559261.html

相关文章:

  • 从无标注的病理切片中自动提取临床相关的组织形态表型簇,探索其与患者预后、分子表型以及治疗反应的关联
  • HuggingFace全栈开发指南:从零构建AI应用的技术全景图
  • 【嵌入式】ESP32 Flash专题
  • java基础-异常
  • 2.前端汇总
  • 《初入苍穹:大一新手的编程成长之旅》
  • SpringBoot 项目实现操作日志的记录(使用 AOP 注解模式)
  • C++类与对象--6 特性二:继承
  • springMVC拦截器,拦截器拦截策略设置
  • 破解误区:WebView 调试常见认知误区与 WebDebugX 实践指南
  • AnyText2 在图片里玩文字而且还是所想即所得
  • V2X协议|如何做到“车联万物”?【无线通信小百科】
  • Hutool 常用工具类实战指南
  • selenium——基础知识
  • 数据一致性校验算法
  • 创建与管理MySQL数据库
  • Google精准狙击OpenAI Codex,发布AI编程助手Jules!
  • Fluent Bit持久化配置指南:保障日志不丢失的关键策略
  • Elasticsearch高级面试题汇总及答案
  • AMBA三种总线详解并比较
  • 元宇宙赋能广州文化传承,激发新活力​
  • C语言学习之内存函数
  • AI练习:毛发旋转效果
  • 再议AOI算法
  • 通过强化学习让大模型自适应开启思考模式
  • 101个α因子#9
  • C++(3)
  • idea如何让文件夹分层显示,而不是圆点分割
  • Python训练营打卡 Day31
  • 模板引擎:FreeMarker