README.md 11.5 KB
Newer Older
H
init  
Hai Liang Wang 已提交
1
# Synonyms
H
Hai Liang Wang 已提交
2

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
3
Chinese Synonyms for Natural Language Processing and Understanding.
H
init  
Hai Liang Wang 已提交
4

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
5
更好的中文近义词:聊天机器人、智能问答工具包。
H
Hai Liang Wang 已提交
6

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
7
`synonyms`可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。
H
init  
Hai Liang Wang 已提交
8

H
Hai Liang Wang 已提交
9
# Table of Content:
10

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
11 12 13 14 15 16 17 18 19
- [Install](https://github.com/chatopera/Synonyms#welcome)
- [Usage](https://github.com/chatopera/Synonyms#usage)
- [Quick Get Start](https://github.com/chatopera/Synonyms#quick-get-start)
- [Valuation](https://github.com/chatopera/Synonyms#valuation)
- [Benchmark](https://github.com/chatopera/Synonyms#benchmark)
- [Statement](https://github.com/chatopera/Synonyms#statement)
- [References](https://github.com/chatopera/Synonyms#references)
- [Frequently Asked Questions](https://github.com/chatopera/Synonyms#frequently-asked-questions-faq)
- [License](https://github.com/chatopera/Synonyms#license)
20

H
init  
Hai Liang Wang 已提交
21 22 23 24 25
# Welcome

```
pip install -U synonyms
```
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
26 27

兼容 py2 和 py3,当前稳定版本 [v3.x](https://github.com/chatopera/Synonyms/releases)
28

29 30
**提示:安装后初次使用会下载词向量文件,下载速度取决于网络情况。**

H
Hai Liang Wang 已提交
31 32
![](./assets/3.gif)

33
**Node.js 用户可以使用 [node-synonyms](https://www.npmjs.com/package/node-synonyms)了。**
H
Hai Liang Wang 已提交
34 35 36 37

```
npm install node-synonyms
```
H
Hai Liang Wang 已提交
38

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
39
本文档的配置和接口说明面向 python 工具包, node 版本查看[项目](https://www.npmjs.com/package/node-synonyms)
H
Hai Liang Wang 已提交
40

H
init  
Hai Liang Wang 已提交
41
## Usage
H
Hai Liang Wang 已提交
42

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
43
支持使用环境变量配置分词词表和 word2vec 词向量文件。
44

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
45 46 47 48
| 环境变量                            | 描述                                                                                                                                                                                               |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| _SYNONYMS_WORD2VEC_BIN_MODEL_ZH_CN_ | 使用 word2vec 训练的词向量文件,二进制格式。                                                                                                                                                       |
| _SYNONYMS_WORDSEG_DICT_             | 中文分词[**主字典**](https://github.com/fxsjy/jieba#%E5%BB%B6%E8%BF%9F%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6),格式和使用[参考](https://github.com/fxsjy/jieba#%E8%BD%BD%E5%85%A5%E8%AF%8D%E5%85%B8) |
49

H
Hai Liang Wang 已提交
50
### synonyms#seg
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
51

H
Hai Liang Wang 已提交
52
中文分词
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
53

H
Hai Liang Wang 已提交
54 55 56 57 58
```
import synonyms
synonyms.seg("中文近义词工具包")
```

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
59 60
分词结果,由两个 list 组成的元组,分别是单词和对应的词性。

H
Hai Liang Wang 已提交
61 62 63 64 65 66
```
(['中文', '近义词', '工具包'], ['nz', 'n', 'n'])
```

**该分词不去停用词和标点。**

H
Hai Liang Wang 已提交
67
### synonyms#nearby
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
68

H
Hai Liang Wang 已提交
69 70
```
import synonyms
71 72 73
print("人脸: ", synonyms.nearby("人脸"))
print("识别: ", synonyms.nearby("识别"))
print("NOT_EXIST: ", synonyms.nearby("NOT_EXIST"))
H
Hai Liang Wang 已提交
74
```
H
Hai Liang Wang 已提交
75

76
`synonyms.nearby(WORD [,SIZE])`返回一个元组,元组中包含两项:`([nearby_words], [nearby_words_score])``nearby_words`是 WORD 的近义词们,也以 list 的方式存储,并且按照距离的长度由近及远排列,`nearby_words_score``nearby_words`**对应位置**的词的距离的分数,分数在(0-1)区间内,越接近于 1,代表越相近;`SIZE` 是返回词汇数量,默认 10。比如:
H
Hai Liang Wang 已提交
77 78

```
79
synonyms.nearby(人脸, 10) = (
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
80
    ["图片", "图像", "通过观察", "数字图像", "几何图形", "脸部", "图象", "放大镜", "面孔", "Mii"],
H
Hai Liang Wang 已提交
81
    [0.597284, 0.580373, 0.568486, 0.535674, 0.531835, 0.530
H
Hai Liang Wang 已提交
82
095, 0.525344, 0.524009, 0.523101, 0.516046])
H
Hai Liang Wang 已提交
83 84
```

85
在 OOV 的情况下,返回 `([], [])`,目前的字典大小: 435,729。
H
Hai Liang Wang 已提交
86

H
Hai Liang Wang 已提交
87
### synonyms#compare
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
88

H
Hai Liang Wang 已提交
89
两个句子的相似度比较
H
huyingxi 已提交
90

H
Hai Liang Wang 已提交
91 92 93 94 95
```
    sen1 = "发生历史性变革"
    sen2 = "发生历史性变革"
    r = synonyms.compare(sen1, sen2, seg=True)
```
H
huyingxi 已提交
96

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
97
其中,参数 seg 表示 synonyms.compare 是否对 sen1 和 sen2 进行分词,默认为 True。返回值:[0-1],并且越接近于 1 代表两个句子越相似。
H
huyingxi 已提交
98

H
Hai Liang Wang 已提交
99 100 101 102
```
旗帜引领方向 vs 道路决定命运: 0.429
旗帜引领方向 vs 旗帜指引道路: 0.93
发生历史性变革 vs 发生历史性变革: 1.0
H
Hai Liang Wang 已提交
103 104
```

H
Hai Liang Wang 已提交
105
### synonyms#display
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
106

107
以友好的方式打印近义词,方便调试,`display(WORD [, SIZE])`调用了 `synonyms#nearby` 方法。
H
Hai Liang Wang 已提交
108 109 110 111

```
>>> synonyms.display("飞机")
'飞机'近义词:
112 113 114 115 116 117 118 119 120 121
  1. 飞机:1.0
  2. 直升机:0.8423391
  3. 客机:0.8393003
  4. 滑翔机:0.7872388
  5. 军用飞机:0.7832081
  6. 水上飞机:0.77857226
  7. 运输机:0.7724742
  8. 航机:0.7664748
  9. 航空器:0.76592904
  10. 民航机:0.74209654
H
Hai Liang Wang 已提交
122
```
H
Hai Liang Wang 已提交
123

124 125
`SIZE` 是打印词汇表的数量,默认 10。

H
Hai Liang Wang 已提交
126
### synonyms#v
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
127 128

获得一个词语的向量,该向量为 numpy 的 array,当该词语是未登录词时,抛出 KeyError 异常。
H
Hai Liang Wang 已提交
129 130

```
H
Hai Liang Wang 已提交
131
>>> synonyms.v("飞机")
H
Hai Liang Wang 已提交
132 133 134 135 136
array([-2.412167  ,  2.2628384 , -7.0214124 ,  3.9381874 ,  0.8219283 ,
       -3.2809453 ,  3.8747153 , -5.217062  , -2.2786229 , -1.2572327 ],
      dtype=float32)
```

H
Hai Liang Wang 已提交
137
### synonyms#sv(sentence, ignore=False)
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
138 139

获得一个分词后句子的向量,向量以 BoW 方式组成
H
Hai Liang Wang 已提交
140 141 142 143 144 145

```
    sentence: 句子是分词后通过空格联合起来
    ignore: 是否忽略OOV,False时,随机生成一个向量
```

H
Hai Liang Wang 已提交
146
## PCA
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
147

H
Hai Liang Wang 已提交
148
以“人脸”为例主要成分分析:
H
Hai Liang Wang 已提交
149

H
Hai Liang Wang 已提交
150
![](assets/1.png)
H
Hai Liang Wang 已提交
151

152
## Quick Get Start
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
153

H
Hai Liang Wang 已提交
154 155 156 157 158
```
$ pip install -r Requirements.txt
$ python demo.py
```

H
Hai Liang Wang 已提交
159
## Change logs
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
160

H
Hai Liang Wang 已提交
161 162
更新情况[说明](./CHANGELOG.md)

H
Hai Liang Wang 已提交
163
## Voice of Users
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
164

H
Hai Liang Wang 已提交
165
用户怎么说:
166

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
167
<img src="https://github.com/chatopera/Synonyms/raw/master/assets/4.png" width="600">
H
Hai Liang Wang 已提交
168

H
init  
Hai Liang Wang 已提交
169
## Data
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
170

H
Hai Liang Wang 已提交
171 172
data is built based on [wikidata-corpus](https://github.com/Samurais/wikidata-corpus).

173 174 175
## Valuation

### 同义词词林
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
176 177

《同义词词林》是梅家驹等人于 1983 年编纂而成,现在使用广泛的是哈工大社会计算与信息检索研究中心维护的《同义词词林扩展版》,它精细的将中文词汇划分成大类和小类,梳理了词汇间的关系,同义词词林扩展版包含词语 7 万余条,其中 3 万余条被以开放数据形式共享。
178 179 180

### 知网, HowNet

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
181 182 183
HowNet,也被称为知网,它并不只是一个语义字典,而是一个知识系统,词汇之间的关系是其一个基本使用场景。知网包含词语 8 余条。

国际上对词语相似度算法的评价标准普遍采用 Miller&Charles 发布的英语词对集的人工判定值。该词对集由十对高度相关、十对中度相关、十对低度相关共 30 个英语词对组成,然后让 38 个受试者对这 30 对进行语义相关度判断,最后取他们的平均值作为人工判定标准。然后不同近义词工具也对这些词汇进行相似度评分,与人工判定标准做比较,比如使用皮尔森相关系数。在中文领域,使用这个词表的翻译版进行中文近义词比较也是常用的办法。
184 185

### 对比
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
186

187
Synonyms 的词表容量是 435,729,下面选择一些在同义词词林、知网和 Synonyms 都存在的几个词,给出其近似度的对比:
188 189 190

![](./assets/5.png)

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
191
注:同义词林及知网数据、分数[来源](https://github.com/yaleimeng/Final_word_Similarity)。Synonyms 也在不断优化中,新的分数可能和上图不一致。
192

H
Hai Liang Wang 已提交
193 194
更多[比对结果](./VALUATION.md)

195 196 197 198 199 200
## Used by

[Github 关联用户列表](https://github.com/chatopera/Synonyms/network/dependents?package_id=UGFja2FnZS01MjY2NDc1Nw%3D%3D)

![](./assets/6.png)

H
Hai Liang Wang 已提交
201
## Benchmark
H
Hai Liang Wang 已提交
202 203 204 205 206

Test with py3, MacBook Pro.

```
python benchmark.py
H
init  
Hai Liang Wang 已提交
207 208
```

H
Hai Liang Wang 已提交
209
++++++++++ OS Name and version ++++++++++
H
Hai Liang Wang 已提交
210

H
Hai Liang Wang 已提交
211
Platform: Darwin
H
Hai Liang Wang 已提交
212

H
Hai Liang Wang 已提交
213
Kernel: 16.7.0
H
Hai Liang Wang 已提交
214

H
Hai Liang Wang 已提交
215 216 217
Architecture: ('64bit', '')

++++++++++ CPU Cores ++++++++++
H
Hai Liang Wang 已提交
218

H
Hai Liang Wang 已提交
219
Cores: 4
H
Hai Liang Wang 已提交
220

H
Hai Liang Wang 已提交
221 222 223
CPU Load: 60

++++++++++ System Memory ++++++++++
224

H
Hai Liang Wang 已提交
225 226
meminfo 8GB

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
227
`synonyms#nearby: 100000 loops, best of 3 epochs: 0.209 usec per loop`
H
Hai Liang Wang 已提交
228 229

## Live Sharing
H
Hai Liang Wang 已提交
230 231 232 233 234

[52nlp.cn](http://www.52nlp.cn/synonyms-%E4%B8%AD%E6%96%87%E8%BF%91%E4%B9%89%E8%AF%8D%E5%B7%A5%E5%85%B7%E5%8C%85)

[机器之心](https://www.jiqizhixin.com/articles/2018-01-14-3)

H
Hai Liang Wang 已提交
235
[线上分享实录: Synonyms 中文近义词工具包 @ 2018-02-07](http://gitbook.cn/gitchat/activity/5a563545a8b23d387720ccd5)
H
Hai Liang Wang 已提交
236

H
Hai Liang Wang 已提交
237 238
## Statement

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
239 240
[Synonyms](https://github.com/chatopera/Synonyms)发布证书 MIT。数据和程序可用于研究和商业产品,必须注明引用和地址,比如发布的任何媒体、期刊、杂志或博客等内容。

241 242
```
@online{Synonyms:hain2017,
H
Hai Liang Wang 已提交
243
  author = {Hai Liang Wang, Hu Ying Xi},
244 245
  title = {中文近义词工具包Synonyms},
  year = 2017,
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
246
  url = {https://github.com/chatopera/Synonyms},
247 248 249 250
  urldate = {2017-09-27}
}
```

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
251 252
# Promotion

253
[Chatopera 云服务](https://bot.chatopera.com/dashboard)
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
254 255 256 257 258 259 260 261

<p align="center">
  <b>Chatopera 云服务</b><br>
  <a href="https://bot.chatopera.com" target="_blank">
      <img src="./assets/64531083-3199aa80-d341-11e9-86cd-3a3ed860b14b.png" width="800">
  </a>
</p>

262 263
Chatopera 机器人平台包括知识库、多轮对话、意图识别和语音识别等组件,标准化聊天机器人开发,支持企业 OA 智能问答、HR 智能问答、智能客服和网络营销等场景;一站式实现聊天机器人,按量付费,让聊天机器人上线!

H
Hai Liang Wang 已提交
264
# References
H
Hai Liang Wang 已提交
265

H
Hai Liang Wang 已提交
266
[wikidata-corpus](https://github.com/Samurais/wikidata-corpus)
H
Hai Liang Wang 已提交
267

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
268
[word2vec 原理推导与代码分析](http://www.hankcs.com/nlp/word2vec.html)
H
Hai Liang Wang 已提交
269

270 271 272 273
# Frequently Asked Questions (FAQ)

1. 是否支持添加单词到词表中?

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
274
不支持,欲了解更多请看 [#5](https://github.com/chatopera/Synonyms/issues/5)
275 276 277

2. 词向量的训练是用哪个工具?

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
278
Google 发布的[word2vec](https://code.google.com/archive/p/word2vec/),该库由 C 语言编写,内存使用效率高,训练速度快。gensim 可以加载 word2vec 输出的模型文件。
279

H
Hai Liang Wang 已提交
280 281
3. 相似度计算的方法是什么?

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
282
[详见 #64](https://github.com/chatopera/Synonyms/issues/64)
H
Hai Liang Wang 已提交
283

H
Hai Liang Wang 已提交
284 285
# Authors

286
[Hai Liang Wang](https://pre-angel.com/peoples/hailiang-wang/)
H
Hai Liang Wang 已提交
287

288
[Hu Ying Xi](https://github.com/huyingxi)
H
Hai Liang Wang 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301

# Give credits to

[Word2vec by Google](https://code.google.com/archive/p/word2vec/)

[Wikimedia: 训练语料来源](https://dumps.wikimedia.org/)

[gensim: word2vec.py](https://github.com/RaRe-Technologies/gensim)

[SentenceSim: 相似度评测语料](https://github.com/fssqawj/SentenceSim/)

[jieba: 中文分词](https://github.com/fxsjy/jieba)

H
init  
Hai Liang Wang 已提交
302
# License
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
303

S
Samurais 已提交
304
[MIT](./LICENSE)
Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
305

306 307 308 309 310 311 312 313
Copyright (2018-2020) Chatopera Inc. <https://www.chatopera.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.OF

Chatopera 研发团队's avatar
Chatopera 研发团队 已提交
314 315 316 317
[![chatoper banner][co-banner-image]][co-url]

[co-banner-image]: https://user-images.githubusercontent.com/3538629/42383104-da925942-8168-11e8-8195-868d5fcec170.png
[co-url]: https://www.chatopera.com