Python 3.x NER:为Spacy v3定义列车数据
我真的需要一些帮助来为spacy创建训练数据。我尝试了多种方法为spacy创建训练数据。我从单词和实体的csv开始,将它们转换成单词和实体列表,将单词组合成句子列表,将标签转换成每个句子的标签列表。然后我将它们转换为json格式。我现在有多个版本的json文件,我想转换成新的.spacy格式。然而,似乎在使用--converter-ner之后没有训练数据工作,因为它找不到ner格式 我首先尝试将示例转换为json文件Python 3.x NER:为Spacy v3定义列车数据,python-3.x,training-data,ner,spacy-3,Python 3.x,Training Data,Ner,Spacy 3,我真的需要一些帮助来为spacy创建训练数据。我尝试了多种方法为spacy创建训练数据。我从单词和实体的csv开始,将它们转换成单词和实体列表,将单词组合成句子列表,将标签转换成每个句子的标签列表。然后我将它们转换为json格式。我现在有多个版本的json文件,我想转换成新的.spacy格式。然而,似乎在使用--converter-ner之后没有训练数据工作,因为它找不到ner格式 我首先尝试将示例转换为json文件 next_sentence = "" word_index
next_sentence = ""
word_index_in_sentence = 0
start_index = list()
end_index = list()
sent_tags = list()
TRAIN_DATA = []
with open("/content/drive/MyDrive/train_file.json", "w+", encoding="utf-8") as f:
for word_index, word in enumerate(word_list):
if word_index_in_sentence is 0:
start_index.append(0)
else:
start_index.append((end_index[word_index_in_sentence-1])+1)
sent_tags.append(tag_list[word_index])
if word == "." or word == "?" or word == "!" or word_index == len(word_list)-1:
next_sentence += word
end_index.append(start_index[word_index_in_sentence]+1)
entities = "";
for i in range(word_index_in_sentence):
if (i != 0):
entities += ","
entities += "(" + str(start_index[i]) + "," + str(end_index[i]) + "," + "'" + sent_tags[i] + "'" + ")"
f.write('("' + next_sentence + '",{"entities": [' + entities + ']}),')
next_sentence = ""
word_index_in_sentence = 0
start_index = list()
end_index = list()
sent_tags = list()
else:
if word_list[word_index + 1] == "," or word_list[word_index + 1] == "." or word_list[word_index + 1] == "!" or word_list[word_index + 1] == "?":
next_sentence += word
end_index.append(start_index[word_index_in_sentence]+len(word)-1)
else:
next_sentence += word + " "
end_index.append(start_index[word_index_in_sentence]+len(word))
word_index_in_sentence += 1
因为这并没有像预期的那样起作用。
然后我试着写了一个单子。所以不是
f.write('("' + next_sentence + '",{"entities": [' + entities + ']}),')
我创建了一个列数据列表,将值添加为dict,如下所示:
TRAIN_DATA.append({next_sentence: {"entities":entities}})
再次将TRAIN_数据保存到json文件
但是,当使用python-m spacy convert--converter-ner/path/to/file/path/to/save
时,它会将其转换为.spacy,但它会声明:
⚠ 无法自动检测NER格式。转换可能不会成功。
看见⚠ 没有找到要删除的句子边界
与选项一起使用-n 1
。使用-s
自动分割句子或
-n 0
禁用。⚠ 没有找到句子边界。使用-s
来
自动分割句子。⚠ 找不到文档分隔符。使用
-n
自动将句子分组到文档中。✔ 生成
输出文件(1个文档):
/content/drive/MyDrive/TRAIN_DATA/hope.spacy
我的培训数据在转换为json后如下所示:
[{”这是一个很好的例子,是一个很好的例子
韦斯·奥菲特莱滕(Weise aufgetreten)说,这是一场战争
{“实体”:
“(0,8,'B-PER'),(9,14,'O'),(15,18,'O'),(19,31,'B-ORG'),(32,35,'O'),(36,42,'O'),(43,44,'O'),(45,52,'B-PER'),(53,56,'O'),(57,59,'O'),(60,65,'O'),(66,71,'O'),(72,82,'O'),(83,84,'O'),(85,88,'O'),(45,52,'B-PER'),(53,56,'O'),(57,59,'O'),(60,59,'O'),'O'),(60,65,'O'),(60,65,'O'),(66,71,'O'),'O'),(102,'O'),'O'),(101,'O,'O,'O'),
{“welt.de vom 29.10.2005森林狼彼得·布里·阿尔贝特
安福·德西布齐格·阿勒·穆贝尔弗雷特,阿勒·伊恩·弗利根
Händler aus dem Libanon traf.:{“实体”:
“(0,22,”[2005-10-29])
或者像这样:
TRAIN_DATA.append({next_sentence: {"entities":entities}})
[((“沙尔托·萨格特·塔格斯皮耶格尔·沃姆·弗雷塔格,费舍尔·塞伊)
在战争中,我们将继续战斗,
{“实体”:
(0,8,'B-PER'),(9,14,'O'),(15,18,'O'),(19,31,'B-ORG'),(32,35,'O'),(36,42,'O'),(43,44,'O'),(45,52,'B-PER'),(53,56,'O'),(57,59,'O'),(60,65,'O'),(66,71,'O'),(72,82,'O'),(83,84,'O'),(85,88,'O'),(45,52,'B-PER'),(53,56,'O'),(57,59,'O'),'O'),(60,65,'O'),(60,65,'O'),'O'),(66,71,'O'),'O'),(102,'O'),(101,'O'),(118,'O'),(118,'O,'
给我输出:
⚠ “调试数据”命令现在可通过“调试数据”命令使用
子命令(不带连字符)。您可以运行python-msapacy调试
--有关其他可用调试命令的概述的帮助
==================================================================================================================================================================✔ 语料库是可加载的✔ 管道可以用数据初始化
==============================================================================================语言:反培训管道:转换器,ner 1培训文档1评估文档✔ 无重叠
在培训和评估数据之间✘ 需要培训的示例数量较少
新管道(1)
===========================================================================================ℹ 数据中总共有1个字(1个唯一)ℹ 包中不存在字向量
=======================================================================================================================================ℹ 1个标签0缺少值(带有“-”标签的标记)⚠ 标签的示例数量较少
‘stamt’,{“实体”:[(0,51,“O”),(52,67,“B’(1)⚠ 没有文本示例
如果没有新标签“stamt”,“实体”:[(0,51,“O”),(52,67,“B”✔ 不
由空格组成或以空格开头/结尾的实体✔ 不
由标点符号组成或以标点符号开头/结尾的实体
==================================================================================================================================================================✔ 5张支票通过⚠ 2警告✘ 1错误
有人能帮我把我的单词和实体列表转换成spacys NER格式来训练一个NER吗?我会很感激的。谢谢!这一点在中得到了回答,但您的数据不是NER格式,也不是转换器使用的json
格式。它是用于训练数据的格式,保存到json中
在这种情况下,最简单的方法可能是将数据转换为柱状IOB数据并在其上运行转换器。如何将数据转换为柱状IOB数据?或者如何将上面的数据转换为转换器使用的正确json格式?我现在有了这样一个方法:Schartau B-PER sagte O dem O Tagesspiegel B-ORG“O O O O《世界报》2005年10月29日[2005-10-29]尽管如此,它仍然是错误的,正如它所说的,它是畸形的。