词向量

python中文文本分类

怎甘沉沦 提交于 2020-01-29 05:37:22
,中文文本分类流程: 预处理 中文分词 结构化表示-构建词向量空间 权重策略—TF-IDF 分类器 评价. 二,具体实现 预处理 1.1 打标签: 对评论数据打好标签,这里将汽车评论数据分为正面和负面两类。假设负面标签为0,正面标签为1. 1.2 整理数据集: 一般可分为训练集,验证集和测试集。为什么要这么分,这篇博文给了浅显的解释:训练集、验证集和测试集的意义本试验将数据分为训练集和测试集两类。 1.3 得到训练集预料库: 例如,训练集文本的路径:train_data/train_positive.xlsx , train_data/train_negtive.xlsx… 1.4 得到测试集语料库: 例如,测试集文本的路径:test_data/test_negtive.xlsx , test_data/test_positive.xlsx… 2 中文分词 2.1 概述 第1节预处理中的语料库都是没有分词的原始语料(即连续的句子,而后面的工作需要把文本分为一个个单词),现在需要对这些文本进行分词,只有这样,才能在基于单词的基础上,对文档进行结构化表示。 中文分词有其特有的难点(相对于英文而言),最终完全解决中文分词的算法是基于概率图模型的条件随机场(CRF),CRF的原理我们不细说了,直接调用中文分词的工具,这里用的是python第三方分词库jieba(所采用的算法就是条件随机场)

NLP笔记(word embedding)

喜夏-厌秋 提交于 2020-01-28 16:18:02
目录 word embedding 语言表示 语言模型 词的分布式表示 word2vec 以前的word嵌入方法在今天仍然很重要 Word2Vec等方法的局限 针对NLP中的一些基本概念和知识,做一些摘记 word embedding 语言表示 语言表示 研究的是如何把自然语言文本转化为可以被算法模型处理的数据 目前使用得比较多的语言表示方法被称为:“基于词的分布式表示(distributed representation)” Harris 在 1954 年提出的 分布假说( distributional hypothesis) 为这一设想提供了理论基础: 上下文相似的词,其语义也相似 。 Firth 在 1957 年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定( a word is characterized by thecompany it keeps) 语言模型 常见的语言模型包括:N元文法模型(N-gram Model)、unigram model、bigram model、trigram model等等 词的分布式表示 词的分布式表示方法一般分为3类,分别是: 基于矩阵的分布式表示,基于聚类的分布式表示,基于神经网络的分布式表示 常见到的 Global Vector 模型( GloVe模型) 是一种对“词-词”矩阵进行分解从而得到词表示的方法,属于

Transformer模型学习笔记

痞子三分冷 提交于 2020-01-28 03:47:29
Transformer模型学习笔记 前言 回顾 参考资料 解读 1. High-level的看一下,transformer大致是个什么样子 2.详细看下, 具体结构,以及输入都长什么样 3.self-attention层 4.多头机制 Multi-head 5.输入语句中词的顺序(Positional Encoding) 6.剩余东西 7.解码器(Decoder) 8.最后输出层 前言 Google研究菌曰: 在transformer模型之前,我们做机器翻译等事情(论文原话: 我们做转录模型(transduction model)) 都是用循环神经网络(RNN)或者卷积神经网络(CNN)作为基本单元,搭建一个包含encoder和decoder的模型. 虽然效果不错,但是显然还有很多进步空间. 既然拿那么多钱,上班又不是996,不如整点新的东西? 于是有了transformer模型. 回顾 回顾下整体流程, 为啥会想到要去创造transformer这个东西. 做机器翻译? –>那咱们搭一个具有encoder-decoder结构的模型. 其中seq2seq是最常用的encoder-decoder模型–>模型里的小单元用基本结构的RNN或者基本结构的CNN. 训练完发现对长句记忆效果不理想,模型记不住之前的信息?发生梯度消失? –>采用RNN的变体结构LSTM 翻译效果不太好

基于卷积神经网络的查询意图检测【论文笔记】

