【NLP实战】基于ALBERT的文本相似度计算

信息抽取实战:命名实体识别NER【ALBERT+Bi-LSTM模型 vs. ALBERT+Bi-LSTM+CRF模型】(附代码) 实战:命名实体识别NER 目录实战:命名实体识别NER一、命名实体识别(NER)二、BERT的应用NLP基本任务查找相似词语提取文本中的实体问答中的实体对齐三、ALBERTALBERT 的三大改造ALBERT 效果如何总结四、ALBERT+Bi-LSTM模型五、ALBERT+Bi-LSTM+CRF模型思考 一、命名实体识别(NER)   本项目将会简单介绍自然语言处理(NLP)中的命名实体识别(NER)。   命名实体识别(Named Entity Recognition,简称NER)是信息抽取、问答系统、 阅读详情

实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式。因此,NLP专栏推出了实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试。

ALBERT是一个比BERT要轻量,效果更好的模型,本篇实践介绍如何用ALBERT计算两个文本的相似度。

作者&编辑 | 小Dream哥

1 ALBERT介绍 

ALBERT利用词嵌入参数因式分解和隐藏层间参数共享两种手段,显著减少了模型的参数量的同时,基本没有损失模型的性能。笔者在下面的文章中详细介绍了ALBERT的理论,感兴趣的同学可以戳进去了解:

【NLP】ALBERT:更轻更快的的预训练

albert_tiny模型,能够显著提高模型的推理速度,但是效果依然很棒,这里介绍如何基于albert_tiny模型进行文本相似度计算。

2  BERT4KERAS

本来自己写了个基于tensorflow的ALBERT模型,后来看到苏剑林老师的bert4keras,觉得确实实现简洁,易懂。遂决定分享给大家。

感兴趣的同学可以看看苏剑林老师的网站:

https://spaces.ac.cn/archives/6915

BERT4KERAS是苏老师基于kears实现的几个BERT模型,包括BERT,ALBERT和ROBERTA,基于BERT4KERAS可以快速的使用这些模型,也能够快速的实现对BERT改进的想法。

快速安装:

pip install git+https://www.github.com/bojone/bert4keras.git

3 如何获取ALBERT-zh  

从如下的github中能够获取训练好的ALBERT-zh 模型:

https://github.com/brightmart/albert_zh

4  开始实战

ALBERT输出的第一个向量,可以用来表征整体的输入文本,在本篇实战中,利用这个向量来计算文本之间的相似度。

相似度的计算大致可以分为这么几个步骤:

1. 构建模型,加载ALBERT预训练模型。

2. 构建分词器,处理输入。

3. 利用模型,计算输入文本的向量表征。

4. 利用文本向量,计算两个文本之间距离或者相似度。

1)构建模型,加载ALBERT预训练模型

# 加载预训练模型
bert = build_bert_model(
config_path=config_path,
checkpoint_path=checkpoint_path,
   with_pool=True,
albert=True,
   return_keras_model=False,
)

这里直接调用bert4keras的build_bert_model接口,构建albert模型,并直接加载albert的中文模型的权重。

config_path用来指定模型的配置文件路径;

checkpoint_path用来指定模型权重文件的路径;

albert表示指定用albert模型;

2) 构建分词器,处理输入

#构建分词器

tokenizer = Tokenizer(dict_path)

#格式化输入

token_ids1, segment_ids1 = tokenizer.encode(u'我想去北京')
token_ids2, segment_ids2 = tokenizer.encode(u'我想去香港')
token_ids3, segment_ids3 = tokenizer.encode(u'目前的局势,止暴制乱,刻不容缓')

首先构建分词器这里直接用了bert4keras定义的分词器Tokenizer。

然后用分词器处理输入,获得输入文本在词典中的序号表示及分段信息表示。这里解释下为什么要将输入文本转化成这两个表示:

1.albert模型的输入与bert类似,需要接受词、分段以及位置三个输入,位置信息由模型内的代码处理;

2.将词转化为词在词典中的序号便于后续的词嵌入操作。

3) 利用模型,计算输入文本的向量表征

#计算文本的向量表征,获取albert的第一个位置的输出

sentence_vec1 = model.predict([np.array([token_ids1]), np.array([segment_ids1])])[0]
sentence_vec2 = model.predict([np.array([token_ids2]), np.array([segment_ids2])])[0]
sentence_vec3 = model.predict([np.array([token_ids3]), np.array([segment_ids3])])[0]

