基于转移概率网络的商户推荐方法及其系统与流程

文档序号:15519102发布日期:2018-09-25 18:59阅读:167来源:国知局

本发明涉及数据处理,具体地涉及一种通过构建神经网络计算转移概率的商户推荐方法及其系统。



背景技术:

用户们在消费的时候,已经习惯先从网络上去获取的商户信息,然后选择感兴趣的商户进行消费,即使在线下消费场景也是如此。一些互联网网站也会经常地向用户进行商户推荐,从而节约用户购物时间、提高效率,并且更好改善用户服务体验。

不过,很多商户推荐功能都是将商户按热门程度进行排序推荐,这导致大量用户收到的推荐信息都是类似的,没有针对用户喜好和的商户的特点进行推荐。这样,用户仍然会有很大的迷茫性,难以找到适合自己商户。通过检索发现,现在有一些公司也使用了一些机器学习方法来提升商户推荐的效率,但是这些方案大多建立在要准确获取用户各种隐私数据的基础之上。

公开于本发明背景部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。



技术实现要素:

鉴于上述问题,本发明旨在提供一种利一种能够根据海量用户的消费序列快速分析商户序列之间关联从而进行更精准推荐的基于转移概率网络的商户推荐方法以及基于转移概率网络的商户推荐系统。

本发明的基于转移概率网络的商户推荐方法,其特征在于,包括:

onehot编码步骤,对n个商户进行onehot编码,其中,每个商户被映射为一个n维的稀疏向量;

消费商户序列构建步骤,对于规定账户,记录相关交易对应的商户代码并排序而构建消费商户序列,其中,所述商户代码以由所述onehot编码步骤进行onehot编码之后的向量表示;以及

转移概率网络构建步骤,构建神经网络,其中,以每个商户的onehot编码之后的向量作为输入层、以在该商户之后接下来可能出现的商户的商户出现概率分布作为输出层。

可选地,在所述转移概率网络构建步骤之后进一步具备:

商户推荐步骤,基于所述转移概率网络构建步骤输出的所述商户出现概率向用户推荐商户。

可选地,所述转移概率网络构建步骤包括下述子步骤:

构建神经网络模型子步骤,构建包含具有输入层、隐藏层、输出层的三层神经网络;

生成训练样本子步骤,基于所述消费商户序列生成训练样本;以及训练神经模型子步骤,基于规定算法训练该神经网络。

可选地,在所述训练神经模型子步骤中,所述输入层的维度为n,所述隐藏层的维度为m,将输入层到隐藏层的权重矩阵记为w1,则权重矩阵w1记为n行*m列,当输入向量的第k维为1时,仅提取出w1中的第k行的行向量作为输出。

可选地,在所述训练神经模型子步骤中,对正样本进行权重更新,随机选取一部分的负样本进行权重更新。

可选地,在所述消费商户序列构建步骤中,统计规定时间内消费次数大于预设阈值的账户,对于统计出的账户,记录每一笔交易对应的商户代码,将每一个所述账户该段规定时间内消费所在商户的商户代码按照依次排列。

可选地,在所述生成训练样本子步骤中,对于所述消费商户序列,按照规定位置参数选取作为输入层的商户的附近商户得到训练样本或者按照规定时间参数选取作为输入层的商户的附近商户得到训练样本。

本发明的基于转移概率网络的商户推荐系统,其特征在于,具备:

onehot编码模块,对n个商户进行onehot编码,其中,每个商户被映射为一个n维的稀疏向量;

消费商户序列构建模块,对于规定账户,记录相关交易对应的商户代码并排序而构建消费商户序列,其中,所述商户代码以由所述onehot编码步骤进行onehot编码之后的向量表示;以及

转移概率网络构建模块,构建神经网络,其中,以每个商户的onehot编码之后的向量作为输入层、以在该商户之后接下来可能出现的商户的商户出现概率分布作为输出层。

可选地,进一步具备:

商户推荐模块,基于所述转移概率网络构建装置输出的所述商户出现概率向用户推荐商户。

