Bert快速入门

news/2024/11/14 14:28:04/

Python 语言 BERT 入门:让我们一起“吃透”BERT

1. 什么是 BERT?

BERT(Bidirectional Encoder Representations from Transformers)是 Google 提出的预训练语言模型,它通过双向编码器理解文本中的上下文信息,帮助我们更好地理解语言。BERT 的设计使其在处理复杂语言任务时,能够有效捕捉单词的语境含义。

BERT 的应用场景:

BERT 是 NLP(自然语言处理)领域的一个突破性工具,它能够做很多有用的事情,包括:

  • 文本分类:如情感分析、垃圾邮件分类等。
  • 命名实体识别(NER):从文本中提取人物、地点、时间等实体。
  • 问答系统:回答基于文章内容的问题。
  • 自然语言推理(NLI):判断两个句子之间的关系。
  • 文本生成:例如对话生成、文章自动写作等。

2. BERT 入门篇:我们要做什么?

在这一部分,我们将通过几个经典的 NLP 任务来展示 BERT 的强大能力:

  1. 情感分析:判断电影评论是积极还是消极。
  2. 命名实体识别:从文本中提取出关键的实体,如人名、地点名等。
  3. 问答系统:基于提供的文本来回答问题。

这些案例是 BERT 在 NLP 中的经典应用,能够帮助你了解如何使用 BERT 解决实际问题。

3. 安装依赖

首先,确保安装了以下 Python 库:

pip install transformers torch

4. 使用 BERT 进行文本分类

4.1 情感分析:判断电影评论是积极还是消极

我们将用一个简单的电影评论数据集,展示如何用 BERT 进行情感分析。

python">from transformers import BertTokenizer,BertForSequenceClassification
import torch#加载Bert tokenizer和模型
tokenize = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')#输入文本
text = "The movie was absolutely amazing!"#编码文本
inputs = tokenize(text,return_tensors="pt",padding=True,truncation=True,max_length=512)#推理
with torch.no_grad():outputs = model(**inputs)logits = outputs.logits
probs = torch.nn.functional.softmax(logits,dim=-1)#输出检测结果
print(f"Predicted probabilities:{probs}")

4.2 命名实体识别(NER)

接下来,我们将用 BERT 来进行命名实体识别,从文本中提取出人物、地点等信息。

python">from transformers import BertForTokenClassification,BertTokenizer
import torch# 加载预训练的NER模型
ner_model = BertForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")
ner_tokenizer = BertTokenizer.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")# 输入文本
text = "Barack Obama was born in Hawaii."# 编码文本
inputs = ner_tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512)# 推理
with torch.no_grad():outputs = ner_model(**inputs)# 获取标签
predictions = outputs.logits.argmax(dim=-1)
labels = ner_tokenizer.convert_ids_to_tokens(predictions[0].tolist())# 打印识别出的实体
for token, label in zip(text.split(), labels):print(f"Token: {token}, Label: {label}")

4.3 问答系统

在这一部分,我们将展示如何使用 BERT 构建一个简单的问答系统,从给定的文本中回答问题。

python">from transformers import BertForQuestionAnswering,BertTokenizer
import torch# 加载预训练的问答模型
qa_model = BertForQuestionAnswering.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
qa_tokenizer = BertTokenizer.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")# 输入文本和问题
context = "Barack Obama was born in Hawaii. He was elected president in 2008."
question = "Where was Barack Obama born?"# 编码问题和上下文
inputs = qa_tokenizer.encode_plus(question, context, return_tensors="pt")# 推理
with torch.no_grad():outputs = qa_model(**inputs)# 获取答案的起始和结束位置
start_idx = outputs.start_logits.argmax()
end_idx = outputs.end_logits.argmax()# 获取答案
answer = qa_tokenizer.convert_tokens_to_string(qa_tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][start_idx:end_idx+1]))print(f"Answer: {answer}")

5. 微调 BERT

