python
文章平均质量分 73
我就算饿死也不做程序员
欢迎关注同名公众号:"我就算饿死也不做程序员"。
交个朋友,一起交流,一起学习,一起进步。
展开
-
强大的向量数据库:Milvus
在推荐系统中,向量的最邻近检索是极为关键的一步,特别是在召回流程中。一般常用的如Annoy、faiss都可以满足大部分的需求,今天再来介绍另外一个:MilvusMilvusMilvus不同于Annoy、faiss这类型的向量检索工具,它更是一款开源向量数据库,赋能 AI 应用和向量相似度搜索。涉及的术语Filed:类似表字段,可以是结构化数据,当然还可以是向量;Entity:一组Filed,类似表的一条数据;Collection:一组Entity,类似于表;亮点Milvus不单单是向.原创 2021-09-01 21:50:59 · 7289 阅读 · 1 评论 -
推荐系统的向量检索工具: Annoy & Faiss
在推荐系统的召回阶段,如Youtube DNN和DSSM双塔模型,向量的最邻近检索是必不可少的一步。一般的做法不会让模型在线预测召回,而是先离线将向量存储,然后在线上进行向量的最邻近检索,作为模型的召回。这篇文章将介绍两个常用的向量最邻近检索工具:Annoy和Faiss。AnnoyAnnoy Github安装pip install annoy支持的距离度量Annoy仅支持树结构的索引类型。欧式距离euclidean内积dot汉明距离hamming两个二进制字符串的距原创 2021-08-23 21:46:54 · 2181 阅读 · 0 评论 -
TensorFlow-HasTable: 特征ID映射集成TF中
相信很多同志,在做深度学习模型的过程中,往往会需要将特征的原始值映射为数值类型的ID,然后再通过tf.nn.embedding_lookup转化为dense向量。最终,在上线的时候,映射关系一般保存为哈希表(dict),但如果特征很多,那么管理起来就很麻烦。今天这篇博客会讲述《如何将这个过程在tensorflow实现》!MutableHashTable首先,先附上官方的API文档tf.contrib.lookup.MutableHashTable( key_dtype, value_dtyp原创 2021-07-05 21:21:30 · 1207 阅读 · 0 评论 -
任务调度管理工具:Airflow
安装airflow是由python编写的,安装也比较简单,可以直接通过pip命令安装:pip install airflowpip install airflow# 安装airflow使用mysql的相关依赖pip install airflow[mysql]# 可以用all安装所有相关的插件依赖pip install airflow[all]但是,官方提到,这样安装容易缺失部分前置依赖,CONSTRAINT_URL里面包含了所有airflow涉及到的依赖;我们可以在pip inst原创 2021-04-22 21:56:57 · 1122 阅读 · 1 评论 -
Supervisor:优秀的进程管理工具
前言在服务器中,我们对于项目程序、服务等等的进程管理:启动:如python,一般就是cd到对应的目录,然后通过python xxx.py进行启动;关闭:通过ps -ef | grep program_name找到对应的pid,然后再将其kill。这种管理方式确实很不方便。Supervisor安装今天就介绍一个主要是针对python的进程管理工具。(为什么说是主要呢?后面再揭晓)pip install supervisor生成配置文件如果你有root用户的权限:echo_super原创 2021-03-30 21:22:09 · 308 阅读 · 1 评论 -
tensorflow中batch_normalization的正确使用姿势
原理batch_normalization一般是用在进入网络之前,它的作用是可以将每层网络的输入的数据分布变成正态分布,有利于网络的稳定性,加快收敛。具体的公式如下:γ(x−μ)σ2+ϵ+β\frac{\gamma(x-\mu)}{\sqrt{\sigma^2+\epsilon}}+\betaσ2+ϵγ(x−μ)+β其中γ\gammaγ和β\betaβ是决定最终的正态分布,分别影响了方差和均值,ϵ\epsilonϵ是为了避免出现分母为0的情况tensorflow在真实的使用中,均值μ\muμ和原创 2021-03-27 17:55:42 · 1331 阅读 · 1 评论 -
Flask优雅的使用教程(2):Resource
上一篇博客,讲述了flask最简单的接口实现demo:Flask优雅的使用教程(1):route安装pip install flaskpip install flask_restful参数校对在进行接口开发的时候,我们经常是提前约定好参数以及格式,这个时候,参数的校对就可以交给flask去做了,包括必要参数的检验、参数格式的检查等。总的来说,一般参数的类型有以下几种:普通的字符串、数值、数组等,直接设置对应的类型即可,如type=str;json:包括json里面嵌套json或json数组原创 2021-03-27 13:37:57 · 2087 阅读 · 1 评论 -
Flask优雅的使用教程(1):route
安装pip install flaskgetimport jsonfrom flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/api/get/', methods=["GET"])def get(): args = request.args name = args['name'] info = json.loads(args['json']) print("n原创 2021-03-27 13:22:05 · 804 阅读 · 1 评论 -
pyspark打包依赖包&使用python虚拟环境
一、anaconda创建python环境anaconda创建python环境在这篇博客中,已经很清楚地描述了如何通过anaconda来创建你需要的python环境:即合适的python版本和包含你需要的依赖包。二、打包python环境假设我们的python环境名称为py_env,那么在anaconda的安装目录下,envs/py_env在Windows下,直接将使用压缩软件,将其压缩为zip文件;在Linux下,zip py_env.zip py_env。(必须py_env文件夹所在的目录下执行原创 2021-03-10 22:18:18 · 7351 阅读 · 13 评论 -
pyspark融入pandas的优势,真香!
近期,在使用spark的时候,发现spark在python下的使用,pyspark还挺好用的。你甚至可以把它当作pandas来使用,众所周知,pandas在数据处理方面是很强大的,不谈性能,它提供了许多的内置方法,非常的方便,极大的减少我们的开发时间。下面,简答来得展示一下它的具体使用。首先,我们初设一个SparkSession,并开启pandas的支持:Pandas with Apache Arrow;接着,简单的新建一个spark的DataFrame对象:df。import pandas as原创 2021-02-28 14:13:12 · 4312 阅读 · 0 评论 -
Anaconda新建python环境
在实际使用python过程中,大家应该都会像我一样遇到需要多个python环境的情况:例如在使用tensorflow的时候,我既需要tensorflow1.x版本的,又需要2.x版本的;又或者想同时拥有python3和python2,这时就需要标题所说的功能了。新建环境conda create -n tf_1 python=3.6其中,tf_1是python的环境名称,3.6是python版本。环境激活MacOS或Linuxsource activate tf_1Windowsactiv原创 2021-02-19 20:45:00 · 1642 阅读 · 0 评论 -
TensorFlow Serving:深度学习模型在生产环境的部署&上线
TensorFlow Serving简单来说就是一个适合在生产环境中对tensorflow深度学习模型进行部署,然后可以非常方便地通过restful形式的接口进行访问。除此之外,它拥有许多有点:支持配置文件的定期轮询更新(periodically poll for updated),无需重新启动;优秀的模型版本控制;支持并发;支持批处理;基于docker,部署简单。(这些优点我们在下面会逐一提到)安装官方极力推荐通过docker的方式进行安装,所以,首先我们需要进行docker的原创 2020-11-25 19:07:08 · 1176 阅读 · 0 评论 -
基于Seq2Seq模型的机器翻译
如标题所见,这篇博客的主题就是基于Seq2Seq模型的机器翻译,它的主要任务就是将一种语言翻译为另一种语言,在这里我们以英语翻译成法语为例子,如I'm a student.---->>>Je suis étudiant.这份数据是公开,可以直接下载的,下载地址为:翻译语料下载地址模型结构首先,我们先了解一下模型的结构:首先,第一部分是编码器Encoder,它接收source sentence,然后Encoder将其转换为一个包含具体语义信息的中间向量;接着,是一个解码器Deco原创 2020-09-07 21:43:51 · 2842 阅读 · 1 评论 -
局部敏感哈希(LSH):高维数据下的最近邻查找
哈希算法首先,将局部敏感哈希之前,我们先说下普通的哈希算法,把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。最理想的是所有不同的输入都可以映射到散列值,但是存在这种可能性的。当不同的输入映射到相同的散列值时,就称为碰撞冲突。哈希算法是要避免碰撞冲突,而局部敏感哈希(Locality-Sensitive Hashing, 下面我们简称LSH)则相反,是要创造更多的碰撞冲突。局部敏感哈希应用首先,我们讲一下LSH的应用,方便理解LSH是做什么的。在很多领域中,经常会使用最近邻查原创 2020-08-20 20:23:58 · 4122 阅读 · 9 评论 -
隐马尔科夫模型(HMM)模型训练:Baum-Welch算法
在上一篇博客中隐马尔科夫模型(HMM)原理详解,对隐马尔科夫模型的原理做了详细的介绍。今天,我们要对其中的模型训练算法Baum-Welch做一个实现,Baum-Welch算法可以在不知道状态序列的情况下,对模型的参数进行训练拟合。这其实是非常实用的,例如在分词任务,对文本进行词性的标注成本是很高,所以我们经常面临着没有词性标注的训练文本,这个时候Baum-Welch算法就派上用场了。首先,我们创建一个隐马尔科夫模型的类class HMM: """ 状态取值有N个,观测序列取值有M个原创 2020-07-30 22:16:49 · 4638 阅读 · 1 评论 -
条件随机场(CRF)的原理与实现
一、概率无向图模型模型定义又称马尔科夫随机场。设有联合概率分布P(Y),由无向图G=(V,E)表示,结点V表示随机变量,边E表示随机变量之间的依赖关系。如果P(Y)满足成对、局部或全局马尔科夫性,就此联合概率分布为概率无向图模型。成对马尔科夫性u和v是无向图G中任意两个没有边连接的结点,其他结点为O,成对马尔科尔性是指YOY_OYO的条件下,YuY_uYu和YvY_vYv是条件独立的,即P(Yu,Yv∣YO)=P(Yu∣YO)P(Yv∣YO)P(Y_u,Y_v|Y_O) = P(Y_u|Y_原创 2020-07-30 22:09:05 · 1379 阅读 · 0 评论 -
回溯算法之马踏棋盘(骑士周游)
马踏棋盘马踏棋盘(骑士周游)是4399的一个小游戏,游戏规则很简单:玩过象棋吗?这款和国内外的象棋都不一样,里面只有一只马在跳,但是跳过的格子都会出现数字来围困你,所以记得不要被这些数字围住,否则游戏就结束了。来挑战一下新玩法吧。虽然游戏规则很简单,但是如果想要通关的话,却是很有难度的,下面我们通过算法来寻找通关方法。回溯算法回溯算法的思想其实很简单:我们在寻找解决方案,当遇到有多种选...原创 2020-01-10 07:09:46 · 985 阅读 · 0 评论 -
最短路径算法之弗洛伊德算法(Floyd)
这篇博客的主题的最短路径算法的另一种算法:弗洛伊德算法(Floyd),之前的博客已经讲解过最短路径算法之Dijkstra(迪杰斯特拉)Floyd与Dijkstra的区别Floyd算法是算出各个顶点之间的最短路径;Dijkstra算法是选择一个顶点,算出其到达其他顶点的最短路径Floyd算法原理设置顶点vi到顶点vk的最短路径已知为Lik,顶点vk到vj的最短路径已知为Lkj,顶点v...原创 2019-12-28 10:45:10 · 645 阅读 · 0 评论 -
最短路径算法之Dijkstra(迪杰斯特拉)
Dijkstra算法迪杰斯特拉(Dijkstra)是典型的最短路径算法,顾名思义就是从一个点出发,到达另一个点的最短路径。算法原理例如,我们以一个案例来讲解他的算法原理。大体的思想是:每次选择一个未被访问过、并且最短距离最短的点作为访问顶点,然后访问各个顶点,让访问顶点作为新的路径,到各个顶点之间的最短距离与各个顶点原本的最短距离进行比较,发现距离更短则然后进行路径更新。一、 首先,我...原创 2019-12-26 07:48:45 · 1223 阅读 · 0 评论 -
最小生成树-普利姆和克鲁斯卡尔算法
最小生成树主要是用于解决修路问题等类似问题,要将所有顶点连通,并且权值之和最小。最小生成树给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树N个顶点,一定有N-1条边包含全部顶点N-1条边都在图中求最小生成树的算法主要是普里姆算法和克鲁斯卡尔算法普利姆算法算法介绍普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找...原创 2019-12-05 07:53:49 · 1940 阅读 · 0 评论 -
贪心算法之集合覆盖问题
贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果集合覆盖问题假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号?广播...原创 2019-11-27 07:43:27 · 2446 阅读 · 0 评论 -
如何实现高效地字符串匹配:KMP算法
KMP算法是一种判断字符串中是否含有特定子串的优化算法,效率比暴力搜索高出许多,是一个值得学习的算法。其中,最关键的一步就是根据子串部分匹配表来加快搜索速度。KMP算法步骤举例来说,有一个字符串 Str1 = “BBC ABCDAB ABCDABCDABDE”,判断,里面是否包含另一个字符串 Str2 = “ABCDABD”?1.首先,用Str1的第一个字符和Str2的第一个字符去比较,不...原创 2019-11-26 07:25:57 · 724 阅读 · 0 评论 -
通过背包问题来学习动态规划的思想
目录动态规划介绍背包问题解决思路总结规律代码实现动态规划介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立...原创 2019-11-21 07:14:03 · 175 阅读 · 0 评论 -
使用递归实现汉诺塔来理解分治算法
分治算法分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。分治算法一般分为三个步骤:分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题合并:将各个子...原创 2019-11-19 08:00:59 · 294 阅读 · 0 评论 -
二分查找算法原理和实现
二分查找是一种比较高效的搜索算法,是一种可以在有序数组中搜索到特定元素的算法。例如,我们要在数组{1,4,6,10,20}中搜索4首先与数组的中间位置的数值即6进行比较,4比6小,所以,要往左边继续搜索,左边的数组即为{1,4};还是先找到数组的中间位置,这次因为是偶数,我们就取1吧(这里是按照自己取中间位置的算法实际去取),4比1小,那么要往右边数组搜索,右边数组即为{4};...原创 2019-11-18 07:25:27 · 1813 阅读 · 0 评论 -
以python为例来理解多线程中的同步锁&死锁&递归锁
同步锁首先,我们先了解在使用多线程的时候,什么情况下需要加锁?那是因为在不同的线程,我们可能会需要对同一个变量进行修改,这个时候就会出现资源抢占的问题,比如在线程A中,对变量X的修改还未执行完毕时,这个时候线程B也要对X进行修改,此时线程B就会把X抢占过来,那么线程A中对X的修改就会被中断,导致修改不成功。比如,我们下面这个例子,初设化n=0,我们启动10个线程,每个线程都对n进行10000...原创 2019-08-29 22:07:56 · 422 阅读 · 0 评论 -
如何在python中使用多线程和多进程
多线程和多进程可以让程序拥有并行处理的能力,视实际情况不同程度的提升程序运行的效率。这篇博客以python来介绍多进程和多线程的使用。多线程我们创建一个简单的test函数来测试一下,功能就是打印输入的字符串,然后让程序停止2秒钟。from threading import Threadfrom time import sleep, timedef test(text): pr...原创 2019-08-29 22:04:07 · 1094 阅读 · 0 评论 -
Linux安装python和anaconda教程
python安装第一步,去python官网https://www.python.org/downloads/下载python的源码包Python-3.7.0.tgz;第二步,上传至Linux服务器,然后进行解压tar -zxvf Python-3.7.0.tgz第三步,进入解压目录,执行configure./configure --prefix=/usr/local/pytho...原创 2019-08-17 15:45:26 · 1924 阅读 · 0 评论 -
Java调用在python中完成训练的tensorflow模型
众所周知,tensorflow是Google开源的一个深度学习框架。虽然它除了python语言兼容,还提供了c和Java的API,但目前大部分人还是选择在python环境进行深度学习模型的搭建和训练,不过很多时候,我们需要将完成训练之后较为有效的模型进行封装和部署,但是像许多公司最后的部署都是用Java语言实现的,所以,此时我们就需要掌握如何通过Java来调用tensorflow的模型。保存模型...原创 2019-08-20 21:23:41 · 3545 阅读 · 1 评论 -
python更换国内源解决依赖包下载慢的问题&其他小技巧
更换依赖包的下载源通过pip install安装依赖包是在国外的源下载,有的速度会特别慢,比较小的包还好,像tensorflow这样比较大的包,就会下很久。我们可以通过指定国内的源进行下载安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow阿里云http://mirrors.aliyun.com/pypi...原创 2019-08-13 20:43:01 · 2788 阅读 · 0 评论 -
python对函数的参数和返回值进行指定类型和检查
python一直以来都不是开发大工程的主流语言,不管是前端还是后端,主要的原因其实就是以下几点:python是解释性语言,运行效率比java等语言慢;python是动态语言,在后期维护的成本非常高,很重要的一点就是没有进行类型检查,当然还包括新建变量不需要声明以及指定类型等等。但是,在python3.5之后,就新增了对函数参数和返回值的类型指定和检查,以及在新建变量时也可以指定类型。基...原创 2019-07-16 22:34:21 · 26818 阅读 · 3 评论