near-synonym, 中文反义词/近义词(antonym/synonym)工具包.
1、安装包以及相关依赖
python版本是有要求?
(huggingface_hub 在 Python 3.8+ 上经过测试,
见https://huggingface.co/docs/huggingface_hub/installation)
conda create -n py39_syn python=3.9
conda activate py39_syn
pip install --no-dependencies near-synonym(near-synonym-0.1.0)-- 不带依赖安装, 之后缺什么包再补充什么
pip install onnxruntime( onnxruntime-1.16.3 )
pip install smart_open (smart_open-7.0.5,不能pip install smart_open==4.2.0)
pip install annoy==1.17.3
pip install huggingface-hub==0.20.3
pip install numpy==1.21.6
pip install ipykernel
python -m ipykernel install --user --name=py39_syn
其他包:
pip install jieba(jieba-0.42.1)
所需包参考hmh、https://github.com/yongzhuo/near-synonym/blob/master/requirements-all.txt
onnxruntime CPU和GPU版,只能安装一个,这里安装的是cpu版本的,如果想安装gpu版本的,参考:https://blog.csdn.net/gdxb666/article/details/127575947
pip install numpy==1.21.6 pandas
这个命令会尝试安装 NumPy 1.21.6 和一个与之兼容的最新 Pandas 版本。Pip 将自动解决兼容性问题,并选择适应选定 NumPy 版本的 Pandas 版本。
2、使用与了解:
https://pypi.org/project/near-synonym/
技术详情???
near-synonym, 中文反义词/近义词工具包.
流程: Word2vec -> ANN -> NLI -> Length
Word2vec, 词向量, 使用skip-ngram的词向量;
ANN, 近邻搜索, 使用annoy检索召回;—近似最近邻搜索(ANN)领域,有很多开源的算法可以使用;
NLI, 自然语言推断, 使用Roformer-sim的v2版本, 区分反义词/近义词;
Length, 惩罚项, 词语的文本长度惩罚;
@misc{Macropodus,
howpublished = {https://github.com/yongzhuo/near-synonym},
title = {near-synonym},
author = {Yongzhuo Mo},
publisher = {GitHub},
year = {2024}
}
3、相关知识
在近似最近邻搜索(ANN)领域,有很多开源的算法可以使用,包括但不限于:
Annoy(Approximate Nearest Neighbors Oh Yeah);
ScaNN(Scalable Nearest Neighbors);
Faiss(Billion-scale similarity search with GPUs);
Hnswlib(fast approximate nearest neighbor search)
annoy
annoy构建索引:建立多颗二叉树,每颗二叉树都是随机切分的;
annoy查询方法:
- 将每一颗树的根节点插入优先队列;
- 搜索优先队列中的每一颗二叉树,每一颗二叉树都可以得到最多 Top K 的候选集;
- 删除重复的候选集;
- 计算候选集与查询点的相似度或者距离;
- 返回 Top K 的集合。
参考:https://zr9558.com/2022/01/04/annoy/