在实际使用中,我们通常会根据特定的任务对 BERT 进行微调。微调的核心思想是使用少量的任务特定数据进一步训练 BERT,以便它能更好地适应特定的应用场景。

6. 总结

BERT 是一个强大的 NLP 工具,它可以广泛应用于各种任务,以下是一些典型的应用场景:

  • 情感分析:判断文本是积极的还是消极的。
  • 命名实体识别:识别文本中的人名、地名、组织名等实体。
  • 问答系统:从给定的文本中回答问题。
  • 自然语言推理:判断两个句子之间的关系(比如,是否存在蕴含关系)。

BERT 的强大之处在于它的双向理解能力预训练+微调的策略,能够适应多种 NLP 任务。而且,由于我们可以使用 transformers 库来加载预训练的模型和 tokenizer,BERT 在实际应用中的部署变得非常简便。

BERT 的实际应用场景:

  1. 搜索引擎:提升搜索结果的相关性和准确度。
  2. 客服自动化:利用问答系统为用户提供实时的客户支持。
  3. 内容推荐系统:分析用户评论的情感,向用户推荐合适的内容。
  4. 医疗领域:从医学文献中自动提取关键信息,比如药品、疾病、治疗方案等。

希望通过这篇文章,你能够对 BERT 的基本使用和应用场景有一个清晰的认识,进一步激发你在 NLP 领域的探索兴趣

 


http://www.ppmy.cn/news/1546041.html

相关文章

Hive-testbench套件使用文档

Hive-testbench套件使用文档 hive-testbench 是hortonworks的一个开源项目,用于测试和基准测试 Apache Hive 的工具集。它提供了一系列的测试数据集和查询样例,用于评估和比较 Hive 在不同配置和环境下的性能。hive-testbench 的主要目标是模拟真实的大规模数据集和复杂查询…

SpringBoot技术下的共享汽车运营平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理共享汽车管理系统的相关信息成为必然。开发…

定义全局键盘监听事件,el-dialog中删除不可用

场景:全局的div增加了鼠标监听事件,而且window中添加了键盘监听事件。 window.addEventListener(keydown, this.handleKeydown) window.addEventListener(keyup, this.handleKeyup) 事件冒泡,导致阻止无效。 1、在 el-dialog 上同时阻止默…

ONLYOFFICE 8.2深度测评:集成PDF编辑、数据可视化与AI功能的强大办公套件

本文 一、文档编辑与PDF支持主要功能概述 二、数据可视化和增强的表格工具数据可视化功能亮点 三、AI驱动的摘要功能AI摘要功能优势 四、演示文稿的增强功能主要更新 五、协同办公能力的提升协同功能更新 六、跨平台兼容与开放文档格式跨平台与兼容性 七、安全性与隐私保护安全…

Flink转换算子

Apache Flink 是一个用于处理无界和有界数据的开源流处理框架。在 Flink 中,转换(Transformation)是数据流处理的核心组件之一,它们定义了如何从输入数据集生成输出数据集。以下是 Flink 中一些常见的转换算子: Map: 将…

【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集

命名实体识别 (NER) 是自然语言处理 (NLP) 中的一项重要任务,用于自动识别和分类文本中的实体,例如人物、位置、组织等。尽管它很重要,但手动注释大型数据集以进行 NER 既耗时又费钱。受本文 ( https://huggingface.co/blog/synthetic-data-s…

谐振式DCDC设计与参数计算 - 笔记汇聚

技术问题 - 笔记目录 Q1.工作频点与切换频点是什么关系? 当考虑电路应对外部电压波动,和输出负载波动,需要选择最低增益点外侧的,以及最高增益与最最低增益的的增益顶点连线的上方区域——一句话:感性区域&#xff1…

Mysql基础 01 数据与sql

文章目录 一、基本概念二、mysql的常用命令三、sql规范四、数据类型五、SQL语句 一、基本概念 数据库(database,DB):存储数据的仓库。 数据库管理系统软件(Database Management System,DBMS):是一种操作和管理数据库的大型软件。常见的DBMS有oracle、s…