文章主要进行 基于LSI的文本相似度检索(Text Similarity Queries)。
给定一个带查询文档,发现该文档和其他一组文档的相似度。比如,用户会在某个文档检索系统(比如论文查询系统)中输入一个检索词汇/语句,然后系统会按文本相似度的降序排列,从上到下依次显示和检索条件最为相似的文档。
1,数据预处理,分词,去停用词。
#项目开始前,设置日志和工作环境。
import os
import tempfile
from pprint import pprint
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
TEMP_FOLDER=tempfile.gettempdir()
print('文件夹"{}" 将被用来存储语料和临时性的字典'.format(TEMP_FOLDER))
#############################
#数据预处理
from gensim import corpora,models,similarities
from collections import defaultdict
import jieba
#对特定长词进行控制,防止被分错词,影响后续的分析效果
jieba.add_word('微信')
jieba.add_word('文本挖掘')
jieba.add_word('增长黑客')
jieba.add_word('小白')
jieba.add_word('大数据')
docs = [
'数据挖掘实操|用文本挖掘剖析近5万首《全唐诗》',
'以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程',
'干货|作为一个合格的“增长黑客”,你还得重视外部数据的分析!',
'文本挖掘从小白到精通(二)---语料库和词向量空间',
'文本挖掘从小白到精通(三)---主题模型和文本数据转换',
'文本挖掘从小白到精通(一)---语料、向量空间和模型的概念',
'以《大秦帝国之崛起》为例,来谈大数据舆情分析和文本挖掘',
'文本分类算法集锦,从小白到大牛,附代码注释和训练语料',
'Social Listening和传统市场调研的关系是怎样的?',
'【新媒体运营实操】如何做出一个精美的个性化词云',
'以哈尔滨冰雪大世界旅游的传播效应为例,谈数据新闻可视化的“魅惑”',
'万字干货|10款数据分析“工具”,助你成为新媒体运营领域的“增长黑客”',
'如何用数据分析,搞定新媒体运营的定位和内容初始化?',
'当数据分析遭遇心理动力学:用户深层次的情感需求浮出水面',
'揭开微博转发传播的规律:以“人民日报”发布的G20文艺晚会微博为例',
'数据运营实操 | 如何运用数据分析对某个试运营项目进行“无死角”的复盘?',
'如何利用微信后台数据优化微信运营',
'如何利用Social Listening从社会化媒体中“提炼”有价值的信息?',
'用大数据文本挖掘,来洞察“共享单车”的行业现状及走势',
'从社交媒体传播和文本挖掘角度解读《欢乐颂2》',
'不懂数理和编程,如何运用免费的大数据工具获得行业洞察?',
'写给迷茫的你:如何运用运营思维规划自己的职业发展路径?',
'如何用聚类分析进行企业公众号的内容优化',
'傅园慧和她的“洪荒之力”的大数据舆情分析',
'数据运营|数据分析中,文本分析远比数值型分析重要!(上)'
]
#再对文本进行分词,用空格隔开组成字符串,方便进行下一步的处理:
documents = [' '.join(jieba.lcut(i)) for i in docs]
pprint(documents)
# 去停用词
stoplist = [i.strip() for i in open('stopword.txt',encoding='utf-8').readlines()]
texts = [[word for word in document.lower().split() if word not in stoplist]
for document in documents]
pprint(texts)
['数据挖掘 实操 | 用 文本挖掘 剖析 近 5 万首 《 全唐诗 》', '以虎 嗅网 4W + 文章 的 文本挖掘 为例 , 展现 数据分析 的 一整套 流程', '干货 | 作为 一个 合格 的 “ 增长黑客 ” , 你 还 得 重视 外部 数据 的 分析 !', '文本挖掘 从小 白到 精通 ( 二 ) --- 语料库 和 词 向量 空间', '文本挖掘 从小 白到 精通 ( 三 ) --- 主题 模型 和 文本 数据 转换', '文本挖掘 从小 白到 精通 ( 一 ) --- 语料 、 向量 空间 和 模型 的 概念', '以 《 大秦 帝国 之 崛起 》 为例 , 来谈 大数据 舆情 分析 和 文本挖掘', '文本 分类 算法 集锦 , 从小 白到 大牛 , 附 代码 注释 和 训练 语料', 'Social Listening 和 传统 市场调研 的 关系 是 怎样 的 ?', '【 新 媒体 运营 实操 】 如何 做出 一个 精美 的 个性化 词云', '以 哈尔滨 冰雪 大 世界 旅游 的 传播效应 为例 , 谈 数据 新闻 可视化 的 “ 魅惑 ”', '万字 干货 | 10 款 数据分析 “ 工具 ” , 助 你 成为 新 媒体 运营 领域 的 “ 增长黑客 ”', '如何 用 数据分析 , 搞定 新 媒体 运营 的 定位 和 内容 初始化 ?', '当 数据分析 遭遇 心理 动力学 : 用户 深层次 的 情感 需求 浮出 水面', '揭开 微博 转发 传播 的 规律 : 以 “ 人民日报 ” 发布 的 G20 文艺晚会 微博为 例', '数据 运营 实操 | 如何 运用 数据分析 对 某个 试运营 项目 进行 “ 无 死角 ” 的 复盘 ?', '如何 利用微 信 后台 数据 优化 微信 运营', '如何 利用 Social Listening 从 社会化 媒体 中 “ 提炼 ” 有 价值 的 信息 ?', '用 大数据 文本挖掘 , 来 洞察 “ 共享 单车 ” 的 行业 现状及 走势', '从 社交 媒体 传播 和 文本挖掘 角度 解读 《 欢乐颂 2 》', '不 懂 数理 和 编程 , 如何 运用 免费 的 大数据 工具 获得 行业 洞察 ?', '写给 迷茫 的 你 : 如何 运用 运营 思维 规划 自己 的 职业 发展 路径 ?', '如何 用 聚类分析 进行 企业 公众 号 的 内容 优化', '傅园慧 和 她 的 “ 洪荒 之力 ” 的 大数据 舆情 分析', '数据 运营 | 数据分析 中 , 文本 分析 远比 数值 型 分析 重要 ! ( 上 )'] [['数据挖掘', '实操', '文本挖掘', '剖析', '万首', '全唐诗'], ['以虎', '嗅网', '4w', '文章', '文本挖掘', '为例', '展现', '数据分析'], ['干货', '增长黑客', '外部', '数据'], ['文本挖掘', '白到', '---', '语料库', '词', '向量'], ['文本挖掘', '白到', '---', '文本', '数据', '转换'], ['文本挖掘', '白到', '---', '语料', '向量'], ['大秦', '帝国', '崛起', '为例', '来谈', '大数据', '舆情', '文本挖掘'], ['文本', '分类', '算法', '集锦', '白到', '大牛', '附', '代码', '注释', '训练', '语料'], ['social', 'listening'], ['【', '新', '运营', '实操', '】', '做出', '词云'], ['冰雪', '旅游', '传播效应', '为例', '谈', '数据', '新闻', '可视化', '魅惑'], ['万字', '干货', '10', '款', '数据分析', '工具', '助', '新', '运营', '增长黑客'], ['数据分析', '搞定', '新', '运营', '初始化'], ['数据分析', '遭遇', '心理', '动力学', '深层次', '情感', '浮出', '水面'], ['揭开', '微博', '转发', '规律', '人民日报', 'g20', '文艺晚会', '微博为', '例'], ['数据', '运营', '实操', '数据分析', '试运营', '无', '死角', '复盘'], ['利用微', '信', '数据', '微信', '运营'], ['social', 'listening', '社会化', '中', '提炼'], ['大数据', '文本挖掘', '洞察', '共享', '单车', '现状及', '走势'], ['社交', '文本挖掘', '角度', '解读', '欢乐颂'], ['懂', '数理', '编程', '大数据', '工具', '洞察'], ['写给', '迷茫', '运营', '思维', '职业', '路径'], ['聚类分析', '公众', '号'], ['傅园慧', '洪荒', '之力', '大数据', '舆情'], ['数据', '运营', '数据分析', '中', '文本', '远比', '型']]
2,用词袋模型(bag-of-words) 来提取文本特征:
dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts]
#查看词袋表示中的部分数据,以下格式都可以 #pprint(corpus) pprint(corpus[:3]) pprint(list(corpus)[:3])
[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)], [(5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1)], [(13, 1), (14, 1), (15, 1), (16, 1)]] [[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)], [(5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1)], [(13, 1), (14, 1), (15, 1), (16, 1)]]
3, 基于上面构建好的 词袋表示语料库,用LSI模型构建一个10维(只设定10个主题)的LSI向量空间。
如果语料足够多的化,主题理论上也要设定的够多,因为主题数也代表 文本数据中的特征数量,捕捉到的特征越多,就越能提升模型的效果。
该模型中另一个值得注意的一个参数是power_iters,模型中的默认设为2,设置的数值越大,模型的精确度就越高,尤其是在训练语料较少的情况下,但训练语料过多的话,加大该数值会影响模型的运行效率。
lsi = models.LsiModel(
corpus,
id2word=dictionary,
power_iters=100,
num_topics=10
)
目标:设定的检索语句为“文本挖掘在舆情口碑挖掘中的作用很大” (需做分词处理), 让结果按相似度的降序进行排列展示,也就是和查询语句相似度越高(相似度数值较大)的展示在上面。
在这里我们只是单纯的考虑文本(词汇)的显式语义相关性。 没有考虑超链接的数量、随机游走静态排名等因素,只是对布尔关键字匹配(Boolean Keyword Match)的语义扩展。
4,将被检索的语句转到LSI向量空间。
#查询语句为“文本挖掘在舆情口碑挖掘中的作用很大”
doc = "文本挖掘 在 舆情 口碑 挖掘 中 的 作用 很大 "
vec_bow = dictionary.doc2bow(doc.lower().split())
vec_lsi = lsi[vec_bow] #将查询语句转换到LSI向量空间
print('vec_lsi:',vec_lsi)
vec_lsi: [(0, 0.45051268378997816), (1, 0.5669407974068702), (2, -0.38660425054492636), (3, 0.041093992793536246), (5, -0.049997574118858336), (6, -0.033713207004954365), (7, -0.18981876694975408), (8, 0.08096728097129198), (9, 0.42814459314594866)]
#查看被检索语句在10个主题上的隶属度 result= [([i[0]],i[1]) for i in vec_lsi] pprint(sorted(result,key=lambda x: x[1], reverse=True))
[([1], 0.5669407974068708), ([0], 0.45051268378997733), ([9], 0.42814459314594744), ([8], 0.08096728097129402), ([3], 0.04109399279353676), ([6], -0.0337132070049546), ([5], -0.04999757411885904), ([7], -0.1898187669497511), ([2], -0.38660425054492603)]
5,将语料库转到LSI向量空间。并对其中的每个文档/语句建立索引,(index为每个文档与其他文档的相似度)
用余弦相似性(Cosine Similarity)来度量两个向量之间的相似性。
(0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。
两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。)
余弦相似度是向量空间建模中的标准度量,但有一种情况是不可以的 --- 当向量表示概率分布时(这在主题模型中很常见),这需要使用其他的相似性度量来完成,比如Jellinger、Kullback_leibler等距离度量方式。
index = similarities.MatrixSimilarity(lsi[corpus]) #将查询语料库转换到LSI向量空间并对其中的每个文档/语句建立索引
#内存友好型接口
#index = similarities.Similarity(output_prefix='Similarity',corpus=lsi[corpus],num_features=500) #将查询语料库转换到LSI向量空间并对其中的每个文档/语句建立索引
print(index)
#查看每个文档与其他文档的相似度
for i in index:
print(i)
MatrixSimilarity<25 docs, 10 features>
[ 0.99999994 0.3574655 -0.3150179 0.5150066 0.35447538 0.50165766 0.4199136 -0.06650232 -0.34127933 0.58983105 -0.04553736 -0.13951996 0.20992768 -0.01874979 0. 0.3713955 0.08710523 -0.3412608 0.36189455 0.75940084 -0.11811978 0.31200895 0. 0.07529241 -0.08044046] [ 0.3574655 1. -0.04532326 0.20772694 0.17268716 0.22550792 0.5891642 -0.00696298 0.20159736 -0.00225119 0.17460063 0.18820846 0.34609333 0.22464314 0. 0.1305448 -0.12709567 0.18863519 0.07349124 0.60767424 -0.2275747 -0.05888201 0. 0.03859608 0.19801357] [-0.3150179 -0.04532326 1. 0.18706797 0.4118872 0.14738917 -0.11251405 -0.05627284 0.04764918 -0.01937546 0.51608044 0.6454736 0.32558507 -0.04609713 0. 0.3029005 0.6144324 0.08676616 0.0015705 -0.10028074 0.23540643 0.1614982 0. -0.09776638 0.50653666] [ 0.5150066 0.20772694 0.18706797 1. 0.854652 0.9799884 0.14454281 0.1554681 -0.08885604 -0.05779949 -0.04395627 0.02710839 -0.0895069 -0.01940858 0. -0.01916783 0.02160218 -0.09114064 0.34369195 0.78642505 -0.02645053 -0.14624637 0. -0.17421976 0.01053962] [ 3.5447538e-01 1.7268716e-01 4.1188720e-01 8.5465199e-01 1.0000001e+00 8.7180018e-01 1.6121346e-01 3.2610056e-01 1.0174070e-01 -6.8916135e-02 2.2853950e-01 -9.1425673e-04 -2.4848969e-03 -3.0120320e-03 0.0000000e+00 2.8152165e-01 4.2155561e-01 1.3732657e-01 3.1798670e-01 5.8630687e-01 8.4218206e-03 5.3714223e-02 0.0000000e+00 -7.2874315e-02 4.3247157e-01] [ 0.50165766 0.22550792 0.14738917 0.9799884 0.8718002 1. 0.18306166 0.3440251 -0.09704561 -0.0392007 -0.0374988 0.01791717 -0.07595397 -0.0194445 0. -0.02323753 0.00386549 -0.09687725 0.3379053 0.7514216 -0.01832384 -0.13356513 0. -0.12777326 0.03490918] [ 0.4199136 0.5891642 -0.11251405 0.14454281 0.16121346 0.18306166 1. 0.03188163 0.07325006 0.01480933 0.233823 -0.03253818 0.00913738 -0.08138189 0. -0.00242282 -0.07991859 0.05787291 0.7254434 0.57784367 0.4674204 -0.01889937 0. 0.76688665 -0.01062319] [-0.06650232 -0.00696298 -0.05627284 0.1554681 0.32610056 0.3440251 0.03188163 0.99999994 -0.05008236 0.03163652 -0.00307979 -0.00852707 0.02803516 0.00382384 0. -0.02898641 -0.02885364 -0.03212991 -0.04780873 -0.09994109 -0.00159586 0.02047529 0. 0.06284442 0.16634795] [-0.34127933 0.20159736 0.04764918 -0.08885604 0.1017407 -0.09704561 0.07325006 -0.05008236 1. -0.38740298 -0.27383763 -0.07251299 -0.00555485 -0.2273154 0. -0.00448082 0.16979153 0.9957173 -0.01535013 0.03260809 -0.06882467 0.17511494 0. 0.08399867 0.5069072 ] [ 0.58983105 -0.00225119 -0.01937546 -0.05779949 -0.06891613 -0.0392007 0.01480933 0.03163652 -0.38740298 0.99999994 -0.0729425 0.3560724 0.6941956 -0.10195757 0. 0.6461676 0.4174225 -0.36475095 -0.0088396 0.07275625 -0.04792427 0.8034304 0. -0.00140221 0.16928463] [-0.04553736 0.17460063 0.51608044 -0.04395627 0.2285395 -0.0374988 0.233823 -0.00307979 -0.27383763 -0.0729425 1. -0.00696373 -0.08240919 -0.03417733 0. 0.22154057 0.38034955 -0.24079762 -0.06481304 -0.06552032 -0.03283017 -0.14453821 0. 0.0275184 0.1714978 ] [-1.3951996e-01 1.8820846e-01 6.4547360e-01 2.7108388e-02 -9.1425673e-04 1.7917169e-02 -3.2538179e-02 -8.5270721e-03 -7.2512992e-02 3.5607240e-01 -6.9637285e-03 9.9999988e-01 7.5973558e-01 1.0607928e-01 0.0000000e+00 2.4588123e-01 2.4544246e-01 -6.3634507e-02 -1.9272096e-03 -3.4937158e-02 2.7633786e-01 3.3979014e-01 0.0000000e+00 -3.1355012e-02 3.0220205e-01] [ 0.20992768 0.34609333 0.32558507 -0.0895069 -0.0024849 -0.07595397 0.00913738 0.02803516 -0.00555485 0.6941956 -0.08240919 0.7597356 1. 0.28442556 0. 0.71445465 0.4800346 0.03176139 -0.06433771 0.02959245 0.01593668 0.71638936 0. -0.0436515 0.5824491 ] [-0.01874979 0.22464314 -0.04609713 -0.01940858 -0.00301203 -0.0194445 -0.08138189 0.00382384 -0.2273154 -0.10195757 -0.03417733 0.10607928 0.28442556 1. 0. 0.27738142 -0.05160064 -0.1838712 0.0620265 -0.04949722 0.06854472 -0.20780379 0. -0.02982389 0.20631756] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0.3713955 0.1305448 0.3029005 -0.01916783 0.28152165 -0.02323753 -0.00242282 -0.02898641 -0.00448082 0.6461676 0.22154057 0.24588123 0.71445465 0.27738142 0. 1. 0.850685 0.07095417 0.0292042 0.0327251 -0.06176097 0.77880645 0. -0.00491261 0.7709021 ] [ 0.08710523 -0.12709567 0.6144324 0.02160218 0.4215556 0.00386549 -0.07991859 -0.02885364 0.16979153 0.4174225 0.38034955 0.24544246 0.4800346 -0.05160064 0. 0.850685 0.9999999 0.24393481 0.04500439 -0.09759495 0.06748053 0.721269 0. 0.02032522 0.82029957] [-0.3412608 0.18863519 0.08676616 -0.09114064 0.13732657 -0.09687725 0.05787291 -0.03212991 0.9957173 -0.36475095 -0.24079762 -0.06363451 0.03176139 -0.1838712 0. 0.07095417 0.24393481 1. -0.01189126 0.01051247 -0.06068054 0.21533647 0. 0.08596574 0.5777812 ] [ 3.6189455e-01 7.3491238e-02 1.5704979e-03 3.4369195e-01 3.1798670e-01 3.3790529e-01 7.2544342e-01 -4.7808729e-02 -1.5350127e-02 -8.8396017e-03 -6.4813040e-02 -1.9272096e-03 -6.4337708e-02 6.2026497e-02 0.0000000e+00 2.9204205e-02 4.5004394e-02 -1.1891260e-02 1.0000000e+00 4.9772909e-01 8.1966567e-01 2.3393314e-02 0.0000000e+00 8.3292800e-01 -6.4995448e-04] [ 0.75940084 0.60767424 -0.10028074 0.78642505 0.58630687 0.7514216 0.57784367 -0.09994109 0.03260809 0.07275625 -0.06552032 -0.03493716 0.02959245 -0.04949722 0. 0.0327251 -0.09759495 0.01051247 0.4977291 0.99999994 -0.01500329 -0.04191136 0. 0.10224097 -0.0472839 ] [-1.1811978e-01 -2.2757471e-01 2.3540643e-01 -2.6450528e-02 8.4218206e-03 -1.8323842e-02 4.6742040e-01 -1.5958621e-03 -6.8824671e-02 -4.7924265e-02 -3.2830168e-02 2.7633786e-01 1.5936680e-02 6.8544723e-02 0.0000000e+00 -6.1760966e-02 6.7480534e-02 -6.0680538e-02 8.1966567e-01 -1.5003287e-02 1.0000000e+00 2.3939656e-02 0.0000000e+00 8.4140825e-01 -2.7693645e-04] [ 0.31200895 -0.05888201 0.1614982 -0.14624637 0.05371422 -0.13356513 -0.01889937 0.02047529 0.17511494 0.8034304 -0.14453821 0.33979014 0.71638936 -0.20780379 0. 0.77880645 0.721269 0.21533647 0.02339331 -0.04191136 0.02393966 1. 0. 0.09631592 0.60193 ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0.07529241 0.03859608 -0.09776638 -0.17421976 -0.07287432 -0.12777326 0.76688665 0.06284442 0.08399867 -0.00140221 0.0275184 -0.03135501 -0.0436515 -0.02982389 0. -0.00491261 0.02032522 0.08596574 0.832928 0.10224097 0.84140825 0.09631592 0. 1. 0.02182046] [-8.0440462e-02 1.9801357e-01 5.0653666e-01 1.0539625e-02 4.3247157e-01 3.4909178e-02 -1.0623186e-02 1.6634795e-01 5.0690722e-01 1.6928463e-01 1.7149781e-01 3.0220205e-01 5.8244908e-01 2.0631756e-01 0.0000000e+00 7.7090210e-01 8.2029957e-01 5.7778120e-01 -6.4995448e-04 -4.7283903e-02 -2.7693645e-04 6.0193002e-01 0.0000000e+00 2.1820461e-02 1.0000001e+00]
索引持久化:
index.save(os.path.join(TEMP_FOLDER, '查询.index')) index = similarities.MatrixSimilarity.load(os.path.join(TEMP_FOLDER, '查询.index'))
上述操作对于所有相似性索引类(similarities.Similarity,similarities.MatrixSimilarity和similarities.SparseMatrixSimilarity)都是一样的。 如果你不确定使用哪个类来建立查询模型,那就请使用similarities.Similarity,因为它是最具扩展性的版本,并且它还支持后续向索引中添加更多的文档。
6, 实施查询
对给定查询文档 --- “文本挖掘在舆情口碑挖掘中的作用很大” 进行相似度查询,结果按匹配语句的相似度降序进行排序:
sims = index[vec_lsi]
print("sims",sims)
result = [(docs[i[0]],i[1]) for i in enumerate(sims)] # 对检索语料库进行相似度查询
pprint(sorted(result ,key=lambda x: x[1],reverse=True)) # 每个查询结果的格式是 (语句, 与查询语句的相似度) ,是一个2元元组
用enumerate的时候, i[0]索引号,i[1]是列表内容。
sims [ 0.47596157 0.6175433 -0.0269801 0.496497 0.5442958 0.50200826 0.7756487 0.01711617 0.4659014 -0.07489519 -0.03178594 -0.06141868 0.07121644 -0.07773104 0. 0.14953949 0.12111425 0.4622817 0.6572903 0.796812 0.23929143 0.12607747 0. 0.4789271 0.31721032]
[('从社交媒体传播和文本挖掘角度解读《欢乐颂2》', 0.796812),
('以《大秦帝国之崛起》为例,来谈大数据舆情分析和文本挖掘', 0.7756487),
('用大数据文本挖掘,来洞察“共享单车”的行业现状及走势', 0.6572903),
('以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程', 0.6175433),
('文本挖掘从小白到精通(三)---主题模型和文本数据转换', 0.5442958),
('文本挖掘从小白到精通(一)---语料、向量空间和模型的概念', 0.50200826),
('文本挖掘从小白到精通(二)---语料库和词向量空间', 0.496497),
('傅园慧和她的“洪荒之力”的大数据舆情分析', 0.4789271),
('数据挖掘实操|用文本挖掘剖析近5万首《全唐诗》', 0.47596157),
('Social Listening和传统市场调研的关系是怎样的?', 0.4659014),
('如何利用Social Listening从社会化媒体中“提炼”有价值的信息?', 0.4622817),
('数据运营|数据分析中,文本分析远比数值型分析重要!(上)', 0.31721032),
('不懂数理和编程,如何运用免费的大数据工具获得行业洞察?', 0.23929143),
('数据运营实操 | 如何运用数据分析对某个试运营项目进行“无死角”的复盘?', 0.14953949),
('写给迷茫的你:如何运用运营思维规划自己的职业发展路径?', 0.12607747),
('如何利用微信后台数据优化微信运营', 0.121114254),
('如何用数据分析,搞定新媒体运营的定位和内容初始化?', 0.07121644),
('文本分类算法集锦,从小白到大牛,附代码注释和训练语料', 0.017116172),
('揭开微博转发传播的规律:以“人民日报”发布的G20文艺晚会微博为例', 0.0),
('如何用聚类分析进行企业公众号的内容优化', 0.0),
('干货|作为一个合格的“增长黑客”,你还得重视外部数据的分析!', -0.0269801),
('以哈尔滨冰雪大世界旅游的传播效应为例,谈数据新闻可视化的“魅惑”', -0.031785935),
('万字干货|10款数据分析“工具”,助你成为新媒体运营领域的“增长黑客”', -0.06141868),
('【新媒体运营实操】如何做出一个精美的个性化词云', -0.07489519),
('当数据分析遭遇心理动力学:用户深层次的情感需求浮出水面', -0.077731036)]
余弦度量(Cosine Measure)返回的值域为<-1,1>,数值越大,表示和检索文档的相似度越高,比如返回结果中排行第一的语句的相似度最高,为0.82118684.
7,总结
以下语句并没有包含查询文档中的关键词,应该不会被标准的布尔全文搜索查找到,但为什么还是会被检索出来呢?
在应用LSI对语料进行主题建模后,这些文档间的潜在语义关联被发掘出来了,只要与主题相关的语句,即使其中包含的词汇不完全一样,比如“Social Listening”、“舆情”、“传播效应”这3个词汇,虽然直观上看起来没啥相关性,但因为内涵相近,都是涉及社交媒体数据挖掘,所以包含它们的语句也会在相似结果中进行呈现。事实上,这种语义的推断和概括是我们应用之前提及的各类文本数据转换并进行主题建模的根本原因。
8,优化
(1 )对语义的挖掘还不够。这个相似度查询还比较简陋,是硬匹配(非命中匹配关键词才行),意义相近但说法不一样的词汇的相似性还不能很好的度量,这在后面基于word2vec或者doc2vec的模型可以很好的解决;
(2) 速度有待优化。当检索的文档相当大时,这个检索系统的效率就会非常低,这时可以采用Annoy搜索算法(Approximate Nearest Neighbors Oh Yeah)来缓解。



