当前位置:   article > 正文

判断随机抽取代码_中文知识图谱-领域词抽取

使用百度百科查询词汇是否是计算机领域的 csdn

172eeb27a1db9ffecef481cee8254508.png

本文章为博主本人的项目总结,欢迎各位大佬沟通交流。

领域词分类代码:

LiuYaKu/Word_classification​github.com
8b4a38ba2f572dcb4fdea15450a58ae9.png

数据构建代码:

LiuYaKu/baidu_make_data​github.com
8b4a38ba2f572dcb4fdea15450a58ae9.png

任务定义

从无结构文本(中文)中抽取领域词(某个领域内的专有词汇),无监督型数据。

方案设计

新词发现+词分类+词性规则+远程监督

新词发现

所谓的新词发现,就是发现词典里面没有的词,采用的方法就是互信息与左右信息熵抽取新词,简单说来就是计算几个词组合成一个词的概率。

互信息

191b89da567159dbcbebd1fbcfea7d15.png

点间互信息就是计算两个词的粘合程度。

左右信息熵

左熵

6e28bd6bf7d14d1ad61b21d53a798e1a.png

左右信息熵即候选词左右两边词的变化情况,变化越多,熵值越大,候选词成词的分数越大。

新词发现结果

1849740fb83cfff829b8d0f09cdc3f38.png
新词发现结果

“_”两边是组合的两个词。注意:这里不仅可以是2-gram,也可以是n-gram,即判断两个或者n个词的组词概率,但是n越大,所耗费的时间也越大(顺便说一句:高瞻远瞩公司真的是领域词,吃惊.jpg)。逗号右边是评分。

词分类

模型任务

新词有了,现在的任务是从这些新词中找出领域词即可。从上面的结果可以发现抽取出来的领域词,分为三类:领域词(高瞻远瞩公司)、非领域词(马利奥)、非正常词(先力时)。

为了简单起见,模型任务是二分类,即只有两个分类:领域词和非领域词(包含非领域词和非正常词)。

数据构建

现在模型任务确定了,那么下一步就是构造数据,全部依靠人工肯定不行,我们的方案采用远程监督+规则+少量人工的方式构造数据。

正样本构建:即领域词

两个途径:

1、从百度文库爬取领域大牛总结的领域词,只要是不太冷门的领域,都会有领域大牛总结领域词。

2、利用百度百科的词条,将新词发现的结果,逐个在百度百科里查询,如果在百度百科里面,那么就当做是候选领域词,然后再人工筛选。(在百度百科查询的部分可以使用脚本实现)。

负样本构建:即非领域词和非正常词

通用方法:每个领域都有构词法,我们使用的是词性对规则,比如a_a,形容词_形容词肯定不是领域词,使用jieba词典标注的词性。

0739ec46f13b74f0a73a98ccc95d928e.png
词性对规则

f0cf9d49a3c599e717023103297b4614.png
对应词性对规则的词文件

非领域词:即是正常词但不是领域词的词,比较好找,使用jieba词典里面的词,随机抽取出一些(里面会含有一些领域词,抽取的时候需要制定规则,比如不包含某些字的词),还可以找一些其他领域内的词。

非正常词:使用规则,构造一些非正常词,用字随机组词。

最终正样本:1万5000多个

最终负样本:120万左右

模型选择

模型的选择,我尝试了四种模型:1.cnn+char2vec 2.lstm+char2vec 3.lstm+cnn+char2vec 4.bert

效果依次变好,但是需要的硬件水平也依次提高。

数据噪声问题

由于构建数据集部分存在问题,比如词性对规则部分需要领域专家如果是非领域人员整理的话,那么就会给数据集引入噪音。

解决方法:使用循环训练,测试负样本,将其中的领域内的词去掉。

具体流程就是每次训练一个模型,训练完之后测试负样本,将负样本中分数较高的词,直接从训练样本中除去。

领域词分类代码:

LiuYaKu/Word_classification​github.com
8b4a38ba2f572dcb4fdea15450a58ae9.png

数据构建代码:

LiuYaKu/baidu_make_data​github.com
8b4a38ba2f572dcb4fdea15450a58ae9.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/339476
推荐阅读
相关标签
  

闽ICP备14008679号