【FCon上海】与行业领袖共话AI大模型、数字化风控等前沿技术。 了解详情
写点什么

如何通过几行 Python 代码,使用 BERT 进行词嵌入?

  • 2019-12-19
  • 本文字数:2015 字

    阅读完需:约 7 分钟

如何通过几行 Python 代码,使用BERT进行词嵌入?

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

在自然语言处理领域中,诞生于 2018 年末的 BERT 非常的“火热”。强悍如 BERT,在十多项 NLP 的任务上强势屠榜,业界声称 BERT 将开创自然语言处理领域新的纪元。在本文中,作者 Anirudh_S 将展示如何只使用几行 Python 代码,就可以使用深度学习自然语言处理模型(BERT)将单词嵌入到向量中。


本文最初发表于 Towards Data Science,经原作者 Anirudh_S 授权,InfoQ 中文站翻译并分享。

词嵌入:它们是什么?

在自然语言处理领域中,以向量形式或词嵌入表示单词或句子的方式,为各种潜在应用打开了大门。这种将单词编码为向量的函数,对自然语言处理任务来说是一个强大的工具,例如计算单词之间的语义相似度,人们可以用来构建语义搜索引擎,就像Google 将 BERT 应用于搜索一样。可以说,BERT 是最强大的语言模型之一,在机器学习社区中非常流行。


BERT(Bidirectional Encoder Representations from Transformers)模型已使用大型句子语料库进行预训练。简而言之,训练是通过在一个句子中对一些单词进行掩码(根据论文作者的说法,大约为 15% 的单词),然后让模型去预测那些被掩码的单词。随着模型的预测训练,它学会了生成一个强大的单词内部表示,即词嵌入(Word embedding)。今天,我们将介绍如何轻松地构建并运行 BERT 模型,并将单词编码为词嵌入。

BERT 词嵌入模型设置

有一组可用的选项来运行带 Python 和 TensorFlow 的 BERT 模型。但是,为了能够让你非常容易地获得 BERT 模型,我们将使用一个 Python 库,它可以帮助我们立即进行设置!


Bert-as-a-service(意为 BERT 即服务)是一个 Python 库,它使我们能够在本地机器上部署预训练 BERT 模型并运行推理。它可以用于服务任何已发布的模型类型,甚至也可以服务于针对特定下游任务进行微调的模型。此外,它还需要后端的 TensorFlow 与预训练模型一起工作。因此,我们将继续在控制台中安装 TensorFlow 1.15。


pip3 install tensorflow-gpu==1.15
复制代码


接下来,我们将安装 Bert-as-a-service 客户端和服务器。同样,这个库并不支持 Python 2。因此,你要确保已经安装的是 Python 3.5 或更高版本。


pip3 install -U bert-serving-server bert-serving-client
复制代码


BERT 服务器将模型部署在本地机器上,客户端可以订阅它。此外,可以在同一台计算机上安装这两样,也可以在一台机器上部署服务器并从另一台计算机订阅。安装完成之后,下载你选择的 BERT 模型。你可以点击此链接来找到所有模型的列表。

部署模型

现在,初始设置已经完成,让我们使用以下命令启动模型服务。


bert-serving-start -model_dir /path_to_the_model/ -num_workers=1
复制代码


例如,如果模型名称为 uncased_L-24_H-1024_A-16,且它位于 “/model” 目录中,那么,命令如下所示:


bert-serving-start -model_dir /model/uncased_L-24_H-1024_A-16/ -num_workers=1
复制代码


其中, “num_workers” 参数用于初始化服务器可以处理的并发请求的数量。但是,我们只需设置 num_workers=1 就可以了,因为我们只是在单个客户端上使用我们的模型。如果要部署多个客户端进行订阅的话,请相应为 “num_workers” 参数进行设置。

使用 BERT 客户端订阅

我们可以运行一个 Python 脚本,使用 BERT 服务将我们的单词编码成词嵌入。有鉴于此,我们只需导入 BERT-client 库并创建客户端类的实例。完成这一步后,我们就可以提供想要编码的单词或句子的列表。


from bert-serving.client import BertClient()client = BertClient()vectors = client.encode([ “dog” ],[ “cat” ],[ “man” ])
复制代码


我们应该将想要编码的单词作为 Python 列表提供。上面,我给出了三个列表,每个列表都有一个单词。因此, “vectors” 对象的形状为 (3,embedding_size)。通常,嵌入大小是 BERT 模型编码的词向量的长度。实际上,它将任意长度的单词编码为一个恒定长度的向量。但是,不同的 BERT 模型可能会有所不同。

计算词之间的相似度

到现在为止,一切都还不错!对于那些只是一些数字的向量该怎么处理呢?正如前所述,这些向量表示单词在 1024 维超空间(对此模型 uncased_L-24_H-1024_A-16 而言为 1024)中的编码位置。此外,通过某种相似性函数比较不同词的向量有助于确定它们之间的关联程度。


