一种基于word2vec的房源词向量训练方法及装置转让专利

申请号 : CN201910009493.8

文献号 : CN109858024B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郑子彬殷家康

申请人 : 中山大学

摘要 :

本发明公开一种基于word2vec的房源词向量训练方法及装置,本装置用于实现本方法,本方法包括制定房源点击行为的训练数据结构;输入训练数据集,构建语料库,且由房源ID及其对应的城市ID生成二元组,统计二元组生成房源词典;在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的二元组中,从与房源ID对应的同城ID和非同城ID中分别采样其负样本;将其正样本和其负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。本发明通过城市ID以及房源ID的对应关系,在训练样本采样中保证了数据的差异性和类别的均衡性,得到了更加优质的词向量。

权利要求 :

1.一种基于word2vec的房源词向量训练方法,其特征在于,包括以下步骤:S10将用户的房源点击行为数据集按房源ID分割成若干房源ID的点击序列,一房源ID的点击序列,由若干房源ID的点击序列生成训练数据集,每个训练数据的结构:第一列为当前点击行为的下单或未下单标签,其后列为同一房源ID按时间顺序排列的点击行为数据集,其中后列末尾为同一房源ID的当前点击行为数据;

S20输入训练数据集,统计训练数据集生成语料库,在训练数据集中抽取房源ID及其对应城市的同城ID的点击序列生成若干房源ID二元组,统计若干房源ID二元组,生成房源词典;

S30在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的若干房源ID二元组中采样其同城ID的第一负样本;在房源词典中采样其非同城ID的第二负样本;

S40将其正样本、第一负样本和第二负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。

2.如权利要求1所述的基于word2vec的房源词向量训练方法,其特征在于,所述点击行为数据的满足条件为:(1)同一用户点击行为间隔大于30分钟;

(2)同一用户访问房源的城市ID发生变化,视为新的点击行为数据。

3.如权利要求1所述的基于word2vec的房源词向量训练方法,其特征在于,所述S30中以滑窗方式获取其正样本的步骤具体为:S301输入有下单标签的房源ID的点击序列至word2vec的skipgram模型;

S302设置skipgram模型的滑窗窗口大小,在上述所输入有下单标签的房源ID的点击序列中沿滑窗滑动方式根据滑窗窗口大小获取房源ID的滑窗正样本,所述滑窗正样本是滑窗中除当前滑窗中心房源ID的其他点击行为数据,所述滑窗窗口大小决定滑窗正样本的数量;

S303随着滑窗正样本在房源ID的点击序列中滑动,将当前点击行为数据融入滑窗正样本生成正样本,获取正样本。

4.如权利要求1所述的基于word2vec的房源词向量训练方法,其特征在于,所述S30中所述采样其同城ID的第一负样本和采样其非同城ID的第二负样本的方法为:S304在房源词典中屏蔽所输入下单标签的房源ID的点击序列;

S305利用负采样算法,在房源词典的二元组中,从房源ID的同城ID中采样第一负样本;

S306利用负采样算法,在房源词典的二元组中,从房源ID的非同城ID中采样第二负样本。

5.一种基于word2vec的房源词向量训练装置,其特征在于,包括:制定模块,用于将用户的房源点击行为数据集按房源ID分割成若干房源ID的点击序列,一房源ID的点击序列,由若干房源ID的点击序列生成训练数据集,每个训练数据的结构:第一列为当前点击行为的下单或未下单标签,其后列为同一房源ID按时间顺序排列的点击行为数据集,其中后列末尾为同一房源ID的当前点击行为数据;

生成模块,用于输入训练数据集,统计训练数据集生成语料库,在训练数据集中抽取房源ID及其对应城市的同城ID的点击序列生成若干房源ID二元组,统计若干房源ID二元组,生成房源词典;

获取模块,用于在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的若干房源ID二元组中采样其同城ID的第一负样本;在房源词典中采样其非同城ID的第二负样本;

模型训练模块,用于将其正样本、第一负样本和第二负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。

6.如权利要求5所述的基于word2vec的房源词向量训练装置,其特征在于,所述获取模块包括正样本获取子模块,所述正样本获取子模块包括:输入单元,用于向word2vec的skipgram模型的输入有下单标签的房源ID序列;

