您能否推荐一条培训路径来开始并在信息提取方面变得非常出色。我开始阅读它来做我的一个爱好项目,并很快意识到我必须擅长数学(代数、统计、概率)。我已经阅读了一些关于不同数学主题的介绍性书籍(非常有趣)。寻求一些指导。请帮忙。
更新:只是为了回答其中一条评论。我对文本信息提取更感兴趣。
您能否推荐一条培训路径来开始并在信息提取方面变得非常出色。我开始阅读它来做我的一个爱好项目,并很快意识到我必须擅长数学(代数、统计、概率)。我已经阅读了一些关于不同数学主题的介绍性书籍(非常有趣)。寻求一些指导。请帮忙。
更新:只是为了回答其中一条评论。我对文本信息提取更感兴趣。
只是为了回答其中一个评论。我对文本信息提取更感兴趣。
根据您项目的性质,自然语言处理和计算语言学都可以派上用场——它们提供了测量工具,从文本信息中提取特征,并应用训练、评分或分类。
好的介绍性书籍包括OReilly 的 Programming Collective Intelligence(关于“搜索和排名”、文档过滤和决策树的章节)。
利用这些知识的建议项目:POS(词性)标记和命名实体识别(从纯文本中识别名称、地点和日期的能力)。您可以将 Wikipedia 用作训练语料库,因为大部分目标信息已经在信息框中提取 - 这可能会为您提供一些有限的测量反馈。
IE 中的另一把大锤是搜索,一个不容小觑的领域。同样,OReilly 的书提供了一些基本排名的介绍;一旦你有大量的索引文本,你就可以用它来做一些真正的 IE 任务。看看Peter Norvig:从数据出发进行理论化,这是一个很好的激励因素——也许你可以重新实现他们的一些结果作为学习练习。
作为一个预警,我想我有义务告诉你,信息提取很困难。任何给定任务的前 80% 通常是微不足道的;然而,IE 任务每增加一个百分比的难度通常呈指数增长——在开发和研究时间中。它的记录也很不足——大多数高质量信息目前都在晦涩难懂的白皮书中(谷歌学术是你的朋友)——一旦你的手被烧了几次,就去看看。但最重要的是,不要让这些障碍让你失望——这方面肯定有很大的进步机会。
我会推荐Christopher D. Manning、Prabhakar Raghavan 和 Hinrich Schütze所著的《信息检索导论》的优秀书籍。它涵盖了广泛的问题领域,这些问题构成了信息提取的重要和最新(2008 年)基础,并且可以在线获取全文(在给定链接下)。
我建议您看一下Natural Language Toolkit (nltk)和NLTK Book。两者都是免费提供的,都是很棒的学习工具。
你不需要擅长数学来做 IE 只需了解算法是如何工作的,在你需要最佳结果性能的情况下进行实验,以及你需要达到目标准确度水平并与之合作的规模。你基本上是在研究算法和编程以及 CS/AI/机器学习理论的各个方面,而不是写一篇关于构建新机器学习算法的博士论文,你必须通过数学原理说服某人为什么该算法有效,所以我完全不同意带着这个想法。实践和理论之间是有区别的——众所周知,数学家更多地停留在理论上,而不是算法的实用性,以产生可行的业务解决方案。然而,你会 需要做一些背景阅读 NLP 书籍和期刊论文,以了解人们从他们的结果中发现了什么。IE 是一个非常特定于上下文的域,因此您需要首先定义要在什么上下文中提取信息 - 您将如何定义这些信息?你的结构化模型是什么?假设您正在从半结构化和非结构化数据集中进行提取。然后,您还需要权衡是否要从标准的人类方法(包括正则表达式和模式匹配等)来处理您的 IE,或者您是否想使用诸如马尔可夫链之类的统计机器学习方法来实现它。您甚至可以查看混合方法。IE 是一个非常特定于上下文的域,因此您需要首先定义要在什么上下文中提取信息 - 您将如何定义这些信息?你的结构化模型是什么?假设您正在从半结构化和非结构化数据集中进行提取。然后,您还需要权衡是否要从标准的人类方法(包括正则表达式和模式匹配等)来处理您的 IE,或者您是否想使用诸如马尔可夫链之类的统计机器学习方法来处理您的 IE。您甚至可以查看混合方法。IE 是一个非常特定于上下文的域,因此您需要首先定义要在什么上下文中提取信息 - 您将如何定义这些信息?你的结构化模型是什么?假设您正在从半结构化和非结构化数据集中进行提取。然后,您还需要权衡是否要从标准的人类方法(包括正则表达式和模式匹配等)来处理您的 IE,或者您是否想使用诸如马尔可夫链之类的统计机器学习方法来处理您的 IE。您甚至可以查看混合方法。然后,您还需要权衡是否要从标准的人类方法(包括正则表达式和模式匹配等)来处理您的 IE,或者您是否想使用诸如马尔可夫链之类的统计机器学习方法来处理您的 IE。您甚至可以查看混合方法。然后,您还需要权衡是否要从标准的人类方法(包括正则表达式和模式匹配等)来处理您的 IE,或者您是否想使用诸如马尔可夫链之类的统计机器学习方法来实现它。您甚至可以查看混合方法。
您可以遵循的标准流程模型进行提取是采用数据/文本挖掘方法:
预处理 - 定义和标准化您的数据,以便从各种或特定来源中提取数据并清理您的数据
分割/分类/聚类/关联 - 您的大部分提取工作将在其中完成的黑匣子
后处理 - 将您的数据清理回您想要存储或表示为信息的位置
此外,您需要了解什么是数据和什么是信息之间的区别。因为您可以重用您发现的信息作为数据源来构建更多信息地图/树/图表。这一切都非常背景化。
标准步骤:输入->处理->输出
如果您使用的是 Java/C++,那么您可以使用大量可用的框架和库。
如果您想进行大量标准文本提取,Perl 将是一种出色的语言来进行 NLP 提取工作。
您可能希望将数据表示为 XML 甚至 RDF 图(语义 Web),并且对于您定义的上下文模型,您可以构建关系和关联图,当您提出越来越多的提取请求时,它们很可能会发生变化。将其部署为一项 RESTful 服务,因为您希望将其视为文档资源。您甚至可以使用 Solr 将其链接到分类数据集和分面搜索。
好的阅读来源是:
确保在将此类应用程序/算法部署到生产环境之前进行全面评估,因为它们会递归地增加您的数据存储需求。您可以使用 AWS/Hadoop 进行集群,使用 Mahout 进行大规模分类等。将您的数据集存储在 MongoDB 中或将非结构化转储存储到 jackrabbit 等中。首先尝试使用原型进行试验。您可以使用各种档案来根据路透社语料库、提示者、TREC 等进行培训。您甚至可以查看 alchemy API、GATE、UIMA、OpenNLP 等。
从标准文本中提取内容比 Web 文档更容易,因此预处理步骤中的表示对于定义您试图从标准化文档表示中提取的确切内容变得更加重要。
标准度量包括精度、召回率、f1 度量等。
我不同意那些推荐阅读《编程集体智能》的人。如果你想做任何中等复杂性的事情,你需要擅长应用数学,而 PCI 会给你一种错误的自信感。例如,当谈到 SVM 时,它只是说 libSVM 是实现它们的好方法。
现在,libSVM 绝对是一个很好的包,但谁在乎包。你需要知道的是为什么 SVM 会给出它所给出的了不起的结果,以及它与贝叶斯的思维方式有何根本不同(以及 Vapnik 是如何成为传奇的)。
恕我直言,没有一种解决方案。您应该很好地掌握线性代数以及概率和贝叶斯理论。我应该补充一点,贝叶斯对此与人类的氧气一样重要(它有点夸张,但你明白我的意思,对吧?)。另外,要好好掌握机器学习。仅仅使用其他人的工作是非常好的,但是当你想知道为什么某事会以这种方式完成时,你将不得不了解一些关于 ML 的知识。
检查这两个:
http://pindancing.blogspot.com/2010/01/learning-about-machine-learniing.html
http://measuringmeasures.com/blog/2010/1/15/learning-about-statistical-learning.html
http://measuringmeasures.com/blog/2010/3/12/learning-about-machine-learning-2nd-ed.html
好的,现在是他们中的三个 :) / 酷
维基百科信息提取文章是一个快速介绍。
在更学术的层面上,您可能想要浏览一篇论文,例如Integrating Probabilistic Extraction Models and Data Mining to Discover Relations and Patterns in Text。
如果您需要企业级 NER 服务,请查看此处。开发 NER 系统(和训练集)是一项非常耗时且技术含量高的任务。
这有点离题,但您可能想阅读 O'Reilly 的 Programming Collective Intelligence。它间接处理文本信息提取,并且不假设有太多的数学背景。