Synonyms
Chinese Synonyms for Natural Language Processing and Understanding.
最好的中文近义词库。
最近需要做一个基于知识图谱的检索,但是因为知识图谱中存储的都是标准关键词,所以需要对用户的输入进行标准关键词的匹配。目前很缺乏质量好的中文近义词库,于是便考虑使用word2vec训练一个高质量的同义词库将"非标准表述" 映射到 "标准表述",这就是Synonyms的起源。
在经典的信息检索系统中,相似度的计算是基于匹配的,而且是Query经过分词后与文档库的严格的匹配,这种就缺少了利用词汇之间的“关系”。而word2vec使用大量数据,利用上下文信息进行训练,将词汇映射到低维空间,产生了这种“关系”,这种“关系”是基于距离的。有了这种“关系”,就可以进一步利用词汇之间的距离进行检索。所以,在算法层面上,检索更是基于了“距离”而非“匹配”,基于“语义”而非“形式”。
下面我们来仔细聊聊Synonyms(https://github.com/huyingxi/Synonyms)。
首先需要语料,我们采用了开放的大规模中文语料——维基百科中文语料。
(1)下载维基百科中文语料。
(2)繁简转换。
(3)分词。
具体操作访问wikidata-corpus
使用gensim自带的word2vec包进行词向量的训练。
(1)下载gensim。
(2)输入分词之后的维基语料进行词向量训练。
(3)测试训练好的词的近义词。
具体操作访问
wikidata-corpus
gensim.word2vec官方文档
安装
pip install -U synonyms
API接口
synonyms.nearby
获取近义词列表及对应的分数
import synonyms
print("人脸: %s" % (synonyms.nearby("人脸"))) # 获取近义词
print("识别: %s" % (synonyms.nearby("识别")))
print("NOT_EXIST: %s" % (synonyms.nearby("NOT_EXIST")))
synonyms.nearby(WORD)返回一个list,list中包含两项:[[nearby_words], [nearby_words_score]],nearby_words是WORD的近义词们,也以list的方式存储,并且按照距离的长度由近及远排列,nearby_words_score是nearby_words中对应位置的词的距离的分数,分数在(0-1)区间内,越接近于1,代表越相近。
人脸: [['图片', '图像', '通过观察', '数字图像', '几何图形', '脸部', '图象', '放大镜', '面孔', 'Mii'], [0.597284, 0.580373, 0.568486, 0.535674, 0.531835, 0.530095, 0.525344, 0.524009, 0.523101, 0.516046]]
识别: [['辨识', '辨别', '辨认', '标识', '鉴别', '标记', '识别系统', '分辨', '检测', '区分'], [0.872249, 0.764099, 0.725761, 0.702918, 0.68861, 0.678132, 0.663829, 0.661863, 0.639442, 0.611004]]
synonyms.compare
获得两个句子的相似度
sen1 = "旗帜引领方向"
sen2 = "道路决定命运"
assert synonyms.compare(sen1, sen2) == 0.0, "the similarity should be zero"
sen1 = "发生历史性变革"
sen2 = "取得历史性成就"
assert synonyms.compare(sen1, sen2) > 0, "the similarity should be bigger then zero"
返回值:[0-1],并且越接近于1代表两个句子越相似。
详细的文档。
场景
- 推荐。将用户输入进行近义词分析,可以推荐给用户相关的关键词。
- 搜索。将用户非标准化输入转换为标准化输入,进而进行数据库/知识库检索。
- 相似度计算。解决在自然语言处理任务中常见的词语语义相似度计算问题。
Why Synonyms
1、准确率高。
从上面的示例可以看到synonyms作为开放领域的同义词库,已经有较优的表现。
2、快速使用。
即安即用,方便开发者直接调用。
3、方便搭建。
作者
给 Synonyms 点赞。
博主,你好,请问一个环境是在ubuntu中搭建的吗?
[回复]
语料大小多少?
[回复]
hain 回复:
26 10 月, 2017 at 17:56
没有具体看是多少,好像有文章介绍这个语料库,有四千万的文本正文,可以在https://github.com/Samurais/wikidata-corpus库里找到更多处理wikidata的脚本。我最近不在那个训练环境旁。
[回复]
jabari 回复:
26 1 月, 2018 at 14:46
https://github.com/Samurais/wikidata-corpus 这个库貌似不存在了。有更新库的地址吗?
[回复]
你好,请问一个环境是在ubuntu中搭建的吗?
[回复]
可以基于您的模型二次训练吗?
[回复]