HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

    阅读完需:约 7 分钟

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

在自然语言处理领域中,诞生于 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/


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

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

关注

评论

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

3款让工作效率翻倍的神器!一键轻松搞定PDF转PPT!

职场工具箱

效率工具 职场 PPT 办公软件 AI生成PPT

AI大模型快速生成题库-助力业务人效提升10+倍

京东科技开发者

学而思二代旗舰学习机精准学Pro 值得买吗

妙龙

学而思

行云堡垒-幽影护企业数据安全!

行云管家

数字化 数据安全 企业数据

云解析的智能线路是什么意思?有什么实际用途?

国科云

家庭责任增加的挑战:开发的体育直播平台如何维持年轻用户?

软件开发-梦幻运营部

TapData 信创数据源 | 国产信创数据库 TDengine 数据同步指南,加速国产化进程,推进自主创新建设

tapdata

科大讯飞会议耳机pro2 怎么样

妙龙

科大讯飞

阿里巴巴拍立淘API返回值:商品搜索与社交媒体的融合

技术冰糖葫芦

API Explorer API boy API 接口 API 测试

【YashanDB知识库】生成迁移报告失败,"报错未知类型错误异常:"

YashanDB

yashandb 崖山数据库 崖山DB

大航杯智造扬中电力AI大赛RANK6思路总结

阿里云天池

大疆 DJI Pocket 2 和3对比评测

妙龙

大疆

行云堡垒V7.4新特性

行云管家

DeFi质押合约DAPP系统开发架构逻辑方案(成熟代码)

V\TG【ch3nguang】

Go语言中高效使用Redis的Pipeline

左诗右码

Go

第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略_海南新境界队

阿里云天池

公链大变局:ETH老态龙钟,SOL势如破竹

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 NFT开发 公链开发

一文讲清 API 接口的概念、设计和实现

Noah

DeFi质押流动性挖矿系统逻辑开发方案

V\TG【ch3nguang】

数智重庆.全球产业赋能创新大赛总决赛极客奖队伍比赛攻略_球球君

阿里云天池

使用代理IP有风险吗?

IPIDEA全球HTTP

代理IP

【YashanDB知识库】共享集群YAC换IP

YashanDB

yashandb 崖山数据库 崖山DB

重磅:香港大学经管学院副院长沈海鹏博士出任望繁信科技首席顾问!

望繁信科技

大数据 数字化转型 流程挖掘 流程智能

测试环境治理之MYSQL索引优化篇

京东科技开发者

FinClip助力国产操作系统生态建设

Geek_2305a8

TIANCHI工业 AI- 第 10 名思路分享

阿里云天池

一汽集团数据专家分享:实时数据技术在汽车行业的应用与实践经验

tapdata

小程序容器加速构建一体化在线政务平台

Geek_2305a8

数字货币发行项目开发基本要求及模式创建与海外宣发策略

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 NFT开发 公链开发

电商搜索革命:大模型如何重塑购物体验?

京东科技开发者

2025杭州国际智慧城市展览会

AIOTE智博会

智慧城市展览会 智慧城市展会 智慧城市博览会

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