自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术的点点滴滴

机器学习、自然语言处理、搜索技术爱好者

  • 博客(35)
  • 收藏
  • 关注

原创 tensorflow2.0+keras简单实现BERT模型

BERT模型简介BERT主要利用Transformer Encoder部分结合Masked Language Model,训练双向注意力模型应用到语言建模中。BERT模型拆解tensorflow模块导入import numpy as npimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import activationsfrom tensorflow.keras import layersfr

2021-02-24 15:27:49 3258 3

原创 [tensorflow笔记]-tensorflow实现带mask的reduce_mean

在使用tensorflow处理一些tensor时,有时需要对一个tensor取平均,可以使用tf.reduce_mean操作,但是这个没法处理带有mask的tensor数据,本文主要就是利用tensorflow的基本操作实现带mask的平均。tf.reduce_mean比如我们的数据是3维tensor,shape=(B,N,H),B表示batch_size、N表示最大长度、H表示向量维度,这样的3维tensor在NLP相关模型中很常见。# input tensortensor = tf.consta

2021-02-24 14:38:07 1113 1

原创 tensorflow serving部署Bert预训练模型

目前没有整理完善,先留个坑~Bert模型介绍BERT的关键技术创新是将Transformers双向训练作为一种流行的注意力模型应用到语言建模中。Masked LM (MLM)在向BERT输入单词序列之前,每个序列中有15%的单词被[MASK]token替换。然后,该模型试图根据序列中其他非MASK词提供的上下文来预测MASK词的原始值。本文主要记录使用tensorflow serving部署训练好的bert模型,并根据模型获取句子向量表示。ckpt转saved_model格式google ber

2020-12-29 23:53:19 1735 4

原创 git版本控制命令汇总

git基本命令Git 是一个开源的分布式版本控制系统,该系统通过一些简单的命令就可以处理大小项目的版本控制问题。命令解释git branch查看本地所有分支git status查看当前状态git commit提交git branch -a查看所有的分支git branch -r查看远程所有分支git commit -m "init"提交并且加注释git push origin master将文件给推到服务器上git remote

2020-10-27 21:57:16 198

原创 自然语言处理入门(五)--基于双塔结构的语义匹配模型

语义匹配文本语义匹配一般是计算两端文本之前的语义相关性或相似度,在搜索和自动问答中应用广泛。用深度学习方法解决这类问题一般有两种思路,以搜索中的query和doc为例:一种是query和doc分别学习一个向量表示,最后计算cos相似度;另一种是query和doc先融合,然后接多层网络,最后变成分类问题来优化。详细可参考:《搜索与推荐中的深度学习匹配》之搜索篇本文主要将的是第一种情况,就是所谓的双塔结构。双塔结构双塔结构总体如下图,一般有两个输入,然后分别接一个表示层,表示层输出向量,最后计算两个向

2020-09-20 18:15:46 3446

原创 greedy search和beam search的原理以及实现

在自然语言处理seq2seq模型中,模型训练完成后,预测推理时需要预测每一步输出的最可能的单词,之后组合成完整的预测输出句子。这里每一步最可能的输出单词的选择就用到greedy search或者beam search。下面详细介绍一下这两种搜索的区别,以及实现方法。贪婪搜索 greedy searchgreedy search比较简单,就是贪婪式的搜索,每一步都选择概率最大的单词输出,最后组成整个句子输出。这种方法给出的结果一般情况结果比较差,因为只考虑了每一步的最优解,往往里全局最优解差距很大。贪婪

2020-07-18 17:04:12 2038

原创 维特比算法(viterbi)原理以及简单实现

维特比算法看一下维基百科的解释,维特比算法(Viterbi algorithm)是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。通俗易懂的解释知乎有很多,如:如何通俗地讲解 viterbi 算法?,我我这里重点是如何用python代码实现这个算法。算法原理维特比算法就是求所有观测序列中的最优,如下图所示,我们要求从S到E的最优序列,中间有3个时刻,每个时刻都有对应的不同观察的概率,下图中每个时刻不同的观测标签有3个。

2020-06-20 23:28:29 15446 4

原创 动态规划中的子序列子串相关问题

