Giter Club home page Giter Club logo

chinesenre's Introduction

ChineseNRE

本项目使用

  • python 2.7
  • pytorch 0.4.0

中文实体关系抽取,对实体关系抽取不了解的可以先看这篇文章。顺便求star~

数据

中文实体关系抽取数据实在太难找了,data中是忘记在哪里找的人物关系数据集,一共11+1种关系,数据质量不太好,但也找不到其他的了。 (更新)issues7中 ybNero 同学分享了一份数据集,大家可以去issues中查看~

梅葆玥	梅兰芳	父母 坎坷经历梅葆玥之家庭合影1961年,梅兰芳先生病逝,葆玥、葆玖姐弟俩继承父亲的遗志,挑起了梅剧团的重担

数据格式为: 实体1 实体2 关系 句子。

虽然叫中文实体关系抽取,还是增加了一个英文数据集SemEval2010_task8,简单做了下数据处理,这是免费的公开数据集,其他的好像都要dollar了。。

训练

模型使用的是lstm+attention模型。特征使用词向量+位置向量。

训练前先运行data文件夹中的 data_util.py 文件,将数据处理成pkl文件供模型使用。

运行python train.py即可开始训练,可以在train.py文件中设置epoch、batch等参数,运行结束模型会储存到model文件夹中,可以在训练好的模型基础上继续训练。

可以运行python train.py pretrained使用预训练的词向量进行训练。vec.txt是一个训练好的词向量的例子,可以修改使用更加优秀的预训练词向量。

准确率

奈何实验室没有服务器,只能用自己电脑的cpu跑了一小部分数据,结果如下。

准确率 召回率 F1值
64.08% 64.59% 64.33%

参考

Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification

更新日志

2018-10-7 第一版,不定期进行修改与优化。

2018-10-9 添加准确率、召回率、f值的计算,将model从train.py中分离。

2018-10-10 添加SemEval2010_task8数据,以及一些小修改。

2018-10-18 增加预训练的词向量,修改bug。

chinesenre's People

Contributors

buppt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chinesenre's Issues

有点疑惑

是不是就是用了两个实体第一个字位置信息的文本分类啊。工业上的NRE是这样做的吗

预测时如何设置batch?

跑了下这个代码,请问预测时如何设置batch大小,我用训练的数据测试预测,当我要预测的数据不是按照batch大小输入时,会报下面的错误:
RuntimeError(msg.format(expected_hidden_size, tuple(hx.size())))
RuntimeError: Expected hidden[0] size (2, 12, 100), got (2, 128, 100)
我用的训练的数据,只不过把batch修改成了12。

更换数据集后效果差

请问更换数据集后应该再修改代码哪个部分可以稍微提高一些,目前f1只有0.1左右

增大训练集recall不变

楼主您好,增大训练集是不是就把count[relation2id[line[2]]] < 1500中的1500增大就行?增大后f1和recall停止在20%怎么解决?求指教

pytorch下载版本找不到

我使用python2.7的时候需要导入torch包,但是在下载pytorch0.40这个版本的时候没有找到对应的python2.7的版本,我用的windows系统。windos系统下有没有对应的版本呢

参数问题

你好,我想请问一下train.py的43,44行中的两个参数POS_SIZE = 82,POS_DIM = 25分别代表什么意思呢?具体是怎么得到的呢?

POS_SIZE设计

请问一下如果用那个英文数据集的话POS_SIZE应该设置成多少才不会报错啊

实验结果

你好,我看了人物关系那个数据集,感觉里面很多数据即使是人都无法直接判断,不知道你的实验结果p,r,f咋样?

数据集类别总数

SemEval-2010 Task 8 dataset数据集有关于实体顺序的标签,好像代码里面只考虑了关系的抽取,没有考虑实体的抽取,请解答一下,谢谢!

引发运行时错误

运行时出现这个问题
raise RuntimeError('DataLoader worker (pid(s) {}) exited unexpectedly'.format(pids_str))

RuntimeError: DataLoader worker (pid(s) 16184, 7428) exited unexpectedly
应该怎么办?小白求解答,谢谢

关于train.py的问题

您好,我在训练您的模型时,执行train.py代码,会卡住没有反应,请问这种情况您遇到过吗?
image

关于set_ids 索引的疑问

请问在ChineseNRE/data/people-relation/data_util.py的54行
set_ids = range(1, len(set_words)+1)
那么“所有单词”列表的id索引是从1开始的,而在使用nn.Embedding时,取某个单词的vec索引是从索引0开始的,不就混乱了吗?
为什么不直接这样set_ids = range(len(set_words))写呢?
谢谢

help