第一采样单元,用设置skipgram模型的滑窗窗口大小,在上述所输入有下单标签的房源ID的点击序列中沿滑窗滑动方式根据滑窗窗口大小获取房源ID的滑窗正样本,所述滑窗正样本是滑窗中除当前滑窗中心房源ID的其他点击行为数据,所述滑窗窗口大小决定滑窗正样本的数量;

获取单元,用于随着滑窗正样本在房源ID的点击序列中滑动,将当前点击行为数据融入滑窗正样本生成正样本,获取正样本。

7.如权利要求5所述的基于word2vec的房源词向量训练装置,其特征在于,所述获取模块包括负样本获取子模块,所述负样本获取子模块包括:屏蔽单元,用于在房源词典中屏蔽所输入下单标签的房源ID的点击序列;

第二采样单元,用于利用负采样算法,在房源词典的二元组中,从房源ID的同城ID中采样第一负样本;

第三采样单元,用于利用负采样算法,在房源词典的二元组中,从房源ID的非同城ID中采样第二负样本。

说明书 :

一种基于word2vec的房源词向量训练方法及装置

技术领域

[0001] 本发明涉及计算机自然语言处理领域,特别涉及一种基于word2vec的房源词向量训练方法及装置。

背景技术

[0002] 随着计算机应用领域的不断扩大,自然语言处理受到了人们的高度重视。机器翻译、语音识别以及信息检索等应用需求对计算机的自然语言处理能力提出了越来越高的要求。为了使计算机能够处理自然语言,首先需要对自然语言进行建模。自然语言建模方法经历了从基于规则的方法到基于统计方法的转变。从基于统计的建模方法得到的自然语言模型称为统计语言模型。有许多统计语言建模技术,包括n-gram、神经网络以及log_linear模型等。在对自然语言进行建模的过程中,会出现维数灾难、词语相似性、模型泛化能力以及模型性能等问题。寻找上述问题的解决方案是推动统计语言模型不断发展的内在动力。在对统计语言模型进行研究的背景下,Google公司在2013年开放了Word2vec这一款用于训练词向量的软件工具。Word2vec可以根据给定的语料库,通过优化后的训练模型快速有效地将一个词语表达成向量形式,为自然语言处理领域的应用研究提供了新的工具。
Word2vec依赖skipgrams或连续词袋(CBOW)来建立神经词嵌入。Word2vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造。该算法渐渐被其他人所分析和解释。
[0003] 除了在自然语言领域,我们可以对word2vec进行一些优化,以获取更优质的词向量,使其在其他领域也发挥其高效的作用。

发明内容

