HowNet介绍及使用

您所在的位置:网站首页 关键词的概念描述解释 HowNet介绍及使用

HowNet介绍及使用

2023-09-05 08:55| 来源: 网络整理| 查看: 265

清华大学张钹院士做了一场题为《AI科学突破的前夜,教授们应当看到什么?》提出:

AI未来的科学突破是建立一种同时基于知识和数据的AI系统。

HowNet

知网(HowNet)的构建秉承还原论思想,即所有词语的含义可以由更小的语义单位构成,而这种语义单位被称为“义原”(Sememe),即最基本的、不宜再分割的最小语义单位。知网构建了包含 2000 多个义原的精细的语义描述体系,并为十几万个汉语和英语词所代表的概念标注了义原。

清华大学人工智能研究院发布OpenHowNet,首次将知网的核心数据开源,并且开发了丰富的调用接口,实现义原查询、基于义原的词相似度计算等功能。整体包含有 229,767 个中英文词条, 35,202 个概念以及 2,196 个义原。

获取义原个数 print(len(hownet.get_all_sememes())) 2187 获取词语义原

获取词语苹果的义原:

import OpenHowNet hownet = OpenHowNet.HowNetDict() result_list = hownet.get("苹果") print(len(result_list)) print(result_list[0])

输出:

6 { "Def": "{computer|电脑:modifier={PatternValue|样式值:CoEvent={able|能:scope={bring|携带:patient={$}}}}{SpeBrand|特定牌子}}", "en_grammar": "noun", "ch_grammar": "noun", "No": "127151", "syn": [ { "id": "004024", "text": "IBM" }, { "id": "041684", "text": "戴尔" }, { "id": "049006", "text": "东芝" }, { "id": "106795", "text": "联想" }, { "id": "156029", "text": "索尼" }, { "id": "004203", "text": "iPad" }, { "id": "019457", "text": "笔记本" }, { "id": "019458", "text": "笔记本电脑" }, { "id": "019459", "text": "笔记本电脑" }, { "id": "019460", "text": "笔记本电脑" }, { "id": "019461", "text": "笔记本电脑" }, { "id": "019463", "text": "笔记簿电脑" }, { "id": "019464", "text": "笔记簿电脑" }, { "id": "020567", "text": "便携式电脑" }, { "id": "020568", "text": "便携式计算机" }, { "id": "020569", "text": "便携式计算机" }, { "id": "127224", "text": "平板电脑" }, { "id": "127225", "text": "平板电脑" }, { "id": "172264", "text": "膝上型电脑" }, { "id": "172265", "text": "膝上型电脑" } ], "ch_word": "苹果", "en_word": "apple" }

共6个义原,这里只列出作为作为电脑的这个义原。其中每个“xx|yy”代表一个义原,“|”左边为英文右边为中文;义原之间还被标注了复杂的语义关系,如host、modifier、belong等,从而能够精确地表示词语的语义信息。此外,还包括同义词信息。

可视化:

hownet.visualize_sememe_trees("苹果", K=2) Find 6 result(s) Display #0 sememe tree [sense]苹果 └── [None]computer|电脑 ├── [modifier]PatternValue|样式值 │ └── [CoEvent]able|能 │ └── [scope]bring|携带 │ └── [patient]$ └── [patient]SpeBrand|特定牌子 Display #1 sememe tree [sense]苹果 └── [None]fruit|水果

K=2 表示列出两个义原。

获取英文单词的义原,结果有点奇怪,同义词还是中文,例如:

hownet = OpenHowNet.HowNetDict() result_list = hownet.get("finally", language="en") print(len(result_list)) print(result_list[0]) 10 { "Def": "{TimingValue|时间特性值:TimeFeature={ending|末}}", "en_grammar": "adv", "ch_grammar": "adv", "No": "043966", "syn": [ { "id": "037833", "text": "从头" }, { "id": "037834", "text": "从头" }, { "id": "037861", "text": "从小" }, { "id": "037877", "text": "从一开始" }, { "id": "037878", "text": "从一开始" }, { "id": "039900", "text": "打小儿" }, { "id": "043988", "text": "到了儿" }, { "id": "043989", "text": "到了儿" }, { "id": "044015", "text": "到头" }, { "id": "044016", "text": "到头" }, { "id": "044018", "text": "到头来" }, { "id": "044019", "text": "到头来" }, { "id": "076000", "text": "后冷战" }, { "id": "078235", "text": "环比" }, { "id": "099626", "text": "可算" }, { "id": "099627", "text": "可算" }, { "id": "099628", "text": "可算" }, { "id": "099629", "text": "可算" }, { "id": "108348", "text": "临场" }, { "id": "108352", "text": "临床" } ], "ch_word": "到底", "en_word": "finally" }

显示有10个义原,但是每个的定义Def也是一样的。

获取K个最接近输入词的词 ownet_dict_advanced = OpenHowNet.HowNetDict(use_sim=True) hownet.initialize_sememe_similarity_calculation() # 初始化耗时比较长 query_result = hownet_dict_advanced.get_nearest_words_via_sememes("苹果", 20) example = query_result[0] print("word_name:", example["word"]) print("id:", example["id"]) print("synset and corresonding word&id&score:") for item in example["synset"]: print(item)

输出:

word_name: 苹果 id: 127151 synset and corresonding word&id&score: {'id': 4024, 'word': 'IBM', 'score': 1.0} {'id': 41684, 'word': '戴尔', 'score': 1.0} {'id': 49006, 'word': '东芝', 'score': 1.0} {'id': 106795, 'word': '联想', 'score': 1.0} {'id': 156029, 'word': '索尼', 'score': 1.0} {'id': 4203, 'word': 'iPad', 'score': 0.865} {'id': 19457, 'word': '笔记本', 'score': 0.865} {'id': 19458, 'word': '笔记本电脑', 'score': 0.865} {'id': 19459, 'word': '笔记本电脑', 'score': 0.865} {'id': 19460, 'word': '笔记本电脑', 'score': 0.865} {'id': 19461, 'word': '笔记本电脑', 'score': 0.865} {'id': 19463, 'word': '笔记簿电脑', 'score': 0.865} {'id': 19464, 'word': '笔记簿电脑', 'score': 0.865} {'id': 20567, 'word': '便携式电脑', 'score': 0.865} {'id': 20568, 'word': '便携式计算机', 'score': 0.865} {'id': 20569, 'word': '便携式计算机', 'score': 0.865} {'id': 127224, 'word': '平板电脑', 'score': 0.865} {'id': 127225, 'word': '平板电脑', 'score': 0.865} {'id': 172264, 'word': '膝上型电脑', 'score': 0.865} {'id': 172265, 'word': '膝上型电脑', 'score': 0.865} 计算两个指定词的相似度 res = hownet_dict_advanced.calculate_word_similarity("苹果", "笔记本电脑") print(res) # 0.865

如果其中的任何一个词不在HowNet中,函数将返回0。

res = hownet_dict_advanced.calculate_word_similarity("苹果", "梨") print(res) # 0

OpenHowNet安装以及其他使用方法见文档

其他占个坑:

学术上: https://zhuanlan.zhihu.com/p/32688983

以及如何用来计算情感倾向值



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3