因为我们本次是直接利用预训练模型的知识,直接计算文本的向量表征,因此没有训练过程,直接predict即可获得文本的向量表征。这里,获取albert的第一个位置的输出作为输入文本的向量表征。

4) 计算文本相似度

# 引入两个相似度计算包,欧氏距离和余弦距离

from sklearn.metrics.pairwise import euclidean_distances
from sklearn.metrics.pairwise import cosine_similarity

#定义相似度计算函数
def similarity_count(vec1, vec2, mode='cos'):
   if mode == 'eu':
       return euclidean_distances([vec1,vec2])[0][1]
   if mode == 'cos':
       return cosine_similarity([vec1, vec2])[0][1]

#相似度计算

#余弦距离

similarity_count(sentence_vec1, sentence_vec2)

#欧式距离
similarity_count(sentence_vec1, sentence_vec2, mode='eu')

这里引入sklearn中的两个计算欧氏距离和余弦距离的包来计算文本之间的距离。具体过程相对简单,直接看上面的代码吧。

5 结果展示

如上图所示,计算了“我想去北京”和“我想去香港”两句话的余弦距离和欧式距离;计算了“我想去北京”和“目前的局势,止暴制乱,刻不容缓”两句话的余弦距离和欧式距离。两句表达意思相近的话,相似度较高,距离较短。但是区隔度不是特别大,所以,在生产中,在一些特别的领域,需要用特别的语料,进行fintune,会有更好的效果。

至此,介绍了如何利用bert4keras搭建albert模型进行文本相似度计算,代码在我们有三AI的github可以下载:https://github.com/longpeng2008/yousan.ai/tree/master/natural_language_processing

找到albert文件夹,执行python3 similarity.py就可以运行了。

总结

ALBERT利用词嵌入参数因式分解和隐藏层间参数共享两种手段,显著减少了模型的参数量的同时,基本没有损失模型的性能,是一个不错的工作。

除了使用它,更关键的是albert模型的实现和理论。我们会在知识星球讨论相关的内容,感兴趣的话可以扫描下面的二维码了解。

读者们可以留言,或者加入我们的NLP群进行讨论。感兴趣的同学可以微信搜索jen104,备注"加入有三AI NLP群"。

下期预告:命名实体识别实践

知识星球推荐

扫描上面的二维码,就可以加入我们的星球,助你成长为一名合格的自然语言处理算法工程师。

知识星球主要有以下内容:

(1) 聊天机器人。考虑到聊天机器人是一个非常复杂的NLP应用场景,几乎涵盖了所有的NLP任务及应用。所以小Dream哥计划以聊天机器人作为切入点,通过介绍聊天机器人的原理和实践,逐步系统的更新到大部分NLP的知识,会包括语义匹配,文本分类,意图识别,语义匹配命名实体识别、对话管理以及分词等。

(2) 知识图谱。知识图谱对于NLP各项任务效果好坏的重要性,就好比基础知识对于一个学生成绩好坏的重要性。他是NLP最重要的基础设施,目前各大公司都在着力打造知识图谱,作为一个NLP工程师,必须要熟悉和了解他。

(3) NLP预训练模型。基于海量数据,进行超大规模网络的无监督预训练。具体的任务再通过少量的样本进行Fine-Tune。这样模式是目前NLP领域最火热的模式,很有可能引领NLP进入一个全新发展高度。你怎么不深入的了解?

转载文章请后台联系

侵权必究

往期精选

NLP合集:教程/实体抽取/关系(三元组)抽取/文本分类/知识图谱/Bert系列/相似度判定/机器人问答/文本工具/竞赛方案精选/面试指南/NLP各类任务数据集等集合 Cool-NLPCV (持续更新中…) Some Cool NLP and CV Repositories and Solutions Cool-NLP | Cool-CV 旨在收集NLP中常见任务的开源解决方案、数据集、工具、学习资料等,方便学习或快速查找。在此分享出来,供大家参考。欢迎积极分享并Star,谢谢! 会持续不定时更新,也欢迎加入共同分享。 1、机器学习&深度学习入门精选 Python-100天从新手到大师 斯坦福大学2014(吴恩达)机器学习教程中文笔记 《统计学习方法》第二版的代 阅读详情

相关推荐

ALBERT实战:基于ALBERT预训练模型实现答案预测分类

ALBERT实战:基于ALBERT预训练模型实现答案预测分类

1153

ALBERT 中文实战之文本相似度

