Nlp 使用NLTK中的自定义标记对标记器进行培训

Nlp 使用NLTK中的自定义标记对标记器进行培训,nlp,nltk,information-extraction,supervised-learning,Nlp,Nltk,Information Extraction,Supervised Learning,我有一份文件,上面有标记数据,格式如下:嗨,这是我的[关键字电话号码],如果你想出去玩,请告诉我:[电话7802708523]。我住在[纽约市]的[道具式公寓]。我希望基于一组此类标记文档训练模型,然后使用我的模型标记新文档。这在NLTK中可能吗?我看过和脚本,但它们有一组有限的标记和语料库,而我的数据集有自定义标记。您要解决的问题通常称为NER。有许多算法可以帮助您解决这个问题,但最重要的概念是,您需要将文本数据转换为适合序列标记器的格式。以下是BIO格式的一个示例: I O love

我有一份文件,上面有标记数据,格式如下:嗨,这是我的[关键字电话号码],如果你想出去玩,请告诉我:[电话7802708523]。我住在[纽约市]的[道具式公寓]。我希望基于一组此类标记文档训练模型,然后使用我的模型标记新文档。这在NLTK中可能吗?我看过和脚本,但它们有一组有限的标记和语料库,而我的数据集有自定义标记。

您要解决的问题通常称为NER。有许多算法可以帮助您解决这个问题,但最重要的概念是,您需要将文本数据转换为适合序列标记器的格式。以下是BIO格式的一个示例:

I     O
love  O
Paris B-LOC
and   O
New   B-LOC
York  I-LOC
.     O

从那里,您可以选择训练任何类型的分类器,如朴素贝叶斯、支持向量机、MaxEnt、CRF等。目前最流行的用于此类多令牌序列分类任务的算法是。有一些可用的工具可以让你训练一个BIO模型,尽管最初打算使用上面显示的格式从文件中分块,例如。如果您使用的是Python,那么除了NLTK之外,您还可以研究它。

正如@AleksandarSavkov所写的,这本质上是一个命名实体识别任务,或者更一般地说是一个分块任务,正如您已经意识到的那样。如何做到这一点,在NLTK的书中有详细介绍。我建议您忽略关于regexp标记的部分,使用第3节中的方法。它包括一些代码示例,您可以使用逐字逐句创建chunker。您的责任是选择能够提供良好性能的功能

您需要将数据转换为NLTK架构所期望的IOB格式;它需要词性标记,因此第一步应该是通过POS标记器运行输入;nltk.pos_标记在去掉[KEYWORD…]等标记后就可以做得很好,并且不需要安装其他软件。当您的语料库采用以下格式word-POS标记-IOB标记时,您就可以训练识别器了:

Hi NNP O
here RB O
's POS O
my PRP$ O
phone NN B-KEYWORD
number NN I-KEYWORD
, , O
let VB O
me PRP O
...

生物块标记似乎是正确的方向,请参阅。根据您对输入的编码方式,您可能需要一个细粒度分类器来标记,以便在分块后识别电话或关键字。您能提供更多的示例吗?都是电话号码吗?可能添加[tag:information extraction]?不,数据是多种多样的,它包括电话号码、地址、姓名、日期等。对于BIO chunk标记,是否有一些代码示例我可以看一下?NLTK工具箱使用三列格式:word POS tag BIO tag。将词性标记步骤添加到处理管道不会有什么坏处。谢谢,在通过词性标记器运行输入后,我不清楚该步骤。如何插入自己的自定义标记?也许我误解了你所说的去掉关键字之类的标记的意思,我只是刚刚看到你的评论。。。这个回复几乎和你的评论一样晚,对不起!我所说的去除标记的意思是POS标记器使用标记化的纯文本;您需要从语料库中删除块标签,用NLTK标记并标记文本,然后再次插入块,您最好使用IOB格式,因为这是您最终需要的。如果你仍然不知道怎么做,我可以编辑我的答案来解释更多。谢谢,这很有帮助。所以最终的输出将是一个word POS标记自定义标记的列表,对吗?明白了。使用IOB格式表示的自定义标记。我的答案中的示例显示了一些带有自定义标记关键字的示例文本,这些文本被翻译成这种格式。