可选地,所述转移概率网络构建模块具备:

构建神经网络模型子模块,构建包含具有输入层、隐藏层、输出层的三层神经网络;

生成训练样本子模块,利用所述消费商户序列生成训练样本;以及训练神经模型子模块,基于规定算法训练该神经网络。

可选地,在所述训练神经模型子模块中,设所述输入层的维度为n,所述隐藏层的维度为m,将输入层到隐藏层的权重矩阵记为w1,则权重矩阵w1记为n行*m列,当输入向量的第k维为1时,仅提取出w1中的第k行的行向量作为输出。

可选地,所述训练神经模型子模块中,对正样本进行权重更新,随机选取一部分的负样本进行权重更新。

可选地,所述消费商户序列构建模块统计规定时间内消费次数大于预设阈值的账户,对于统计出的账户,记录每一笔交易对应的商户代码,将每一个所述账户该段规定时间内消费所在商户的商户代码按照依次排列。

可选地,在所述生成训练样本子模块对于所述消费商户序列,按照规定位置参数选取与作为输入层的商户位置相关的商户而得到训练样本、或者按照规定时间参数选取作为与输入层的商户时间相关的商户而得到训练样本。

本发明的计算机可读介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述的基于转移概率网络的商户推荐方法。

本发明的计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述的基于转移概率网络的商户推荐方法。

根据本发明的基于转移概率网络的商户推荐方法以及基于转移概率网络的商户推荐系统,利用转移概率三层神经网络的架构,能够大大,使得计算在可控范围内。而且,在神经网络权重计算的过程中,进一步通过使用“查表法”以及“负样本抽样”法能够加速计算。根据本发明,提出了转移概率三层神经网络的架构,能够根据海量用户的消费序列,快速分析商户系列之间的关系,进行更精准的推荐。

通过纳入本文的附图以及随后与附图一起用于说明本发明的某些原理的具体实施方式,本发明的方法和装置所具有的其它特征和优点将更为具体地变得清楚或得以阐明。

附图说明

图1是表示本发明的基于转移概率网络的商户推荐方法的示意图。

图2是表示本发明的基于转移概率网络的商户推荐方法的第一实施方式的流程图。

图3是表示商户转移概率网络模型的架构。

图4中表示了商户1到商户7的7个商户的商户序列。

图5中表示了商户1到商户7的7个商户的商户序列。

图6是表示本发明的基于转移概率网络的商户推荐系统的构造框图。

具体实施方式

下面介绍的是本发明的多个实施例中的一些,旨在提供对本发明的基本了解。并不旨在确认本发明的关键或决定性的要素或限定所要保护的范围。

首先,对于本发明的基于转移概率网络的商户推荐方法进行说明。

图1是表示本发明的基于转移概率网络的商户推荐方法的示意图。

图1所示,本发明的基于转移概率网络的商户推荐方法包括下述步骤:

onehot编码步骤s100:对n个商户进行onehot编码,其中,每个商户被映射为一个n维的稀疏向量,n为自然数;

消费商户序列构建步骤s200:对于规定账户,记录相关交易对应的商户代码并排序而构建消费商户序列,其中,所述商户代码以由所述onehot编码步骤s100进行onehot编码之后的向量表示;

转移概率网络构建步骤s300:构建神经网络,其中,以每个商户的onehot编码之后的向量作为输入层、以在该商户之后接下来可能出现的商户的商户出现概率分布作为输出层;以及

商户推荐步骤s400,基于所述转移概率网络构建步骤s300输出的所述商户出现概率向用户推荐商户。

接着,对于onehot编码步骤s100、消费商户序列构建步骤s200、转移概率网络构建步骤s300以及商户推荐步骤s400进行具体说明。

首先,在onehot编码步骤s100中,对n个商户进行onehot编码。每一个商户都被映射为一个n维的稀疏向量,其中只有该商户对应的位置为1,其它位都为0。

所谓onehot编码(one-hotcode),即独热码,直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。通常,在通信网络协议栈中,使用八位或者十六位状态的独热码,且系统占用其中一个状态码,余下的可以供用户使用。