a 夏天 提交于 2020-01-13 21:56:33
原文:Query Intent Detection using Convolutional Neural Networks 主要贡献: 使用卷积神经网络来提取查询向量表示作为查询分类的特征 使用该特征来对查询意图分类 能有效地检测出查询意图,具有较高的查准率和查全率 导言 现代搜索引擎为了满足用户的搜索需求,需深入了解用户的查询,识别查询背后的意图。例如,查询“美国总统”将返回巴拉克奥巴马作为答案,查询“匹兹堡图片”将首先显示图像搜索引擎的结果。 查询意图识别的挑战性:查询通常很短;识别用户意图需更多的上下文而不只是关键字;意图分类的数量非常大。大多数方法都需要大量的人力来为每个意图类定义模式。 本方法是使用深度学习来对查询向量表示,然后将其用作特征来按意图对查询进行分类。 相关工作 两种主流方法来识别查询意图: 基于规则的方法:使用预定义的规则将新查询与其意图匹配,如果能匹配上则一定是精确的,但可能缺少相应规则而覆盖率低,规则需要大量人力来设计 基于统计的方法:监督或非监督学习,在监督方法中需要基于领域知识或特征工程 本文自动生成生成查询向量作为特征,而不需人工设计分类特征。 查询意图识别 本方法 本模型包括两个步骤: 离线时训练模型参数,利用标记了意图的查询样本学习卷积神经网络的参数和分类器 在线时在新查询上运行模型,得到其意图分类结果 在离线训练阶段:

Spark word2vector