ALBERT是一个比BERT要轻量,效果更好的模型,本篇实践介绍如何用ALBERT计算两个文本的相似度。 ALBERT利用词嵌入参数因式分解和隐藏层间参数共享两种手段,显著减少了模型的参数量的同时,基本没有损失模型的性能。笔者在下面的文章中详细介绍了ALBERT的理论,感兴趣的同学可以戳进去了解:《解读ALBERT》。 github地址 使用孪生ALBERT网络生成句子的嵌入表示: P...

小岁月太着急 4307

IEC61850客户端连接实战:CMS vs MMS协议抓包对比与性能初探(基于YX-PIS协议栈)

本文深入探讨了IEC61850客户端连接中CMS与MMS协议的抓包对比与性能优化。通过Wireshark抓包分析、协议栈配置实战和性能基准测试,揭示了两种协议在连接建立、数据交互和性能调优方面的关键差异,为智能电网自动化系统的协议选择提供了实用指南。

weixin_29209805的博客 216

NLP(三十)利用ALBERT和机器学习来做文本分类

利用ALBERT和机器学习来做文本分类

山阴少年 1910

antv x6 沿边图标循环动画实现

2.使用transition给边设置动画,利用complte方法实现循环动画。实现效果,如下图,边上存在两个图标,要求图标延边一直循环动画。1.注册一个自定义边,边上定义两个图标,并设置其初始位置。

lingliu0824的博客 3366

sysbench安装(在线&离线)

sysbench下载、安装、编译和异常处理方法

m0_61066945的博客 8756

Albert处理文本分类任务

文章目录准备工作一、处理数据集二、构建分类任务1.引入库2.配置参数3.读取处理数据4.加载Albert预训练模型5.开始训练6.验证模型总结参考文献 准备工作 预训练模型下载地址:Albert_Large_zh 数据集下载地址:事故灾害多分类数据集(数据集由爬虫获取,如有错误请多多指教) 一、处理数据集 将预训练模型放入pretraining_model文件夹下。 将数据集分成训练集,测试集与验证集,分别为train.txt,test.txt,dev.txt三个,比例一般为7:2:1,放入datase.

趋吉避凶的博客 3151

【网络图】:附Origin详细画图教程

网络图,是一种由节点(或顶点)和连接这些节点的边(或链路)组成的图形结构。在网络图中,节点通常代表系统中的一个实体(如项目中的一项任务、通信网络中的一个设备、或运输网络中的一个站点),而边则代表这些实体之间的直接联系或流动(如任务的先后顺序、数据的传输路径、或乘客的旅行路线)。 有向图:如果边具有方向性,即从一个节点指向另一个节点,则称为有向图。这种图常用于表示具有明确先后顺序或方向性的系统,如项目管理中的任务依赖关系。 无向图:如果图中的边没有方向,则称为无向图。它适用于表示实体间相互关联但无明确方向性的

weixin_50236590的博客 3956

Macropodus自然语言处理(NLP)工具包(Albert+BiLSTM+CRF)

一、简介 Macropodus自然语言处理工具(Albert+BiLSTM+CRF) 中文分词 命名实体识别 新词发现 关键词 文本摘要 计算器 中文数字阿拉伯数字转换。 Macropodus是一个以Albert+BiLSTM+CRF网络结构为基础,用大规模中文语料训练的自然语言处理工具包。将提供中文分词、命名实体识别、关键词抽取、文本摘要、新词发现、文本相似度...

大漠帝国的博客 3554

matlab电容式传感器仿真,差动电容式位移传感器的仿真研究