例如,有6个状态的独热码状态编码为:000001,000010,000100,001000,010000,100000。再如,有十六个状态的独热码状态编码应该是:0000000000000001,0000000000000010,0000000000000100,0000000000001000,0000000000010000,0000000000100000,……,10000000000000000。

但是通常我们为了方便书写,将二进制简化为十六进制表示(从右往左每四位二进制位用一位十六进制数表示),那么,以上十六状态的独热码可以表示成0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,……,0x8000(其中的0x是十六进制的前缀表示,在诸如plc等程序中也有其他表示方法)。

其次,在消费商户序列构建步骤s200中,统计在一段时间t内的消费次数大于阈值θ的账户,该阈值可以预先设定,也可以根据需要进行变化。对于这些账户,记录其每一笔交易对应的商户代码。将每一个账户该段时间内消费所在商户代码按照先后顺序依次排列。注意这里的商户都是onehot编码之后的向量。

再次,在转移概率网络构建步骤s300中,构建一个“输入—隐藏层—输出”这样一个三层神经网。输入是一个商户的的onehot编码,中间是一个固定维度的隐藏层,输出是接下来商户出现的概率。利用消费商户序列来生成训练样本,使用“查找表法”和“负样本抽样”来快速训练该神经网络,训练完成后,即可得到每个商户接下来可能出现的商户的概率分布。

具体地,转移概率网络构建步骤s300主要可以包括下述具体步骤:

(1)构建神经网络模型子步骤

构建一个“输入—隐藏层—输出”这样一个三层神经网。其中输入就是当前商户对应的稀疏onehot向量,输出层的维度与输入层一样,只不过该层上的每一个神经元输出的是每一个商户对应的概率。

(2)基于消费商户序列生成训练样本子步骤

利用上面构造好的消费商户序列来生成训练样本。构造的训练样本的形式是一个键值对:(输入商户→输出商户)。任意选择某一消费商户序列中的某个商户作为输入商户,然后选择该序列中出现在该“输入商户”附近出现的另外一个商户作为“输出商户”。

(3)训练神经网络模型子步骤

基于这些训练数据,训练上述提到的三层神经网。训练神经网络的目的其实就是获得最优化的网络权重矩阵的参数。这里,通过使用“查找表法”和“负样本抽样”,分别在优化“输入层→隐藏层”和“隐藏层→输出层”权重矩阵的时候能够极大地减少计算量。具体方法如下:

(i)使用“查找表法”实现输入层到隐藏层的快速计算

首先,关于“输入层→隐藏层”的权重矩阵w1,如果输入层维度为n,并且隐藏层维度为m,那么权重矩阵w1应该为n行*m列。把n*m的权重矩阵看成一个表,当输入向量的第k维为1的时候,只需要提取出w1的第k行那个行向量就是我们需要的计算结果。

(ii)使用“负样本抽样”方法实现隐藏层到输出层的快速计算

其次,关于正样本进行权重更新,然后随机选择一小部分的负样本来更新对应的权重,从而降低梯度下降过程中的计算量。负样本在这里是指,在训练数据中不存在的样本。在抽样的时候,我们使用“随机打点法”使得热门商户被选为负样本的概率要比冷门商户被选为负样本的概率大。

(4)智能商户推荐子步骤

训练好上述神经网络之后,再将每个商户的onehot编码作为输入,然后计算输出层,给定一个输入商户,输出商户词典中每个商户的概率值。也就是说,对于某个用户,将上一笔交易的商户作为神经网络的输入,那么输出概率越大的商户,应该越有可能出现在输入商户的上下文中。这样一来,当一个账户发生了一笔消费之后,就可以利用该神经网络推测出接下来最有可能去消费的商户的排名,从高到低推荐给该用户。

接下,对于本发明的基于转移概率网络的商户推荐方法的第一实施方式进行说明。

图2是表示本发明的基于转移概率网络的商户推荐方法的第一实施方式的流程图。

