Similarities: a toolkit for similarity calculation and semantic search. 语义相似度计算、匹配搜索工具包,支持文本和图像,开箱即用。
bm25deep-learningimage-searchimage-similaritymatchingnlppytorchsimilaritysimilarity-searchtext-matching
.github | ||
docs | ||
examples | ||
similarities | ||
tests | ||
.gitignore | ||
CITATION.cff | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md | ||
requirements.txt | ||
setup.py |
Similarities
Similarities is a toolkit for Compute Similarity Score between texts.
相似度计算工具包,实现多种字面、语义匹配模型。
similarities实现了Word2Vec、RankBM25、BERT、Sentence-BERT、CoSENT等多种文本表征、文本相似度计算模型,并在文本语义匹配(相似度计算)任务上比较了各模型的效果。
Guide
Feature
文本向量表示模型
- Word2Vec:通过腾讯AI Lab开源的大规模高质量中文词向量数据(800万中文词轻量版) (文件名:light_Tencent_AILab_ChineseEmbedding.bin 密码: tawe)实现词向量检索,本项目实现了句子(词向量求平均)的word2vec向量表示
- SBert(Sentence-BERT):权衡性能和效率的句向量表示模型,训练时通过有监督训练上层分类函数,文本匹配预测时直接句子向量做余弦,本项目基于PyTorch复现了Sentence-BERT模型的训练和预测
- CoSENT(Cosine Sentence):CoSENT模型提出了一种排序的损失函数,使训练过程更贴近预测,模型收敛速度和效果比Sentence-BERT更好,本项目基于PyTorch实现了CoSENT模型的训练和预测
文本相似度比较方法
- 余弦相似(Cosine Similarity):两向量求余弦
- 点积(Dot Product):两向量归一化后求内积
- 词移距离(Word Mover’s Distance):词移距离使用两文本间的词向量,测量其中一文本中的单词在语义空间中移动到另一文本单词所需要的最短距离
- RankBM25:BM25的变种算法,对query和文档之间的相似度打分,得到docs的rank排序
- SemanticSearch:向量相似检索,使用Cosine Similarty + topk高效计算,比一对一暴力计算快一个数量级
Evaluate
文本匹配
- 英文匹配数据集的评测结果:
Arch | Backbone | Model Name | English-STS-B |
---|---|---|---|
GloVe | glove | Avg_word_embeddings_glove_6B_300d | 61.77 |
BERT | bert-base-uncased | BERT-base-cls | 20.29 |
BERT | bert-base-uncased | BERT-base-first_last_avg | 59.04 |
Demo
Official Demo: http://42.193.145.218/product/short_text_sim/
HuggingFace Demo: https://huggingface.co/spaces/shibing624/similarities
Install
pip3 install torch # conda install pytorch
pip3 install -U similarities
or
git clone https://github.com/shibing624/similarities.git
cd similarities
python3 setup.py install
Usage
1. 计算文本向量
2. 计算句子之间的相似度值
示例examples/semantic_text_similarity.py
句子余弦相似度值
score
范围是[-1, 1],值越大越相似。
3. 计算句子与文档集之间的相似度值
一般在文档候选集中找与query最相似的文本,常用于QA场景的问句相似匹配、文本相似检索等任务。
Score
的值范围[-1, 1],值越大,表示该query与corpus相似度越近。
Contact
- Issue(建议):
- 邮件我:xuming: xuming624@qq.com
- 微信我: 加我微信号:xuming624, 备注:姓名-公司-NLP 进NLP交流群。
Citation
如果你在研究中使用了similarities,请按如下格式引用:
@software{similarities,
title={similarities: A Tool for Compute Similarity Score},
author={Ming Xu},
url={https://github.com/shibing624/similarities},
year={2022}
}
License
授权协议为 The Apache License 2.0,可免费用做商业用途。请在产品说明中附加similarities的链接和授权协议。
Contribute
项目代码还很粗糙,如果大家对代码有所改进,欢迎提交回本项目,在提交之前,注意以下两点:
- 在
tests
添加相应的单元测试 - 使用
python setup.py test
来运行所有单元测试,确保所有单测都是通过的
之后即可提交PR。