涉及到求子序列或子串,以及编辑距离等问题,可以用动态规划解决。下面详细探讨一下这个问题。这类问题分主要分三大类连续子数组或子串:最大连续子序和、最长回文子串不连续的子序列或子串:最长递增子序列、最长回文子序列涉及两个字符串/数组:最长公共子序列、最小编辑距离一般可以用动态规划中的一维dp数组和二位dp数组解决。一维dp数组状态方程中,dp[i]的结果只与dp[i-1]相关,或者与dp[0]到dp[i-1]都相关。最大连续子序和dp[i]表示以nums[i]为结尾最大子数组和,状态转移方

2020-05-30 21:41:39 274

原创 自然语言处理入门(四)--Tensorflow2.0+Keras实现seq2seq+Attention模型的对话系统

这里写自定义目录标题seq2seq模型介绍Keras实现seq2seq模型Encoder部分Decoder部分Encoder和Decoder合并模型详细结构seq2seq模型训练本文主要是利用keras框架记录简单实现seq2seq模型的过程,seq2seq的应用主要有问答系统、人机对话、机器翻译等。seq2seq模型介绍seq2seq模型主要有两个部分Encoder和Decoder,Encoder负责将输入编码,Decoder负责解码输出。最简单的seq2seq模型图:Keras实现seq2se

2020-05-17 00:15:27 3553 4

原创 Keras保存模型的各种方法

这里写自定义目录标题模型图构建训练模型保存模型hdf5格式持久化json格式持久化tf-serving调用的pb格式Keras训练模型有多种保存方法,可以保存为hdf5文件,也可以保存为json格式文件,可以同时保存模型图和权重,也可以单独保存模型图和权重,还可以保存为tensorflow-serving支持的pb格式。下面以一个简单的模型分别来介绍不同的保存方法。模型图构建下面用keras...

2019-12-29 17:06:16 4839 3

转载 query改写-拼写纠错(Spelling Correction)

这是转载斯坦福NLP课程中讲拼写纠错的一节,感觉讲的比较好,虽然课程很老,但是讲的知识,在目前的query改写、拼写纠错还是很实用的,附原文链接:http://www.52opencourse.com/138/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%...

2019-09-23 21:51:41 1680

原创 数组中交换元素的几种方法总结

