[日常] 从零安装bert-as-a-service (Python = 3.7, tensorflow= 1.15.0)

1. 废话

  • 众所周知Python写工程最麻烦的就是配环境,你永远不知道某个库哪个版本更新又删掉/修改了一个API,和其他库有没有兼容性问题,如果你正在尝试某一套没人试过的版本组合,那么只能祝你好运,最好别在这毫无产出的事情上花去两个小时,比如我。

2. 你应当知道的

  • BERT是Google推出的预训练模型,自然是用Google家的tensorflow来训练的。
  • 但是现在往往是pytorch用的比较多,那么如何把bert应用到pytorch项目中呢,这就用到了bert-as-a-service这个库。
  • 作为服务端,可以新开一个虚拟环境(笔者用conda),从新安装tensorflow和bert-serving-server
  • 作为客户端,可以使用原来的pytorch的环境,只需要安装bert-serving-client
  • 服务端和客户端是使用websocket来通信的,即网络,意味着你可以把两者装到不同的主机上,也可以装到相同的主机上。
  • 安装的bert-as-a-service并不包含具体的数据文件,请查阅hanxiao_bert-as-service_ Mapping a variable-length sentence to a fixed-length vector using BERT model.html中的List of released pretrained BERT models (click to expand...)下载需要的BERT预训练文件。
  • 请严格按照笔者指定的版本安装,目前已知的问题有
    • bert-as-a-service和tensorflow 2.x有兼容性问题,启动服务端报错type error cannot unpack non-iterable nonetype object
    • tensorflow1.15.0不支持Python3.8
  • 如果你在任何一步下载缓慢,请尝试
    • 更换其他pypi源,比如清华tuna源(搜索 pip/conda 换源)
    • 手动复制终端内提供的链接,然后使用其他下载工具下载(其他下载工具可能有镜像所以要快很多),然后手动安装。安装前请确认已经进入到了需要安装到的虚拟环境,否则会安装到全局而不起作用。
      • pip安装本地包:pip install <包的路径>
      • conda安装本地包:conda install <包的路径> --use-local

3. 创建新环境并安装tensorflow、bert-serving-server

  • 建议创建一个干净的虚拟环境来安装服务端,笔者创建了一个名叫tf的虚拟环境。记得指定Python版本为3.7
    •   conda create -n tf python=3.7
      
    • 如果你忘了在这一步指定Python版本需要降级,请直接输入conda install python=3.7,一些相关的库可能也会跟着降级。
  • 进入刚创建的环境 conda activate tf
  • 安装tensorflow 1.15.0
    •   pip install tensorflow-gpu==1.15.0
      
  • 等待安装顺利完成,在这期间,你可以去找找BERT的预训练文件(参见 你应当知道的 一节)
  • 启动服务端:在虚拟环境内(要启动python或者ipython),敲
    •   bert-serving-start -model_dir <BERT预训练文件路径> -num_worker=4
      
    • 指你解压出的文件夹的路径,如果中间有空格请用英文半角引号包裹起来。
    • num_workers指线程数,用来处理多个客户端的并发请求,如果只是个人测试可以只开1.
    • 如果你不想使用GPU,可以指定-cpu参数

4. 安装bert-serving-client并测试

  • client不需要安装tensorflow,你可以用自己喜欢的环境。
  • pip install bert-serving-client即可。
  • 进入Python解释器,运行以下实例代码,看是否能获取到词嵌入。
    •   from bert_serving.client import BertClient
        bc=BertClient(ip='localhost')
        bc.encode(['First do it', 'then do it right', 'then do it better'])
      
    • 能正确得到输出就算成功。
      • [日常] 从零安装bert-as-a-service (Python = 3.7, tensorflow= 1.15.0)_第1张图片

你可能感兴趣的:(日常)