[0004] 本发明的主要目的是提出一种基于word2vec的房源词向量训练方法,旨在克服以上问题。
[0005] 为实现上述目的,本发明公开了一种基于word2vec的房源词向量训练方法,包括以下步骤:
[0006] S10制定训练数据结构,生成训练数据集:将用户的房源点击行为数据集按房源ID分割成若干房源ID的点击序列,一房源ID的点击序列,由若干房源ID的点击序列生成训练数据集,每个训练数据的结构:第一列为当前点击行为的下单或未下单标签,其后列为同一房源ID按时间顺序排列的点击行为数据集,其中后列末尾为同一房源ID的当前点击行为数据;
[0007] S20生成房源词典:输入训练数据集,统计训练数据集生成语料库,在训练数据集中抽取房源ID及其对应城市的同城ID的点击序列生成若干房源ID二元组,统计若干房源ID二元组,生成房源词典;
[0008] S30采集训练样本:在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的若干房源ID二元组中采样其同城ID的第一负样本;在房源词典中采样其非同城ID的第二负样本;
[0009] S40共享样本,模型训练:将其正样本、第一负样本和第二负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。
[0010] 优选地,所述点击行为数据的满足条件为:
[0011] (1)同一用户点击行为间隔大于30分钟;
[0012] (2)同一用户访问房源的城市ID发生变化,视为新的点击行为数据。
[0013] 优选地,所述S30中以滑窗方式获取其正样本的步骤具体为:
[0014] S301输入有下单标签的房源ID的点击序列至word2vec的skipgram模型;
[0015] S302设置skipgram模型的滑窗窗口大小,在上述所输入的房源ID的点击序列中沿滑窗滑动方式根据滑窗窗口大小获取房源ID的滑窗正样本,所述滑窗正样本是滑窗中除当前滑窗中心房源ID的其他点击行为数据,所述滑窗窗口大小决定滑窗正样本的数量;
[0016] S303随着滑窗正样本在房源ID的点击序列中滑动,将当前点击行为数据融入滑窗正样本生成正样本,获取正样本。
[0017] 优选地,所述S30中所述采样其负样本的方法为:
[0018] S304在房源词典中屏蔽所输入下单标签的房源ID的点击序列;
[0019] S305利用负采样算法,在房源词典的二元组中,从房源ID的同城ID中采样第一负样本;
[0020] S306利用负采样算法,在房源词典的二元组中,从房源ID的非同城ID中采样第二负样本。
[0021] 本发明还公开了一种基于word2vec的房源词向量训练装置,包括:
[0022] 制定模块,用于将用户的房源点击行为数据集按房源ID分割成若干房源ID的点击序列,一房源ID的点击序列,由若干房源ID的点击序列生成训练数据集,每个训练数据的结构:第一列为当前点击行为的下单或未下单标签,其后列为同一房源ID按时间顺序排列的点击行为数据集,其中后列末尾为同一房源ID的当前点击行为数据;
[0023] 生成模块,用于输入训练数据集,统计训练数据集生成语料库,在训练数据集中抽取房源ID及其对应城市的同城ID的点击序列生成若干房源ID二元组,统计若干房源ID二元组,生成房源词典;
[0024] 获取模块,用于在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的若干房源ID二元组中采样其同城ID的第一负样本;在房源词典中采样其非同城ID的第二负样本;
[0025] 模型训练模块,用于将其正样本、第一负样本和第二负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。
[0026] 优选地,所述获取模块包括正样本获取子模块,所述正样本获取子模块包括:
[0027] 输入单元,用于向word2vec的skipgram模型的输入有下单标签的房源ID序列;
[0028] 第一采样单元,用设置滑窗的窗口大小,在下单标签的房源ID的点击序列获取房源ID的滑窗正样本,所述滑窗正样本是沿滑窗的滑动,滑窗中除当前滑窗中心房源ID的其他点击行为数据;
[0029] 获取单元,用于随着滑窗正样本沿房源ID的点击序列滑动,将当前点击行为数据融入滑窗正样本生成正样本,获取正样本。
[0030] 优选地,所述获取模块包括负样本获取子模块,所述负样本获取子模块包括:
[0031] 屏蔽单元,用于在房源词典中屏蔽所输入下单标签的房源ID的点击序列;
[0032] 第二采样单元,用于利用负采样算法,在房源词典的二元组中,从房源ID的同城ID中采样第一负样本;
[0033] 第三采样单元,用于利用负采样算法,在房源词典的二元组中,从房源ID的非同城ID中采样第二负样本。
[0034] 本发明有效地避免了现有技术中负采样算法因为全局随机采样,出现负样本全部为非同城样本而产生的噪音数据的现象,由于没有同城样本数据,机器只会学习非同城的数据差异,学不到与同城的数据差异,为避免这种现象,使采样得到的训练数据更加合理,让机器能学习到同城和非同城的差异性,本发明修改了词典结构,由原来的单一ID,变成了由房源ID和其对应的城市ID组成的二元组,即采样同城ID的房源作为负样本,也采样非同城ID作为负样本,两种采样得到的样本合在一起作为我们最终的负样本,从而训练模型得到更优的房源ID对应的词向量。

附图说明