如图2所示,在步骤s1中,进行商户onehot编码。首先,建立一个商户词典。比如一共有n个商户,那么就构建一个初始商户词典:{1:商户1,2:商户2,…,n:商户n}。这样一来,每个商户都可以先对应到一个数字上去了。如果n是10万,那么可以对这10万个商户进行onehot编码。这样,每一个商户都被映射为一个10万维的稀疏向量,其中只有该商户对应的位置为1,其它位都为0。

例如,商户1经过onehot编码之后的向量为[1,0,0,0……0],商户2经过onehot编码之后的向量为[0,1,0,0……0],商户3经过onehot编码之后的向量为[0,0,1,0……0]。

接着,在步骤s2中,构建账户级的消费商户序列。具体地,统计在一段时间t内的消费次数大于阈值θ的账户。对于这些账户,记录其每一笔交易对应的商户代码。将每一个账户该段时间内消费所在商户代码按照先后顺序依次排列:{商户1,商户2,…,商户n}。其中,这里的商户代码都是onehot编码之后的向量。

接着,在步骤s3中,构建神经网络模型。具体地,构建一个“输入层—隐藏层—输出层”这样一个三层神经网。其中输入层就是当前商户对应的稀疏onehot向量,隐藏层是指定长度的压缩向量(长度一般不需要太大,默认维度是100就够了),输出层的维度与输入层一样,只不过该层上的每一个神经元输出的是每一个商户对应的概率。

图3是表示商户转移概率网络模型的架构。

在图3中,左侧表示输入层,中间表示隐藏层,右侧表示输出层。输入层输入的是商户onehot编码,隐藏层表示商户情景压缩编码,输出层输出商户概率分布。其中,从“输入层→隐藏层”的权重矩阵记为w1,从“隐藏层→输出层”的权重矩阵记为w2。另外,输出层是可以有一个softmax回归分类器来构成。如图3所示,输入层和输出层的维度都等于所有商户的总个数。

接着,在步骤s4中,基于消费商户序列生成训练样本。具体地,利用上面构造好的消费商户序列来生成训练样本。构造的训练样本的形式是一个键值对:(输入商户→输出商户)。总体方案是任意选择某一消费商户序列中的某个商户作为输入商户,然后选择该序列中出现在该“输入商户”附近出现的另外一个商户作为“输出商户”。

此外,还需要定义一个叫做win_size的参数,它代表着从当前“输入商户”的左边或右边选取商户的数量。另一个参数叫n_pick,它代表着我们从整个窗口中选取多少个不同的商户作为我们的输出。

可选的,还可以定义一个时间阈值max_t,如果我们挑选出来的键值对:(输入商户→输出商户)对应的消费时间间隔都大于max_t,我们可以认为这两个商户之间是不存在情景依赖的,所以将其从训练样本中去除。

这里以图4的商户序列为例说明win_size的参数和n_pick参数进行说明。

图4中表示了商户1到商户7的7个商户的商户序列。这样,对于一个消费商户序列{商户1,商户2,…,商户7},如果我们选取商户4作为“输入商户”。如果设置win_size=2,那么就代表着选取“输入商户”左侧2个和右侧2个商户进入我们的窗口,也就是说,选取:商户2、商户3、商户5、以及商户6。

而当n_pick=2时,将会随机得到两组训练样本,即(商户4→商户2),(商户4→商户5)。

而如果我们选取商户1作为“输入商户”,并且win_size和n_pick参数也都设置为2的话,那么最终够得到的训练样本一定是(商户1→商户2),(商户1→商户3)。其中,以上输入输出商户其实都是其对应的onehot编码。

接着,在步骤s5中,训练神经网络模型。通过上述步骤,已经从消费商户序列中生成了大量的训练样本,下面就基于这些训练数据,训练上述提到的三层神经网。

训练神经网络的目的其实就是获得最优化的网络权重矩阵的参数。不过考虑到商户数量数目巨大,我们并不打算利用传统的方法去训练模型,否则会非常耗费计算力。这里,我们使用了两个技术手段,分别在优化“输入层→隐藏层”和“隐藏层→输出层”权重矩阵的时候能够极大地减少计算量。具体方法如下:

