Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x NER:为Spacy v3定义列车数据_Python 3.x_Training Data_Ner_Spacy 3 - Fatal编程技术网

Python 3.x NER:为Spacy v3定义列车数据

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

我真的需要一些帮助来为spacy创建训练数据。我尝试了多种方法为spacy创建训练数据。我从单词和实体的csv开始,将它们转换成单词和实体列表,将单词组合成句子列表,将标签转换成每个句子的标签列表。然后我将它们转换为json格式。我现在有多个版本的json文件,我想转换成新的.spacy格式。然而,似乎在使用--converter-ner之后没有训练数据工作,因为它找不到ner格式

我首先尝试将示例转换为json文件

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]尽管如此,它仍然是错误的,正如它所说的,它是畸形的。