词向量

词向量的发展

只愿长相守 提交于 2019-12-20 02:13:39
一、n-gram-model 谈到词向量则必须要从语言模型讲起,传统的统计语言模型是对于给定长度为m的句子,计算其概率分布P(w1, w2, ..., wm),以表示该句子存在的可能性。该概率可由下列公式计算得到: 但实际过程中句子的长度稍长便会为估计带来很大难度,因此n-gram 模型对上述计算进行简化:假定第i个词的出现仅与其前n-1个词有关,即: 实际计算中,通常采用n元短语在语料中出现的频率来估计其概率: 为保留句子原有的顺序信息,我们当然希望n越大越好,但实际上当n略大时,该n元短语在语料中出现的频率就会越低,用上式估计得到的概率就容易出现数据稀疏的问题。而神经网络语言模型的出现,有效地解决了这个问题。 二、Neural Network Language Model(NNLM) 神经网络语言模型不 使用频率来估计n元短语出现的概率 ,而是通过神经网络训练得到一个语言模型,所以会有如下优势: 首先将原始文本进行one-hot编码,在分别乘以词嵌入矩阵,得到每个词的词向量表示,拼接起来作为输入层。输出层后加上softmax,将y转换为对应的概率值。模型 采用随机梯度 下降对 进行最大化。 三、CBOW(continous Bag of words) CBOW的主要思想是将一句话中的某个词挖去,用其上下文对其进行预测,输出的时候是一个哈夫曼树,或者称之为分层softmax,

Pytorch_Seq2Seq与Attention

别来无恙 提交于 2019-12-19 07:33:26
自然语言处理是典型的序列问题,其底层算法在最近几年迅速发展,比如去年年底发布的BERT在11项自然语言处理任务中表现卓越,今年GPT-2生成文本(写作)的水平也有了显著提高。 目前这些最先进的技术都基于Transformer模型,该模型从RNN,LSTM,Seq2Seq,Attention,ConvS2S,Transformer一步步进化而来,还涉及自然语言处理的相关知识,包含的知识点太多,无法一次说清。笔者将其分成几篇,从其进化过程逐步引入。之前已经介绍过RNN及LSTM,本篇将介绍Seq2Seq和Attention算法。 翻译功能 深度学习中的自然语言处理常用于自动翻译、语言识别、问答系统、提取概要、写作等等领域。 其中自动翻译是一项非常典型的应用,在翻译过程中,输入和输出的词汇个数可长可短,不能一一对应,不同语言词汇顺序又可能不同,并且还有一词多义,一义多词,词在不同位置含义不同的情况……是相对复杂的自然语言处理问题。 先来看看人怎么解决翻译问题,面对一种完全不认识的语言,人把句子分解成词,通过查字典的方式将词转换成母语,然后再通过语法组合成句。其中主要涉及词的实际含义、内容的先后关系,两种语言对应关系。 机器既不需要了解各个词的含义和语法,也不需要字典,就能通过大量训练实现翻译功能,并且效果还不错。 这让神经网络看起来更加难以理解。 一开始的深度学习神经网络

浅析Word2Vec

烈酒焚心 提交于 2019-12-16 02:08:06
浅析Word2Vec 1 预备内容 1.1 NLP任务 1.2 Distributional Semantics 1.3 one-hot向量 1.4 softmax函数 2 浅析Word2Vec 2.1 概述 2.2 Skip-Gram模型 2.2.1 模型的细节 2.2.2 隐层 2.2.3 输出层 2.2.4 小结 2.3 Continuous Bag of Words模型(CBOW) 2.4 加速策略1——Hierarchical Softmax 2.5 加速策略2——Negative Sampling 2.5.1 Subsampling Frequent Words 2.5.2 负采样 Negative Sampling 2.5.3 选择负样本 2.6 加速策略小结 2.7 模型训练的一些参数设定 参考文献 1 预备内容 1.1 NLP任务 NLP的目标是设计算法让计算机去理解自然语言并去解决某些问题。 所有NLP任务德第一步,就是如何将单词表示为模型的输入。为了使得大多数NLP任务表现良好,我们首先需要能够用向量表示单词的相似性和差异性。有了这些词向量,我们可以简单的用向量自身的能力来计算相似性(如Jaccard, cos等) 1.2 Distributional Semantics A word’s meaning is given by the words that

中文文本分类

