假设您是报纸行业的编辑,每天都会收到数千个故事。您将如何找到与体育,政治等特定领域相关的故事?您会讲完所有这些故事吗?无权利?一个可以帮助您划分为不同类别的系统怎么样?该系统还可以执行复杂的任务,例如按城市划分故事,识别故事中涉及的人员姓名,组织等。在这篇文章中,我将向您介绍一个名为命名实体识别(NER)的东西。NER的任务是在文本中查找单词的类型。
简介:
在自然语言处理(NLP)中,实体识别是常见问题之一。该实体称为感兴趣的文本部分。在NLP中,NER是一种从大型语料库中提取相关信息并将这些实体分类为预定义类别(如位置,组织,名称等)的方法。这是一个简单的示例,可以解决与特定于领域的问题相关的复杂实体识别。
2.先决条件:
这篇文章假定您熟悉:机器学习和神经网络的基本概念
在Python和Keras中运行的LSTM网络
条件随机场(CRF)
3.了解数据:
我已经使用了kaggle的数据集。该数据集是从GMB(格罗宁根意思银行)语料库中提取的,该语料库经过标记,注释和构建,专门用于训练分类器以预测命名的实体(例如名称,位置等)。
所有实体均使用BIO方案进行标记,其中每个实体标签以B或I字母开头。B-表示实体的开始和I-内部。不需要的单词用0 –标签标记。
下表显示了有关单词标签的详细信息。
读取CSV文件并显示前10行。
如您所见,句子#表示句子编号,每个句子包含使用标签栏中的BIO方案标记的单词。
这个特定的数据集包含47959个句子和35178个唯一单词。对于预处理步骤,您可以参考我的Github存储库。
让我们显示第一个句子。
4.使用条件随机字段(CRF)的NER:
CRF用于预测使用上下文信息添加信息的序列,模型将使用这些信息进行正确的预测。
以下是CRF的公式,其中y是输出变量,X是输入序列。
输出序列被建模为特征函数的归一化乘积。
4.1 CRF的功能准备:
以下是NER在nltk中使用的默认功能。还可以修改它以进行自定义,并可以提高模型的准确性。
加入我们的每周时事通讯以接收:最新文章和访谈
一个我事件:更新,免费通行证和优惠码
加入AI Time Journal计划的机会
4.2用scikit-learn训练模型:
现在,我们可以使用sklearn-crfsuite提供的条件随机字段实现来训练模型。初始化模型实例,并使用fit方法拟合训练数据。
4.3评估模型性能:
我们将使用精度,召回率和f1得分指标来评估模型的性能,因为对于该数据集而言,精度不是一个好的指标,因为每个类中的数据点数量均不相等。
结果看起来不错。
5.带有双向LSTM – CRF的NER:
在本节中,我们将双向LSTM模型与CRF模型结合在一起。这种方法称为Bi LSTM-CRF模型,这是命名实体识别的最新方法。LSTM(长期短期记忆)是一种特殊类型的递归神经网络,用于处理数据序列。
5.1定义模型参数:
如果您知道这些参数的含义,那么您可以进行尝试并获得良好的结果。
5.2模型架构:
现在我们可以定义递归神经网络架构,并为LSTM网络提供训练数据。
我已经使用了keras callback()函数。
5.3可视化模型性能:
在这里,我们将绘制训练和验证集的损失与历时之间的图。
分类报告。
您可以从上一节中看到该模型优于性能。
6.评估:
让我们尝试从测试数据语句中识别出模型在训练过程中看不到的实体,以了解模型的性能如何。
每次执行时,以下代码都会从测试数据中随机选择句子,并为其预测标签。
现在,我们可以轻松地将模型的预测与实际预测进行比较。
要点:
我们必须了解这里训练的模型只能识别位置,人等常见实体。可以建立一个复杂的模型来预测化学实体,药物等,但是要完成这样的任务,制备和标记该数据集将具有挑战性。
7.结论和未来工作:
这是解决此问题的首选方法,可以通过以下方法进行修改以改进解决方案:更改模型超参数,例如时期数,嵌入尺寸,批处理大小,退出率,激活等。
使用更大的数据集。在这里,我们仅使用了47959个句子,这些句子很少为实体识别问题建立良好的模型。
使用预训练的词嵌入。
对LSTM使用字符级嵌入。
BERT模型的微调。
通过添加在测试时出现的未知标记来改进词汇表,方法是替换我们训练模型时使用的所有不常见词。为简便起见,我们还没有这样做。