作文中自相似分析迷之相似是什么意思思

I Love Natural Language Processing
我们介绍了一些背景知识以及 , 相信很多同学已经尝试过了。这一节将从gensim最基本的安装讲起,然后举一个非常简单的例子用以说明如何使用gensim,下一节再介绍其在上的应用。
二、gensim的安装和使用
gensim依赖和这两大Python科学计算工具包,一种简单的安装方法是pip install,但是国内因为网络的缘故常常失败。所以我是下载了gensim的源代码包安装的。gensim的这个很详细的列举了兼容的Python和NumPy, SciPy的版本号以及安装步骤,感兴趣的同学可以直接参考。下面我仅仅说明在Ubuntu和Mac OS下的安装:
1)我的VPS是64位的Ubuntu 12.04,所以安装numpy和scipy比较简单”sudo apt-get install python-numpy python-scipy”, 之后解压gensim的安装包,直接“sudo python setup.py install”即可;
2)我的本是macbook pro,在mac os上安装numpy和scipy的源码包废了一下周折,特别是后者,一直提示fortran相关的东西没有,google了一下,发现很多人在mac上安装scipy的时候都遇到了这个问题,最后通过homebrew安装了gfortran才搞定:“brew install gfortran”,之后仍然是“sudo python setpy.py install” numpy 和 scipy即可;
gensim的官方非常详细,英文ok的同学可以直接参考。以下我会按自己的理解举一个例子说明如何使用gensim,这个例子不同于gensim官方的例子,可以作为一个补充。上一节提到了一个文档: , 这个例子的来源就是这个文档所举的3个一句话doc。首先让我们在命令行中打开python,做一些准备工作:
>>> from gensim import corpora, models, similarities
>>> import logging
>>> logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, )
然后将上面那个文档中的例子作为文档输入,在Python中用document list表示:
>>> documents = [“Shipment of gold damaged in a fire”,
… “Delivery of silver arrived in a silver truck”,
… “Shipment of gold arrived in a truck”]
正常情况下,需要对英文文本做一些预处理工作,譬如去停用词,对文本进行tokenize,stemming以及过滤掉低频的词,但是为了说明问题,也是为了和这篇”LSI Fast Track Tutorial”保持一致,以下的预处理仅仅是将英文单词小写化:
>>> texts = [[word for word in document.lower().split()] for document in documents]
>>> print texts
[[‘shipment’, ‘of’, ‘gold’, ‘damaged’, ‘in’, ‘a’, ‘fire’], [‘delivery’, ‘of’, ‘silver’, ‘arrived’, ‘in’, ‘a’, ‘silver’, ‘truck’], [‘shipment’, ‘of’, ‘gold’, ‘arrived’, ‘in’, ‘a’, ‘truck’]]
我们可以通过这些文档抽取一个““,将文档的token映射为id:
>>> dictionary = corpora.Dictionary(texts)
>>> print dictionary
Dictionary(11 unique tokens)
>>> print dictionary.token2id
{‘a’: 0, ‘damaged’: 1, ‘gold’: 3, ‘fire’: 2, ‘of’: 5, ‘delivery’: 8, ‘arrived’: 7, ‘shipment’: 6, ‘in’: 4, ‘truck’: 10, ‘silver’: 9}
然后就可以将用字符串表示的文档转换为用id表示的文档向量:
>>> corpus = [dictionary.doc2bow(text) for text in texts]
>>> print corpus
[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)], [(0, 1), (4, 1), (5, 1), (7, 1), (8, 1), (9, 2), (10, 1)], [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (10, 1)]]
例如(9,2)这个元素代表第二篇文档中id为9的单词“silver”出现了2次。
有了这些信息,我们就可以基于这些“训练文档”计算一个TF-IDF“模型”:
>>> tfidf = models.TfidfModel(corpus)
18:58:15,831 : INFO : collecting document frequencies
18:58:15,881 : INFO : PROGRESS: processing document #0
18:58:15,881 : INFO : calculating IDF weights for 3 documents and 11 features (21 matrix non-zeros)
基于这个TF-IDF模型,我们可以将上述用词频表示文档向量表示为一个用tf-idf值表示的文档向量:
>>> corpus_tfidf = tfidf[corpus]
>>> for doc in corpus_tfidf:
[(1, 0.4505), (2, 0.4505), (3, 0.8463), (6, 0.8463)]
[(7, 0.56623), (8, 0.3605), (9, 0.721), (10, 0.56623)]
[(3, 0.5), (6, 0.5), (7, 0.5), (10, 0.5)]
发现一些token貌似丢失了,我们打印一下tfidf模型中的信息:
>>> print tfidf.dfs
{0: 3, 1: 1, 2: 1, 3: 2, 4: 3, 5: 3, 6: 2, 7: 2, 8: 1, 9: 1, 10: 2}
>>> print tfidf.idfs
{0: 0.0, 1: 1....0, 5: 0.0, 6: 0.....1562}
我们发现由于包含id为0, 4, 5这3个单词的文档数(df)为3,而文档总数也为3,所以idf被计算为0了,看来gensim没有对分子加1,做一个平滑。不过我们同时也发现这3个单词分别为a, in, of这样的介词,完全可以在预处理时作为停用词干掉,这也从另一个方面说明TF-IDF的有效性。
有了tf-idf值表示的文档向量,我们就可以训练一个LSI模型,和中的例子相似,我们设置topic数为2:
>>> lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=2)
>>> lsi.print_topics(2)
19:15:26,467 : INFO : topic #0(1.137): 0.438*”gold” + 0.438*”shipment” + 0.366*”truck” + 0.366*”arrived” + 0.345*”damaged” + 0.345*”fire” + 0.297*”silver” + 0.149*”delivery” + 0.000*”in” + 0.000*”a”
19:15:26,468 : INFO : topic #1(1.000): 0.728*”silver” + 0.364*”delivery” + -0.364*”fire” + -0.364*”damaged” + 0.134*”truck” + 0.134*”arrived” + -0.134*”shipment” + -0.134*”gold” + -0.000*”a” + -0.000*”in”
lsi的物理意义不太好解释,不过最核心的意义是将训练文档向量组成的矩阵SVD分解,并做了一个秩为2的近似SVD分解,可以参考那篇英文tutorail。有了这个lsi模型,我们就可以将文档映射到一个二维的topic空间中:
>>> corpus_lsi = lsi[corpus_tfidf]
>>> for doc in corpus_lsi:
[(0, 0.78649), (1, -0.55917)]
[(0, 0.97727), (1, 0.39041)]
[(0, 0.92647)]
可以看出,文档1,3和topic1更相关,文档2和topic2更相关;
我们也可以顺手跑一个LDA模型:
>>> lda = models.LdaModel(copurs_tfidf, id2word=dictionary, num_topics=2)
>>> lda.print_topics(2)
19:44:40,026 : INFO : topic #0: 0.119*silver + 0.107*shipment + 0.104*truck + 0.103*gold + 0.102*fire + 0.101*arrived + 0.097*damaged + 0.085*delivery + 0.061*of + 0.061*in
19:44:40,026 : INFO : topic #1: 0.110*gold + 0.109*silver + 0.105*shipment + 0.105*damaged + 0.101*arrived + 0.101*fire + 0.098*truck + 0.090*delivery + 0.061*of + 0.061*in
lda模型中的每个主题单词都有概率意义,其加和为1,值越大权重越大,物理意义比较明确,不过反过来再看这三篇文档训练的2个主题的LDA模型太平均了,没有说服力。
好了,我们回到LSI模型,有了LSI模型,我们如何来计算文档直接的相思度,或者换个角度,给定一个查询Query,如何找到最相关的文档?当然首先是建索引了:
>>> index = similarities.MatrixSimilarity(lsi[corpus])
19:50:30,282 : INFO : scanning corpus to determine the number of features
19:50:30,282 : INFO : creating matrix for 3 documents and 2 features
还是以这篇英文tutorial中的查询Query为例:gold silver truck。首先将其向量化:
>>> query = “gold silver truck”
>>> query_bow = dictionary.doc2bow(query.lower().split())
>>> print query_bow
[(3, 1), (9, 1), (10, 1)]
再用之前训练好的LSI模型将其映射到二维的topic空间:
>>> query_lsi = lsi[query_bow]
>>> print query_lsi
[(0, 1.8467), (1, 0.49593)]
最后就是计算其和index中doc的余弦相似度了:
>>> sims = index[query_lsi]
>>> print list(enumerate(sims))
[(0, 0.), (1, 0.), (2, 0.)]
当然,我们也可以按相似度进行排序:
>>> sort_sims = sorted(enumerate(sims), key=lambda item: -item[1])
>>> print sort_sims
[(1, 0.), (2, 0.), (0, 0.)]
可以看出,这个查询的结果是doc2 > doc3 > doc1,和fast tutorial是一致的,虽然数值上有一些差别:
好了,这个例子就到此为止,下一节我们将主要说明如何基于gensim计算上课程之间的主题相似度,同时考虑一些改进方法,包括借助英文的自然语言处理工具包以及用更大的维基百科的语料来看看效果。
未完待续…
注:原创文章,转载请注明出处“”:
本文链接地址:
此条目发表在, , 分类目录,贴了, , , , , , , , , , , , , , , , , , , , , 标签。将加入收藏夹。
Pingback引用通告:
NLP相关网站
本站架设在
上, 采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.这是个机器人猖狂的时代,请输一下验证码,证明咱是正常人~The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.您现在的位置:
& & 独特中的自我_400字
独特中的自我_400字
精粹APP,写作提升无忧!
作者:& | & 四年级&&
19人浏览了这篇文章
面容憔悴,身材匀称,衣着朴素大方;独特中的自我雄心壮志,坚忍不拔;独特中的自我性情直爽,襟怀坦荡。独特中的自我向往光芒四射的烈日;独特中的自我陶醉于光芒万丈的朝霞;独特中的自我沉浸于落漫天穹的辉煌。坚信,独特中的自我要像一块不可动摇的礁石勇敢正直。追求,独特中的自我要像钢铁那样坚忍不拔。希望,独特中的自我平易近人。小鸟在湛蓝的天空中自由地飞翔,独特中的自我也在坎坷的人生中挑战未来。展开自己轻快的翅膀,去寻找自己远大的理想,迈开轻盈的脚步,走向世界,走向未来,让心灵去拥抱,让双手去创造,创造出属于自己的天空。我相信,独特中的自我是辉煌灿烂的。“人有悲欢离合,月有阴晴圆缺,此事古难全,但愿人长久,千里共婵娟。。。。。。”独特中的自我没有伤心的泪水,只有永恒的微笑。因为我已经不是两三岁的孩童那样饿了要吵,病了要哭,不舒服了要闹。独特中的自我已经是少年了,自古英雄出少年,我需要坚强,要像钢铁那样坚忍不拔。这才是独特中的自我。飞过遥远的天空,踏过美丽的田野,去寻找独特中的自我。
查字典专稿内容,转载请注明出处
来源链接:/zuowen22251/
最新推荐:
最新推荐:
最新推荐:
最新推荐:
考试类型:
作文类型:
最新推荐:
最新推荐:
最新推荐:
最新稿费提现申请
同体裁的其他文章2012材料作文审题_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
2012材料作文审题
上传于||暂无简介
大小:854.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 分析纯ar是什么意思 的文章

 

随机推荐