喜夏-厌秋 提交于 2019-12-14 21:33:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 中文分词算法:基于概率图模型的条件机场(CRF) 文本或句子的结构化可分为:词向量空间模型、主题模型、依存句法的树表示、RDF的图表示 分词器 jieba 分词模式:默认切分、全切分、搜索引擎切分 分词的目的:文本实现了最基础的结构化 存储分词利用的数据结构:Bunch 机器学习算法库:Scikit-Learn //可以学习各种算法:http://scikit-learn.org/stable/ 停用词 //下载 http://www.threedweb.cn/thread-1294-1-1.html 权重策略:TF-IDF 词频逆文档频率 词频(Term Frequency):某个给定的词语在该文件中出现的频率 逆向文件频率(Inverse Document Frequency,IDF):一个词语重要性的度量 算法参见书: 常见文本分类算法:kNN最近邻算法、朴素贝叶斯算法、向量机算法 训练步骤:分词-》生成文件词向量文件-》词向量模型 分来结果评估 三个基本指标:①召回率(也叫查全率)②准确率 ③F-Measure 朴素贝叶斯算法的基本原理和简单的Python实现 朴素贝叶斯分类:一种简单的分类算法(思想基础简单:即一个对象中特征向量种每个维度都是相互独立的) 朴素贝叶斯分类的正式定义: 书 kNN

深度剖析知识增强语义表示模型——ERNIE

╄→гoц情女王★ 提交于 2019-12-10 13:57:14
文章目录 什么是语义表示 静态词向量 动态词向量(上下文词向量) 位置编码 ERNIE的原理介绍 神经网络上的改造 辅助任务 学习过程 ERNIE的应用案例 性能不敏感的场景:直接使用 ERNIE 的模型蒸馏案例:搜索问答Query识别和QP匹配 离线推荐 无监督文本的深度神经网络的出现,nlp领域又火了起来,深度神经网络大大提升了nlp任务的效果。虽然早期的网络也是基于上下文进行的向量建模,但是由于单向信息流的弊端,效果上始终难以大幅度提升。Transformer中的多层self-attention的出现,推进了深度网络的发展。Google提出的BERT模型,通过掩盖的term,利用多层的self-attention的双向建模能力,横扫了NLP比赛的各大排行榜。 前文介绍了bert,想详细了解Bert请参见 一步步理解bert 什么是语义表示 ERNIE是一个语言理解模型,最大的优点就是特别好的理解人类的语言。文字其实是概念背后的符号,更重要的其实是概念的本身。词语是具有语义的,怎么正确表示语义呢?语义的特点是什么?语义上比较近的词语真正的距离也是比较接近的,怎么对这部分进行表达,就是词向量,词向量每个词背后对应的是一个高维的向量,所以他们之间的距离是可以度量的。 静态词向量 如图中所示:将文本信息映射到数字空间,变成数字表示的向量,在这种表示上,保留了词语间的距离信息

TensorFlow数据结构操作之:tf.string_split函数

拟墨画扇 提交于 2019-12-07 17:07:49
顾名思义,这是对tersor格式的string进行操作的函数,并且返回的是稀疏矩阵 ''' 注解小知识: 稀疏矩阵与稠密矩阵: 我们知道自然语言处理中有One-hot和词向量两个表示方法 绝大多数时候都是把one-hot转换为词向量。 这个One-hot就是稀疏矩阵,词向量就是稠密矩阵 ''' 先拿官方函数说事 tf.string_split函数 tf.string_split( source, delimiter=' ', skip_empty=True ) ''' @函数意义:将基于 delimiter 的 source 的元素拆分为 SparseTensor. ---很晦涩 @source:需要操作的对象,一般是[字符串或者多个字符串]构成的列表;---注意是列表哦!!! @delimiter:分割符,默认空字符串 @skip_empty:默认True,暂时没用到过 ''' 官方非常含糊,其实这里的要点就只有一个: 默认 情况下,按空格( delimiter ) 切分 我们的字符串( source ),字符串必须是 列表的格式 传入函数。 我们自己举栗子看看: # 当对象是一个字符串 a = 'we do it' tf.string_split([a]) # 返回值如下 SparseTensorValue(indices=array([[0, 0],[0, 1],[0, 2]

5 词袋和词向量模型

拜拜、爱过 提交于 2019-12-06 10:19:43
词袋模型(Bag of Words Model) 词袋模型的概念 先来看张图,从视觉上感受一下词袋模型的样子。 词袋模型看起来像一个口袋把所有词都装进去,但却不完全如此。在自然语言处理和信息检索中作为一种简单假设,词袋模型把文本(段落或者文档)被看作是无序的词汇集合,忽略语法甚至是单词的顺序,把每一个单词都进行统计,同时计算每个单词出现的次数,常被用在文本分类中,如贝叶斯算法、LDA 和 LSA等。 动手实战词袋模型 (1)词袋模型 本例中,我们自己动手写代码看看词袋模型是如何操作的。 首先,引入 jieba 分词器、语料和停用词(标点符号集合,自己可以手动添加或者用一个文本字典代替)。 import jieba #定义停用词、标点符号 punctuation = [",","。", ":", ";", "?"] #定义语料 content = ["机器学习带动人工智能飞速的发展。", "深度学习带动人工智能飞速的发展。", "机器学习和深度学习带动人工智能飞速的发展。" ] 接下来,我们先对语料进行分词操作,这里用到 lcut() 方法: #分词 segs_1 = [jieba.lcut(con) for con in content] print(segs_1) 得到分词后的结果如下: [['机器', '学习', '带动', '人工智能', '飞速', '的', '发展', '