余弦相似度(Cosine similarity)就是这样的一个函数,它给出的相似度得分在 0.0 到 1.0 之间。在这种情况下,1.0 表示单词意思相同(100% 匹配),而 0.0 表示它们完全不同。下面是词嵌入之间余弦相似性的 scikit-learn 实现。


from sklearn.metrics.pairwise import cosine_similaritycos_lib = cosine_similarity(vectors[1,:],vectors[2,:]) #similarity between #cat and dog
复制代码

完成 BERT 词嵌入

你还可以输入整条句子,而不是单个单词,服务器会处理它。词嵌入可以通过多种方式集合在一起,形成连接(concatenation)这样的句子嵌入。


作者介绍:


Anirudh_S,仪表工程师,热衷于机器人、人工智能、机器学习和自主系统。


原文链接:


https://hackerstreak.com/word-embeddings-using-bert-in-python/


公众号推荐:

AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。

2019-12-19 17:139276
用户头像
张之栋 前InfoQ编辑

发布了 91 篇内容, 共 47.4 次阅读, 收获喜欢 159 次。

关注

评论

发布
暂无评论
发现更多内容

生成式AI掀起创意新革命

百度开发者中心

#人工智能 AI作画 生成式AI 文心一言

基于云原生网关的流量防护实践

阿里巴巴云原生

阿里云 云原生

使用EF Core更新与修改生产数据库

高端章鱼哥

EF Core .net6

量化智能机器人开发,炒币机器人功能部署搭建

V\TG【ch3nguang】

量化交易机器人开发 炒币机器人

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

阿里巴巴云原生

阿里云 云原生 dubbo

生成式AI技术原理与应用

百度开发者中心

#人工智能 生成式AI 文心一言

Dropzone 4 for Mac(文件拖拽操作增强工具) 4.6.8中文激活版

mac

苹果mac Windows软件 Dropzone 4 文件管理器

关于工厂数字孪生应用实例的解析

3DCAT实时渲染

数字孪生 实时渲染

和鲸科技为临床医学科研场景打造可供多角色协同的低代码研究平台

ModelWhale

人工智能 低代码 数据科学 在线编程 临床研究

HoudahSpot最新中文版+补丁安装教程

胖墩儿不胖y

Mac软件 文件搜索 搜索工具 搜索软件

避坑PCB的常见设计问题

华秋电子

PCB

业财融合背景下,全面预算管理的发展之路

智达方通

业财融合 全面预算管理 全面预算管理系统 企业全面预算管理

购买矿机产出代币模式系统开发搭建

V\TG【ch3nguang】

代币 挖矿矿池系统开发案例

轻量应用服务器和云服务器的区别

天翼云开发者社区

服务器 云服务器

隐语小课|私有信息检索(PIR)及其应用场景

隐语SecretFlow

AI 数据安全 隐私计算 开源社区 数据要素

Footprint Analytics 与 GasZero 达成合作,将打造 “0 Gas” 区块链生态系统的未来

Footprint Analytics

区块链 web3

说点大实话丨知名技术博主 Kirito 测评云原生网关

阿里巴巴云原生

阿里云 微服务 云原生

质押挖矿模式系统开发,矿池系统部署搭建

V\TG【ch3nguang】

挖矿矿池系统开发案例 质押挖矿

浪潮信息 KeyarchOS 助力 IT 企业安全管理业务完成 CentOS 迁移替换 | 龙蜥案例

OpenAnolis小助手

开源 操作系统 IT 浪潮信息 龙蜥案例

生成式AI:游戏研发的革命者

百度开发者中心

游戏开发 #人工智能 生成式AI 文心一言

安全可信| 首批!通过两项算力调度能力评估!

天翼云开发者社区

云计算 云服务

5分钟,结合 LangChain 搭建自己的生成式智能问答系统

字节跳动云原生计算

大数据 云搜索

一劳永逸,解决.NET发布云服务器的时区问题

互联网工科生

.net 云服务器 时区

钱包量化多币种质押挖矿系统开发合约源代码详情

V\TG【ch3nguang】

钱包系统开发 质押挖矿

判断LED显示屏的质量指南

Dylan

性能 质量 环境 LED显示屏

九科信息成功签约中咨数据有限公司RPA项目

九科Ninetech

10倍性价比,万物新生基于 StarRocks 无缝直替 Trino

StarRocks

数据库 数据仓库 StarRocks trino

低成本生成式AI:引领未来内容创作新篇章

百度开发者中心

#人工智能 生成式AI 文心一言

缓存更新的四种策略及选取建议

这我可不懂

缓存 应用程序

基于 Argo CD 与 Argo Workflows 的 GreptimeDB 云端自动化升级实践

Greptime 格睿科技

rust 时序数据库 云原生数据库 国产时序数据库 自动升级

ARTS 打卡第二周

直须

个人成长 前端 ARTS 打卡计划

如何通过几行 Python 代码,使用BERT进行词嵌入?_AI&大模型_Anirudh_S_InfoQ精选文章