当前位置: 首页 > news >正文

自然语言处理系列之:文本向量化

大纲

  • 文本向量化常用算法介绍,word2vec及doc2vec
  • 向量化方法的模型训练和使用

7.1 文本向量化概述

即将文本表示为一系列能表达文本语义的向量;


7.2 向量化算法word2vec

  • 词袋(Bag of Word)模型:最早的以词语为基本处理单元的文本向量化方法;

  • 词袋模型存在的问题:

    • 维度灾难
    • 无法保留词序信息
    • 存在语义鸿沟问题
  • 神经网络语言模型(NNLM)

    NNLM语言模型

    大致操作步骤:从语料库中收集一系列长度为 n n n的文本序列 w i − ( n − 1 ) , … , w i − 1 , w i w_{i-(n-1)},…,w_{i-1},w_i wi(n1),,wi1,wi,设这个长度为 n n n的文本序列组成的集合为 D D D,则NNML的目标函数定义为:

    ∑ D P ( w i ∣ w i − ( n − 1 ) , … , w i − 1 ) \sum _DP(w_i|w_{i-(n-1)},…,w_{i-1}) DP(wiwi(n1),,wi1)

    即:在输入词序列为 w i − ( n − 1 ) , … , w i − 1 w_{i-(n-1)},…,w_{i-1} wi(n1),,wi1的情况下,计算目标词 w i w_i wi的概率;

    在上述经典三层前馈神经网络结构中:为解决词袋模型数据稀疏问题,输入层的输入为低纬度的、紧密的词向量,将词序列 w i − ( n − 1 ) , … , w i − 1 w_{i-(n-1)},…,w_{i-1} wi(n1),,wi1中每个词向量按顺序进行拼接,即:

    x = [ v ( w i − ( n − 1 ) ) ; … ; v ( w i − 2 ) ; v ( w i − 1 ) ] x=[v(w_{i-(n-1)});…;v(w_{i-2});v(w_{i-1})] x=[v(wi(n1));;v(wi2);v(wi1)]

    接下来, x x x经隐藏层得到 h h h,再将 h h h接入输入层从而得到最后的输出变量 y y y,其中:

    h = t a n h ( b + H x ) h=tanh(b+Hx) h=tanh(b+Hx)

    y = b + U h y=b+Uh y=b+Uh

    其中 H H H是输入层到隐藏层的权重矩阵,维度为 ∣ h ∣ × ( n − 1 ) ∣ e ∣ |h|\times(n-1)|e| h×(n1)e U U U是隐藏层到输出层的权重矩阵,维度为 ∣ V ∣ × ∣ h ∣ |V|\times |h| V×h,其中 ∣ V ∣ |V| V表示词表大小, b b b则是模型中的偏置项;为保证输出 y ( w ) y(w) y(w)的表示概率值,需对输出层进行归一化操作,一般是加入 s o f t m a x softmax softmax码数,将 y y y转化成对应概率值:

    P ( w i ∣ w i − ( n − 1 ) … , w i − 1 ) = e x p ( y ( w i ) ) ∑ k = 1 ∣ V ∣ e x p ( y ( w k ) ) P(w_i|w_{i-(n-1)}…,w_{i-1})=\frac {exp(y(w_i))}{\sum _{k=1}^{|V|}exp(y(w_k))} P(wiwi(n1),wi1)=k=1Vexp(y(wk))exp(y(wi))

    因为输出是在上下文词序列出现的情况下,下一个词的概率,所以语料库 D D D中最大化 y ( w i ) y(w_i) y(wi)即为 N N L M NNLM NNLM模型的目标函数:

    ∑ w i − ( n − 1 ) ; i i n D l o g P ( w i ∣ w i − ( n − 1 ) , … , w i − 1 ) \sum _{w_{i-(n-1);i in D}}log P(w_i|w_{i-(n-1)},…,w_{i-1}) wi(n1);iinDlogP(wiwi(n1),,wi1)

    一般使用随机梯度下降法对模型进行训练,对于每个 b a t c h batch batch,随机从语料库中抽取若干样本进行训练,其迭代公式为:

    θ : θ + α ∂ l o g P ( w i ∣ w i − ( n − 1 ) , … , w i − 1 ) ∂ θ \theta:\theta+\alpha \frac{\partial logP(w_i|w_{i-(n-1)},…,w_{i-1})}{\partial \theta} θ:θ+αθlogP(wiwi(n1),,wi1)

    α \alpha α为学习率, θ \theta θ包括模型中设计所有参数,包括 N N L M NNLM NNLM模型中的权重、偏置以及输入词向量;

  • C&W模型

    C&W模型结构图

    KaTeX parse error: Expected 'EOF', got '&' at position 2: C&̲W模型未采用语言模型的方式求解词语上下文的条件概率,而是直接对 n n n元短语打分,其核心机理为:若 n n n元短语在语料中出现过,则模型给该短语打一个高分,若未出现的短语,则赋予一个较低评分,其目标函数为:

    ∑ ( w , c ) ∈ D ∑ w ‘ ∈ V m a x ( 0 , 1 − s c o r e ( w , c ) + s c o r e ( w ‘ , c ) ) \sum _{(w,c)\in D} \sum_{w^` \in V}max(0,1-score(w,c)+score(w^`,c)) (w,c)DwVmax(0,1score(w,c)+score(w,c))

    ( w , c ) (w,c) (w,c)是从语料中抽取的 n n n元短语,为保证上下文词数一致性 n n n应该为奇数, w w w是目标词, c c c表示目标词上下文语境, w ‘ w^` w是词典中随机抽取的词;

  • CBOW模型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjU5ejcY-1604644465522)(https://i.loli.net/2019/08/31/iyZ941D68EKNgrU.png)]

    根据上下文来预测当前词语的概率,使用文本中间词作为目标词,同时去除隐藏层从而提升运算速率,其输入层激吻语义上下文的表示;

    对目标词的条件概率公式如下:

    P ( w ∣ c ) = e x p ( e ‘ ( w ) T x ) ∑ w ‘ ∈ V e x p ( e ‘ ( w ‘ ) T x ) P(w|c)=\frac {exp(e^`(w)^Tx)}{\sum _{w^` \in V} exp(e^`(w^`)^Tx)} P(wc)=wVexp(e(w)Tx)exp(e(w)Tx)

    其目标函数类似于 N N L M NNLM NNLM模型,为最大化式:

    ∑ ( w , c ) ∈ D l o g P ( w , c ) \sum _{(w,c)\in D}logP(w,c) (w,c)DlogP(w,c)

  • Skim-gram模型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tTiS5qFA-1604644465523)(https://i.loli.net/2019/08/31/UNFVnfweLiOtHI5.png)]

    根据当前词语来预测上下文概率,从目标词 w w w的上下文中选择一个词,然后将其词向量组成上下文的表示,模型目标函数为:

    m a x ( ∑ ( w , c ) ∈ D ∑ w j ∈ c l o g P ( w ∣ w j ) ) max(\sum_{(w,c)\in D} \sum _{w_j \in c}log P(w|w_j)) max((w,c)DwjclogP(wwj))


7.3 向量化算法doc2vec/str2vec

doc2vec包括DM(Distributed Memory)和DBOW(Distributed Bag of Words),DM模型视图预测给定上下文(不仅包含单词,还包含相应段落)求某单词出现的概率,而DBOW则在仅给定段落向量的情况下预测段落中一组随机单词的概率。总体而言,doc2vec是word2vec的升级,doc2vec不仅提取了文本的语义信息,还提取了文本的语序信息;

CBOW模型例子


相关文章:

  • 自然语言处理系列之: 实战电影评论情感分析
  • 自然语言处理系列之: NLP中用到的机器学习算法
  • Java网络编程:UDP套接字程序设计,UDP实现Socket通信(附完整代码实现)
  • Java网络编程:邮件发送程序设计,SMPT传输协议实现(完整代码实现)
  • java网络编程:基于HTTP的下载程序设计及web浏览器制作(完整代码实现)
  • Java网络编程:Socket实现的扫描程序设计 (完整代码实现)
  • 为什么要学习设计模式?看完这篇你就懂了!
  • 使用Wps切分单页PDF文件为多页pdf
  • 深入解析JVM(四):对象的创建
  • IntellIJ IDEA导入项目后无法运行方法的解决方法!
  • Java使用Redis删除指定前缀Key
  • Linux中删除重复行的三种方法
  • Java面试突击系列(一):消息队列的面试连环炮
  • Java面试突击系列(二):分布式搜索引擎的面试连环炮
  • Java面试突击系列(三):分布式缓存
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • .pyc 想到的一些问题
  • js中的正则表达式入门
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • mysql innodb 索引使用指南
  • Mysql5.6主从复制
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • 你不可错过的前端面试题(一)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 译有关态射的一切
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 从如何停掉 Promise 链说起
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #define与typedef区别
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (pojstep1.3.1)1017(构造法模拟)
  • (rabbitmq的高级特性)消息可靠性
  • (定时器/计数器)中断系统(详解与使用)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)ObjectiveC 深浅拷贝学习
  • .apk文件,IIS不支持下载解决
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NetCore部署微服务(二)
  • .NET框架
  • .NET命名规范和开发约定
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [20140403]查询是否产生日志
  • [C\C++]读入优化【技巧】
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [HarmonyOS]第一课:从简单的页面开始