一文读懂:如何零基础自学NLP!系列2

大家好, 我是Lucy@FinTech社区。

今天和大家分享的是如何零基础自学NLP(系列2)!面向读者:机器学习选手/NLP零基础,希望快速入门/对NLP感兴趣,以做项目为导向的学习者

FinTech社区也有机器学习群,欢迎添加微信:fintech12, 加入机器学习群交流学习!

 

 具体内容 (系列1):

  • 文本处理的常见操作
  • AWESOME NLP
  • 优秀的公开课/博客/书籍

具体内容 (系列2):

  • 文本相似度计算/词云图教程
  • 你该知道哪些算法(传统/深度学习)
  • 如何搭建一个智能问答框架
  • 按照什么顺序学习


 

一、文本相似度、词云图教程

文本相似度计算

文本相似度可以用来干什么呢?

以延禧攻略为例,如果我的语料库是整个小说的话,当我输入“璎珞”时,可以科学地观察与璎珞关系最紧密的是弘历还是傅恒还是我们的白月光复查皇后。

下图为一个粗糙的版本结果。语料是从百度上复制粘贴的前20集左右的剧情文字,大家可以随意更改语料文字,最后得分结果如下:

  • 皇后:0.975189
  • 皇上:0.964250
  • 傅恒:0.964144

看完与“璎珞”强相关的词后,也可以尝试看看“傅恒”,“皇上”的相关词(还是心疼傅恒...)。

  • 可以查看与“璎珞”最相关的前n个词语是什么
  • 可以查看“璎珞”与“傅恒”的相似度有多少

同样,也可以把后面的剧情加进去,看看会发生什么变化。

也就是说,可以按照这个方法来分析文本情节或者任务之间的关系。比如把天龙八部当作语料库,也能扒出来些什么吧!


 

词云图 制作流程

词云图 (wordcloud),是这两年比较火的文本可视化分析的一种。很适合运营,产品,甚至行政做分析展示。

词云图的制作其实非常简答,主要用到三个Python库:

  • Jieba:用于中文分词
  • wordcloud:用于词云图制作
  • matplotlib:用于画图展示

简单到什么地步呢,就是10行代码搞定!

以爱丽丝梦游仙境的英文小说为例:

其他的还可以根据你选定的图片进行词云形状的定制,词云颜色的定制等 :

下面是根据延禧攻略部分文字绘制的富察皇后的词云图:

中文与英文还是有点不一样的,比如停用词表就需要自己弄一套。

白月光皇后的人头形状和扇子形状都还在的。再来一张:

这里用到的文本分析的技术只停留在分词阶段,还是比较简单的。可视化分析永远是最吸引人的。快去试一下吧!

具体教程在我博客里有写。博客地址:codewithzhangyi.com


 

二、你该知道哪些算法

Text Matching文本匹配做文本匹配,就是判断两个文本(或者多个文本)是否表达一个意思。

传统算法

  • 编辑距离:指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。
  • 集合度量特征:基于BOW (bag of words),利用集合相似性度量方法,如Jaccard。
  • 统计特征:如句子长度、词个数、标点数量、标点类型、词性顺序等。
  • 词向量:将两个文本表示成同一向量空间中的向量,计算欧氏距离、余弦相似度等。
  • 利用TF/IDF/LDA表示进行度量:如BM25文本相似度。

其中基于特征的方法,效果很依赖特征的设计。基于传统检索模型的方法存在一个固有缺陷,就是检索智能模型处理Query与Document有重合词的情况,无法处理词语的语义相关性。

深度文本匹配

从大量的样本文本中自动提取词语之间的关系,并能结合短语匹配中的结构信息和文本匹配的层次化特征,更精细地描述文本匹配的问题。

基于表达的深度学习模型:

  • Siamese Network
  • DSSM: Deep Semantic Structured Model
  • CDSSM: Convolutional Deep Semantic Structured Model
     
  • ARC-I:Connolutional Neural Network Architectures for Matching Natural Language Sentences
  • RNN:Recurrent Neural Networks
  • RNN变种: LSTM、Match-LSTM、Seq-to-seq、Attention

基于交互的深度学习模型:

先拿到文本表示,从文本表示构建交互,从交互到特征抽取。

  • DeepMatch
  • ARC-Ⅱ
  • MatchPyramid
  • Match-SRNN

比较:

