短文本相似度

chenhaiyang 6173b32f69 add upgrade command into README hace 4 años
sim ebaf76ec46 support non-Chinese. version 1.1.0 hace 4 años
tests ebaf76ec46 support non-Chinese. version 1.1.0 hace 4 años
.gitignore dd0b96c360 ignore PyCharm configuration file hace 4 años
LICENSE f7c810a2bf Initial commit hace 4 años
MANIFEST.in cace0e3b8c add packe settings hace 4 años
README.md 6173b32f69 add upgrade command into README hace 4 años
setup.py ebaf76ec46 support non-Chinese. version 1.1.0 hace 4 años

README.md

sim-dict

简介 Introduction

sim-dict 是一个计算文本相似度的模块,支持词语、短文本、长文本相似度计算;对中文字符提供包含语义的相似度计算,非中文字符只支持字符层面的相似度计算。

快速上手 Getting Started

>>> from sim.text_sim import get_similarity
>>> get_similarity('环境算法实现', '温度控制策略')
0.7166666666666667

入门 Basics

环境准备 Prerequisite

建议使用 virtualenv 创建虚拟环境作为开发和生产环境,virtualenv 是用来为应用创建一套“隔离”的 Python 运行环境的工具。

首先,用 pip 安装 virtualenv

$ pip3 install virtualenv

假如我们要开发一个新的项目,需要一套独立的 Python 运行环境,可以这么做:

第一步,创建目录:

~ mkdir myproject
~ cd myproject

第二步,创建一个独立的 Python 运行环境,命名为 venv:

~/myproject virtualenv -p /usr/bin/python venv
Running virtualenv with interpreter /usr/bin/python
Already using interpreter /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
New python executable in /Users/highing/code/python/test/venv/bin/python
Installing setuptools, pip, wheel...
done.

参数 p 用来指定创建环境使用的 Python 解释器的路径,比如我们要使用 Python 3.8 版本的虚拟环境,可以用版本为 3.8 的解释器路径来替 代 -p 后边的参数,这样创建的环境也就是 Python 3.8 了

命令 virtualenv 就可以创建一个独立的 Python 运行环境,新建的 Python 环境就被放到当前目录下的 venv 目录。我们可以通过 source 命令进入环境

~/myproject source venv/bin/activate
(venv) ~/myproject

安装 Installation

sim-dict 目前已经被打包放在公司的私服仓库了,我们可以在创建好的虚拟环境安装它

(venv) ~/myproject pip install short-text-sim -i http://dev.dp.sagacloud.cn:8082/repository/saga-pypi-group/simple --trusted-host dev.dp.sagacloud.cn

上述命令可以加上 --upgrade 参数完成更新操作。

进阶篇 Advanced

在 sim-dict 实现的文本相似度计算方法中,大概分为分词、词相似度计算、文本相似度计算三个步骤。

关于词林

「同义词词林」是梅家驹等人与 1983 年词林编撰完成的,后经哈工大更新扩展,sim-dict 是在扩展版基础上实现的。 词林根据词语的含义、类型、词性将所收录的汉语词分为了 12 大类,从大到小一共五层,第五层成为原子词群,意为不可再分,每个原子词群都有一个五层结构的编码,比如 Aa01C02=。

词相似度计算

根据词林建立一个「词——编码」的哈希表,通过这样的哈希表,就可以查询词的编码。获取两个待计算相似度词的编码,对比两个编码,根据匹配程度计算相似度。编码具有五个层级, 从大到小匹配得分分别为 3,3,2,1,1,总分为 10 分,匹配累计得分与总分的比值即为相似度。

文本相似度计算

将两个待计算相似度的文本进行分词操作,我们这里用的分词工具是结巴分词。根据分词结构计算词相似度,得到如下的词相似度矩阵 分别获取该矩阵每行、每列的最大值的均值,计算这两个平均值的均值,即为这两个文本的相似度。

- 环境 算法 实现
温度 0.4 0.3 0.2
控制 0.1 0.3 0.4
策略 0.4 0.6 0.2

更新词林

往词林是添加新词(词林未收录的词)没有明确统一的方法,主要基于个人对于词林对理解,下边是我们常用的思路。

对于一个新词,尝试列举它的同义词、近义词,如果它的同/近义词在词林里,那么将该新词直接放在它的同/近义词所在的原子词群即可,这样通过词林计算二者相似度的时候即可得到最高的分数, 与我们认为的二者是同义/近义是相符的。

如果无法列举该词合适的同/近义词,或者该词的同/近义词未被词林收录,我们要尝试总结该词的类型、词性、词义,并根据词林分类的逻辑,将其放入合适的词群或者建立新的词群和与之对应的编码。 比如“空调主机”要放在第一大类“物”里,第二大类“机具”里,第三类“机器 工具 泵”里……

如果该词是多义的,对于每一个词义,按照上述逻辑分别执行添词操作即可。

由于基于词林方法的性质,即通过人的理解将词分类,并以此为基础进行词、句相似度的计算,所以目前来说无法通过机器自动完成新词添加操作,这也是这种方法维护最为繁琐的地方。

附录 Appendix

基于同义词词林的词语相似度计算方法

Final_word_Similarity