当前位置 博文首页 > berry_K的博客:[+] 词汇相似度计算
任务:实现5种词汇相似度计算方法。
数据:wordsim353
评价方法:Spearman’s rank correlation coefficient
环境:Ubuntu?服务器(4 Intel(R) Xeon(R) CPU E5-2609 v3?@1.90GHz),Anacanda2.4(64-bit),python2.7
基本方法:(1)基于语义词典(Wordnet)的词汇相似度(2)word2vec训练得到词汇向量计算相似度(3)lda训练得到词汇向量计算相似度(4)利用GoogleNews语料得到词汇相似度模型(5)利用Google搜索结果计算相似度。
方法:?调用python的工具包nltk,?其中包含了wordnet词典。基于词汇的层次结构计算相似度。其中词汇相似度采用词汇所有语义相似度的最大值。
????基于上位词层次结构中相互连接的概念之间的最短路径的打分。同义词集与自身比较将返回最大值。
path_similarity(sense1,sense2) #?词在词典层次结构中的最短路径
wup_similarity(sense1,?sense2) # Wu-Palmer?提出的最短路径
lch_similarity(sense1,sense2) # Leacock Chodorow?最短路径加上类别信息
res_similarity(sense1,?sense2,?brown_ic) # -log?P(LCS(c1,c2))
jcn_similarity(sense1,?sense2,?brown_ic) # 1/(IC(s1)?+?IC(s2)?-?2?*?IC(lcs))
lin_similarity(sense1,?sense2,?semcor_ic) # 2?*?IC(lcs)?/?(IC(s1)?+?IC(s2))
执行:>>python?wordSimByWordNet.py?
主要思想:利用英文维基百科语料库训练得到word-embedding(词向量),然后计算词汇相似度,分别采用了Word2vec和LDA训练得到词汇向量。
具体方法如下:
(1)获取英文wikipedia数据(压缩后的12G):
>>?wget http://download.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz
(2)解压缩wikipedia数据(解压缩后53G),并利用WikiExtractor(Python?写的一个维基百科抽取器)抽取文本内容。
>>bunzip2?enwiki-latest-pages-articles.xml.bz
>>python WikiExtractor.py –cb 1000M -o extracted enwiki-latest-pages-articles.xml
参数?-b1000M?表示以?1000M?为单位切分文件,默认是?1M。
(3)提取文本内容
>>?WikiExtractor.py -cb 250K -o extracted enwiki-latest-pages-articles.xml.bz
(4)解压后将文本内容合并到一个文件中(合并后17G)
>>bash mergeWikiCorpus.sh
考虑到语料库太大,实验资源有限,随机抽取了2.4G文本内容(mergeData.txt)作为最终的语料库。
由于语料库中存在部分中文,空行,xml标记等无意义信息,需要对数据进行预处理:去除中文,空行和xml标记等。
>>python?word2vectorPreprocess.py
处理完后得到1.6G,6779664条信息,作为word2vec的输入文件:word2vecInput.txt。
资源:Google word2vec?https://code.google.com/p/word2vec/
>>?word2vecStart.sh
time?./word2vec?-train?/home/xilian/wordSim/wikiDump/word2vecInput.txt?-output?/home/xilian/wordSim/wikivectors.txt?-cbow?1?-size?200?-window?8?-negative?25?-hs?0?-sample?1e-4?-threads?20?-binary?0?-iter?100
?
?-train word2vecInput.txt??表示的是输入文件,
-output wikivectors.txt?表示输出文件,
-cbow 0表示不使用cbow模型,默认为Skip-Gram模型
-size 200?每个单词的向量维度是200,
-window 8?训练的窗口大小为8就是考虑一个词前8个和后8个词语,
-negative 25 -hs 0使用NEG方法,不使用HS方法,
-sampe