被刻印的时光 ゝ 提交于 2020-01-09 17:24:26
1、概念 * word2vector 是google开源的一个生成词向量的工具, * 以语言模型为优化目标,迭代更新训练文本中的词向量,最终收敛获得词向量。 * 词向量可以作为文本分析中重要的特征,在分类问题、标注问题等场景都有着重要的应用价值。 * 由于是用向量表示,而且用较好的训练算法得到的词向量的向量一般是有空间上的意义的, * 也就是说,将所有这些向量放在一起形成一个词向量空间, * 而每一向量则为该空间中的一个点,在这个空间上的词向量之间的距离度量也可以表示对应的两个词之间的“距离”。 * 所谓两个词之间的“距离”,就是这两个词之间的语法,语义之间的相似性。 * * 一个比较实用的场景是找同义词,得到词向量后,假如对于词来说,想找出与这个词相似的词, * 这个场景对人来说都不轻松,毕竟比较主观,但是对于建立好词向量后的情况, * 对计算机来说,只要拿这个词的词向量跟其他词的词向量一一计算欧式距离或者cos距离,得到距离小于某个值那些词,就是它的同义词。 * * 这个特性使词向量很有意义,自然会吸引很多人去研究,google的word2vec模型也是基于这个做出来的。 * * Word2Vec 是一种著名的 词嵌入(Word Embedding) 方法, * 它可以计算每个单词在其给定语料库环境下的 分布式词向量(Distributed Representation

【深度学习】用Keras实现word2vec的CBOW模型

久未见 提交于 2020-01-07 08:37:48
前言   尽管gensim里的word2vec已经非常好用,但用别人的模型始终难以直接解决自己的问题,于是去搜有没有直接能用的Keras版,找到了两版,分别为: 版本1: keras训练word2vec代码 版本2: 【不可思议的Word2Vec】6. Keras版的Word2Vec   两位写的都很好,版本1代码上可以直接上手,版本2框架更清晰,但两位大佬的数据集都是基于多篇文章的,版本1是从微信接口里拿的,但我连接不上服务器;版本二的数据集未给,然后面向对象的写法本人不是很熟就不好改。于是就在学习版本框架理论的同时,在版本1上进行更改。   最终形成在单个文本内进行词向量训练。 数据   随便一个utf-8的中文文档就行,我这里为了求快,节选了 《天龙八部》 的第一章,记得改下编码utf-8。 停用词   也是网上扒的停用词,据说非常全, 最全中文停用词表整理(1893个) 。 def stopwordslist ( ) : #设置停用词 stopwords = [ ] if not os . path . exists ( './stopwords.txt' ) : print ( '未发现停用词表!' ) else : stopwords = [ line . strip ( ) for line in open ( 'stopwords.txt' , encoding =

简历项目的梳理和面试准备

梦想与她 提交于 2020-01-01 03:00:27
简历的目的是拿到面试机会,所以要 1、简历项目 一、投资人用户画像,给新的项目推荐投资机构,文本的处理,文本相似问题,用tfidf和浅语义模型解决,文本检索技术,可以归类为文本检索的问题   文本预处理:中文分词,然后去除停用词、删除低频词、进行word ->id转换   可选的优化:比如用TF-IDF为词汇加上局部权重,构建TF_IDF向量   将训练文本用Dictionary转换成id表现的形式,这就得到了Term-Document矩阵A      降维,将奇异值S减少为k个(topic值),当然k是个经验数字,比如200-500,然后U选前k列,V选前k列;S选左上角k行k列对角方阵,其实V的      新的查询文本q,其查询向量为q上公式;两个向量的相似度计算常常使用consine余弦相似度 gensim库的实现: LSI模块 Similarities模块 二、发现创投新概念,文本分类,打标签问题,文本分类有传统的 tfidf + lr 或者svm;深度学习中词嵌入+lstm,词嵌入的是通过公司内部收集关于证券的数据, 三、搜狗大数据用户画像:特征:搜索文本,label:年龄、性别、学历   三个子任务、任务查询词、 用户画像: 研究准备与数据收集 -> 亲和图 -> 人物原型框架 -> 优先级排序 -> 完善人物原型 -> 用户画像构建流程:   基础数据收集 ->

推荐系统 Word2vector

霸气de小男生 提交于 2019-12-29 21:29:23
在使用Uni-gram模型时(也就是词袋法)时,会导致数据非常稀疏。那么我们在训练模型时,就需要更多的数据。会导致存储和计算开销激增。 One-hot-Representation 是最常用的词表示方法。它的优点是简单直观,容易理解。但是会出现词向量维数爆炸的问题,因为有多少个词,词向量就有多少维度,计算开销太大。OneHot还有一个问题,两个在词义上相似的词,在词向量上却没有相似性。 来源: CSDN 作者: 广小辉 链接: https://blog.csdn.net/Galbraith_/article/details/103757273

【深度学习系列】PaddlePaddle垃圾邮件处理实战(一)

白昼怎懂夜的黑 提交于 2019-12-27 14:42:15
PaddlePaddle垃圾邮件处理实战(一) 背景介绍   在我们日常生活中,经常会受到各种垃圾邮件,譬如来自商家的广告、打折促销信息、澳门博彩邮件、理财推广信息等,一般来说邮件客户端都会设置一定的关键词屏蔽这种垃圾邮件,或者对邮件进行归类,但是总会有一些漏网之鱼。   不过,自己手动做一个垃圾邮件分类器也并不是什么难事。传统的机器学习算法通常会采用朴素贝叶斯、支持向量机等算法对垃圾邮件进行过滤,今天我们主要讲如何用PaddlePaddle手写一个垃圾邮件分类器。当然,在讲PaddlePaddle做垃圾邮件处理之前,先回顾一下传统的机器学习算法是如何对垃圾邮件进行分类的。 了解数据集   首先先了解一下今天的数据集:trec06c。trec06c是一个公开的垃圾邮件语料库,由国际文本检索会议提供,分为英文数据集(trec06p)和中文数据集(trec06c),其中所含的邮件均来源于真实邮件保留了邮件的原有格式和内容。 文件下载地址: trec06c 文件格式: trec06c │ └───data │ │ 000 │ │ 001 │ │ ... │ └───215 └───delay │ │ index └───full │ │ index 文件内容: 垃圾邮件示例:本公司有部分普通发票(商品销售发票)增值税发票及海关代征增值税专用缴款书及其它服务行业发票,公路、内河运输发票

python读取大文件踩过的坑——读取txt文件

天大地大妈咪最大 提交于 2019-12-23 13:50:59
读取 https://github.com/Embedding/Chinese-Word-Vectors 中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直接导入模型然后indexword即可。 因为这是一个txt大文件,尝试了DataFrame,np.loadtxt等,都没有成功,其中主要遇到的问题是: 如何读取完整的大文件,而不会出现内存不足memery error等问题 将读取出来的文件,保存为npy文件 根据词找到对应的向量 解决办法: 尝试使用的代码: 代码1: try: lines=np.loadtxt(filepath) catch: 感觉这块不会写了咦,,, print(ValueError) 但这样的话,它就不会继续循环去读上边的txt了呢 代码2: lines=[] with open(filepath) as f: for line in f: lines.append() np.save(filepath,lines) 代码3 def readEmbedFile(embedFile): # embedId = {} # input = open(embedFile,'r',encoding="utf-8") # lines = [] # a=0 # for line in input: # lines