[0035] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
[0036] 图1为本方法一实施例的方法流程图;
[0037] 图2为所述S30中以滑窗方式获取其正样本的方法流程图;
[0038] 图3为所述S30中所述采样其负样本的方法流程图;
[0039] 图4为本装置一实施例的功能模块图;
[0040] 图5为所述获取模块的功能模块细化图;
[0041] 图6为实操实例2中会话序列长度分布对比图;
[0042] 图7为实操实例3中Skipgram模型的结构示意图;
[0043] 图8为实操实例4中基于Skipgram模型,以滑窗方式采样正、负样本的示意图;
[0044] 图9为以北京为例,本方法的验证图;
[0045] 图10为以上海为例,本方法的验证图,
[0046] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0047] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0048] 需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
[0049] 另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
[0050] 如图1‑8所示,一种基于word2vec的房源词向量训练方法,包括以下步骤:
[0051] S10制定训练数据结构,生成训练数据集:将用户的房源点击行为数据集按房源ID分割成若干房源ID的点击序列,一房源ID的点击序列,由若干房源ID的点击序列生成训练数据集,每个训练数据的结构:第一列为当前点击行为的下单或未下单标签,其后列为同一房源ID按时间顺序排列的点击行为数据集,其中后列末尾为同一房源ID的当前点击行为数据;
[0052] S20生成房源词典:输入训练数据集,统计训练数据集生成语料库,在训练数据集中抽取房源ID及其对应城市的同城ID的点击序列生成若干房源ID二元组,统计若干房源ID二元组,生成房源词典;
[0053] S30采集训练样本:在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的若干房源ID二元组中采样其同城ID的第一负样本;在房源词典中采样其非同城ID的第二负样本;
[0054] S40共享样本,模型训练:将其正样本、第一负样本和第二负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。
[0055] 优选地,所述点击行为数据的满足条件为:
[0056] (1)同一用户点击行为间隔大于30分钟;
[0057] (2)同一用户访问房源的城市ID发生变化,视为新的点击行为数据。
[0058] 优选地,所述S30中以滑窗方式获取其正样本的步骤具体为:
[0059] S301输入有下单标签的房源ID的点击序列至word2vec的skipgram模型;
[0060] S302设置skipgram模型的滑窗窗口大小,在上述所输入的房源ID的点击序列中沿滑窗滑动方式根据滑窗窗口大小获取房源ID的滑窗正样本,所述滑窗正样本是滑窗中除当前滑窗中心房源ID的其他点击行为数据,所述滑窗窗口大小决定滑窗正样本的数量;
[0061] S303随着滑窗正样本在房源ID的点击序列中滑动,将当前点击行为数据融入滑窗正样本生成正样本,获取正样本。
[0062] 优选地,所述S30中所述采样其负样本的方法为:
[0063] S304在房源词典中屏蔽所输入下单标签的房源ID的点击序列;
[0064] S305利用负采样算法,在房源词典的二元组中,从房源ID的同城ID中采样第一负样本;
[0065] S306利用负采样算法,在房源词典的二元组中,从房源ID的非同城ID中采样第二负样本。
[0066] 本发明还公开了一种基于word2vec的房源词向量训练装置,用于实现上述方法,其包括:
[0067] 制定模块10,用于将用户的房源点击行为数据集按房源ID分割成若干房源ID的点击序列,一房源ID的点击序列,由若干房源ID的点击序列生成训练数据集,每个训练数据的结构:第一列为当前点击行为的下单或未下单标签,其后列为同一房源ID按时间顺序排列的点击行为数据集,其中后列末尾为同一房源ID的当前点击行为数据;
[0068] 生成模块20,用于输入训练数据集,统计训练数据集生成语料库,在训练数据集中抽取房源ID及其对应城市的同城ID的点击序列生成若干房源ID二元组,统计若干房源ID二元组,生成房源词典;
[0069] 获取模块30,用于在word2vec的skipgram模型中输入有下单标签的房源ID,以滑窗方式获取其正样本;在房源词典的若干房源ID二元组中采样其同城ID的第一负样本;在房源词典中采样其非同城ID的第二负样本;模型训练模块40,用于将其正样本、第一负样本和第二负样本一起作为训练样本,使用skipgram模型进行训练,输出房源ID对应的词向量。
[0070] 优选地,所述获取模块30包括正样本获取子模块,所述正样本获取子模块包括:
[0071] 输入单元301,用于向word2vec的skipgram模型的输入有下单标签的房源ID序列;
[0072] 第一采样单元302,用设置skipgram模型的滑窗窗口大小,在上述所输入的房源ID的点击序列中沿滑窗滑动方式根据滑窗窗口大小获取房源ID的滑窗正样本,所述滑窗正样本是滑窗中除当前滑窗中心房源ID的其他点击行为数据,所述滑窗窗口大小决定滑窗正样本的数量;
[0073] 获取单元303,用于随着滑窗正样本在房源ID的点击序列中滑动,将当前点击行为数据融入滑窗正样本生成正样本,获取正样本。
[0074] 优选地,所述获取模块30包括负样本获取子模块,所述负样本获取子模块包括:
[0075] 屏蔽单元304,用于在房源词典中屏蔽所输入下单标签的房源ID的点击序列;
[0076] 第二采样单元305,用于利用负采样算法,在房源词典的二元组中,从房源ID的同城ID中采样第一负样本;
[0077] 第三采样单元306,用于利用负采样算法,在房源词典的二元组中,从房源ID的非同城ID中采样第二负样本。
[0078] 在本实施例中,现有word2vec一般用于自然语言处理,是一种通用的词向量构造模型,本发明的目的对word2vec内部的算法及程序进行改造,当用户针对某个具体事件或问题时,让客户得到更加优质的词向量,使其更适用于具体的问题。
[0079] 实操实例:针对酒店民宿行业,基于本发明构思,开发一种对word2vec改进—product2vec,此方法可以将酒店领域常见的房源ID转化为对应的词向量Embedding形式,其得到的向量相比于普通的word2vec更加的优质,更加适用于酒店民宿领域。
[0080] 一、训练数据结构的改进
[0081] 用户在app点击或者下单房源的行为数据,接下来将行为数据分割成若干个房源序列(会话)
[0082] 例如:
[0083] 一个用户在某APP选择酒店,此用户会浏览点击一系列房源,最终下单或者未下单。我们将这一系列行为涉及到的房源ID统计后,得到形如下列序列(两种):
[0084] a.有下单序列
[0085] 1,11215487,0547954,094687135,35488951,15547661,73314592,…,11858562,12354889
[0086] 其中,列开端的1表示此序列是有下单序列,其中的每一个数字都是一个房源对应的ID,最后一个ID是用户下单的房源的ID,且必定在序列末尾。
[0087] b.未下单序列
[0088] 0,11215487,11547954,94687135,35488951,15547661,73314592,…,11858562[0089] 如果用户未下单,得到的就是如上序列,即没有下单房源的ID。列开端的1表示此序列是有下单序列,其中的每一个数字都是一个房源对应的ID,最后一个ID是用户下单的房源的ID,且必定在序列末尾。
[0090] 当同一用户的行为间隔大于30分钟,或者同一用户访问房源的城市发生变化则视为新的会话的开始。这些会话即类似于文本中的句子,构成了word2vec的训练数据。
[0091] 实操实例2:对于每一个会话如果最后一个房源为下单房源,则将会话标记为下单会话(1),否则为0,详见图6,会话序列长度分布对比图。
[0092] 会话分布:(总共1233205个,最长的会话为1611)
[0093] 会话数量:612076(去掉会话长度小于5会话数据),有下单会话:82771,占比:13.5%
[0094] 房源数量:182253
[0095] 房源语料总数:10481109
[0096] 二、word2vec改进为Product2vec
[0097] Product2vec是在word2vec的基础上做出的一些改进,除此之外,其它原理及算法流程与word2vec差异不大,不在此累述。
[0098] 1、修改Negative Sampling算法,将下单房源作为共享样本进行训练;word2vec有两种模型CBOW和skip‑gram以及两种算法层次Softmax和Negative Sampling,我们这里使用的是skip‑gram模型以及Negative Sampling算法的变种。
[0099] 实操实例3:
[0100] 假设我们有形如w(t‑2),w(t‑1),w(t),w(t+1),w(t+2)…,w(t+n)的序列,如图7所示,当前词(滑窗的中心词)为w(t),是word2vec算法的输入,w(t)的上下文,假设窗口大小为5,也即w(t‑2),w(t‑1),w(t+1),w(t+2)即为我们的正样本。
[0101] 后续,我们利用负采样算法(Negativa Sampling)从整个数据集(滑窗中的元素除外)中采样得到的样本,即为我们的负样本。
[0102] 在训练的时候,word2vec是以滑窗的形式来训练,我们produ2vec沿用了此种训练方式,使用word2vec的skip‑gram模型。
[0103] 实操实例4:
[0104] 假如我们滑窗(窗口大小为3)中有A B C三个单词,B是我们的输入,B的上下文,也就是A C,就是我们的正样本。然后再从词典中利用负采样算法进行随机采样得到负样本X,Y等等,然后加在一起作为我们的训练样本,如图8。
[0105] 我们对这个算法进行修改,我们的会话序列有下单或未下单的序列,本发明仅针对下单的房源会话序列(图1,A‑F的序列),我们会将这个下单房源(F)作为正样本,也就是说,现在我们的正样本有A,C,下单房源F,负样本X,Y等。他们合在一起作为我们的训练样本[0106] 不仅如此,我们训练是以滑窗方式,进行的,随着滑窗向文本末尾滑动,我们会将下单房源F,加入每个滑窗中,一同训练,F也就是我们说的共享样本。
[0107] 这样的训练方式有更好效果的原因如下:
[0108] 从本质上来讲,word2vec是一个神经概率模型。它的目标是,给我一个输入单词,预测上下文单词出现的概率。那么对于Product2vec,也是一样的道理,Product2vec的目标是,给定当前浏览的房源,不仅预测了上下文浏览的房源出现的概率,还预测了下单房源出现的概率。也就是说每一次的训练,意味着训练了由当前房源到下单房源出现的概率,这样的概率,在某种程度上也就意味着两者之间的一个相似程度。那么,这样的话,我们在训练的时候,对于每个中心词(滑窗中心位置对应的房源),都会在下单房源的影响下,变得更加客观,合理,更能表述两者之间的在向量层面的一些联系。
[0109] 三、房源词典结构的改进,加入同城/非同城因素
[0110] Word2vec在负采样的时候,是针对整个语料库,进行随机的负采样。
[0111] 对酒店领域,我们的数据预处理,切分会话序列的时候,如果出现用户切换城市,就会当做开始一个新的会话,也就是说,每一个序列中,这些房源,都是属于同一个城市了。而且客观上来讲,用户在选择了某个城市时候,也是比较这个城市中的房子,哪些是他喜欢的,也就是真实正样本,哪些是不喜欢的,也就是真实负样本。
[0112] 由于原有的负采样算法是全局随机采样,很有可能得到的负样本,全部都是其他城市的。那么这样的数据,对于模型来讲,反而有可能是一种噪音,只有全是其他城市的这种情况才会是噪音数据。因为里边没有同城市的,机器只会学习到与其他城市的差异,学不到与同城市的差异,为避免这种情况,让机器能学习到同城和非同城的差异性,为了使采样得到的训练数据更加合理,我们修改了词典结构,由原来的一个单词,变成了一个二元组,分别是房源id和其对应的城市id。
[0113] 这样,我们在采样的时候,由于存在城市ID以及房源ID的对应关系,我们就可以根据用户所选择的城市,仅采样同城ID的房源作为我们的一部分负样本。为了保持数据的差异性,也采样非同城ID随机采样,也作为我们的负样本,两种采样得到的样本合在一起作为我们最终的负样本。
[0114] 这样可以解决数据中的样本类别不均衡的问题,使得训练时候更加的合理,最终得到更加优质的Embedding向量。
[0115] 实操实例结果验证:
[0116] 为了验证训练得到的房源的词向量embedding能否正确地表达房源间的相似性,一个可行的做法是对房源的embedding进行聚类,然后根据房源经纬度在地图上绘图,通过聚类的结果进行着色。
[0117] 由于同一地理区域内的房源往往存在一定的相似性,那么如果从绘图结果上同一地理区域内的颜色(聚类类别)种类越少,说明embedding效果更好。
[0118] 采用kmeans聚类对训练得到的房源embedding,对于同一城市的房源采用kmeans聚类,然后根据房源经纬度在地图上绘图,通过kmeans得到的类标进行着色。
[0119] 这里以北京和上海这两个城市为例子,
[0120] kmeans:10个类
[0121] 详见图9,北京的product2vec(左图)与现有word2vec(右图)的类比图;验证结论:对于北京的房源,从地位维度来看,product2vec图中同一区域内的房源通过kmeans聚类相比于word2vec更能聚成同一类,特别是product2vec图中的左上角和左下角,对比word2vec图,从这一角度来看product2vec效果更好一些。
[0122] 详见图10,上海的product2vec(左图)与现有word2vec(右图)的类比图验证结论:对于上海的房源,从地位维度来看,product2vec图中同一区域内的房源通过kmeans聚类,整体来看相比于word2vec,更能聚成同一类。
[0123] 以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。