github上的nlp深度学习模型

  • Awesome Neural Models for Semantic Match
  • Matchzoo

matchzoo是一个集很多深度学习模型于一身的平台:

对各种模型的性能进行测评:

我的经验

当然我自己也做过很多深度模型测评,但是再多的模型也是一个个学起来攒起来的。

所以,对于新手来说,就是一步步地来。我是先看的RNN,再看RNN变形比如LSTM、Seq-to-Seq、Attention等,再看Siamese Network、DSSM。具体学习步骤在“按照什么顺序学习”一节有仔细展开讲。


 

三、如何搭建一个智能问答框架

开源的数据集

NLP开源数据大全,做项目再也不用愁数据了!

练手项目

如何搭建一个智能问答框架

在自己亲手搭建一个之前,学习和走读优秀的框架代码是个不会错的选择。

AnyQ (ANswer Your Question): 百度QA开源项目,主要包含面向FAQ集合的问题系统框架、文本语义匹配工具SimNet。

观察过BAT的问答框架都是差不多的,就以上图为例,整理一下思路就是:

  • 首先你要有一个FAQ set标准问题q标准答案a+和其它信息
  • 当一个新问题Q-new进来的时候
  • 首先对问题Q-new进行预处理:错词纠正/词形还原/分词/词嵌入...
  • 根据问题Q-newFAQ set里进行召回:搜索出一批相似问题 (q1, q2, q3)
  • 将问题Q-new与召回问题(q1, q2, q3)进行匹配计算相似度
  • 将召回的相似问题(q1, q2, q3)根据相似度排序
  • 假设排序结果为q2=0.98 > q1=0.91 > q3=0.31
  • 以相似度分数最高的问题q2对应的答案a2作为Q-new的答案输出、

这里的难点在于,所有出现“semantic”的地方因为你要让机器理解语义真的是很难的一件事,因此会带入很多的深度学习模型,使其自学习词语之间的关系。

AnyQ是在github上的开源项目,因此所有代码实现都是公开分享的。

AnyQ网址:

https://github.com/baidu/AnyQ

AnyQ里只有SimNet是用Python写的,也是比较核心的一块内容。

SimNet网址:

http://github.com/baidu/AnyQ/tree/master/tools/simnet/train

(要想自搭框架,代码走读是很必要的!)

我有在我的博客详细分享AnyQ的代码走读和基于SimNet的Quora问句语义匹配实现。

博客地址:http://codewithzhangyi.com

当这个智能问答框架搭建完毕后,将其部署到微信上面就形成了自定义的客服系统

如果我有一套聊天训练集或者所有关于机器学习的智能问答数据集的话,当你们跟我聊天我就直接托管到问题框架上,那么就能自动回答问题了!现在很多的所谓人工智能的课程、服务都是类似这样操作的。

话说,现在已经感觉到自己的部分好友应该是机器人了。很多社区留下的客服微信号可能就是它们的客服机器人。

或者当你和朋友聊天发现画风不对时,就可能是朋友接了个机器人进来~


 

四、按照什么顺序学习

  • 收到任务:智能问答
  • 了解文本处理的基本操作
  • 跑spaCy的相关例子
  • 跑jieba的相关例子
  • 了解智能问答的整个流程
  • 知识库的建立
  • 学习字典的生成
  • 学习Word Embedding
  • 熟悉BOW/TF-IDF/LDA
  • 熟悉word2vec
  • 做Kaggle情感分析题
  • 做文本相似度分析
  • 制作词云图 (个人兴趣)
  • 了解文本匹配
  • 开始第一次做Kaggle的Quora问句匹配题
  • 了解会用到的深度学习算法
  • 学习RNN理论知识
  • 以百度开源智能问答框架AnyQ为例跑语义匹配模型
  • 熟悉AnyQ里的SimNet框架
  • 所有代码走读 (反反复复看就对了)
  • 对7个网络进行超参数调参,观察模型性能
  • 选择性最优的模型和配置参数
  • 尝试修改代码
  • 做预测,完成Kaggle的Quora问句匹配额
  • 回头再看需要补充什么知识
  • 进行下一个任务的规划


 

写在最后:

以上只是其中的一部分,不能做到知识点的全面覆盖。NLP技术的应用范围很广泛,可以抓住其中一个点来深入学习。

你还有哪些关于NLP的知识想要和大家分享?欢迎添加微信:fintech12加入机器学习群交流!