设计了一种差动电容式位移传感器,主要对传感器的数学模型及电容检测电路进行了仿真研究。其中检测电路设计主要包括正弦激励电路、转换桥路、信号放大电路、精密整流电路和滤波电路。最后利用Matlab/SimurFnk软件对所设计的系统进行仿真,并分析了传感器性能。仿真研究表明,传感器及其检测电路具有合理性,测量范围内具有很好的线性度。0|| I≯ lat on ii{差动容尊翩’亘研发注:湖南省教育厅资...

weixin_36323601的博客 1391

数据结构之栈(Stack)的实现详解

堆栈是一种线性数据结构,其插入新元素和删除现有元素都发生在堆栈的顶部。栈(Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。栈类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。

swadian2008的博客 3813

[深度学习 - NLP项目] 自然语言理解 - AlBert模型

参考代码来源于:https://github.com/brightmart/albert_zh 记录一下nlp开始学习的历程 新的一年刚开始,就碰上了一个基本都是NLP的项目; 一直想找机会学NLP,现在正好遇上了。就是项目是个硬骨头,有点难啃,好在组内有几个NLP大神带着。所以也稍微记录一下我nlp开始学习的历程。(可能有些地方理解错误、说错的,也请各位大佬帮忙指正。????) 刚开始遇到的时候想从基础上学起,比如TF-IDF、word2vec这些。但是由于知识量从头来的话,太多太杂了。然后大佬也是说直

iamfishman 2680

十四种逻辑器件综合对比——《器件手册--逻辑器件》

逻辑器件是数字电路中最基本的逻辑单元,用于实现基本的逻辑运算,如与、或、非、异或等。逻辑门根据输入信号的组合产生相应的输出信号。与门:只有当所有输入信号都为高电平时,输出才为高电平。或门:只要有一个输入信号为高电平,输出就为高电平。非门:输出信号与输入信号相反。异或门:当两个输入信号不同时,输出为高电平;相同则输出为低电平。用于对输入信号进行反相操作,即将高电平转换为低电平,低电平转换为高电平。常用于信号的反相处理和逻辑电平的转换。

XU157303764的博客 2031

你这句话是什么意思? | 基于ALBERT的中文语义相似度计算【非分类任务】

一、前言 需求很简单,就是有两个句子(大概一二百字左右不会太长),一个是正确答案一个是考生作答,我需要知道这个按照这个标准答案考生的作答应该给几分。 关键点是:NLP的方向、语义相似度的任务,中文的。 看我博客的应该都知道我是做CV方向的,最近有了这么个需求让我做,这明明是NLP方向的东西啊 (╯‵□′)╯︵┻━┻ 首先花了大概4~5天的时间学习了一下NLP的基础知识:词向量,词袋模型,LSTM之类的东西。ε≡٩(๑>₃<)۶ 一心向学 根据CV的经验这件事一定是用深度学习做的,因为身

Andrwin的博客 652

Loop Engineering 来了:从写 Prompt 到设计 Loop,AI 编程的第四次范式跃迁

文章摘要: Loop Engineering是AI编程领域的新范式,标志着从"人手动喂指令"到"设计自驱动循环"的跃迁。其核心在于通过五个组件(定时器、工作空间、知识体系、连接器和子Agent验证)构建自动化任务流,使AI系统能自主运行。这一概念的火爆源于模型能力和工具链的成熟,使得任务设计成为关键瓶颈。作者指出,从Prompt到Loop的四次范式跃迁(语言学→信息科学→控制论→管理学)反映了人机协作关系的根本变化:人类角色从执行者逐渐退居为目标设定者。落地Loop Engineering的真正挑战在于目标

少说,多做 332

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

如何快速使用ALBERT模型进行中文NLP任务:PyTorch-NPU版本实战指南

ALBERT模型作为BERT的精简版本,在自然语言处理领域展现出了卓越的性能和效率。本文将详细介绍如何利用PyTorch-NPU版本的ALBERT Large v2模型,在中文NLP任务中实现快速部署和高效推理。💡 ## 📊 ALBERT模型的核心优势 ALBERT(A Lite BERT)模型通过参数共享技术,在保持与BERT相似性能的同时,大幅减少了模型参数量。这种设计使得ALBERT

gitblog_09749的博客 740

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【NLP】ALBERT:更轻更快的NLP预训练模型

目前在NLP领域,出彩的预训练模型的新工作,几乎都是基于BERT的改进,前面我们就介绍了XLNET。今天我来介绍一个更新的工作,相比于BERT,它更轻量,效果也要好。作者&编辑 | 小Dream哥 1 预训练模型进展2018年底,BERT横空出世之后,预训练模型开始走进NLP舞台的中央,吸引了业内所有人的关注。之后,各种预训练模型开始不断的刷新NLP领域的SOTA榜单,比较有影响力的包括...

hacker_long的专栏 3073

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NLP工具包(Albert+BiLSTM+CRF)

向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx一、简介 Macropodus自然语言处...

datayx的文章 1551

paraphrase-albert-small-v2在中文场景的应用:多语言文本相似度计算实践

paraphrase-albert-small-v2是一款基于ALBERT架构的文本相似度计算模型,特别适用于中文场景下的文本匹配、语义相似性分析等任务。本文将详细介绍如何在中文环境中高效使用该模型,帮助开发者快速实现多语言文本相似度计算功能。 ## 📋 模型核心特性解析 paraphrase-albert-small-v2模型基于轻量级ALBERT架构构建,具有以下核心特性: - **高

gitblog_00354的博客 465

NLP之ALBERT:ALBERT的简介、安装和使用方法、案例应用之详细攻略

​ NLP之ALBERT:ALBERT的简介、安装和使用方法、案例应用之详细攻略 目录 相关论文 ALBERT的简介 ALBERT的安装和使用方法 ALBERT的案例应用 相关论文 《ALBERT: A Lite BERT for Self-supervised Learning of Language Representations》翻译与解读 地址 论文地址:https://arxiv.org/abs/1909.11942 时间 2019年9月26日

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 6205

[转载]Macropodus自然语言处理(NLP)工具包(Albert+BiLSTM+CRF)

【转载】今天上午浏览了一篇文章,觉得很好,趁热膜拜一下。 一、简介 Macropodus自然语言处理工具(Albert+BiLSTM+CRF) 中文分词 命名实体识别 新词发现 关键词 文本摘要 计算器 中文数字阿拉伯数字转换。 Macropodus是一个以Albert+BiLSTM+CRF网络结构为基础,用大规模中文语料训练的自然语言处理工具包。将提供中文分词、命名实体识别、关键词抽取、文本摘要...

weixin_41845265的博客 567

如何使用albert_pytorch进行中文文本分类?实战LCQMC任务指南

albert_pytorch是一个轻量级BERT模型实现,专为自监督学习语言表示设计。本指南将带你通过实战LCQMC(中文语义相似度匹配)任务,掌握使用albert_pytorch进行中文文本分类的完整流程,从环境准备到模型训练与评估,让你快速上手中文NLP任务。 ## 📋 环境准备与项目获取 首先需要准备Python环境并获取项目代码。确保你的环境中已安装PyTorch和相关依赖库。通过以

gitblog_00828的博客 824

一文揭开ALBERT的神秘面纱

前言 RoBERTa没霸榜几天,这不Google爸爸就又放大招,这次的新模型不再是简单的的升级,而是采用了全新的参数共享机制,反观其他升级版BERT模型,基本都是添加了更多的预训练任务,增大数据量等轻微的改动。这次ALBERT的改进,不仅提升了模型的整体效果再一次拿下来各项榜单的榜首,而且参数量相比BERT来说少了很多。 对于预训练模型来说,提升模型的大小是能对下游任务的效果有一定提升,然而如果进...

u012526436的博客 3万+

NLP-4:ALBERT

目录回顾BERT1. 降低模型参数2. 改进NSP任务为SOP3. 去掉dropout4. 增加训练数据总结 最近在家听贪心学院的NLP直播课。放到博客上作为NLP 课程的简单的梳理。 简介:虽然BERT模型本身是很有效的,但这种有效性依赖于大量的模型参数,所以训练一套BERT模型所需要的时间和资源成本是非常大的,甚至这样复杂的模型也会影响最终效果。在本次讲座里,我们重点来介绍一种瘦身版的重磅BE...

m0_37531129的博客 747

「NLP」ALBERT:更轻更快的NLP预训练模型

目前在NLP领域,出彩的预训练模型的新工作,几乎都是基于BERT的改进,前面我们就介绍了XLNET。今天我来介绍一个更新的工作,相比于BERT,它更轻量,效果也要好。 作者 | 小Dream哥 编辑 | 小Dream哥 1 预训练模型进展 2018年底,BERT横空出世之后,预训练模型开始走进NLP舞台的中央,吸引了业内所有人的关注。之后,各种预训练模型开始不断的刷新NLP领域的SOTA榜...

喜欢打酱油的老鸟 1061

ALBERT刷新三大NLP基准

前言 RoBERTa没霸榜几天,这不Google爸爸就又放大招,这次的新模型不再是简单的的升级,而是采用了全新的参数共享机制,反观其他升级版BERT模型,基本都是添加了更多的预训练任务,增大数据量等轻微的改动。这次ALBERT的改进,不仅提升了模型的整体效果再一次拿下来各项榜单的榜首,而且参数量相比BERT来说少了很多。 对于预训练模型来说,提升模型的大小是能对下游任务的效果有一定提升,然而如果进...

超级帅的一个小伙子的博客 570
上一篇: 【每周CV论文推荐】 初学活体检测与伪造人脸检测必读的文章
下一篇: 【AI产品】前沿黑科技,安利一款能让你的照片动起来的app
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

言有三

三人行必有AI

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

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

打赏作者

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

抵扣说明:

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

余额充值