在完成关于数组的大量算法中,基本都会涉及到元素交换,比如排序中是最常见的,一般的方法是新建一个临时变量,然后完成交换,如果给定的数组中元素是有范围的,其实还有其他方法也可以完成交换。下面就来总结一下这些方法。临时变量法临时变量法是最简单的,这个不过多解释。试用任何类型的元素交换。public static void swap(int[] a, int i, int j){ int t...

2019-07-13 21:41:26 13205

原创 自然语言处理入门(二)--Keras实现BiLSTM+Attention新闻标题文本分类

本篇主要记录Keras实现BiLSTM+Attention模型,其中Attention是自定义层。然后用该模型完成新闻标题文本分类任务。数据预处理这里使用的数据集只是用来演示文本分类任务,所以没有使用长篇的文章,而是使用的标题。原始数据集是在头条爬取的,在这里可以下载:https://github.com/fate233/toutiao-text-classfication-dataset我...

2019-07-13 15:55:13 10038 14

原创 Spark中的转换算子transformation和动作算子action

主要记录了Spark中转换算子transformation和动作算子action具体含义和使用方法。转换算子-transformationmap(func)返回一个新的分布式数据集,其中每个元素都是由源RDD中一个元素经func转换得到的。filter(func)返回一个新的数据集,其中包含的元素来自源RDD中元素经func过滤后(func返回true时才选中)的结果。flatMa...

2019-06-29 18:07:18 974

原创 Keras函数式(functional)API的使用

多层感知器(Multilayer Perceptron)定义了用于二分类的多层感知器模型。模型输入32维特征,经过三个全连接层,每层使用relu线性激活函数,并且在输出层中使用sigmoid激活函数,最后用于二分类。##------ Multilayer Perceptron ------##from keras.models import Modelfrom keras.layers i...

2019-05-26 11:56:05 4022 1

原创 自然语言处理入门(一)--搜狗新闻语料处理和word2vec词向量的训练

新闻语料预处理本文使用的是搜狗新闻语料库,原始语料是类似下图中xml格式,首先需要提取中语料中正真的新闻内容,就是<content>中对应的文本。还需要过滤一些特殊字符,以及半角和全角的转换问题。下面看一下详细的处理过程。首先是一个全角转半角的辅助程序,全角和半角转换的详细情况请参考:https://blog.csdn.net/huanghaocs/article/detail...

2019-05-25 18:30:54 2652 4

原创 Python实现全角与半角相互转换

全角与半角转换在处理汉语语料中会经常出现,这里分别说明汉字、数字、字母的unicode编码范围。以及全角与半角的转换方法。最后给出wiki上全角和半角的编码对照表。汉字的判断汉字的unicode编码范围 u4e00 到 u9fa5。def is_chinese(uchar): """判断一个unicode是否是汉字""" if uchar >= u'\u4e00' an...

2019-05-20 23:00:26 7075 1

原创 Linux与windows互传文件命令rz&sz&nc

由于在实际开发中,经常会在Linux和windows之间互传文件,记录一下使用方便的三个命令rz、sz、nc。Linux连接工具windows下连接Linux的工具有很多,一般使用较多的是puTTY、XShell和SecureCRT。其中puTTY最小巧,免安装;XShell功能完善,配合Xftp很强大;SecureCRT本人喜欢使用。按照自己喜好,选择一个安装就好。后面讲的传输命令需要用...

2019-05-17 23:52:08 4576

原创 NLP相关分词和预处理工具包

jiebaPython下中文分词工具地址:https://github.com/fxsjy/jieba , 安装:pip install jieba功能:中文分词、词性标注、TF-IDF和TextRank关键词抽取ansjJava下中文分词工具地址:https://github.com/NLPchina/ansj_seg ,maven使用: <dependency> ...

2019-04-27 11:09:46 479

原创 python输出结果刷新及进度条的实现

print函数python输出主要使用print函数,print函数介绍:*print(objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)*objects表示要打印的值,表示多个无名参数或需要打印的值;sep=’ ',对应上面要打印的值中间间隔,默认一个空格;end=’\n’,传入值打印完后的结束符号,默认为换行符,可以自...

2019-04-16 23:59:30 20784 1

转载 深度学习NLP的各类模型及应用总结

原文来自知乎:https://zhuanlan.zhihu.com/p/58931044。转载为了方便自己学习,如有侵权,我会删除!背景自然语言处理(英语:Natural Language Process,简称NLP)是计算机科学、信息工程以及人工智能的子领域,专注于人机语言交互,探讨如何处理和运用自然语言。自然语言处理的研究,最早可以说开始于图灵测试,经历了以规则为基础的研究方法,流行于现...

2019-03-31 17:31:46 23333

原创 Python中读取和保存图像的各种方法

python中图像处理相关库有很多,这里简单介绍PIL、cv2、scipy.imageio 、matplotlib.image、skimage等常用库,其中PIL库使用最方便,cv2库功能最强大。PIL:Python Imaging Librarypython安装:pip install Pillow这里只给出读取、形状变化、图像转array、array转图像,以及保存图像的方法。impo...

2019-03-11 22:27:21 13450 2

原创 Java调用Tensorflow训练模型预测结果

Java调用Tensorflow训练好的模型做预测,首先需要读取词典,然后加载模型,读入数据,最后预测结果。读取词典文件这个词典文件wordIndexMap.txt,就是上一篇对应训练模型之前生成的词典文件。每行一个词和词的编号。// 从文件读取词典文件存入Map private static Map&amp;amp;lt;String, Integer&amp;amp;gt; readVocabFromFile(Str...

2018-12-28 21:41:51 5547 8

原创 使用Tensorflow训练LSTM+Attention中文标题党分类

这里我们用Tensorflow中LSTM模型训练一个标题党的分类模型,并最后用Java调用训练好的模型。数据预处理首先根据语料和实验数据训练词向量word2vec模型,这个有很多教程,这么不再叙述。之后根据训练好的词向量生成我们需要的词典文件。保存的词典map为每行一个词和词的编号。import gensimimport numpy as npdef load_words_embedd...

2018-12-28 21:32:39 8256 9

原创 Java读取文件的方法

读取二进制文件读取二进制文件,并存入byte数组,如算法训练模型的二进制模型。public byte[] readFromByteFile(String pathname) throws IOException{ File filename = new File(pathname); BufferedInputStream in = new BufferedInputStrea...

2018-10-21 16:32:11 27527 1

原创 Python产生batch数据的方法

产生batch数据输入data中每个样本可以有多个特征,和一个标签,最好都是numpy.array格式。datas = [data1, data2, …, dataN ], labels = [label1, label2, …, labelN],其中data[i] = [feature1, feature2,…featureM], 表示每个样本数据有M个特征。输入我们方法的数据,all_...

2018-10-21 16:09:54 16356 8

翻译 查询理解(Query Understanding)—查询改写总结

本文翻译的原文:https://queryunderstanding.com/query-rewriting-an-overview-d7916eb94b83查询改写(Query Rewriting)的总结目前为止,我们只是专注于字符级别和字块级别的查询理解,现在我们转向对实体和查询本身的理解。在这个级别上,最强大的查询理解技术就是我们称之为查询改写的一大类策略。查询改写会自动转换和改写用...

2018-09-22 21:45:22 3589

原创 NLP相关书籍和论文综述

1. An Introduction to Conditional Random Fields本篇论文详细介绍了条件随机场(Conditional Random Fields,CRF)模型,了解CRF模型必读论文,包括有四个部分: 第一部分介绍了CRF模型的基础知识图模型,还有判别式模型和生成式模型的区别。 第二部分介绍了两种CRF模型,Linear-chain CRFs和General ...

2018-07-23 00:07:31 3247

原创 二叉树的存储、创建以及遍历

二叉树的存储二叉树主要是用二叉链表来存储,二叉链表有一个数据域data和两个指针域lchild、rchild构成,分别存放左孩子和右孩子的指针。二叉链表的结点结构定义如下:class BiTNode { int data; // 数据域 BiTNode left; // 左孩子指针 BiTNode right; // 右孩子指针}二叉树的创建这里用整型数组来代表二叉树的结点

2017-12-13 22:19:55 1133

原创 数据结构之链表及相关算法

链表的定义链表是链式存储结构,可以用任意一组存储单元来存储单链表中的数据元素,存储单元可以是不连续的。除了存储每个数据元素的值之外,还必须存储知识其直接后继元素的信息。定义如下的数据类存储结点信息。//链表结点的定义class Node{ Node next = null; // 结点域 int data; // 数据域 public Node(int data){

2017-12-12 11:10:35 485

原创 无序数组的相邻最大差值

题目描述:请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。 给定一个整数数组A和数组的大小n,请返回最大差值。保证数组元素个数大于等于2小于等于500。 测试样例: [9,3,1,10],4 返回:6问题分析:有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是 要求线性空间和线性时间用基于桶排序的方式。 注意到,最后只需要求间隔的最大值,

2017-09-18 13:30:15 1847

原创 NLP中的语言模型(language model)

什么是语言模型统计语言模型是一个单词序列上的概率分布,对于一个给定长度为m的序列,它可以为整个序列产生一个概率P(w_1,w_2,...,w_m) 。其实就是想办法找到一个概率分布,它可以表示任意一个句子或序列出现的概率。 目前在自然语言处理相关应用非常广泛,如语音识别(speech recognition) , 机器翻译(machine translation),词性标注,句法分析。

2017-09-11 17:28:49 22500

原创 自然语言处理相关数据集和语料

英文数据集Web data: Amazon reviewshttps://snap.stanford.edu/data/web-Amazon.html http://jmcauley.ucsd.edu/data/amazon/Restaurant Reviews Datasethttp://www.cs.cmu.edu/~mehrbod/RR/Movie Review Datahttp://www

2017-09-10 13:44:45 1995

原创 合并两个排序的链表

题目描述输入两个单调递增的链表,输出两个链表合并后的链表,当然我们需要合并后的链表满足单调不减规则。方法一,非递归,循环比较两个节点的大小/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public cl

2017-09-10 13:41:28 205

原创 背包问题(0-1背包、完全背包、多重背包)详解

背包问题一个背包总容量为V, 现在有N个物品, 第i个物品体积为weight[i], 价值为value[i], 现在往背包里面装东西, 怎样装才能使背包内物品总价值最大.求解思路利用动态规划求最优值的方法,当前状态的最优值可以转化成上一个状态的最优值,与上一个状态转移到当前状态代价的组合求最值。具体问题分类背包问题可以根据物品个数的限制,有多种情况0-1背包,完全背包,多重背包。0-1背包问题0-1

2017-09-10 09:58:16 17548 9

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除