Go最新知识图谱-LSTM+CRF人物关系抽取实战,腾讯Golang开发面试凉凉

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

# 获取词典映射
word2id, tag2id, id2word, id2tag = getWordAndTagId('train.txt')
# 获取句子和标注
sentences, tags=getSentencesAndTags('train.txt')
# 将句子和标注转换为id
sentencesIds, tagsIds = sentencesAndTags2id(sentences, tags,word2id, tag2id)
# 将句子和标注进行填充,确保输入维度一致
sentencesIds = pad_sequences(sentencesIds, padding='post')
tagsIds = pad_sequences(tagsIds, padding='post')
print(sentencesIds.shape)
print(tagsIds.shape)
# 载入模型
model=model(len(word2id),100,sentencesIds.shape[1],len(tag2id))

训练

history = model.fit(sentencesIds, tagsIds.reshape([len(tagsIds),-1,1]), epochs=500)

### 三、数据标注


关于训练数据,未找到合适的标注数据,只能自己标注了,如下:



长 B-SUBJECT
孙 I-SUBJECT
无 I-SUBJECT
忌 I-SUBJECT
看 O
到 O
外 B-PREDICATE
甥 I-PREDICATE
承 B-OBJECT
乾 I-OBJECT
、 O
李 B-OBJECT
泰 I-OBJECT
都 O
完 O
了 O
。 O

唐 B-SUBJECT
玄 I-SUBJECT
宗 I-SUBJECT
有 O
两 O
个 O
同 O
母 O
妹 B-PREDICATE
妹 I-PREDICATE
: O
金 B-OBJECT
仙 I-OBJECT
公 I-OBJECT
主 I-OBJECT
和 O
玉 B-OBJECT
真 I-OBJECT
公 I-OBJECT
主 I-OBJECT
。 O

…此处省略n多

李 B-SUBJECT
文 I-SUBJECT
有 O
两 O
个 O
妹 B-PREDICATE
妹 I-PREDICATE
, O
一 O
个 O
叫 O
宇 B-OBJECT
宇 I-OBJECT
, O
一 O
个 O
叫 O
佳 B-OBJECT
佳 I-OBJECT
。 O


### 四、实战


#### 1、数据预处理


##### 1.1 词典映射


主要是**低频词过滤字与id的映射(word2id)、预测类别与id的映射(lable2id)**,具体实现方式各有不同,不做重点讲解,但要特别注意未登录词的处理:



word_size = len(words)
word2id = {count[0]: index for index, count in enumerate(words,start=1)}
id2word = {index: count[0] for index, count in enumerate(words,start=1)}
tag2id = {count[0]: index for index, count in enumerate(tags)}
id2tag = {index: count[0] for index, count in enumerate(tags)}

填充词

word2id[‘’] = 0

未登录词

word2id[‘’] = word_size + 1


##### 1.2 从训练文件中获取句子和标签



def getSentencesAndTags(filePath):
‘’’
从文件里面获取句子和标注
:param filePath:
:return:
‘’’
with open(filePath,encoding=‘utf-8’) as file:
wordsAndtags=[line.split() for line in file]
sentences=[]
tags=[]
sentence=[]
tag=[]
for wordAndTag in wordsAndtags:
if len(wordAndTag)==2:
sentence.append(wordAndTag[0])
tag.append(wordAndTag[1])
else:
sentences.append(sentence)
tags.append(tag)
sentence=[]
tag = []
return sentences,tags


##### 1.3 输入文本转id


将输入的文本,通过词典,转换成数字序列:



def sentencesAndTags2id(sentences,tags,word2id, tag2id):
‘’’
将句子和标注转换为id
:param sentences:
:param tags:
:param word2id:
:param tag2id:
:return:
‘’’
sentencesIds = [[word2id.get(char,len(word2id)) for char in sentence] for sentence in sentences]
tagsIds = [[tag2id[char] for char in tag] for tag in tags]
return sentencesIds,tagsIds


##### 1.4 数据填充


为了保证数据的维度一致,进行句子填充



from keras_preprocessing.sequence import pad_sequences
sentencesIds = pad_sequences(sentencesIds, padding=‘post’)
tagsIds = pad_sequences(tagsIds, padding=‘post’)


#### 2、模型构建



def model(vocabSize,embeddingDim,inputLength,tagSize):
model = Sequential()
model.add(Embedding(vocabSize + 1,embeddingDim,input_length=inputLength,mask_zero=True))
model.add(Bidirectional(LSTM(50, return_sequences=True)))
model.add(TimeDistributed(Dense(tagSize)))
crf_layer = CRF(tagSize, sparse_target=True)
model.add(crf_layer)
model.compile(‘adam’, loss=crf_layer.loss_function, metrics=[crf_layer.accuracy])
model.summary()
return model


#### 3、测试


通过简单的测试结果如下:  
 ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy85MTU1MjI1LTcwMDg3NGIyM2Q0NDlmZDMucG5n?x-oss-process=image/format,png)  
 比较简单的句子上都能取得比较好的成果,但是由于训练数据不够,还是会出现无法抽取到结果或者抽取错误的情况,比如:  
 ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy85MTU1MjI1LWRmMDk2MjE4MDc1ZGEyMmMucG5n?x-oss-process=image/format,png)



![img](https://img-blog.csdnimg.cn/img_convert/bd1923c66b800f87270f2444fc204a4c.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c00e8c422b5b597cf2e7d0460305eb2.png)
![img](https://img-blog.csdnimg.cn/img_convert/b714a3e4960cd69abfcdfcf73a439a5f.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

fC3-1715524013709)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值