基于自然语言处理(语义/情感)的香水推荐
2019年10月12日 由 sunlei 发表
583440
0
介绍
自然语言处理(NLP)在推荐系统和信息检索中有许多有趣的应用。作为一名香水爱好者和数据科学家,利基香水社区使用的不寻常且高度描述性的语言启发我使用NLP创建一个模型,帮助我发现我可能想购买的香水。Niche Perfume(沙龙香)是由小型精品香水公司生产的稀有香水。与葡萄酒类似,围绕着Niche Perfume有一个完整的亚文化,完美的NLP它有自己的诗意词汇!
我想让这个模型做两件事:
- 1、我想描述一款香水,并根据我的描述得到相关的推荐。由于所使用的建模方法,以及香水的语言非常丰富,这个模型可以推荐与描述情绪、感觉、性格或度假等事件相匹配的香水。
- 2、考虑感情因素。我希望能够描述我不喜欢什么以及我喜欢什么,并且仍然能够收到相关的推荐。
数据
我写了一个python脚本,从一个流行的沙龙香水网站上抓取数据。他们似乎并不介意。:-)
我收集了三个文本数据来源,并将它们连接到每个香水的一个文档中:
下面是我个人最喜欢的香水Delma的三个文本数据源的例子。
一些有趣的结果!
我在python笔记本中创建了一个聊天机器人接口,使用的模型集成了Doc2Vec和潜在语义分析(LSA)。Doc2Vec和LSA表示潜在空间中的香水和文本查询,然后使用余弦相似性将香水匹配到文本查询。最相关的五款香水将作为推荐返回。
下面是一个与聊天机器人交互的例子。一个简单的圣诞香水查询就会返回5种适合该季节的香水。第一瓶香水的主题是没药(芳香液状树脂,用于制香水等)。
[caption id="attachment_45437" align="aligncenter" width="1848"]
圣诞节香水的建议[/caption]
下面是一些更有趣的例子:
[caption id="attachment_45438" align="aligncenter" width="1602"]
查询“寻找我的标志性海滩气味”。我打算带着它去海滩或游泳池。” 返回香水与海盐,椰子和海藻的香调。属于我自己的海滩香水——汤姆·福特的淡太阳香水,出现在第二名!我可以证明,这种香水闻起来确实像在热带度假的海滩上的一天![/caption]
[caption id="attachment_45439" align="aligncenter" width="1582"]
“我在找一种香水,想去意大利的一个小岛度假。”这个问题返回的是西西里橘子和柠檬的香水,以及卡普里岛之香的香水。[/caption]
为什么感情如此重要?
考虑一下聊天机器人的信息。“我喜欢桃子和梨。醉醺醺的香草味甜甜的味道。”
注意,第四种推荐香水有椰子和烟草的味道。如果我讨厌那些描述呢?我更新了查询以包含此信息,并得到了更新后的推荐列表。“我喜欢桃子和梨。醉人的香草味甜甜的味道。我不喜欢烟草,也不喜欢椰子。”
第四款香水从推荐中消失了!
模型
该模型的第一步是从聊天机器人消息中识别每个句子的情感。我用VADER( vader是一种基于词库和语法规则来进行文本情感识别的方法,发表于2014年的AAAI会议)做的。(它非常容易使用,给了我很好的效果。如果你有一个项目想使用情绪分析,我强烈建议你尝试一下。)我把所有积极和中立的句子连接成一个字符串,把所有消极的情绪句子连接成另一个字符串。我现在有两份文件可以用来找到类似的香水。
香水有文字描述、评论和一系列的注释。该模型由两个文档嵌入组成,一个来自LSA,另一个来自Doc2Vev。为了训练LSA和Doc2Vec模型,我将每种香水的描述、评论和注释连接到一个文档中。然后,我使用余弦相似性来查找与聊天机器人消息查询中的积极和中性句相似的香水。我去掉了与否定句相似的香水推荐。
为了计算聊天机器人消息和香水文档之间的余弦相似度,我分别从LSA嵌入和Doc2Vec嵌入计算余弦相似度,然后将两者的得分取平均值,得到最终的分数。
LSA只是用TF-IDF标记文档中的单词,然后用SVD将这些特性压缩到嵌入式中。LSA是一个单词包(BoW)方法,意思是不考虑使用单词的顺序(上下文)。这是BoW方法的缺点。然而,我已经看到许多BoW方法在实践中胜过更复杂的深度学习方法,所以LSA仍然需要测试并被认为是一种可行的方法。
Doc2Vec是一种学习文本文档嵌入的神经网络方法。由于其体系结构,该模型考虑文档中的上下文和语义。文档的上下文和单词之间的关系在学习的嵌入中得到了保留。
通过将Doc2Vec和LSA相结合,我可以得到很好的1-1匹配,例如在我要求时返回玫瑰香水,而且当我描述一些更抽象的东西(如情绪或事件)时,我还可以利用语言的复杂性并返回相关结果。
结论
因为这是一个无监督的模型,所以很难衡量它的工作效果。我仔细检查了结果,并高兴地发现其中一些建议多么相关!但是要真正测试这样的模型,我将部署它并执行一个实时的A/B测试,以度量客户是否购买了推荐的产品。这能让我估算出这样的模式能给公司带来多少收入。
[caption id="attachment_45442" align="aligncenter" width="900"]
使用Twilio,我将此模型部署为聊天机器人sms服务。[/caption]
如果您想亲自尝试此模型并获得一些有趣的建议,可以克隆
repo并在
run_model.ipynb notebook中运行chatbot。
原文链接:https://towardsdatascience.com/perfume-recommendations-using-natural-language-processing-ad3e6736074c