Google 预测 API - 构建分类器训练数据
Posted
技术标签:
【中文标题】Google 预测 API - 构建分类器训练数据【英文标题】:Google prediction API - Building classifier training data 【发布时间】:2016-01-12 09:21:19 【问题描述】:编辑:我正在尝试将新用户评论分类为预定义的一组标签。每条评论都可以关联多个标签。
我已将我的 DB 用户评论映射到 15 个类别,以下示例显示了文本,推理映射的类别
USER_REVIEWS | 类别
"有史以来最好的 pizza
,我们真的很喜欢这个地方,our kids
..." | “食物,家庭”
"The ATV tour was extreme
和 nature was beautiful
..." | “活跃,家庭”
pizza:food
our kids:family
The ATV tour was extreme:active
nature was beautiful:nature
强>
编辑: 我尝试了两种训练数据的方法:
第一个包括单个文件中的所有类别,如下所示:
"food","Best pizza ever, we really loved this place, our kids..."
"family","Best pizza ever, we really loved this place, our kids..."
第二种方法是将训练数据拆分为 15 个单独的文件,如下所示:
family_training_data.csv:
"true" , "Best pizza ever, we really loved this place, our kids..."
"false" , "The ATV tour was extreme and the nature was beautiful ..."
以上都不是结论性的,并且大多数时候都错过了标记。
以下是我在试验时提出的一些问题:
-
我的一些评论很长(超过 300 字),我是否应该限制我的训练数据文件中的字数,使其与平均评论字数 (80) 相匹配?
最好是将数据分成15个训练数据文件,用TRUE/FALSE选项,意思是:(是特定类别的评论文本),还是将所有类别混合在一个训练数据文件中?
如何训练模型以查找同义词或相关关键字,以便它可以将“
motorbike
骑行很棒”标记为 active
,尽管训练数据记录了 ATV
骑行
我尝试了上述一些方法,但没有任何好的结果。问:哪种训练数据格式会产生最好的结果?
【问题讨论】:
您提出了非常广泛的问题;我认为这超出了 *** 的应用范围。就目前而言,我认为我无法回答这个问题。您要解决什么具体问题?什么是“好结果”?您对“最佳结果”的标准是什么?为什么要将模型训练为词典,而这通常是一项定向任务? 感谢您的回复,我会尽量详细说明。我要解决的问题是将评论分类到预定义的标签,目前我得到的结果(大部分时间)不是结论性的,或者缺少所有标签,好的结果将是评论被正确标记 80%时代。由于我不是构建训练数据方面的专家,所以我带着很多不确定性来到这里。 请检查我的编辑:) 关于您的问题 1. 和 3.,我认为编写代码来预处理您的训练示例和您的输入可能会有所帮助。您的分类主要是基于关键字的,因此以编程方式过滤掉文章、标点符号等,规范语法大小写,以及可能还使用一些现有数据库(并包括训练样本中的关联)构建同义词图将减少噪声-信号比。 【参考方案1】:在遇到类似问题后,以下是我对您的问题的见解:
-
根据 WATSON Natural Language Classifier documentation,最好将输入文本的长度限制在 60 个单词以下,所以我猜使用您的平均 80 个单词会产生更好的结果
您可以采用任何一种方式,但单独的文件会产生更明确的结果
创建同义词图是一个很好的起点,WATSON 旨在回答更复杂的认知解决方案。
WATSON 指南中的一些其他帮助提示:
将输入文本的长度限制为少于 60 个字。 将类数限制为数百个类。支持更大的 更高版本的服务中可能会包含许多类。 当每条文本记录只有一个类时,确保每个类都是 与至少 5 - 10 条记录相匹配,以提供足够的培训 那堂课。 可能很难决定是否包含多个 文本的类。驱动多个类的两个常见原因: 当文本含糊不清时,识别单个类并不总是很清楚。 当专家以不同的方式解释文本时,多个类 支持这些解释。 但是,如果您的训练中有很多文本 数据包含多个类,或者如果某些文本包含三个以上 类,您可能需要细化类。例如,审查 类是否是分层的。如果它们是分层的, 包含叶节点作为类。
【讨论】:
【参考方案2】:我将从我可以用给定信息回答的部分开始。也许我们可以从那里改进您的问题。
问题 3:如果不支持上下文,您无法训练模型来识别新词汇。不仅仅是“motorbike”不在训练集中,而且“ride”也不在训练集中,评论中的其他词也不涉及交通工具。您寻求的认知信息根本不在您提供的数据中。
问题 2:这取决于您考虑的训练方法。您可以将每个标签作为具有真/假值的单独特征列。这在功能上相当于 15 个单独的数据文件,每个文件都有一个 true/false 值。单文件方法使您有机会稍后扩展到类别之间的某些上下文支持。
问题 1:长度本身并不是特别相关,除了删除非生产性单词有助于集中训练 - 您不会从偶然的相关性中得到几乎一样多的虚假分类。你有办法以编程方式减小大小吗?你能把它应用到你想分类的新输入吗?如果没有,那么我不确定这是否值得。
未解决的问题
您有哪些经验证据表明给定数据可以达到 80% 的准确率?如果训练数据不包含准确标记该数据所需的理论信息,那么您就没有机会获得您想要的模型。
您选择的应用程序是否有足够的智能将评论分解成文字?是否对词序或语义有任何认识——你需要吗?
【讨论】:
我没有证据表明 80% ~ 是可能的,这只是我的目标,我正在研究 Alchemy (alchemyapi.com/products/demo/alchemylanguage),尤其是在分类部分寻找灵感。将认知信息添加到我的训练数据中的正确方法是什么? 没有一个正确的方法;这取决于您要添加的认知信息以及您正在构建的系统的设计。感谢炼金术链接;这是一个可爱、复杂的系统。请务必意识到这是一个复杂的已发布产品的展示作品。伟大的灵感,但一个大项目。 我承认我觉得这个讨论是错误的(不属于 SO)并且缺乏重点。我的问题是我不知道你想要什么作为你发布的结果。你已经问了几个特定于实现的问题,但是当我问到这个系统的更高层次的概念时,我得到了另一个问题,而不是一个可靠的答案。那么……这个项目处于什么阶段?该项目的目标是什么,您的可用资源和时间表是什么?您在目标、目的、要求和规范方面有什么?这有助于我提供有用的反馈。以上是关于Google 预测 API - 构建分类器训练数据的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB:使用 fitctree 训练的分类器对新数据进行标签预测