The model has been trained. I now want to budget for the data and I don’t know how to use the model. I try to put my statement"朱时茂 陈佩斯 ??? 《水与火的缠绵》《低头不见抬头见》《天剑群侠》小品陈佩斯与朱时茂1984年《吃面条》合作者:陈佩斯聽1985年《拍电影》合" generates a pkl file, and then uses the trained model to report an error RuntimeError: Expected hidden[0] size (2, 1, 100), got (2, 128, 100)

关于位置向量的问题

你好大神,我是一个纯新手,看到position1.append(i-3-index1),position2.append(i-3-index2)有些疑惑,这个position1和2是不是表示当前字分别到两个实体的距离?为什么是i-3?而不是直接i-index1?麻烦方便的时候能回复一下,不胜感激。

关于那个使用预训练的词向量进行训练的embedding的问题

train.py 67行到85行

if len(sys.argv)==2 and sys.argv[1]=="pretrained":
    print( "use pretrained embedding")
    config["pretrained"]=True
    word2vec = {}
    with codecs.open('vec.txt','r','utf-8') as input_data:   
        for line in input_data.readlines():
            word2vec[line.split()[0]] = map(eval,line.split()[1:])
    unknow_pre = []
    unknow_pre.extend([1]*100)
    embedding_pre.append(unknow_pre) #wordvec id 0
    for word in word2id:  #  <----这里对word2id循环,应该不对的吧,循环出来是id,下面word2vec里面是word,应该是对id2word循环的
        if word2vec.has_key(word):
            embedding_pre.append(word2vec[word])
        else:
            embedding_pre.append(unknow_pre)

    embedding_pre = np.asarray(embedding_pre)
    print(embedding_pre.shape)

问题看代码注释

语言

您好,模型可以用在别的语言上吗

效果问题

您好,您就是直接用这个代码跑的结果么,我怎么只能达到50,您应该时达到了60吧。而且您了解,如果训练集有16万,特别大,几乎收敛不了的原因么,不是应该数据越多越好么

程序输入在哪里呢

我按照提示在train.py文件运行完成以后,再运行BiLSTM_ATT.py,BiLSTM_ATT.py这个文件应该就是输入输出的文件吧。然后提示in 让我输入 这个输入是在哪个地方被调用的呢,我输入了中文之后,out出Out[4]: '\xe6\x88\x91\xe8\xbe\x93\xe5\x85\xa5\xe4\xb 这是什么意思

是否可以进行多关系预测呢

必须确定了两个实体才能得出位置向量,但通常一句话里不止有2个实体,也不只有一个关系,这种情况下位置向量该怎么得出呢,怎么确定哪两个实体有关系,多关系怎么预测呢。
麻烦您为我解答一下,谢谢

英文数据部分问题

中文数据集成功跑通了,不过英文数据集并没有成功,报错如下:
Traceback (most recent call last):
File "train.py", line 119, in
y = model(sentence,pos1,pos2)
File "/home/jfy/anaconda3/envs/py27/lib/python2.7/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/jfy/下载/NER/BiLSTM_ATT.py", line 63, in forward
embeds = torch.cat((self.word_embeds(sentence),self.pos1_embeds(pos1),self.pos2_embeds(pos2)),2)
File "/home/jfy/anaconda3/envs/py27/lib/python2.7/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/jfy/anaconda3/envs/py27/lib/python2.7/site-packages/torch/nn/modules/sparse.py", line 110, in forward
self.norm_type, self.scale_grad_by_freq, self.sparse)
File "/home/jfy/anaconda3/envs/py27/lib/python2.7/site-packages/torch/nn/functional.py", line 1110, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: index out of range at /opt/conda/conda-bld/pytorch_1535488076166/work/aten/src/TH/generic/THTensorMath.cpp:352

怎么预测

大佬我跑完以后有model的文件了 怎么预测啊

Attention的输入

请问:self.attention不是应该传入lstm的hidden state吗?你传入的是output ;
att_out = F.tanh(self.attention(lstm_out))
代码行在这里:L73

环境

博主你好,window系统pytorch 0.4现在都只基于python3.6/3.7 ,请问怎样在python2 中安装0.4的版本呢?

关于预处理部分的疑问

您好,感谢您分享代码供新手学习,有一处问题想请教一下:
data_util.py Line38处为什么需要i+=1呢? enumerate过程中i不是已经自动递增了吗?

感谢您的分享,希望得到您的回复,谢谢啦!
祝好~~

能否在Windows操作系统中实现功能?

您好,我现在想复现一下程序功能,看到程序是python2.7+pytorch 只能在linux系统中运行,想问问有没有什么办法可以在Windows操作系统中实现,或者python3.0以上的代码,谢谢了!

关于预训练字向量

老哥请问在程序里面更新了加载字向量的代码吗,小白想了解距离向量具体起了哪些作用

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.