使用 CRF 识别文档的特定部分

Posted

技术标签:

【中文标题】使用 CRF 识别文档的特定部分【英文标题】:Identifying specific parts of a document using CRF 【发布时间】:2017-11-09 03:17:37 【问题描述】:

我的目标是给定一组文档(主要是金融领域),我们需要识别其中的特定部分,例如公司名称或文档类型等。

假设培训是在 100 份文档上完成的。显然,我会有一个倾斜的类分布(None 在大约 99.9% 的示例中占主导地位)。 我计划使用 CRF(Sklearn 上的 CRFsuite)并阅读了必要的文献。我需要一些关于以下方面的建议:

数据集是否足以训练 CRF?考虑到每个文档可以分成大约 100 个标记(每个标记是一个训练实例),我们总共会得到 10000 个实例。

数据集是否会过于偏斜而无法训练 CRF?例如:对于 100 个文档,我将有大约 400 个给定类的实例和大约 8000 个无实例

【问题讨论】:

【参考方案1】:
    没有人知道,你必须在你的数据集上尝试它,检查结果质量,也许检查 CRF 模型(例如 https://github.com/TeamHG-Memex/eli5 支持 sklearn-crfsuite - 一个无耻的插件),尝试提出更好的功能或决定注释更多示例等。这只是一般的数据科学工作。数据集大小看起来偏低,但取决于数据的结构和特征的好坏,几百个文档可能足以开始。由于数据集较小,您可能需要在特征工程上投入更多时间。 我认为班级不平衡不是问题,至少它不太可能是您的主要问题。

【讨论】:

以上是关于使用 CRF 识别文档的特定部分的主要内容,如果未能解决你的问题,请参考以下文章

基于tensorflow的bilstm_crf的命名实体识别(数据集是msra命名实体识别数据集)

CRF进行中文命名实体识别(使用sklearn_crfsuite进行实现)

NLP_命名实体识别CRF++使用流程

使用conlleval.pl对CRF测试结果进行评价的方法

Pytorch Bi-LSTM + CRF 代码详解

NLP入门使用CRF++实现命名实体识别(NER)