搜索引擎主题模型优化(数据挖掘算法为何物?——基于向量的相似度)

优采云 发布时间: 2021-12-17 20:21

  搜索引擎主题模型优化(数据挖掘算法为何物?——基于向量的相似度)

  我写这个文章是因为前几天部门成员对部门涉及的一些算法进行了审查和整理。不过比较尴尬的是,既然老板不在,大家讨论讨论就变成吐槽大会了,但有一半时间是吐槽产品和业务部门~~

  但这也是一件令人欣慰的事情。这也算是我们的数据部门,已经从轻型挖掘机走向了深挖阶段。

  

  所以,借此机会,把我接触过、了解过、做过的一些勉强能称为算法的事情整理一下。事实上,就我而言,我没有算法背景。在大学里,我更多地了解了互联网,我什至不知道数据挖掘算法是什么。

  其实就所谓的算法而言,我个人认为我的一个同事是对的:所谓的算法并不意味着那些复杂的数学模型就是算法。哪怕是你写的简单的计算公式,只要能解决当前存在的业务痛点,并且有自己的模型思路,就是算法,但可能不够通用,只能解决特定的业务需要。

  在*敏*感*词*数据的前提下,其实很多复杂的算法过程都没有这么好的结果。换句话说,我们将找到简化流程的方法。

  举个简单的栗子:假设有一个*敏*感*词*的数据集,以近千万篇博文为例。如果你提供一篇博文,让你查询相似度最高的前N个,我们通常的想法是什么?通常的方法是计算这篇博文与其他博文的相似度。计算相似度的方法有很多。, 最简单的方法是计算矢量角度,并根据矢量角度确定相似度。好吧,就算用最简单的计算过程,计算近千万次需要多长时间?或许,有人说我用hadoop,用分布式算力来完成这个任务,但是如果真的操作起来,你就会发现这是多么的痛苦。

  再举一个简单的栗子(好吧,多吃栗子):比如SVM,这是一个很难收敛的算法。在大数据的前提下,有的人想用大数据,但想用更多的数据进行训练。模型毕竟手头的数据太多,很多人还是希望用尽可能多的数据来训练,以达到模型更加精准的目的。但是,随着训练数据量的增加,SVM等难以收敛的算法会消耗大量的计算资源。

  (1)贝叶斯

  贝叶斯是分类算法中最简单的算法。挖掘机算法初学者肯定会先爱上它。事实上,贝叶斯原理非常简单,基于统计学中的最大概率原理。就是这么简单,但尼玛却是这么好用,多年来一直屹立不倒。

  缺乏训练过程。基本上贝叶斯就是这样的。因为是文本,所以用一组过程将词和停用词作为最基本的知识点向量进行分割,然后计算模型概率。但更有趣的是,分类过程是在Storm中完成的,相当于一个实时的分类服务。

  (2)分词算法

  其实说到分词算法,没什么好说的。*敏*感*词*朵的任性也是可以理解的。

  因此,到目前为止,个人对分词算法的演变、所涉及的内部算法以及几种分词工具的使用的初步理解都受到了限制。

  其实在文本挖掘方面,对文本进行分词是不够的,因为我们用分词来切词,往往很多与业务无关,通常的做法是建立相应的业务词典,至于词典的建立当然也需要进行分词,进行进一步的处理,甚至可能会增加一些人工。

  (3)实时热点分析

  不知道是不是算法 说到实时性,自然和Storm有关系(嗯,我承认我是在做这个之后开始接触数据的)。说到实时热点,大家可能想不通,举个简单的栗子。

  玩过 hadoop 的人都知道经典的栗子 WordCount。MapReduce 在 Map to Reduce 的过程中通过类似 hash 的方法自动聚合同一个 Key。因此,需要通过 MR 很容易做到数词。.

  Storm 的实时 WordCount 怎么样?嗯,这也是一个可以载入实时技术史册的经典案例(嗯,其实就是一个Storm的HelloWorld)。Storm虽然没有类似MR的自动Hash功能,但也提供了可以达到类似效果的数据包流策略。它不像 MR 那样批处理,它是实时的和流式的。也就是说,可以动态获取当前变化词的词频。

  实时热点分析,如果我们把热点映射成文字,能不能实时得到当前Top N的热点?这个方向有很大的研究价值。通过实时掌握用户的热点方向,动态调整业务策略,获取更大的数据价值。

  不过总的来说,这个数据模型更多地依赖于实时工具Storm的功能,模型设计的东西比较少。至于是不是算法模型,就像我之前说的,看看我个人的看法,你就说吧~~

  (4)很成熟的国产造型--推荐

  就目前国内的数据挖掘而言,分类和推荐可能是最常见的两个方向。分类我就不多说了。比如刚才提到的贝叶斯算法,简直就是分类中的鼻祖算法。

  说到推荐算法,联想规则、协同过滤、余弦相似度等词可能会立刻浮现在脑海中。这是真的,但我不是在谈论这个。其实我想说的是推荐基于两个方向:基于用户和基于内容。

  我们需要注意两点。我们推荐的对象是用户,或者是与用户类似的具有动作行为的实体;而推荐的东西是内容,他没有动作行为,只是属性不同,或者砖块使用较多,业力描述是他必须有知识。

  基于用户推荐,我们看重的不是内容的实体,而是用户本身的行为。我们认为用户的行为必然隐含一些信息,比如以人的兴趣为导向,那么既然你有相关的行为,那么我遵循你的行为向你推荐东西总是有意义的。

  对于基于内容的推荐,我们关注的是内容,与用户的历史行为无关。我们潜意识地认为,既然你会阅读这个内容,你是否也对与这个内容相关的内容感兴趣?或许这样说有失偏颇,但大方向是正确的。

  至于之前提到的关联规则,无论是协同过滤,还是余弦相似度,其实都是通过研究知识点和知识点之间的关系建立的模型。

  对于基于内容的推荐,知识点是内容中的各种属性,比如电影推荐。知识点可以是各种评论数据、点播数据,比如数据、电影类型、演员、导演,以及其中的一些情感。分析等;比如博客文章,他们的知识点可能是带权重的词。至于这个词,涉及到词提取。说到字重,可能涉及到TFIDF模型和LDA模型。

  对于基于用户的知识,知识点最直接的体现就是用户的行为,也就是用户与内容的关系。但是,再深入下去,你会发现其实和内容的知识点是息息相关的,但可能还不止这些。一个内容实体,而是多个内容实体的集合。

  (5)文本词的加权模型

  刚才提到了TFIDF和LDA模型,那么顺便说一下与文本词相关的权重模型。

  说到文本挖掘,大多数人可能都熟悉 TFIDF 模型。既然涉及到了,我们就简单说一下。我们知道文本的知识点是单个单词。虽然都是词,但总有一些词更重要,哪些词不那么重要。

  有些人可能会说更多的话很重要。没错,就是词频。简单地说,这种想法没有错,早期的文本挖掘模型就是这样做的。当然,效果一定是马马虎虎。因为经常出现的词往往是无用的、常用的词,对文章影响不大。

  直到TFIDF模型的出现才从根本上解决了文本挖掘知识点建模的问题。如何判断一个词的重要性,或者专业的说,就是判断它对文章的贡献?TFIDF使用词频增加文章中的词权重,然后使用其在文章中的第A个文档频率来降低​​文章中的权重。说白了,就是降低那些公开言论的权重,把真正贡献很大的言论曝光出来。这基本上就是TFIDF的基本思想。至于如何增加词频权重,如何降低文档频率权重,这涉及到具体的模型公式。可以根据不同的需要进行调整。

  文章知识点的主题建模的另一个非常重要的模型是LDA模型。是一个比较通用的文章主题模型。它利用概率原理,说白了就是贝叶斯,建立了知识点(即词)、主题和文章的三层关系结构。词与主题之间存在概率矩阵,主题与文章之间也存在概率矩阵映射关系。

  好吧,LDA 不能再谈论它了。因为,我也不是很懂。对于LDA,虽然是部门内部使用的,但我没有做出具体的模型。我刚刚和同事讨论过,或者更准确地说,我问过我的同事关于它的一些原则和一些设计想法。

  (6) 相似度计算

  相似度计算,如文本相似度计算。这是一个非常基础的建模,用在很多地方,比如我们刚才提到的推荐。当其内部相关时,有时会涉及计算实体之间的相似度。

  关于文本相似度,其实有很多方法。通常它涉及到TFIDF模型来获取文本的知识点,即加权词,然后利用这些加权词做一些相似度计算。

  比如余弦相似度模型就是计算两个文本的余弦角,它的向量自然是那些带权重的词;比如各种计算距离的方法,最著名的欧式距离,它的向量还是这几个词。最长公共子串、最长公共子序列等模型很多,个人不是很清楚。

  总之,方法很多,都不是很复杂,原理也很相似。至于哪个合适,要看具体的业务场景。

  (7)文本学科度--信息熵

  我和同事尝试过将百万博文的领域划分,将技术博文划分为不同的领域,比如大数据领域、移动互联网领域、安全领域等,其实还是分类。

  一开始我们使用贝叶斯分类,效果还可以,但最后我们使用了SVM进行建模。这不是重点,重点是我们要判断技术博客文章归入某个领域的领域级别。

  我们想了很多办法,尝试建立数据模型,但效果不是很理想。最后,我们回到了最本质的方法,那就是利用文本的信息熵来尝试描述度。最后的结果还是不错的。这让我又想起同事说的一句话:简单的东西不一定不好!

  信息熵描述了一个实体的信息量。通俗地讲,它可以描述一个实体的信息混乱程度。在某个领域,知识点都是相似的,都是带有TFIDF权重的词。因此,是否可以认为文本的信息熵越小,主题越集中、越明显,信息混乱程度越低。另一方面,一些文本主题非常杂乱,可能收录来自多个领域的东西,其领域的程度会降低。

  至少从表面上看,这个说法是可行的,实际效果也不错。

  (8)用户画像

  用户画像方向可能是这两年最火的方向。近年来,各大互联网公司和各大IT公司都自觉地开始从传统推荐向个性化推荐演进。有些可能更深,有些可能很浅。

  商业价值的核心是用户,这自然不言而喻。那么如何结合用户进行推荐呢?那就是用户的属性。关键是用户的属性一开始就不存在。我们拥有的只是少数用户的固有属性和用户各种行为的记录。我们甚至不知道用户在做什么,所以让我们推动它!

  因此,我们需要了解用户,因此有必要分析用户的用户画像。其实就是给用户打上标签,把用户打上属性标签。通过这种方式,我们知道每个用户是关于什么的。一些商业行为也是有目的的。

  至于如何填写每个用户画像的属性,要看具体情况了。简单,用几个简单的模型提取一些信息来填写;复杂,使用复杂的算法,通过一些复杂的转换,标记用户。

  (9)文章 热量计算

  这里有很多文章,你怎么判断哪个文章更火,哪个文章更漂亮?也就是说,我进入了一个文章列表页面,你能给我提供一个热门文章的排序列表吗?

  也许大多数想法都是直截了当的。获取能够反映文章流行度的属性,如点击率、评论情感分析、文章的状态。获取一个简单的加权计算模型,然后单击 Out。

  从本质上讲,这是事实。一个简单的模型在实际情况中不一定很难使用。有些属性确实可以体现文章的流行度。加权计算的方法也是正确的。具体重量是要看具体情况。

  但如果我这样做了,实际上会发生什么?今天来了,看到了这个热门推荐榜。我明天来了,还是看到了这个名单,后天我来了,还是这个名单。

  尼玛,这是什么情况?你要我每天读多少次这个破单?!是的,这就是现实。结果是文章越热越热,越冷文章越冷,永远沉入海底,热的文章永远在前面。

  如何解决这个问题呢?让我们添加时间作为参考。我们需要降低旧的文章沉没他人行为的力量,让新的文章有机会领先。也就是说,我们需要在权重上加上创建时间,并随着时间的推移衰减它的热权重,这样就不会出现冷热。至于衰减曲线,要看具体的业务。

  这能解决根本问题吗?如果文章本身信息量不够,比如本身大部分都是新的文章,没有点赞,没有评论,甚至连点击都很少曝光。那么以前的模型将不起作用。

  没有解决办法吗?有方法。比如我们找到了一个类似的网站,它也提供了类似最流行的文章推荐的功能,效果还不错。那么,我们可以利用它的受欢迎程度吗?我们使用计算文章的相似度的方法重新雕刻一个最热门的列表。如果网站性质相似,用户性质相似,文章的质量是的,相似度计算足够准确,相信这个热榜的效果也会不错(这个方法太琐碎了~~)。

  (10)Google 的 PageRank

  首先,不要误会我的意思,我从来没有真正写过这个模型,我没有条件写这个模型。

  懂它懂懂它来自于和几个老同学合作搞网站(酷网,有兴趣的可以去看看)。既然从事网站,作为IT人,一些基本的SEO技巧还是要懂的。因此,我了解到如果要增加网站的权重,外部链接是必不可少的。

  我跟几个老同学说,你去搞外链,抓个网站,让我们网站链接。他们问:网站 放多少链接?尽量多放网站?网站 说什么更好?这不是重点,关键是他们 问:是毛吗?

  我问的那个人很无语,所以我一怒之下去研究PageRank。PageRank的具体扣分过程我就不讲了(可能以我三心二意的水平说不清楚)。有几个核心思想:一个网页被引用的次数越多,它的权重就越大;一个网页的权重越大,它所引用的网页的权重就越大;一个网页被引用的次数越多,它所引用的权重就越低。

  当我们反复迭代这个过程时,我们会发现某个网页的排名基本是固定的。这就是PageRank的基本思想。当然,还有一个问题需要解决,比如如何给初始网页赋予初始权重,如何简化高计算迭代过程中的计算过程等等。这些问题在谷歌的实际操作中都得到了很好的优化。

  (11) 有针对性的从网上抓取数据

  其实我猜这跟算法没什么关系,不过既然有数据采集的设计流程,就勉强可以考虑了。

  之所以有这个需求,是因为那段时间我在搞网站,为自己成立了一个工作室网站,想为别人打造一个轻量定制的企业,尤其是一些小企业。< @网站(是不是一团糟-_-),确实做了几个案例(我的工作室网站:我有兴趣去看看)。

  从那以后,我想,我如何为自己找到客户?工作室的客户应该是那些小企业的老板,目前也一定没有企业门户。作为一个数据程序猿,也是一个挖掘机,虽然他没有中途从蓝翔毕业,没有证书就去上班,但他无论如何也挖了几座山。

  现在是互联网泛滥的时代,他们总会在网上留下一些蛛丝马迹,我要抓住!我的目标很明确,我要拿到那些没有企业的企业邮箱网站,然后做自己的EDM营销(邮件营销)。

  1) 我先是从智联检索页面,抓取了员工不到40人的公司名称。原来,兆联招聘的页面还是很容易解析的。它们是静态的,格式也很规则,所以很容易分析一组小公司的名称;

  2) 公司名我知道了,怎么知道这家公司有独立的公司网站呢?通过分析,我发现在通过搜索引擎搜索公司名称时,如果有公司官网,肯定是在首页。而且它的页面地址也有一定的规律,即:独立官网的开头一般都是www开头,长度一般不会太长,结尾一般是index.html、index.php、index.asp和很快。

  通过这些规则,我可以传递拥有官方网站的公司名称。有两个困难。一是搜索引擎的很多页面源代码都是动态加载的,所以我模拟了浏览器访问过程,抓取了页面源代码。这也是爬虫的常见做法;第二个也就是一开始,我尝试通过百度获取。结果,百度似乎有一些措施来发布结果,导致结果不尽人意。于是改变目的,用了360搜索,问题解决了(事实证明百度在搜索引擎方面还是比360强很多),效果也差不多。

  3) 排除问题解决了,根本问题就在这里。如何获取公司的企业邮箱?通过对搜索引擎返回结果的分析,我发现很多小企业喜欢使用第三方。网站 提供的一些公司黄页包括公司的联系电子邮件地址;并且一些公司的招聘信息会收录公司的电子邮件地址。

  通过数据分析,我终于得到了这部分数据,最后对邮箱是否有效等做了一些基本的分析,最终得到了3000多个企业邮箱,效率达到了80%以上。

  问题解决了,但还有一些地方需要优化:首先是效率问题。我跑了将近12个小时才跑完3000多个邮箱。分析的地方太多,模拟浏览器。效率不高;其次,不太好判断邮箱的有效性。有些邮箱只是人为写的;还有一些网站基于图像的邮箱混合处理,类似。验证码是防抢的。我没有分析像图片一样的邮箱数据。其实这个问题是有办法解决的。我们得到了一些样本图片并进行了图片字母识别训练,以便我们可以解析它们。邮箱。

  总的来说,体验还是很充实的。毕竟,我在业余时间解决了一些实际的痛点,并且对我学到的一些东西变得精通,或者说我在实施过程中学到了很多东西。

  ps:在github上检索webmite就是这个项目。我将代码托管在 github 上或从我的博客输入。

  其实,个人的缺点是显而易见的。首先,他没有经过系统的数据挖掘学习(没去过蓝翔,挖掘机自学),就是出身于野鹿子。因此,很多算法的原理还不够清晰。在这种情况下,您可能无法对某些业务场景提出建设性意见。而且,了解很多算法库的使用还是不够的。

  二是缺乏数学技能。我们知道一些复杂的算法需要强大的数学基础。算法模型,其本质是数学模型。所以,这方面也是我的不足。

  由于个人倾向于通过做大数据来挖掘,因此基于大数据模型的数据挖掘过程可能与传统的数据过程有很大不同。比如数据预处理过程,大数据挖掘的预处理很大程度上依赖于一些比较流行的分布式开源系统,比如实时处理系统Storm、消息队列Kafka、分布式数据采集系统Flume、数据离线批处理处理Hadoop等,可能会依赖Hive和一些Nosql进行数据分析和存储。相反,我对一些传统的挖掘工具比较陌生,比如SAS、SPSS、Excel等工具。但这并不是缺点。侧重点不同。总的来说,*敏*感*词*数据的挖掘将是一个趋势。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线