<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>命名实体识别</title>
    <link>http://localhost:1313/spacy/ner/index.html</link>
    <description></description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 02 Apr 2025 17:12:00 +0800</lastBuildDate>
    <atom:link href="http://localhost:1313/spacy/ner/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用 EntityRuler 创建训练集</title>
      <link>http://localhost:1313/spacy/ner/01_create_train_set/index.html</link>
      <pubDate>Wed, 02 Apr 2025 17:12:00 +0800</pubDate>
      <guid>http://localhost:1313/spacy/ner/01_create_train_set/index.html</guid>
      <description>训练集简介 在这个笔记本中，我们将更深入地探讨训练集，了解它们是什么，为什么它们很重要，以及如何使用 spaCy 的 EntityRuler 自动化创建一个良好（而非优秀！）的训练数据集，该数据集将需要手动检查。在下一个视频中，我将向您展示如何使用这个训练集在 spaCy 中训练一个自定义的 NER 模型。&#xA;除了 spaCy 能够很好地扩展（意味着它可以在小数据和大数据上表现良好）之外，它还很容易定制，并且可以执行高级机器学习方法，而无需具备机器学习的知识。然而，了解机器学习的基本知识（如本系列笔记本 03 中讨论的那样）是有帮助的，因为它将使您能够了解如何培养良好的训练集，以及为什么某些方法可能会失败或遇到困难。实际上，您将通过实践来培养对机器学习 NER 中什么有效、什么无效的感觉。&#xA;在本系列的第三本笔记本中，我提到训练机器学习模型的数据存在三种形式：训练数据、验证数据和测试数据。所有这些数据都将具有相同的形式。它将是一个列表数据结构，其中每个索引将包含一个文本（一个句子、段落或整个文本）。文本的长度将取决于您希望通过 ML NER 实现的目标。文本的大小将影响训练过程。然而，现在让我们忽略这一点。训练数据还需要另一个组件，即文本中实体的列表，包括其实体开始位置、结束位置和标签。在训练过程中，这些注释将允许卷积神经网络（spaCy 机器学习训练过程背后的架构）从数据中学习，并能够正确识别您正在训练的实体。&#xA;spaCy 训练集是什么样的？ SpaCy 要求您的训练数据具有非常特定的格式：&#xA;TRAIN_DATA = [ (TEXT AS A STRING, {“entities”: [(START, END, LABEL)]}) ] 请注意，TRAIN_DATA 是大写的。在 Python 中，通常不将对象大写，但有少数例外。TRAIN_DATA 就是其中之一。我不知道这个约定的历史，但在每一本书/教程中，你都会看到 TRAIN_DATA 都是这样写的。当然，这不是必需的，但始终在代码中尽可能遵循 Python 风格是一种好习惯，这样别人就能更容易地阅读你的代码。任何机器学习从业者都会期望看到 TRAIN_DATA 是这样写的。&#xA;获取训练数据到这种格式非常困难，手动操作。研究人员必须计算字符来分配实体的起始和结束位置。即使你考虑使用 Python 内置的字符串函数来获取起始和结束字符，你也会遇到另一个问题。spaCy 的训练过程读取起始和结束字符的方式与你可能使用字符串函数计数的方式不同。这意味着在训练过程中，spaCy 将丢弃与标记起始和结束位置不匹配的注释。这是因为与你的字符串函数对文本进行分词的方式相比，spaCy 的分词方式不同。幸运的是，spaCy 通过 EntityRuler 内置了解决方案，以帮助你在这一过程中。&#xA;如果你对手动标注感兴趣，我强烈建议你探索来自 Explosion AI 的付费软件 Prodigy（https://prodi.gy/）。我并不是为了推广该产品而获得报酬。它很贵，但如果你需要做大量的标注（针对图像、文本、视频甚至音频），那么 Prodigy 就是你的工具。它有一个很好的用户界面，并且因为它是由为我们提供 spaCy 的同一团队开发的，所以它可以无缝地融入 spaCy 的工作流程。你可以在这里探索 Prodigy 的演示：https://prodi.gy/demo。</description>
    </item>
    <item>
      <title>如何训练命名实体识别模型</title>
      <link>http://localhost:1313/spacy/ner/02_how_to_train_ner_model/index.html</link>
      <pubDate>Wed, 02 Apr 2025 17:12:00 +0800</pubDate>
      <guid>http://localhost:1313/spacy/ner/02_how_to_train_ner_model/index.html</guid>
      <description>spaCy 中机器学习模型的训练简介 在上一个笔记本中，我们使用 spaCy 的 EntityRuler 创建了一个基本的训练集用于机器学习模型。我们通过做出某些关于非常可能或肯定属于特定标签的事物的假设来完成这项工作。这种培养训练集的方法，从本质上讲是存在问题的。它可能会错过一些实体，并错误地标记其他实体。如果您希望这是用于训练最终模型的必要训练集，我鼓励您进行手动检查。如果您想使用此模型作为可以通过 Prodigy 培养更好训练集的基线模型，那么这种方法也将有效。&#xA;在这个笔记本中，我们不会对训练集进行优化，而是使用它来训练一个定制的 spaCy 机器学习 NER 模型。因此，本笔记本的重点将放在这些方法上，而不是结果上。&#xA;在 01.04：机器学习 NER 中，我们首次接触了机器学习及其一些基本原理。如果您还没有观看那个笔记本和其中的视频，我鼓励您在完成这个笔记本之前先观看，因为我将假设您已经对机器学习有了一定的了解。&#xA;我之所以更喜欢 spaCy 而不是其他 NLP 框架，是因为 spaCy 能够很好地扩展（适用于小数据和大数据）并且它的训练过程易于使用。NER 从业者不需要通过 PyTorch/FastAI 或 TensorFlow/Keras 创建自定义神经网络，尽管这些框架是使用起来最容易的，但学习曲线却很陡峭。相反，spaCy 的用户可以利用 spaCy 训练过程背后的预设计 CNN 架构。在 spaCy 3.0 版本（在撰写本笔记本时，夜间版本可用），预计在 2021 年初，用户还可以自定义这个神经网络架构，从而扩展 spaCy 的实用性和可定制性。&#xA;为了利用 spaCy 的训练过程，用户只需要了解一些基本概念，例如数据应该如何进入训练过程（在上一个笔记本中介绍）以及一些超参数（我们在训练过程中调整以尝试找到最佳结果的东西）。&#xA;准备数据 如前一个笔记本所述，您的输入数据应采用以下格式：&#xA;TRAIN_DATA = [ (TEXT AS A STRING, {“entities”: [(START, END, LABEL)]}) ] 首先，让我们将上一段视频中的代码引入以生成我们的训练数据：&#xA;import spacy nlp = spacy.load(&#34;en_core_web_sm&#34;) text = &#34;Treblinka is a small village in Poland. Wikipedia notes that Treblinka is not large.&#34; corpus = [] doc = nlp(text) for sent in doc.sents: corpus.append(sent.text) nlp = spacy.blank(&#34;en&#34;) ruler = nlp.add_pipe(&#34;entity_ruler&#34;) patterns = [ {&#34;label&#34;: &#34;GPE&#34;, &#34;pattern&#34;: &#34;Treblinka&#34;} ] ruler.add_patterns(patterns) TRAIN_DATA = [] for sentence in corpus: doc = nlp(sentence) entities = [] for ent in doc.ents: entities.append([ent.start_char, ent.end_char, ent.label_]) TRAIN_DATA.append([sentence, {&#34;entities&#34;: entities}]) print (TRAIN_DATA) 如何将训练数据转换为 spaCy 二进制文件 在此教科书的早期版本中，我们使用了 spaCy 2。在 spaCy 3 中进行训练的方式完全不同。虽然可以在脚本中处理一些基础知识，但我认为在终端中完成是最好的。因为这本教科书是基于许多 Jupyter Notebooks 的 JupyterBook，我们可以通过在单元格开头使用 ! 来执行基于终端的命令。为了训练机器学习模型，我们首先需要创建一个包含训练数据的 spaCy 二进制对象。我发现如果将来需要重复使用一小段代码，使用函数总是很好的，这样就可以保证可重复性。以下函数可在 spaCy 的仓库中找到：https://github.com/explosion/projects/blob/v3/pipelines/ner_demo/scripts/convert。我对其进行了轻微修改以更好地适应本教科书。</description>
    </item>
  </channel>
</rss>