segmeaning-中文语义相似度计算程序
计算句子和句子,句子和词,词和词之间相似度的程序,perl语言编写。自带切词组件。可以排序输出N个候选词/句子中与输入词/句字 语义最相近的M句。
基于词嵌入,计算句子词袋及单个词之间余弦距离。
比如,莲花距离植物,奔驰(汽车品牌)与汽车,奥巴马与政治等等中文词。
比较多个词之间距离远近。
1.支持自定义手动修改词之间距离。
2.支持句子序列相似度计算
3.支持词-词,词-句子,句子-句子距离计算。
4.支持100万中文词。
词之间距离的抽取来源:babelnet中文部分,weibo和百科的wordvec学习后的模型词间距离抽取,百度百科词频统计,同义词词典。
词向量词典解压后为600M,含有100多万各个领域中文词。 启动后占用内存3.2G
用途:
搜索引擎中海选后的精选.在线的候选答案排序.二次排序。
计算潜在语义相似度。短文本相似度计算。词与短文本相似度计算。词与词意思相似度计算。文本相似度计算。
硬件要求:
内存:8G以上内存
硬盘:1G以上磁盘空间。
安装方法:
环境要求linux系统perl语言环境,必须要配置好cpan环境。
安装perl的库文件包,包括:
JSON::Parse
JSON
Clone
Tree::Trie
Storable
Socket
IO::Handle
IO::Select
IO::Socket::INET
每个包的安装方法是运行命令
cpan 包名字
例如安装IO::Socket::INET 运行命令: cpan IO::Socket::INET
centos或者ubuntu系统下安装 Socket IO::Handle; IO::Select Socket IO::Socket::INET POE Clone 这个几个包。
下载安装包segmeaning.tgz
解压缩后进入segmeaning目录
运行方法:
1启动服务器:
运行命令./segmeaning_server.pl &
启动时加载模型文件预计使用30秒左右,占用3.2G内存,可以启动完成。
如果开启序列相似度需要后边加上参数seq ,默认不开启,如果开启会增加计算时间。
./segmeaning_server.pl seq &
2.测试多个句子/短语,词相互之间距离
./segmeaning_client.pl simple.txt
输出:
cat 苹果 木头 奔驰 暴风雪 拖拉机 姚明 踢球 我喜欢听广播 三国演义 ------------- 水果 家具 汽车 龙卷风 乔丹 书 球鞋 新闻 看电视
1-1-0.352898202704161
1-4-1.11146528311433e-05
1-6-7.30328192678049e-06
1-1 为第一行 “苹果” 距离simple.txt文件里"---"以下的第一行 “水果” 的距离 0.352898202704161
距离的最大值为1 最小值为0.
3.测试两个句子/短语/词 之间的距离
运行命令:
./segmeaning_client.pl dist_seg_one 我爱吃的苹果 爱吃我的水果 qc
输出
0-1-0.937866430357134
如果开启序列相似度选项启动server 运行命令:
./segmeaning_client.pl dist_seg_one 我爱吃的苹果 我爱吃的水果 qc
输出:
0-1-0.938799132003485
会发现 “ 我爱吃的水果 ” ,“爱吃我的水果” 距离“我爱吃的苹果”值不同。
4.自定义词间距离
编辑more.txt
例如:
暴风雨 天气:0.2 下雨:0.12
暴风雪 天气:0.2 下雪:0.12
龙卷风 天气:0.2 刮风:0.12
踢球 体育:0.2 运动:0.18 足球:0.20
球鞋 体育:0.13 运动:0.18 足球:0.20
注意:各列之间用"\t"间隔,不是空格。每行\n回车结尾。
暴风雨 距离天气的值为0.2 可以手动调整范围是 0-0.4 0.4认为这两个词表达完全相同含义。
然后杀掉主程序 重启服务即可生效。
5.句子相似度计算时使用的切词词典
other目录下的b2bdic文件
各列之间用空格间隔
本程序基于GPL协议授权使用。作者张博email:75926462@qq.com