Я довольно новичок в python и гораздо больше в машинном обучении. В настоящее время я работаю со spacy над Pycharm и хочу обучить и протестировать пустую модель с определенным набором данных Проблема в том, что по какой-то причине я не могу понять, что я не могу тренировать train_test_split с test_size <0.32, поскольку он будет отображать ноль для всех результатов и возвращает пустой список для <code>ents_per_type, как показано в ссылке ниже, когда используется TESTING_DATA
оценить модель с помощью scorer.score
:
Хотя, если я разделю данные до значения test_size, равного 0,32 или больше, то получим нормальные результаты , Это не имеет никакого смысла для меня, так как я не могу понять, в чем разница с 0,32 до 0,31.
То, как я это делаю, выглядит так:
TOTAL_DATA = []
TOTAL_DATA = plac.call(main)
TRAIN_DATA, TESTING_DATA = train_test_split(TOTAL_DATA, test_size=0.3, random_state=42)
Я искал для какого-то ответа я напечатал TRAIN_DATA
и TESTING_DATA
, и они оба кажутся равными, но у одного больше информации, чем у другого. Из-за этого я был уверен, что внутри класса Scorer есть что-то более конкретное, метод scorer.score
, который будет давать мне такие результаты, поэтому я начал печатать случайные вещи, чтобы увидеть, где они не проходили, и кажется, что в этой части Метод оценки:
if "-" not in [token[-1] for token in gold.orig_annot]:
print("YES")
# Find all NER labels in gold and doc
ent_labels = set([x[0] for x in gold_ents] + [k.label_ for k in doc.ents])
# Set up all labels for per type scoring and prepare gold per type
gold_per_ents = {ent_label: set() for ent_label in ent_labels}
for ent_label in ent_labels:
if ent_label not in self.ner_per_ents:
self.ner_per_ents[ent_label] = PRFScore()
gold_per_ents[ent_label].update(
[x for x in gold_ents if x[0] == ent_label]
)
Таким образом, при моем тестовом наборе, равном 0,32 или более, он проходит через него и печатает «ДА», но если я установлю значение test_size меньше 0,32, как, например, 0,30, оно не будет go через который, я думаю, приведет к пустым результатам.
Так что если кто-то из вас может знать, что происходит, я был бы очень признателен!
Заранее спасибо!
PS: Моя функция оценки:
def evaluate(self, ner_model, examples):
scorer = Scorer()
for input_, annot in examples:
doc_gold_text = ner_model.make_doc(input_)
gold = GoldParse(doc_gold_text, entities=annot)
pred_value = ner_model(input_)
scorer.score(pred_value, gold)
return scorer.scores
И мои версии: Keras: 2.3.1 Tensorflow: 2.0.0 Numpy: 1.17.3 Spacy: 2.2.1 Sklearn: 0.0 Python: 3.7. 2