[大语言模型-工程实践] 手把手教你-基于BERT模型提取商品标题关键词及优化改进

[大语言模型-工程实践] 手把手教你-基于BERT模型提取商品标题关键词及优化改进


目录


1. 背景介绍

1.1 关键词提取

关键词提取是信息检索和文本挖掘中的一项重要技术,它涉及从文本中识别和提取出最能代表文档内容的词语或短语。如下图所示,对于亚马逊上面的商品标题,在构建底层索引时,通常需要对标题做分词,提取里面核心词,用于构建倒排索引或者用于关键词匹配计算等。关键词提取技术可以通过多种方法实现,包括无监督学习和有监督学习的方法。

在这里插入图片描述

无监督关键词提取方法

无监督方法不依赖于预先标注的数据,而是通过算法自动发现文本中的关键词。这些方法包括:

  1. 基于统计特征的方法:如TF-IDF算法,通过词频(TF)和逆文档频率(IDF)来评估词的重要性。
  2. 基于词图模型的方法:如TextRank算法,构建词与词之间的关系图,并通过网络分析来确定关键词。
  3. 基于主题模型的方法:如LDA模型,通过主题分布来提取关键词。
  4. **基于语言模型的方法: 采用基于BERT, GPT这类大语言模型。
有监督关键词提取方法

有监督方法将关键词提取视为一个分类问题,需要预先标注的训练数据来训练模型。这些方法包括:

  1. 训练分类器:通过机器学习算法,如支持向量机(SVM)或随机森林,来区分关键词和非关键词。
关键词提取实现步骤

传统关键词提取的过程通常包括以下步骤:

  1. 文本预处理:包括去除停用词、标点符号,进行词干提取或词形还原。
  2. 特征提取:根据所选算法提取特征,如TF-IDF值。
  3. 关键词候选生成:根据特征值生成候选关键词列表。
  4. 评估和排序:评估每个候选词的重要性并进行排序。
  5. 选择关键词:选择排名最高的词作为最终的关键词。

2. 基于BERT模型的关键词提取

2.1 算法原理

​​​​在这里插入图片描述
BERT(Bidirectional Encoder Representations from Transformers)是由Google在这篇论文中首次提出的一种预训练深度双向Transformers模型,用于语言理解。

基于BERT模型进行关键词提取的方法主要利用了BERT模型强大的语义理解能力。BERT(Bidirectional Encoder Representations from Transformers)通过在大量文本上进行预训练,学习到了丰富的语言特征,这使得它在处理自然语言时能够考虑到整个文本的上下文信息。
在这里插入图片描述

使用BERT进行关键词提取的基本步骤通常包括:

  1. 文档表示:首先使用BERT模型获取整个文档的嵌入向量,这通常意味着要通过模型获取一个能够代表整个文档的向量表示。

  2. 候选词/短语生成:然后,从文档中提取候选词或短语,并使用相同的模型为这些候选词/短语生成嵌入向量。

  3. 相似度计算:通过计算文档向量与候选词/短语向量之间的相似度(常用的是余弦相似度),来评估候选词/短语与文档内容的匹配程度。

  4. 关键词提取:最后,根据计算出的相似度对候选词/短语进行排序,选择最相似的词/短语作为关键词。

BERT之所以适用于关键词提取,是因为它能够捕获到复杂的语义关系和长距离的依赖,这对于理解文档的主旨和提取关键信息至关重要。BERT的双向训练机制让它能够同时考虑词语的前后文信息,生成的嵌入向量能够很好地表示词语在特定上下文中的含义。

此外,还有一些基于BERT的关键词提取工具和框架,如KeyBERT,它是一个利用BERT嵌入来查找与文档最相似的关键词和关键短语的库。KeyBERT通过简单的余弦相似度度量来实现这一目标,并且易于使用,可以通过pip安装,只需几行代码即可实现关键词提取 。

2.1 工程实践

这类我们展示如何使用PyTorch开发一个基于Bert模型进行商品标题中关键词提取的程序。

首先,我们需要确保系统里面已经安装transformers库,这是由Hugging Face提供的一个非常流行的库,它包含了预训练的BERT模型和其他许多自然语言处理工具。

安装方法如下:

pip instal transformers torch

接着,我们使用Pytorch开发核心代码:

from transformers import BertTokenizer, BertModel
import torch

# 确保你的设备可以运行BERT模型
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 加载预训练的BERT模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
model.to(device)

def extract_keywords(title, num_keywords=5):
    # 对标题进行分词
    tokens = tokenizer.tokenize(title)
    # 将分词结果转换为BERT模型可以处理的格式
    tokens = ['[CLS]'] + tokens + ['[SEP]']
    token_ids = tokenizer.convert_tokens_to_ids(tokens)
    token_type_ids = [0] * len(token_ids)  # 单句子输入,所有token_type_ids为0
    attention_mask = [1] * len(token_ids)  # 标记每个token是实际的输入

    # 将数据发送到设备
    token_ids = torch.tensor([token_ids]).to(device)
    token_type_ids = torch.tensor([token_type_ids]).to(device)
    attention_mask = torch.tensor([attention_mask]).to(device)

    # 模型预测
    with torch.no_grad():
        outputs = model(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sp_fyf_2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值