首先,对于使用“查找表法”实现输入层到隐藏层的快速计算进行说明。

如上面已经提到的,“输入层→隐藏层”的权重矩阵设为w1。如果输入层维度为n,并且隐藏层维度为m,那么权重矩阵w1应该为n行*m列。比如商户词典大小为10万个,并且想用100个特征来表示一个商户,那么权重矩阵w1应该为10万行*100列。在计算的时候,需要将1*n的输入矩阵与n*m的权重矩阵与进行相乘。如果当商户数量很大的话,很大n会导致非常多的计算量。

通过观察,我们的输入向量虽然是n维的,但其实每个输入向量只有一位是1,而其他位全是0。这样一类,我们其实不用全量计算,只需要把n*m的权重矩阵看成一个表,当输入向量的第k维为1的时候,我们只需要提取出w1的第k行那个行向量就是我们需要的计算结果。比如下面1*4的矩阵与4*3的矩阵相乘,其中输入矩阵中只有第3位为1,那么计算结果正好是权重矩阵中的第3行。如下式所示:

其次,对于使用“负样本抽样”方法实现隐藏层到输出层的快速计算进行说明。

输出层是一个softmax回归分类器,其中每一个神经元将会输出一个0~1之间的概率值,所有输出层神经元结点的概率之和为1。softmax的函数公式如下:

其中aj表示最后一层第j个神经元的输出;zj表示最后一层第j个神经元的输入,e是自然常数。

∑kezk表示对最后一层所有神经元的输入求和。这样,对于log似然代价函数为如下:

c=-∑kyklogak

其中,ak表示最后一层第k个神经元的输出值;yk第k个神经元对应的真实值,取值为0或1。我们的目标是最小化该代价函数。注意到代价函数里面有一个∑k求和,也就是说,如果商户数目很大的话,该函数的优化计算过程又会非常耗时。

因此,这里,我们使用负样本抽样的方法,它不同于原本每个训练样本更新所有的权重,而是每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。不过在这种策略下,我们的优化目标需要变为:最大化正样本的概率,同时最小化负样本的概率。负样本就是我们构造出来的,在训练数据中不存在的样本。

比如对于商户a来说,我们先通过上下文提取除了几个正样本,其余的不在上下文中的这些词都称之为负样本,例如上面的例子中,对于商户4,由于(商户4→商户2)就是正样本,而对于该输入商户4,我们会再构造几个原本在训练数据中不存在的样本,比如(商户4→商户25)、(商户4→商户342)、(商户4→商户1253)这些就叫做负样本。

这样,我们首先对我们的正样本进行权重更新,然后随机选择一小部分的负样本来更新对应的权重,对于大规模数据集来说负样本数量一般5个左右即可。

当然了,在抽样的时候,我们希望热门商户被选为负样本的概率要比冷门商户被选为负样本的概率大。要实现这个功能,在本发明中采用“随机打点法”进行挑选。也就是说,对于每一个商户k,我们都把它映射为一个长度以以下公式表示的线段:

cnt(k)/∑icnt(i)

其中,cnt(k)表示该商户k一共出现的次数,分母是对所有商户的次数统计的求和。我们把这些线段拼在一起,形成一个长度为1的完整线段,就得到如图5所示的线段,如果随机地往这个线段上去打点,该点落在那个线段区间上,结果就是该线段对应的商户。按照图5所示,可以想象,热门商户对应的线段相对比较长,被打中的概率就大。

最后,在步骤s7中,基于输出层概率分析的序列性推荐商户。具体地,在训练好上述神经网络之后,再将每个商户的onehot编码作为输入,然后计算输出层,给定一个输入商户,输出商户词典中每个商户的概率值。也就是说,对于某个用户,将上一笔交易的商户作为神经网络的输入,那么输出概率越大的商户,应该越有可能出现在输入商户的上下文中。这样一来,当一个账户发生了一笔消费之后,我们可以利用该神经网络推测出接下来最有可能去消费的商户的排名,从高到低推荐给该用户。

