搜索引擎主题模型优化(前几天部门内部现有涉及的一些算法的review以及整理)

优采云 发布时间: 2022-03-03 13:21

  搜索引擎主题模型优化(前几天部门内部现有涉及的一些算法的review以及整理)

  项目投资找A5快速获取精准代理商名单

  写这篇文章,是因为部门成员前几天对部门目前涉及的一些算法进行了回顾和整理。但更尴尬的是,既然老板不在,大家讨论讨论就变成吐槽大会了,但一半时间都花在吐槽产品和业务部门了~~

  不过,这也是一件可喜的事情。也可以看成是我们的数据部门,从驾驶轻型挖掘机到深挖阶段。

  因此,我借此机会梳理一下自己接触过的、知道的、做过的几乎不能称为算法的东西。事实上,就我个人而言,我并非来自算法。在大学里,我更多地了解了网络,我什至不知道数据挖掘算法是什么。

  

  其实就所谓的算法而言,我个人认为我的一个同事是对的:所谓算法并不是说那些复杂的数学模型就是算法,哪怕是一个简单的计算公式你写的,只要能解决问题 有业务痛点,有自己的模型思路,就是算法,但可能不够通用,只能解决具体的业务需求。

  在海量数据的前提下,其实很多复杂的算法过程并不是那么有效。换句话说,我们将尝试简化流程。

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

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

  说了这么多,我的美容工作还没做完呢!

  一、这些年我开的挖掘机

  (1)最早接触应该是贝叶斯分类

  贝叶斯是分类算法中最简单的算法。十个是挖掘机算法初学者的人中,有九个肯定会先爱上它。其实贝叶斯的原理真的很简单,就是基于最大概率统计原理。它是如此简单,但尼玛是如此易于使用,并且它仍然存在很多年。

  缺乏培训过程。基本上,贝叶斯就是这样。既然是文本,就完成了一组流程,分词、停用词作为最基本的知识点向量,然后计算模型概率。但更有趣的是,分类过程是在Storm中完成的,相当于一个实时的分类业务。

  (2)说到文字,自然少不了分词算法

  其实说到分词算法,就没什么好说的了。现在网上各种开源的分词工具都做得不错,效果相差不大。如果你想进一步改进它,那是不够的。至于深入分词算法,涉及到上下文分析、隐马尔可夫模型等。如果是出于兴趣的个人研究,那我无话可说;如果是小公司,会花费人力物力优化分词效果。我只能说,他们闲的时候很无聊;如果是大公司,人比较任性是可以理解的。

  因此,到目前为止,个人对分词的了解仅限于对分词算法的演进、所涉及的内部算法以及几种分词工具的使用有一个初步的了解。

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

  (3)下一个是实时热点分析

  我不知道这是否是一种算法,但说到实时,它与 Storm 有一些关系(好吧,我承认我是在这样做之后开始处理数据的)。说到实时热点,大家可能会一头雾水,一个简单的栗子就清楚了。

  玩过hadoop的孩子都知道WordCount是个经典的栗子。在 Map to Reduce 的过程中,MapReduce 通过类似于 hash 的方法自动将相同的 Key 聚合在一起。因此,通过 MR 来统计单词就这么简单了。.

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

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

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

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

  就目前国内的数据挖掘而言,分类和推荐可能是最流行的两个方向。关于分类,没什么好说的。比如刚才提到的贝叶斯算法,简直就是分类中的鼻祖算法。

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

  我们需要注意两点。我们推荐的对象是用户,或者像用户一样有动作行为的实体;推荐的东西是内容,没有动作行为,但属性不同,或者使用的积木较多。业力的描述是他必须有知识。

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

  对于基于内容的推荐,我们的重点是内容,与用户的历史行为无关。我们下意识地想,既然你会看这个内容,你是不是也对这个内容相关的内容感兴趣?也许这是有偏见的,但大方向是正确的。

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

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

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

  (5)文本词的加权模型

  TFIDF和LDA模型前面刚刚提到,所以顺便说一下与文本词相关的加权模型。

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

  有些人可能会说,更多的词很重要。没错,就是词频。简单想一想,这个想法并没有错,早期的文本挖掘模型就是这么做的。当然,效果必须是一般的。因为那些频繁出现的词往往是无用的常用词,对文章影响不大。

  直到TFIDF模型的出现,才从根本上解决了文本挖掘知识点建模的问题。如何判断一个词的重要性,或者专业的观点是判断它对文章的贡献?TFIDF 将 文章 中单词的权重增加其词频,然后将其在 文章 中的权重减少其在多个 文章 中的文档频率。说白了就是把那些公开的词都减了,把真正贡献很大的词都暴露出来了。这基本上是 TFIDF 的基本思想。至于如何提高词频权重,如何降低文频权重,这涉及到具体的模型公式,根据不同的需求调整即可。

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

  好吧,LDA 不能再继续下去了,它会被揭露。因为我真的不明白。对于LDA,虽然部门内部在使用,但我没有做出具体的模型,只是和同事讨论过,或者更具体一点,是向同事询问了它的一些原理和一些设计思路。

  (6)相似度计算

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

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

  比如余弦相似度模型就是计算两个文本之间的余弦角,它的向量自然就是那些有权重的词;比如各种距离计算方法,最著名的欧几里得距离,它的向量还是这几个词。. 还有很多其他的模型,比如最长公共子序列和最长公共子序列,我个人不是很清楚。

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

  (7)文本话题度--信息熵

  曾经尝试和同事把百万博文分到不同的领域,把技术博文分到不同的领域,比如大数据领域、移动互联网领域、安全领域等等。仍然是分类的。

  起初我们使用贝叶斯分类并且效果很好,但最终我们使用 SVM 进行建模。这不是重点,重点是我们要对分类到某个领域的技术博文进行领域级别的判断。

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

  信息熵描述了一个实体的信息量。通俗地说,它可以描述一个实体的信息混淆程度。在某个领域,知识点都是相似的,都是带有 TFIDF 权重的词。因此,是否可以认为文本的信息熵越小,主题越集中、越明显,信息的混淆程度越低?反之,有些文本主题杂乱无章,可能收录来自多个领域的内容,其领域级别会降低。

  至少从表面上看,这个论点是有效的,而且实际上效果很好。

  (8)用户画像

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

  商业价值的核心是用户,这是不言而喻的。那么如何结合用户进行推荐,也就是用户的属性,关键是用户的属性从一开始就不存在,我们拥有的只是少数用户的固有属性和用户的各种行为记录。我们甚至不知道用户是什么,真可惜!

  因此,我们需要了解用户,所以有必要分析用户画像。其实就是给用户打标签,把用户打成属性标签,这样我们就可以知道每个用户的大概情况。一些商业行为是有目的的。

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

  (9)文章热量计算

  给你一堆文章,你怎么判断哪个文章更受欢迎,哪个文章更蹩脚,也就是说,我进入一个文章列表页,你能给我一个热的排序列表文章吗?

  也许大多数想法都非常简单。获取能反映文章热度的属性,如点击率、评论情绪分析、文章的关注度最高的情况,得到一个简单的加权计算模型,点击Out。

  这在本质上是正确的。一个简单的模型在实际情况中不一定好用,有些属性确实可以反映一篇文章文章的热度。加权计算方法也是正确的。具体重量是需要看具体情况的。

  但如果这样做,实际上会发生什么?我今天来了,看到了这份受欢迎的推荐清单。我明天来了,我仍然看到这个清单。我后天来了,还是这个单子。

  尼玛,这是什么情况,怎么每天都是这个破单,要我看多少遍?!是的,这就是现实。结果就是越热的文章越热,越冷的文章越冷,永远沉底,而热的文章永远领先。

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

  这是否解决了根本问题?如果文章本身没有足够的信息,比如大部分是新的文章,没有点赞,没有评论,甚至很少点击曝光,那么使用以前的模型就行不通了。

  这不是不可理解吗?方法还是有的。比如我们找了一个类似的网站,也提供了类似最流行的文章recommended的功能,效果相当不错。那么,我们可以利用它的热量吗?通过计算 文章 的相似度,我们重现了最热门站点的列表。如果站点的属性相似,用户的属性相似,文章的质量很好,相似度计算足够准确。效果也会不错(这个方法太笨拙了~~)。

  (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等工具。不过,这也不能说是劣势,侧重点不同。总体而言,*敏*感*词*数据挖掘将是趋势。

  三、给朋友的一些建议

  说了这么多,前面的东西可能对大家不是很有用,当然对开挖掘机的朋友还是有帮助的。现在我想表达的可能和挖矿没有直接关系,更多的是对动物园动物(程序员、攻城狮)的学习和自我进化的建议。

  (1)为了学点东西,你的脸是不是毛茸茸的?

  就个人而言,我对此有深刻的理解。想当年(嗯,这个词还是很蛋疼),大学的时候,我的专业是信息安全,比较偏向网络,所以语言方面,更多的是C和C++,但是没有java类。是的,说白了,用java写一个HelloWorld是不可能的。

  刚毕业的时候,兴奋的去公司写C,但是不到一个月,一个新的项目来了,需求变了(尼玛,最怕开发的就是这句话),变了。尼玛想研究大数据,可以用C来吹头发!在开源系统工具中,十分之九是用 Java 编写的。当时我哭了!

  于是我缠着同组的一个伙伴,一有空就问他问题。有些问题在熟悉java的人眼里绝对是白痴和白痴。但是对于初学者来说,绝对是个好词。如果你自己搜索,可能几个小时都解决不了。一个月后,我终于开始了,后来就容易多了。

  以后的日子里,遇到一些问题,总是会厚颜无耻地缠着交流群里的一些大佬发问,慢慢进步。最近,我开始学习scala。幸好旁边有一个斯卡拉高手,哈哈,不过他很痛苦~~

  所以,遇到不懂的事情,不要害怕简单地问自己的问题,不好意思问,脸皮厚!你连这么简单的问题都不懂,你还有资格为自己的皮肤操心吗?!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线