chilynn / sequence-labeling

307 stars 167 forks source link

请教您tf版本更新后的代码的变化 #16

Open scofield7419 opened 7 years ago

scofield7419 commented 7 years ago

您好,我是tf beginer, 在我升级了tf到0.11后,tf库有不少的api有一些变化,主要是在BILSTM_CRF.py: from tensorflow.models.rnn import rnn, rnncell的包的改变, raise ImportError("This module is deprecated. Use tf.nn.rnn* instead.") 然而for me,因为对tf模型的不全面了解,要去手动改一些代码是比较困难的…… 您能否抽空指示一下tf版本升级后的代码改进呢:) 谢谢~

scofield7419 commented 7 years ago

besides, 注意到validation.in、train.in、test.in的内容都是一样的,那么validation.in的作用是什么呢? train方法体中有# validation的片段。 是为了在训练完后立马与原语料对比验证各种参数的作用吗? 如果是的话,那么为什么不直接用train.in文件呢?

scofield7419 commented 7 years ago

您好,我将你的3个char level输入文件改为我的word level输入文件,格式like this below: efforts O since O 4 O ……(格式都是这样,将近有4w行,中间没有空白行) 然后在BILSTM_CRF.py的forward()中的 (line 118) transitions = tf.reshape(tf.concat(0, [transitions] * self.batch_size), [self.batch_size, 6, 6]) 报错: ValueError: Cannot reshape a tensor with 28800 elements to shape [128, 6, 6] (4608 elements) 是维度转换不对, as I'm a beginer in tf,所以请教您,对于我的word level语料,出错的这个维度到底是指哪个地方的问题呢? 是不是因为输入文件格式没空行的原因吗? 谢谢!

scofield7419 commented 7 years ago

您好,目前所困惑的是,BiLSTM与CRF的结合方式在代码上是如何进行的呢? forward( ) 是CRF的前向算法吧?

chilynn commented 7 years ago

你好: 1、API的话,按照它的提示修改就行吧 2、validation.in、train.in、test.in这三个文件都是一些假数据,只是为了跑通程序,validation主要为了防止过拟合和调参等 3、输入文件中,每个样本之间需要用空行分割 4、BiLSTM与CRF的结合可以参考《Neural Architectures for Named Entity Recognition》,代码中的point_score是连接两个model的关键,可以仔细看看

scofield7419 commented 7 years ago

hi,感谢答复! “输入文件中,每个样本之间需要用空行分割”:事实上,我的近有4w行的输入文件,其内容是连续的,并没有空行的。所以不知在何时做空行处理。您指的空行,应该是什么时机给呢?或者说,隔几行空一行呢?

chilynn commented 7 years ago

Hi,如果说你的内容是连续的,那你的训练集就一个样本?这样不合理吧?建议可以把4w行的连续内容进行切分(比如按句号切分,按tab切分之类的)。假设最后切分得到4千个样本,则在每个样本后加一个空行,一共有4千个空行。