NLP

sigmoid与softmax两个激活函数及在多分类和多标签分类中应用

sigmoid 与 softmax 两个激活函数通常应用于深度神经网络全连接层之后,两者有何区别,如何将其用于多分类和多标签分类问题,值得学习了解。链接:https://blog.csdn.net/uncle_ll/article/details/82778750 给出了较好的说明,将其要点摘录如下,留存备忘。 F(x_i)=

如何部署 Tensorflow serving

在利用 kashgari 训练 BERT+BiLSTM+CRF 模型后,如何将模型预测结果进行部署是一个很重要的问题。按照 kashgari的官方文档 介绍,考虑采用 Tensorflow serving 来做模型预测的部署。 TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接受外部调用。更加让人眼前一亮的是,它支持模型热更新与自动模型版本管理。这意味着一旦部署 TensorFlow Serving 后,就再也不需要为线上服务操心,只需要关心线下的模型训练。 TensorFlow Serving 可以方便我们部署 TensorFlow 模型,可以使用 TensorFlow Serving 的 Docker 镜像来使用 TensorFlow Serving ,安装命令如下: docker pull tensorflow/serving 接下来将演示如何利用 tensorflow serving 来部署 kashgari 中的模型,项目结构如下: 上图中的 data 是标注的 NER 数据集,即标注出文本中的时间,采用 BIO 标注规则。chinese_wwm_ext 文件夹为哈工大的预训练模型文件。model_train.py 为模型训练的代码,主要功能是完成时间序列标注模型的训练,完整的代码如下: # -*- coding: utf-8 -*- # time: 2019-09-12 # place: Huangcun Beijing import kashgari from kashgari import utils from kashgari.

主题模型 Semantic Coherence的计算

缘起 从LSA到LDA、STM等主题模型,在进行潜在主题语义挖掘时都需要确定最优的主题数,早期学者们多采用困惑度(Perpelexity)指标来评价分析,但是根据困惑度值选定的主题数与人的主观判断有一定偏离,为解决这一问题,Mimno(2011)等提出了语义一致性(Semantic Coherence,SC)指标。在实际应用时存在一个问题,R语言STM包里有semantic()函数,可以针对STM构建的模型对象进行计算,但其他类型的主题模型,有没有现成的代码可以计算对应的SC值呢? 问题解决过程 经对STM包源代码的分析,发现暂时无法对LDA等模型计算SC值,除非修改源代码。 经检索,发现Python中的Gensim包可以完成这项工作,链接:https://radimrehurek.com/gensim/models/coherencemodel.html描述了计算SC值的管道操作(Pipeline)流程,共分为四步,详细说明见论文:Exploring the Space of Topic Coherence Measures,可以按此在Python中导入Gensim包展开分析。 该篇论文的一个贡献是在Mimno(2011)论文基础上又略微新增了若干衡量SC的指标,可以作为应用于中文领域的一个参考。 补充:今天(10月27日)在开发gensim的Rare technologies公司官网看到了负责Topic coherence模块开发人员Devashish Deshpande的博客(https://rare-technologies.com/author/devashish/),专门讲了SC值的管道操作(Pipeline)流程思路 什么是主题模型?一个通俗的解释 假设一个文艺小青年来看我的博客,他完全不懂算法和分词,自然也给不出具体的备选类别,有没有一种模型能够告诉这个白痴,这篇文章很可能(80%)是在讲算法,也可能(19%)是在讲分词,几乎不可能(1%)是在讲其它主题呢? 有,这样的模型就是主题模型。 词嵌入(word embedding)方法是将词语表征为N维向量,这使得语义相似(semantically similar, e.g. “king” — “monarch”) 或语义(semantically related, e.g. “bird” — “fly”) 相关的词语能够在不同的词嵌入训练方法(词语作为情境或文档作为情境)下聚集在一起。 L1正则化和L2正则化的作用体现在: L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择; L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。 庞加莱嵌入(Poincaré embeddings)是一种对网络图中的节点表征学习的方法,将节点关系数据(如两两词语的共现)导入模型,输出精确表征节点之间距离的嵌入向量。 庞加莱嵌入向量可以捕获节点间的层级关系(notions of hierarchy)与相似关系(notions of similarity),在模型可视化输出的庞加莱圆盘图(Poincaré diskette)中,节点之间的相似关系在图中体现为越相似的节点,两者连接且紧密靠近,越不相似的节点,两者没有连接且节点遥相远离;节点之间的层级关系在图中体现为层级高的节点靠近原点,层级低的节点远离原点。 庞加莱嵌入表征的向量不是在传统的欧式空间,而是在双曲空间(hyperbolic space),在双曲空间中,节点之间的距离不是直线而是曲线,这使得树状层级结构中的节点距离可以在二维等低维空间表征。 在Gensim中使用的例子见:https://nbviewer.jupyter.org/github/RaRe-Technologies/gensim/blob/develop/docs/notebooks/Poincare%20Tutorial.ipynb

jupyter notebook installlation in Ubuntu16.04LTS on Tencent cloud environment