以上对于本发明的基于转移概率网络的商户推荐进行了说明,接着对于本发明的基于转移概率网络的商户推荐系统进行简单介绍。

图6是表示本发明的基于转移概率网络的商户推荐系统的构造框图。

如图6所示,本发明的基于转移概率网络的商户推荐系统具备:

onehot编码模块100,对n个商户进行onehot编码,其中,每个商户被映射为一个n维的稀疏向量;

消费商户序列构建模块200,对于规定账户,记录相关交易对应的商户代码并排序而构建消费商户序列,其中,所述商户代码以由所述onehot编码步骤进行onehot编码之后的向量表示;

转移概率网络构建模块300,构建神经网络,其中,以每个商户的onehot编码之后的向量作为输入层、以在该商户之后接下来可能出现的商户的商户出现概率分布作为输出层;以及

商户推荐模块400,基于所述转移概率网络构建装置输出的所述商户出现概率向用户推荐商户。

其中,所述转移概率网络构建模块300具备:

构建神经网络模型子模块310,构建包含具有输入层、隐藏层、输出层的三层神经网络;

生成训练样本子模块320,利用所述消费商户序列生成训练样本;以及

训练神经模型子模块330,基于规定算法训练该神经网络。

作为优先的方式,在训练神经模型子模块330中,设所述输入层的维度为n,所述隐藏层的维度为m,将输入层到隐藏层的权重矩阵记为w1,则权重矩阵w1记为n行*m列,当输入向量的第k维为1时,仅提取出w1中的第k行的行向量作为输出。

进一步,在训练神经模型子模块330中,对正样本进行权重更新,随机选取一部分的负样本进行权重更新。

作为优选的方式,消费商户序列构建模块200统计在一段时间t内的消费次数大于阈值θ的账户,对于统计出的账户,记录每一笔交易对应的商户代码,将每一个所述账户该段规定时间内消费所在商户的商户代码按照依次排列。

具体地,生成训练样本子模块320对于所述消费商户序列,按照规定位置参数选取作为与输入层的商户位置相关的商户得到训练样本或者按照规定时间参数选取作为与输入层的商户时间相关的商户得到训练样本。

进一步,本发明还提供一种计算机可读介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述本发明的基于转移概率网络的商户推荐方法。

进一步,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述本发明的基于转移概率网络的商户推荐方法。

本发明的基于转移概率网络的商户推荐方法以及基于转移概率网络的商户推荐系统抛弃了转移矩阵的思想,提出了转移概率三层神经网络的架构。该网络输入是一个商户的独热码,输出是接下来最可能出现的商户。由于中间加一个固定维度的隐藏层(一般不会太大,比如100维左右),由此能够避免海量商户之间的两列直接计算(比如10万*10万),取而代之的是“输入→隐藏层”的10万*100,以及“隐藏层→输出”的100*10万,这样,使得计算在可控范围内。

而且,在神经网络权重计算的过程中,进一步使用“查表法”以及“负样本抽样”法加速计算。其中,“查表法”可进一步避免“输入→隐藏层”的10万*100的矩阵运算,只需要进行索引即可,“负样本抽样”则在一定程度上加速了“隐藏层→输出”权重的计算。

本发明的基于转移概率网络的商户推荐方法以及基于转移概率网络的商户推荐系统不依赖于“用户-商户评分矩阵”,而是根据用户的消费序列提取有效的商户对训练样本,避免了超大规模的“用户-商户”矩阵。

以上例子主要说明了本发明的基于转移概率网络的商户推荐方法以及基于转移概率网络的商户推荐系统。尽管只对其中一些本发明的具体实施方式进行了描述,但是本领域普通技术人员应当了解,本发明可以在不偏离其主旨与范围内以许多其他的形式实施。因此,所展示的例子与实施方式被视为示意性的而非限制性的,在不脱离如所附各权利要求所定义的本发明精神及范围的情况下,本发明可能涵盖各种的修改与替换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1