Ошибка при использовании viterbi_decode of tenorflow - PullRequest
0 голосов
/ 01 июня 2018

Я использую это github.com / Determined22 / zh-NER-TF Я только что использовал другие train_data того же формата.В коде нет ничего плохого, потому что все нормально, когда я запускаю исходные данные train_data.Что может вызвать это?

Traceback (most recent call last):
  File "main.py", line 83, in <module>
    model.train(train=train_data, dev=dev_data)
  File "/home/mengyuguang/NER/model.py", line 161, in train
    self.run_one_epoch(sess, train, dev, self.tag2label, epoch, saver)
  File "/home/mengyuguang/NER/model.py", line 221, in run_one_epoch
    label_list_dev, seq_len_list_dev = self.dev_one_epoch(sess, dev)
  File "/home/mengyuguang/NER/model.py", line 256, in dev_one_epoch
    label_list_, seq_len_list_ = self.predict_one_batch(sess, seqs)
  File "/home/mengyuguang/NER/model.py", line 277, in predict_one_batch
    viterbi_seq, _ = viterbi_decode(logit[:seq_len], transition_params)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/crf/python/ops/crf.py", line 333, in viterbi_decode
    trellis[0] = score[0]
IndexError: index 0 is out of bounds for axis 0 with size 0

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Код должен быть изменен на следующее:

def read_corpus(corpus_path):
    """
    read corpus and return the list of samples
    :param corpus_path:
    :return: data
    """
    data = []
    with open(corpus_path, encoding='utf-8') as fr:
        lines = fr.readlines()
    sent_, tag_ = [], []
    for line in lines:
        if line != '\n' and line != '\t\n':  #
            [char, label] = line.strip().split()
            sent_.append(char)
            tag_.append(label)
        #else:
        elif sent_ !=[] and tag_ !=[]: # 
            data.append((sent_, tag_))
            sent_, tag_ = [], []

    return data
0 голосов
/ 03 августа 2018
def read_corpus(self, corpus_path):
    data = []
    with open(corpus_path, 'r') as r_file:
        sent_, tag_ = [], []
        for line in r_file:
            line = line.strip()
            if len(line) != 0 and line != '-DOCSTART-':
                ls = line.split('\t')
                char, tag = ls[0], ls[-1]
                sent_.append(char)
                tag_.append(tag)
            else:
                    data.append((sent_, tag_))
                    sent_, tag_ = [], []
        # Bug-fix
        # Here, since the last tuple (sent_, tag_) will be added into data
        # It will case IndexError in viterbi_decode since the sequence_length is 0
        if sent_ and tag_:
            data.append((sent_, tag_))
    self.data = data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...