首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于社交网络挖掘公司潜在用户(3)

基于社交网络挖掘公司潜在用户(3)

3 推荐算法通过上面两步操作,我们获得了公司的描述(description),所属行业(industry)以及公司的专属领域(specialties),这几个特性反映了公司的大部分特征。因此,本文可以依据这这些特征来计算公司间的相似度,通过公司特征间的匹配来进行公司间的匹配。为了提高公司之间的匹配度,本文通过                Watson 提供的关键字提取 API 来对公司的 description 域进行关键字提取,并和 specialties                域合并成为最终进行相似度匹配的文本信息。之后通过 Python 分词工具包 NLTK 对合并后的文本分析,得到该领域公司信息的语料库。最后通过                Gensim 工具中的 LSI 模型进行相似度计算。下面首先简单介绍一下 LSI 模型。
3.1 LSI 模型潜在语义分析(LSA)又被称作潜在语义索引(LSI),是一种在自然语言处理中用到的技术,其将大量文本表示成矩阵,矩阵的每一行表示一个词,每一列表示一篇文档,矩阵的元素可以为词频或                TF-IDF 值。LSA                采用奇异值分解(SVD)对原始矩阵进行降维,得到原始矩阵的低阶近似矩阵。之后,其使用余弦相似度公式计算两个文本的相似度。通过 LSA                模型,可以很准确的计算出两个文本信息之间的相似度。由于本文中的公司信息中有足够的、包含公司特征的文本信息,所以本文采用 LSI                模型来进行公司之间的相似度计算。更多关于 LSA 模型的问题请参考:.
3.2 关键字提取为了使用 Watson API 进行关键字提取,需要在 Bluemix 平台创建 AlchemyAPI 服务,服务创建完毕后会获得一个认证秘钥                API_KEY,使用该秘钥才可以进行关键字提取 API 的调用。AlchemyAPI                提供了一组服务,支持企业和开发人员构建相关应用程序,本文用到的是其中的 AlchemyLanguage 服务。
AlchemyLanguage 是通过自然语言处理提供文本分析的 API 集合。借助 AlchemyLanguage,可以实现 Keyword                Extraction、Entity Extraction、Sentiment Extraction、Emotion Analysis、Concept                Tagging、Taxonomy Classification 等。本文使用了 Keyword Extraction 功能。
AlchemyLanguage 的具体使用步骤为:
  • 获取关键字提取服务                清单 5.                获取关键字提取服务
    alchemy_language=AlchemyLanguageV1(api_key='Your APIKEY')




  • 指定输出结果域,本文只需要提取 keyword 域即可                清单 6. 提取 keyword                域
    combined_operations = ['keyword']




  • 提取关键字                清单 7.                提取关键字
    result = alchemy_language.combined(text=description, extract=combined_operations)




3.3 NLTK 分词工具NLTK 是基于 Python 的分词工具,在使用 Gensim 计算相似度之前,必须要对公司关键字提取后的结果进行分词处理,主要包括以下步骤:对文档                text 分词并小写化、设置停用词及标点符号集、去停用词及标点符号。
经过以上分词处理后,对指定领域内的每个公司,合并 description 的关键字和 specialties 成为                text,对每个公司重复上述步骤,最终得到某行业内(industry)公司信息的语料库,该语料库作为 Gensim 工具的输入。
3.4 通过 Gensim 工具进行相似度计算本文使用了 Python 版的 Gensim 工具,并以 4.4 节获得的公司信息语料库作为 Gensim 工具的输入。令 texts                为指定公司信息语料库,首先通过 texts 抽取一个"词袋(bag-of-words)",将 texts 的 token 映射为                id,方法如下:
清单 8. texts 的 token 映射为 id                    的方法
dictionary = corpora.Dictionary(texts)




然后将用字符串表示的文档转换为用 id 表示的文档向量:
清单 9. 用 id                表示的文档向量
corpus = [dictionary.doc2bow(text) for text in texts]




有了这些信息,就可以基于这些信息计算一个 TF-IDF 模型:
清单 10. 计算 TF-IDF                模型
tfidf = models.TfidfModel(corpus)




基于这个 TF-IDF 模型,就可以将上述词频表示的文档向量表示为一个用 TF-IDF 值表示的文档向量:
清单 11. 用 TF-IDF                    值表示的文档向量
corpus_tfidf = tfidf[corpus]




有了 tf-idf 值表示的文档向量,就可以训练一个 LSI 模型,并建立索引,在本文将 topic 数设置为 10,即将 TF-IDF                语料转化为一个潜在 10-D 空间:
清单 12. 训练 LSI                模型
lsi = models.LsiMoidel(corpus_tfidf,id2word=dictionary,num_topics=10)
index = similarities.MatrixSimilarity(lsi[corpus])




基于 LSI 模型的索引建立完毕,通过 LSI 模型可以将公司 description 关键字和 specialties 组成的 query_word                映射到 10 个 topic 主题模型空间上,然后和其他公司计算相似度并存于 sims 列表中:
清单 13. 计算和其它公司的相似度并存在                    sims                列表中
query_bow = dictionary.doc2bow(query_words)
query_lsi = lsi[query_bow]
sims = index[query_lsi]

返回列表