毕业设计:基于CNN和词向量的句子相似性度量
注意:因为要计算WMD距离所以需要安装依赖库pyemd
开发环境
Anaconda + Pycharm
项目说明
按照老师要求复现论文(论文提出了一个新概念'相似元',通过相似元来计算两个句子的相似度‘),同时参考WMD以及论文中提到的WJ算法实现三个算法的比较
毕业设计主要针对于句子相似度的计算,尤其是长句相似度,使用GoogleNews预训练的模型
GoogleNews-vectors-negative300.bin
TODO
由于项目只实现了GoogleNews预训练模型中有的单词的句子相似度,没有拓展到中文
- 将相似度的计算拓展到中文
- 可以进行多个预训练模型的选择,而非GoogleNews
- 使用FAISS 框架优化相似向量的搜索
数据来源
存放于本项目DataSet下
项目运行
- 配置config.json文件:model_path用于存放预训练模型存放的路径;dataset_path用于存放最后作实验评估的数据集存放的路径
- 从main.py开始运行,首先要点击初始化按钮加载预训练模型
- 在句子1和句子2处输入要计算相似度的句子
- 计算结果显示在 相似度,WJ,WMD距离三个地方
- 可以每次换一个句子,并点击计算
- 计算完成,点击退出
结论验证
参考资料
- WMD算法以及WJ算法参考
- Word2Vec中的sentence_similarity方法出处
- 理论依据
- From Word Embeddings To Document Distances -- Matt J. Kusner等
代码结构
毕业设计源代码存放于GraduationDesign下,这里没有提到的代码文件均已过时,请以最新的代码为准
.
├── GraduationDesign
│ ├── main.py 项目运行点
│ ├── SSFN_V6_02 第6版:实现功能的垂直分割,同时实现三个算法的实验评估
│ │ ├── Methods
│ │ │ ├── SSFN
│ │ │ │──── └── SSF_V3.py 复现论文中的SSF函数
│ │ │ ├── WJ
│ │ │ │──── └── wj_similarity.py 论文中的比对方法:计算两个句子的余弦相似度
│ │ │ ├── WMD
│ │ │ │──── └── wmd_distance.py 论文中的比对方法2:计算两个句子的WMD距离
│ │ │ ├── Word2Vec.py 加载并使用GoogleNews预训练的模型进行计算
│ │ ├── util
│ │ │ │──── └── util.py 工具模块,实现词语权重计算,模型的加载等
│ │ ├── view
│ │ │ │──── └── view_data.py 使用PyQt5编写界面
│ │ ├── datahelper
│ │ │ │──── └── data_process.py 对实验评估数据集的处理
│ │ ├── experiment_show
│ │ │ │──── └── result_img.py 三种实验方法比对并在本地生成最后的比对结果图