关于 spaCy NER 的训练数据
About training data for spaCy NER
我是 NLP 新手。
现在我正在尝试创建 NER 模型以从一些文本中提取音乐艺术家的名字。
但它并没有消失 well.This 是我所做的。
我得到了1500,000个艺术家的名单
我用字符串 template.like 创建了训练数据,这个“{artist's name} is so sick.”
所有1500,000个训练数据都是这样的字符串。
TRAIN_DATA = [
("Nirvana is so sick", {"entities": [(0, 7, "ARTIST")]}),
("City girls is so sick", {"entities": [(0, 10, "ARTIST")]}),
("Taylor swift is so sick", {"entities": [(0, 12, "ARTIST")]}),
]
(也许这就是进展不顺利的原因?)
我训练了30,000个数据后使用了这个模型
但我没有工作all.All句子被提取为ARTIST。
下面是例子。 'Chris Thomas King' 在这种情况下是艺术家的名字。
Entities [('Not sure how they handled it during filming, but Tim Blake Nelson did sing his own parts (as did Chris Thomas King).', 'ARTIST')]
你有什么想法吗?
提前致谢。
如果你所有的训练数据都是同一句话但有不同的艺术家名字,例如“[artist] 病得很重”,你的训练数据需要更多样。
例如,“这首歌是[艺术家]的”、“[艺术家]因这首歌获得了艾美奖”、“这是[艺术家]有史以来最好的歌曲吗?”。仅通过替换一句话中的艺术家姓名来生成训练数据是行不通的。
你需要的不是很多艺术家的名字,而是很多不同的句子和不同的词。
我会以不同的方式处理这个问题。在我看来,你生成训练数据的方式是有偏见的。以下是我将遵循的生成训练数据的步骤。
生成训练数据:
- 从您拥有的艺术家姓名列表开始,并初始化一个 PhraseMatcher。有关如何执行此操作的详细信息,请参阅 here。
- 然后,使用匹配器在你的句子中标记艺术家的名字(你有 30k 个句子)
- 您找到匹配的句子,select 说了 2k 个。每场比赛都有比赛的开始和结束索引。使用它来生成训练数据,即 TRAIN_DATA
完成后,您可以使用训练数据训练您的模型。
编辑
- 您有 150 万个艺术家名字
- 接下来,您现在需要考虑“我希望我的模型在什么上下文中检测这些名称?”
- 一旦你对 2 有了答案,就可以生成训练数据了。您应该在希望它们检测名称的类似上下文中训练您的模型。例如:
- 如果您希望您的模型检测新闻标题中的艺术家姓名,您应该收集 1k 到 2k 个包含艺术家姓名的新标题。
- 如果你想让你的模型检测 reddit 评论中的名字,你应该得到 1k 到 2k 的 reddit 评论,其中有艺术家的名字。
- 你怎么知道这些是否有你问的艺术家名字?你有150万的艺人名字,你可以查字典来验证。
- 现在您已经设置了上下文和大量训练数据集,是时候“注释”数据了。
- 标注的方式有很多种
- 使用注释软件、Doccano、Prodigy 等手动注释
- 使用 PhraseMatcher 来匹配检测艺术家的名字,就像您在 (3) 中所做的那样。
- 现在你有了带注释的数据;是时候训练模型了。
- 瞧,大功告成,现在手头有了一个通用模型。
- 对结果还不满意?
- 添加更多训练数据,转到 (3),重复
我是 NLP 新手。 现在我正在尝试创建 NER 模型以从一些文本中提取音乐艺术家的名字。 但它并没有消失 well.This 是我所做的。
我得到了1500,000个艺术家的名单
我用字符串 template.like 创建了训练数据,这个“{artist's name} is so sick.” 所有1500,000个训练数据都是这样的字符串。
TRAIN_DATA = [
("Nirvana is so sick", {"entities": [(0, 7, "ARTIST")]}),
("City girls is so sick", {"entities": [(0, 10, "ARTIST")]}),
("Taylor swift is so sick", {"entities": [(0, 12, "ARTIST")]}),
]
(也许这就是进展不顺利的原因?)
我训练了30,000个数据后使用了这个模型
但我没有工作all.All句子被提取为ARTIST。 下面是例子。 'Chris Thomas King' 在这种情况下是艺术家的名字。
Entities [('Not sure how they handled it during filming, but Tim Blake Nelson did sing his own parts (as did Chris Thomas King).', 'ARTIST')]
你有什么想法吗? 提前致谢。
如果你所有的训练数据都是同一句话但有不同的艺术家名字,例如“[artist] 病得很重”,你的训练数据需要更多样。
例如,“这首歌是[艺术家]的”、“[艺术家]因这首歌获得了艾美奖”、“这是[艺术家]有史以来最好的歌曲吗?”。仅通过替换一句话中的艺术家姓名来生成训练数据是行不通的。
你需要的不是很多艺术家的名字,而是很多不同的句子和不同的词。
我会以不同的方式处理这个问题。在我看来,你生成训练数据的方式是有偏见的。以下是我将遵循的生成训练数据的步骤。
生成训练数据:
- 从您拥有的艺术家姓名列表开始,并初始化一个 PhraseMatcher。有关如何执行此操作的详细信息,请参阅 here。
- 然后,使用匹配器在你的句子中标记艺术家的名字(你有 30k 个句子)
- 您找到匹配的句子,select 说了 2k 个。每场比赛都有比赛的开始和结束索引。使用它来生成训练数据,即 TRAIN_DATA
完成后,您可以使用训练数据训练您的模型。
编辑
- 您有 150 万个艺术家名字
- 接下来,您现在需要考虑“我希望我的模型在什么上下文中检测这些名称?”
- 一旦你对 2 有了答案,就可以生成训练数据了。您应该在希望它们检测名称的类似上下文中训练您的模型。例如:
- 如果您希望您的模型检测新闻标题中的艺术家姓名,您应该收集 1k 到 2k 个包含艺术家姓名的新标题。
- 如果你想让你的模型检测 reddit 评论中的名字,你应该得到 1k 到 2k 的 reddit 评论,其中有艺术家的名字。
- 你怎么知道这些是否有你问的艺术家名字?你有150万的艺人名字,你可以查字典来验证。
- 现在您已经设置了上下文和大量训练数据集,是时候“注释”数据了。
- 标注的方式有很多种
- 使用注释软件、Doccano、Prodigy 等手动注释
- 使用 PhraseMatcher 来匹配检测艺术家的名字,就像您在 (3) 中所做的那样。
- 现在你有了带注释的数据;是时候训练模型了。
- 瞧,大功告成,现在手头有了一个通用模型。
- 对结果还不满意?
- 添加更多训练数据,转到 (3),重复