缘起 在腾讯云服务器上安装了 Rstudio server 后,曾经跑过一些程序,但之后的数据分析大都在个人电脑上进行。近来想在腾讯云服务器上跑人工智能的程序,因此有了安装 Jupyter notebook 以便能运行 python 下的 keras 与 kashgari 包,跑最新的 BERT embedding 和 NER领域的 BLSM+CRF 模型。 安装过程 在腾讯云服务器上安装 Jupyter notebook 分为以下2大步骤6小步骤: 步骤1:安装 anaconda 套件 anaconda 套件的最大好处是已将常用的 python 包都安装在环境中,省得自己动手一一安装。因之前,已在腾讯云服务器 root 用户下安装过,此步省略。简单而言,在 root 用户权限下输入以下命令 # 此处以 anaconda 3-4.4.0版本为参考,如想安装最新版本,请直接去其官网查找对应安装包 wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh 安装好后,输入 conda list 命令,看显示是否正常,如果正常可以进入下一步。 步骤2:配置 jupyter notebook 该步骤又可以细分为以下几步: 2.1 生成jupyter notebook配置文件 在 console 输入以下命令: # 输入以下命令即可,无需其它操作 jupyter notebook --generate-config 2.2 在 console 输入 ipython,进一步输入以下命令 In [1]: from notebook.

installation of docanno in Tencent cloud VPS

在做文本命名实体识别(Named Entity Recognition, NER)时经常需要对语料做标注,如果采用传统的EXCEL手工录入方式,后续的格式整理费时费力。无意中在网上发现一个文本标注工具软件,该软件与具体的语言无关,可以部署在私有服务器上使用。经过一番实验,走通了在腾讯云服务器上部署的流程,说明如下,留待以后备存: 第一步:安装 docker Docker是一种容器技术,可以将应用和环境等进行打包,形成一个独立的、类似于iOS的App形式的“应用”。这个应用可以直接被分发到任意一个支持Docker的环境中,通过简单的命令即可启动运行。 Docker是一种最流行的容器化实现方案,和虚拟化技术类似,它极大地方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用Docker,可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过它们彼此之间共享同一个操作系统。Docker的优势在于,它可以在更细的粒度上进行资源管理,也比虚拟化技术更加节约资源。 关于 Docker 的详细教程参见:https://www.cnblogs.com/codelove/p/10030439.html 在腾讯云服务器 Ubuntu 16.02LST 版本操作系统上安装的详细说明见:https://www.cnblogs.com/purpleraintear/p/6024328.html,几个主要步骤如下: 1. 添加Docker repository key sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -" 2. 添加Docker repository,并安装Docker sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" apt-get update apt-get install lxc-docker 3. 检查Docker是否已安装成功 docker version 第二步:在腾讯云上安装文本标注工具 docker doccano 是一款开源文本标注工具软件,用Python开发,主要提供文本分类标注、文本序列标注、序列到序列(seq2seq)标注功能。详见:https://github.com/chakki-works/doccano 安装步骤如下: 首先git clone 到腾讯云服务器上 git clone https://github.com/chakki-works/doccano.git cd doccano 其次,安装 Docker 镜像 docker pull chakkiworks/doccano 第三,安装成功后,运行 Docker 容器

Using BERT to analyze Chinese texts

学习谷歌开源的 BERT 算法及在NLP中的应用建议按以下步骤展开: 步骤1:阅读谷歌的 BERT 算法特性的论文中文翻译版: BERT:预训练的深度双向 Transformer 语言模型 可以先仔细阅读,了解 BERT 的基本原理和特性。 步骤2:阅读BERT 算法应用于中文分析的文章,如下所列: - BERT中文实战(文本相似度) https://blog.csdn.net/weixin_37947156/article/details/84877254 NLP - 基于 BERT 的中文命名实体识别(NER) http://www.zhuanzhi.ai/document/4ae9cdca89d996f4dd5f41a38bd48bca BERT在中文数据集上的fine tune全攻略 http://www.elecfans.com/d/821907.html BERT使用详解(实战) https://www.jianshu.com/p/bfd0148b292e 步骤3:应用 BERT做中文的命名实体识别/关键信息提取 可以参考下列资料 使用预训练语言模型BERT做中文NER https://github.com/ProHiryu/bert-chinese-ner 使用kashgari包做中文NLP高级任务 https://github.com/BrikerMan/Kashgari Google Colab实战-基于Google BERT的中文命名实体识别 https://blog.csdn.net/weixin_42441790/article/details/86751031 五分钟搭建一个基于BERT的NER模型 https://www.jianshu.com/p/1d6689851622 15分钟搭建中文文本分类模型 https://eliyar.biz/nlp_chinese_text_classification_in_15mins/ 步骤4:利用 BERT 进行中文NLP语义分析,可以参见LongGang Pang, from UC Berkeley 的实践案例:https://gitlab.com/snowhitiger/speakerextraction 增进了解如何实际应用。 BERT应用之《红楼梦》对话人物提取 这个目录包含用于提取对话人物语境的脚本 conversation_extraction.ipynb, 辅助打标签的脚本 label_data_by_click_buttons.ipynb, 提取出的语境文件:honglou.py 打过标签的训练数据:label_honglou.txt 从打过标签的数据合成百万级别新数据的脚本:augment_data.py 将训练数据转换为BERT/SQUAD可读的脚本:prepare_squad_data.py 以及预测结果文件: res.