网站建设公司知名企业/网页首页设计图片
词汇相似度计算报告
摘要 1
一、简介 2
二、工具和资源说明 5
三、实验方法 5
3.1、方法1 5
3.2、方法2 6
3.3、方法3 6
3.4、方法4 7
3.5、方法5 7
3.6、方法6 8
四、结果比较与分析 8
五、结论与讨论 12
摘要:词汇相似度计算是MLP领域最基本的任务,也是其它更上层(词语消歧、句子翻译、文章摘要)工作的基础。另一方面,从产业界的角度看,能够将词汇的相似度,特别的,尤其是词汇的语义相似度计算好,对于机器翻译、产品推荐、舆情控制、情感分析等众多应用将产生极大的促进作用,毕竟,词汇语义理解是所有这些工作的基础。词汇相似度计算需要考虑三个基本问题:第一,如何定义“共同出现”;第二,词语权重如何度量;第三,如何选择相似度计算公式。常见的词汇相似度计算方法包括:基于Word-Net的词汇关联性分析;基于Wikipedia的ESA;基于矩阵分解的LSA;基于主题模型的LDA;基于Web Search的页面共现;基于深度学习的表示学习方法等。本次试验综合考虑各种因素,采用 爬取Wikipedia关键词页面作为语料库,基于目标词tf、tfidf为特征,同时结合Linear Regression、Random Forest等有监督学习和LSA、LDA等无监督学习 的方法,进行本次试验。以斯皮尔曼相关系数为标准,通过和人工标注过的“WordSimilarity-353”数据集比较,我们所使用的方法得到的斯皮尔曼相关系数都大于零(最大为0.524),说明方法在一定程度上是可行的。通过对比不同的实验结果,我们发现:在语料库很少的情况下,使用简单的模型反而可以有较好的效果;通过LSA和LDA的使用,我们捕获到了语料库中一些有趣的Topics。另外,我们还尝试了基于Word-Net的词语相似度计算,但由于“definition”和“examples”两个函数的限制,本次试验只是用了“path_similarity”,造成很多同义词对之间相关性评估效果很差(很多词对没有path_similarity),不过算是对Word-Net的一次尝试。
先插入一个爬数据的代码:
#!usr/bin/env python
# -*-coding:utf-8 -*-import pandas as pd
import numpy as npimport urllib, urllib2
import re
from bs4 import BeautifulSoupimport sys
reload(sys)
sys.setdefaultencoding("utf8")
#for UnicodeEncodeErrordef SaveFile(content, filename):f=open("wikiData/"+filename,"a")f.write(str(content)+"\n")f.close()def SpideWiki(words):user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers={'User-Agent':user_agent}try:for i in range(len(words)):url="https://en.wikipedia.org/wiki/"+words[i]request=urllib2.Request(url, headers=headers)response=urllib2.urlopen(request)wikiHtml=response.read().decode('utf-8')html=BeautifulSoup(str(wikiHtml),"lxml")div=html.find(name='div', id='mw-content-text')ps=div.find_all(name='p', limit=3, recursive=False) #only direct childrenfor p in ps:pText=p.get_text()SaveFile(pText, words[i])print words[i], "process over...", "=="*20except urllib2.URLError, e:if hasattr(e,"code"):print e.codeif hasattr(e,"reason"):print e.reasondata=pd.read_csv("combined.csv")
wordsList=np.array(data.iloc[:,[0,1]])
for words in wordsList:print words[0], words[1]SpideWiki(words)
一、简介
词汇相似度计算是MLP领域最基本的任务。
词汇相似度计算需要考虑三个基本问题:第一,如何定义“共同出现”,常用的方法包括基于窗口和基于句法结构,基于句法结构往往需要进行句法分析,从中提取词汇间的依存关系,对语料库的要求比较大,基于窗口的方法只需要分析在关键词窗口范围内的左右词汇即可,所以本文采用基于窗口的方式进行试验;第二,词语权重如何度量,常用的方法包括基于TF、基于TFIDF、MI以及第一层计算的基础上取log等平滑函数的方式,由于基于TF、TFIDF的方式对于词汇提取来说最直接,所以本文采用这两种方式交互实验(根据不同的方法采用更适合的权重度量方式);第三,如何选择相似度计算公式,常用的方法包括基于Cosine Similarity、Euclidean distance Similarity,由于这两者都比较直观,所以本文采用这两种相似度计算方式进行试验。(相关细节参考课件“第三讲”)
从实验方法上来看,常见的有以下几种:第一,基于维基百科的词汇关系提取方法,这类方法将维基百科看作是“语义词典”,从中可以提取出词汇之间的多种关系,但这种方法需要分析页面的超链接情况,对于少量的数据集不足以提供有效的信息,所以本文没有使用该方法;第二,基于维基百科的直接语义分析(ESA)方法,这种方法将维基百科作为语料库,进行统计分析,由于比较简单,本文采取该方法,具体过程参考图1;第三,隐含语义分析方法(Latent Semantic Analysis,LSA),该方法假设语料库(词汇特征)已经存在,那么,如何不依赖显示语义概念,而是通过自动挖掘隐含的语义概念来实现词汇相似度计算成为关键,常见的方法是基于矩阵分解,本质上是对词语*文档矩阵进行低秩逼近,从而使词语与文档能够被隐含语义空间中的向量表示,具体过程参考图2、图3、图4。第四,在LSA的基础上发展而来的主题模型挖掘,最有代表的是PLSI和LDA,主题模型的基本假设是“文档是基于主题(topics)的分布,主题是基于词语(term)的分布”,本质上仍然是使词语与文档能够被隐含语义空间中的向量表示,不过不再采用基于矩阵分解的方法,而是使用吉布斯采样的方法来产生词汇和文档。第五,基于Web Search的词汇语义计算 ,这种方法通过web search的返回结果中包含第一个词的页面数、包含第二个词的页面数、同时包含两个词的页面数之间的关系来完成词汇语义计算,具体计算方式参考图5、图6、图7。第六,其它的方法还包括基于机器学习的分类方法,基于深度学习的表示学习方法等,这些方法一般基于生语料,并且基于一定的假设构造优化目标与目标函数,然后通过算法求解获得词语的向量表示,此处不再一一赘述。
图 1
图 2
图 3
图 4
图 5:Page-count-based Similarity Scores (co-occurrence measures)
图 6:Google Distance
图 7:Co-Occurrence Double-Check
二、工具和资源说明
数据:本次试验采用的数据集来自“WordSimilarity-353”和从Wikipedia上爬去的相关词汇的页面介绍。
外部库:本次试验主要采用python语言编码,使用到的外部库包括,爬虫相关库urllib、urllib2、BeautifulSoup、re;数据预处理库pandas、sklearn;科学计算库numpy;模型训练库sklearn。另外,在基于WordNet的词汇相似度计算中,还是用了NLTK等工具。
三、实验方法
3.1、方法1
无监督学习方法,基于tfidf特征的直接余弦相似度计算方法。
主要步骤包括:
1、从Wikipedia上爬去的数据中提取词汇库
2、计算每个目标词的tfidf特征
3、直接比较两个目标词的tfidf特征在余弦相似度上的近似程度
4、计算人工标注的相似度和建模得到的相似度的Spearman's rank correlation coefficient
最终结果:correlation=0.52393888214417017, pvalue=3.2916148828666485e-26
3.2、方法2
有监督学习方法,基于tfidf特征,使用线性模型对第一个数据集的直接余弦相似度进行回归,并用模型预测第二个数据集。
主要步骤包括:
1、从Wikipedia上爬去的数据中提取词汇库
2、计算每个目标词的tfidf特征
3、使用linear regression对第一个数据集的直接余弦相似度进行回归,并通过该模型预测第二个数据集
4、使用linear regression对第二个数据集的直接余弦相似度进行回归,并通过该模型预测第一个数据集
5、合并两个数据集的预测结果,并计算人工标注的相似度和建模得到的相似度的Spearman's rank correlation coefficient
最终结果:correlation=0.52393888214417017, pvalue=3.2916148828666485e-26
3.3、方法3
有监督学习方法,基于tfidf特征,使用随机森林模型对第一个数据集的每个特征间的欧拉距离进行回归,并用模型预测第二个数据集。
主要步骤包括:
1、从Wikipedia上爬去的数据中提取词汇库
2、计算每个目标词的tfidf特征
3、使用random forest对第一个数据集的欧拉距离进行拟合,并通过该模型预测第二个数据集
4、使用random forest对第二个数据集的欧拉距离进行拟合,并通过该模型预测第一个数据集
5、合并两个数据集的预测结果,并计算人工标注的相似度和建模得到的相似度的Spearman's rank correlation coefficient
最终结果:correlation=0.52393888214417017, pvalue=3.2916148828666485e-26
3.4、方法4
无监督学习方法,基于tfidf特征,使用Non-Negative Matrix Factorization(NMF)模型对tfidf特征进行矩阵分解,找到对应的低秩矩阵表示,然后可以使用上面的任何方法在新的特征空间上进行试验。
主要步骤包括:
1、从Wikipedia上爬去的数据中提取词汇库
2、计算每个目标词的tfidf特征
3、使用NMF模型对tfidf特征进行矩阵分解,找到对应的低秩矩阵表示
4、使用新的特征空间上的直接余弦相似度来计算两个目标词间的相似度
5、计算人工标注的相似度和建模得到的相似度的Spearman's rank correlation coefficient
最终结果:
#topicNum=13==>(correlation=0.14807464127878558, pvalue=0.0053758349713213197)
#topicNum=50==>(correlation=0.30352057165818441, pvalue=6.1741769045735979e-09)
#topicNum=150==>(correlation=0.23560824196411267, pvalue=7.9053458357320167e-06)
#topicNum=300==>(correlation=0.27539680596714705, pvalue=1.5177241286511083e-07)
3.5、方法5
无监督学习方法,基于tf特征,使用Latent Dirichlet Allocation(LDA)模型对tf特征进行矩阵分解,找到对应的低秩矩阵表示,然后可以使用上面的任何方法在新的特征空间上进行试验。
主要步骤包括:
1、从Wikipedia上爬去的数据中提取词汇库
2、计算每个目标词的tf特征
3、使用LDA模型对tf特征进行矩阵分解,找到对应的低秩矩阵表示
4、使用新的特征空间上的直接余弦相似度来计算两个目标词间的相似度
5、计算人工标注的相似度和建模得到的相似度的Spearman's rank correlation coefficient
最终结果:
#topicNum=13==>(correlation=0.39139819981311158, pvalue=2.4701407972327766e-14)
#topicNum=50==>(correlation=0.4510370656919146, pvalue=4.835559946366228e-19)
#topicNum=150==>(correlation=0.3697711467955469, pvalue=7.5821927491106906e-13)
#topicNum=300==>(correlation=0.35308044929118226, pvalue=8.9925565590761668e-12)
3.6、方法6
无监督学习方法,基于Word-Net,使用path_similarity对两个词的相似度进行计算。
主要步骤包括:
1、安装NLTK,下载Word-Net语料库
2、提取每一对目标词汇在word-net中的同义词集
3、对同义词集中词汇的每种组合,计算两者的path_similarity,并计入总的similarity score中
4、计算平均similarity score
5、计算人工标注的相似度和建模得到的相似度的Spearman's rank correlation coefficient
最终结果:(correlation=0.3136469783526708, pvalue=1.6943792485183932e-09)
六、参考文献
[1] 课件第三讲
[2] http://www.cs.technion.ac.il/~gabr/resources/data/wordsim353/
[3] https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient
[4] http://scikit-learn.org/stable/index.html
[5] http://www.nltk.org/
[6] http://wordnet.princeton.edu/