作者 | Anirudh_S 译者 | Sambodhi 编辑 | 张之栋 AI 前线导读: 在自然语言处理领域中,诞生于 2018 年末的 BERT 非常的“火热”。强悍如 BERT,在十多项 NLP 的任务上强势屠榜,业界声称 BERT 将开创自然语言处理领域新的纪元。在本文中,作者 Anirudh_S 将展示如何只使用几行 Python 代码,就可以使用深度学习自然语言处理模型(BERT)将单词嵌入到向量中。更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)

本文最初发表于 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。

install tensorflow-gpu==

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

install -U bert-serving-

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

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

start -model_dir /path_to_the_model/ -num_workers=

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

start -model_dir /

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

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

from bert-serving.client 

我们应该将想要编码的单词作为 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 

完成 BERT 词嵌入

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

 作者介绍

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

原文链接:

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


你也「在看」吗?

bert获得词向量_只需几行 Python 代码,即可用 BERT 玩转词嵌入!相关推荐

  1. python的控件text的文本属性_只需6行Python代码就给图片加上水印——你一看就会了...

    大家在做项目开发的过程中,会不会经常遇到需要处理图片却没有快速有效的工具的情况呢?比如客户需要给图片加上水印,你可能会用到PS这些高级软件去处理,这样虽然有效果但是需要相对较长的时间:作为程序猿,你一 ...

  2. python好看图案的编程代码_只需15行Python代码,实现图像定位功能

    引言本教程使用的环境:Windows 10 + Python 3.6 数据源:The Oxford-IIIT Pet Dataset 需要的第三方库:import tensorflow as tf i ...

  3. python目标识别代码_利用ImageAI库只需几行python代码超简实现目标检测

    什么是目标检测 目标检测关注图像中特定的物体目标,需要同时解决解决定位(localization) + 识别(Recognition).相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分 ...

  4. 只需数行python代码就可鉴定黄图的小程序

    最近学习到PIL,这是一个处理图片的神器,API调用非常简单,若你需要写校验码,压缩图片都可用它处理. 这里写了鉴黄小程序,算法很简陋,计算皮肤颜色的像素占比,若超过30%则为黄图(当然专业的算法肯定 ...

  5. 竟可如此轻松解决,PDF 转 Word只需几行 Python 代码

    PDF转Word是一个古老的话题,其难点在于建立从PDF基于元素位置的格式到Word基于内容的格式的映射. PDF文档实际并不存在段落.表格的概念,PDF转Word要做的就是将PDF文档中" ...

  6. 视频创作没有音效素材?只需16行Python代码让你用都用不完,步骤非常详细

    文章目录 序言 环境/模块/目标 1.目标 2.开发环境 3.模块 流程讲解 全部代码 序言 作为当代新青年,应该多少会点短视频制作吧? 哈哈,那当代自媒体创作者好了~ 制作视频的时候,多少需要一些搞 ...

  7. 区块链技术实现只需180行go代码!

    区块链技术实现只需180行go代码! 通过本文,你将可以使用Go创建自己的区块链.理解哈希函数是如何保持区块链的完整性.掌握如何创造并添加新的块.实现多个节点通过竞争生成块.通过浏览器来查看整个链.了 ...

  8. lstm代码_只需5行代码!LSTM时间序列建模以及预测

    最近我在github上看到一个项目,项目内容是将深度学习方法(LSTM.RNN.GRU)进行时间序列建模的过程进行了封装,使得调用者调用者只需5行代码能完成时间序列建模以及预测的全过程. 项目本身是使 ...

  9. java qq号码生成规则_只需亿小串代码,教你用java仿制qq

    只需亿小串代码,教你用java仿制qq 直奔主题,代码如下: import java.awt.Color; import java.awt.Container; import java.awt.Ima ...

最新文章

  1. NAT的配置与相关概念的理解
  2. 无需额外数据,首次实现ImageNet 87.1% 精度,颜水成团队开源VOLO
  3. SAP QM 物料主数据QM视图里字段MARC-INSMK的更新
  4. springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
  5. centos 安装 rabbitMq
  6. useGeneratedKeys的详解
  7. mysql中修改表结构语法_MySQL表结构修改详解
  8. intellij出现Error assembling JAR: invalid entry size
  9. vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
  10. unity3d Aniso Level 摄像机近地面清楚,远地面模糊
  11. python用来自动修改pdf_python实现从pdf文件中提取文本,并自动翻译的方法
  12. avg最多用多少列 mysql_40斤一桶水,最多用多少克磷酸二氢钾?打几次增产效果最好...
  13. 『动态规划』矩阵连乘
  14. Autoware Docker安装和仿真
  15. plc云网关与串口服务器区别,plc智能网关和传统工业路由器有什么区别
  16. supermap 模型导入纹理丢失解决方法
  17. 华为5g服务器硬件供应商,华为发布5G多模终端芯片和商用终端
  18. python在程序中模拟键盘鼠标操作
  19. QML 信号与响应方法的总结
  20. 任正非蜕变,华为新生

热门文章

  1. 心跳超时时间设置_定时器实现之时间轮算法
  2. 我要3万取款机怎么取_自助取款机一天可以取多少,能取出来几万呢?
  3. python scipy stats_Python Scipy stats.binned_statistic_dd()用法及代码示例
  4. mac qt编译出现问题的解决方法
  5. C++ HOOK 详解
  6. systemd-run 中文手册
  7. linux重定向:21
  8. windows10安装Visual Studio 2017
  9. ibm邮件怎么撤回_怎么申请邮箱?163邮箱如何注册使用?
  10. idea+SpringBoot+Mybatis+Mysql环境搭建