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

我有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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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