1.搜索引擎基础思路
1.构建一个庞大的资料库
2.建立索引,用于指向具体的资料
3.进行搜索时,通过关键字匹配的方法,找出关键字对应的索引
4.通过索引找到对应的资料,比如某些资料中出现关键字的频率高,
就把这些资料返回(这种方法是最基本的思路,体会思想即可,
现在没有这么做的)
针对上面的思路会有Term Spam攻击,如想让网页出现在搜索结果前面,
在html的hiv中加入2000个pagerank这个单词,然后隐藏这个标签,
当搜索pagerank的时候,自己的html文件就会出现在前面。这就做到了
term spam攻击。
2. PageRank算法基本思想
当某些高质量的网页指向网页A的时候,
那么网页A的PR值会因为这些高质量的投票而变大,
而网页A被较少网页指向或被一些PR值较低的网页指向的时候,A的PR值也不会很大,这样可以合理地反映一个网页的质量水平。因为无法做到在其他人的网友中加入对自己的引用或指向链接,就无法实现攻击。
PageRank的不足:
PageRank的优点太明显,从它取得的巨大成功就可见一斑。
第一,没有区分站内导航链接。很多网站的首页都有很多对站内其他页面的链接,
称为站内导航链接。这些链接与不同网站之间的链接相比,
肯定是后者更能体现PageRank值的传递关系。
第二,没有过滤广告链接和功能链接(例如常见的“分享到微博”)。
这些链接通常没有什么实际价值,前者链接到广告页面,后者常常链接到某个社交网站首页。
第三,对新网页不友好。一个新网页的一般入链相对较少,
即使它的内容的质量很高,要成为一个高PR值的页面仍需要很长时间的推广。
##3.TextRank算法基础原理
TextRank 算法是一种用于文本的基于图的排序算法。
其基本思想来源于谷歌的 PageRank算法, 通过把文本分割成若干组成单元
(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序,
仅利用单篇文档本身的信息即可实现关键词提取、文摘。
和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练,
因其简洁有效而得到广泛应用。
用TextRank提取来提取关键词,用PageRank的思想来解释它:
1.如果一个单词出现在很多单词后面的话,那么说明这个单词比较重要
2.一个TextRank值很高的单词后面跟着的一个单词,
那么这个单词的TextRank值会相应地因此而提高。
##4.LDA原理及使用思路
LDA是一种文档主题模型,针对词、文档、主题形成一个三层的贝叶斯网络,
文档到主题服从多项式分布,主题到词服从多项式分布。
LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)
或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,
这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。
但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,
同时也为模型的改进提供了契机。
每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了
很多单词所构成的一个概率分布。
lda过程:
先定义一些字母的含义:文档集合D,主题(topic)集合T
D中每个文档d看作一个单词序列<w1,w2,…,wn>,wi表示第i个单词,设d有n个单词。
(LDA里面称之为wordbag,实际上每个单词的出现位置对LDA算法无影响)
·D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC),
LDA以文档集合D作为输入,希望训练出的两个结果向量(设聚成k个topic,
VOC中共包含m个词
生成topic概率:
对每个D中的文档d,对应到不同Topic的概率θd<pt1,…,ptk>,
其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,
pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。
生成单词概率:
对每个T中的topict,生成不同单词的概率φt<pw1,…,pwm>,
其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,
pwi=Nwi/N,其中Nwi表示对应到topict的VOC中第i个单词的数目,
N表示所有对应到topict的单词总数。
LDA输出:
1.输出这个模型的各个主题下的主题词的概率,如,
[(0, ‘0.015*“说” + 0.011*“吃”),
(1, ‘0.004*“想” + 0.003*“买” + 0.003*“钱”’)]
2.新文本数据的向量化,即将新的文本映射成主题向量,
然后可以做分类,做聚类,做推荐
def to_lda_vec(model, dictionary, text_list=None):
‘’’
:param model: lda model
:param dictionary: Dictionary for toBow
:param text_list: texts
:return: texts about one topic
‘’’
lda_list = []
for texts in text_list:
doc_bow = dictionary.doc2bow(texts)
doc_lda = model[doc_bow]
lda_list.append(doc_lda)
return lda_list
这个方法中的参数加了注释,这里可以看到有个参数是dictionary,
这里就是我们前面训练lda时用的词典,前面保存的词典派上用场了。
最后输出的lda_list是一个列表,列表中元素为每句话的doc_lda,doc_lda
是这样子的[(5,0.342345),(6,0.1111)…],也就是个list,无素为元组,
元组包括两个值,第一个值表示主题id,第二个值表示属于该主题的概率。