从电子邮件中提取字段,使用数据库中的值作为训练集

我有480封电子邮件,每封邮件包含以下一个或所有值:

[人名, 学位, 工作/不工作, 职位]

例如,其中一封邮件如下所示:

    嗨 Amy,    我想讨论一下 Bob。我看到他拥有计算机科学学位,这是三年前获得的,但他仍然失业。     我不知道他是否适合我们学院的初级程序员职位。    我会在这件事上给你回信。    谢谢

这封邮件在数据库中的对应条目如下:

Email_123 | Bob | 计算机科学 | 失业 | 初级程序员

虽然数据没有被标记,但我们仍然有一个数据库,可以查找从每封邮件中提取到四个字段的值。现在我的问题是,如何使用这480封邮件的语料库,通过机器学习/自然语言处理来学习和提取这四个字段。我是否需要手动标记所有这480封邮件,比如这样…

我想讨论一下<人名>Bob</人名>。我看到他拥有<学位>计算机科学</学位>学位,他获得了....

或者有更好的方法。比如这个(MarI/O – 视频游戏的机器学习) https://www.youtube.com/watch?v=qv6UVOQ0F44&t=149s


回答:

假设每封邮件每个字段只有一个值,且该值总是从邮件中原样复制,你可以使用像WikiReading这样的工具。

WikiReading提取示例

问题在于WikiReading是在470万个例子上训练的,所以如果你只有480个,这远远不够来训练一个好的模型。

我建议对你的数据集进行预处理,自动添加像你示例中的标签。类似这样,用伪Python代码表示:

entity = "初级程序员"entity_type = "职位"mail = "...[邮件文本]..."ind = mail.index(entity)tagged = "{front}<{tag}>{ent}</{tag}>{back}".format(  front=mail[0:ind],  back=mail[ind+len(entity):],  tag=entity_type,  ent=entity)

你需要调整大小写问题、多重匹配等情况。

有了标记的数据,你可以使用传统的命名实体识别系统,比如CRF。 这里有一个使用Python中的spaCy的教程。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注