一文读懂「Attention is All You Need」| 附代码实现

不羁岁月 提交于 2019-12-05 22:14:49
作者丨苏剑林 单位丨 广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言 2017 年中,有两篇类似同时也是笔者非常欣赏的论文,分别是 FaceBook 的 Convolutional Sequence to Sequence Learning 和 Google 的 Attention is All You Need ,它们都算是 Seq2Seq 上的创新,本质上来说,都是抛弃了 RNN 结构来做 Seq2Seq 任务。 在本篇文章中,笔者将对 Attention is All You Need 做一点简单的分析。 当然,这两篇论文本身就比较火,因此网上已经有很多解读了(不过很多解读都是直接翻译论文的,鲜有自己的理解),因此这里尽可能多自己的文字,尽量不重复网上各位大佬已经说过的内容。 序列编码 深度学习做 NLP 的方法,基本上都是先将句子分词,然后每个词转化为对应的词向量序列。这样一来,每个句子都对应的是一个矩阵 X=(x1,x2,…,xt),其中 xi 都代表着第 i 个词的词向量(行向量),维度为 d 维,故 。这样的话,问题就变成了编码这些序列了。 第一个基本的思路是 RNN 层 ,RNN 的方案很简单,递归式进行: 不管是已经被广泛使用的 LSTM、GRU 还是最近的 SRU,都并未脱离这个递归框架。RNN 结构本身比较简单

快速使用 BERT 生成词向量:bert-as-service

左心房为你撑大大i 提交于 2019-12-05 21:46:29
BERT 模型是一种 NLP 预训练技术,本文不介绍 BERT 的原理,主要关注如何快速上手使用 BERT 模型生成词向量用于下游任务。 Google 已经公开了 TensorFlow 版本的 预训练模型和代码 ,可以用于生成词向量,但是还有更简单的方法:直接调用封装好的库 bert-as-service 。 使用 bert-as-service 生成词向量 bert-as-service 是腾讯 AI Lab 开源的一个 BERT 服务,它让用户可以以调用服务的方式使用 BERT 模型而不需要关注 BERT 的实现细节。bert-as-service 分为客户端和服务端,用户可以从 python 代码中调用服务,也可以通过 http 的方式访问。 安装 使用 pip 命令进行安装,客户端与服务端可以安装在不同的机器上: pip install bert-serving-server # 服务端 pip install bert-serving-client # 客户端,与服务端互相独立 其中,服务端的运行环境为 Python >= 3.5 和 Tensorflow >= 1.10 客户端可以运行于 Python 2 或 Python 3 下载预训练模型 根据 NLP 任务的类型和规模不同,Google 提供了多种预训练模型供选择: BERT-Base, Chinese :

业务领域建模Domain Modeling

余生颓废 提交于 2019-12-05 11:21:21
  我的工程实践业务是设计和实现一个搜索引擎,并在此基础上搭建一个食谱查询服务。 1)找出业务中用到的类   食谱、食材、食材处理步骤、食谱爬虫、请求分发处理器、分词器、相似度衡量器(计算词向量相似度)、食谱Queryer、Web服务请求者、用户、系统管理员 2)建立类和类之间的联系   类与类之间的关系通常包括:     关联:意味着两个模型之间存在语义联系,在用例中的表现通常为两个名词被动词连接起来       如食谱被爬虫添加、爬虫被管理员配置等。     组合:即包含关系,整体和部分不可分开且生命周期一致       如食材和食材处理步骤是食谱的一部分,它们之间是组合关系。 依赖:表明一个元素(源元素)的定义或实现依赖另一个元素(被依赖元素)的定义或实现       如相似度衡量器要将词向量转化器输出的词向量结构进行相似度计算,故相似度衡量器依赖于词向量转化器。 继承:一般到特殊       如用户和系统管理员都属于Web服务请求者请求服务。 3)添加类的重要属性 类 方法 属性 系统管理员 管理爬虫、管理数据库、管理ACL表 账户名、密码 用户 按食材查询食谱、按食谱名查询食谱 Cookie 请求分发处理器 接收请求、解析请求、URI路由、静态文件服务 Connection List、Request Router 分词器 对输入串分词 相似度衡量器 词向量相似度计算