全部产品
云市场
云游戏

数据准备

更新时间:2020-04-23 14:36:42

由于模型需要通过标注数据来从中学习规律,我们首先要准备好一个标注数据集。以情感分析任务为例,我们的每一条数据为一个(文本,情感)对。例如:(“这个牌子的红枣很不错”,“正”)。情感一共有三种不同的类别:“正”,“中”,“负”。对于每一个不同的类别,我们建议至少准备 500 条训练数据再进行测试。训练数据需要按照 NLP 自学习平台定义好的格式进行处理,以 json 为例,您需要将每一条数据处理成如下格式:

  1. {
  2. "1": {
  3. "content": "这个牌子的红枣很不错",
  4. "records": {
  5. "情感": "正"
  6. }
  7. }
  8. }

文本的内容放在“content”中,而标签的内容放在“records”中,其中content只支持string类型,records字段是一个对象类型。records字段的key代表了题目名称,只支持string类型;value代表具体的标签,可以支持整数类型(如0,1)、string类型(如“正”、“中”、“负”)以及更复杂的数组\对象类型。NLP 自学习平台支持多种文本分类的场景,包括“多题目”,“多标签”,“多层级”以及以上三种场景的组合

多题目

多题目是指对于一段文本,可以进行不同种类的分类,比如对于商品评论文本,您可能不仅想知道评论里的情感,还想知道评论是针对什么类型的商品。所以就有了两个题目,这时数据格式可以如下设计,即在records字段的最外层添加一个“商品类别”的key,以及设置对应的value为“食品”

  1. {
  2. "1": {
  3. "content": "这个牌子的红枣很不错",
  4. "records": {
  5. "情感": "正",
  6. "商品类别": "食品"
  7. }
  8. }
  9. }

当数据存在多题目时,NLP自学习平台支持包含缺失值的情况,即部分数据的部分题目没有标注。如数据集包含两条数据,第一条对于“情感”和“商品类别”都有标注,而在第二条数据中,只是对于“情感”有标注,“商品类别”无标注。此时的标注格式应当如下所示:

  1. {
  2. "1": {
  3. "content": "这个牌子的红枣很不错",
  4. "records": {
  5. "情感": "正",
  6. "商品类别": "食品"
  7. }
  8. },
  9. "2": {
  10. "content": "非常不错,超级喜欢",
  11. "records": {
  12. "情感": "正"
  13. }
  14. }
  15. }

多标签

多标签是指,有时对于同一段文本,可能不止有一个标签是对的,而是可以同时属于多种标签。比如我们希望通过文本判断“食品类别”这个题目,而黄瓜既可以是“蔬菜”又可以是“水果”。这时数据的格式可以如下设计:

  1. {
  2. "1": {
  3. "content": "黄瓜很好吃,特别的脆,超级喜欢",
  4. "records": {
  5. "情感": "正",
  6. "食品类别": ["水果", "蔬菜"]
  7. }
  8. }
  9. }

注意records字段的格式,针对“情感”来说是个多分类问题,即只存在唯一的标签,因此其value为string类型,而“食品类别”为多标签,因此其value为数组类型。如果多标签只存在一个,则与多分类无差异,比如下面的数据格式与上面是等价的

  1. {
  2. "1": {
  3. "content": "黄瓜很好吃,特别的脆,超级喜欢",
  4. "records": {
  5. "情感": ["正"],
  6. "食品类别": ["水果", "蔬菜"]
  7. }
  8. }
  9. }

多层级

多层级是指对于我们的标签体系,有时并不是完全平铺的,而是含有层级关系的。比如淘宝的商品的类目体系就是一个层次结构,在第一层我们有“服装”,“电器”,“食品”等分类,而“食品”在第二层还可以细分为“肉类”,“蔬菜”,“水果”等类别。这样就构成了一个层次结构。比如对于商品类别,我们想识别出每一层的标签,则可以构建如下数据格式:

  1. {
  2. "1": {
  3. "content": "这个牌子的红枣很不错",
  4. "records": {
  5. "情感": "正",
  6. "商品类别": [["食品", "水果"]]
  7. }
  8. }
  9. }

如果数据需要再增加一个层级,比如在“水果”下面再增加“热带水果”一类,数据格式应该如下:

  1. {
  2. "1": {
  3. "content": "猫山王榴莲的口感醇厚,味道肥美,绝对是五星级",
  4. "records": {
  5. "情感": "正",
  6. "商品类别": [["食品", "水果", "热带水果"]]
  7. }
  8. }
  9. }

注意这边“商品类别”这个题目下的value变成了一个二维嵌套数组,其中”食品”, “水果”, “热带水果”构成了一个层次递进关系。

在数据为多层级的情形下,NLP自学习平台支持路径不完整的情形,即部分数据没有从根节点到叶子节点的完整标签,此时的标注格式应当如下:

  1. {
  2. "1": {
  3. "content": "黄瓜很好吃,特别的脆,超级喜欢",
  4. "records": {
  5. "情感": "正",
  6. "商品类别": [["食品", "水果"]]
  7. }
  8. },
  9. "2": {
  10. "content": "这个东西很好吃,口感简直绝了",
  11. "records": {
  12. "情感": "正",
  13. "商品类别": [["食品"]]
  14. }
  15. }
  16. }

在这个例子中,数据集里共包含两条数据,第一条对于“商品类别”标注到了第二层级,而在第二条数据中,对于“商品类别”只标注到了第一层级。同样地,针对只有单层和单标签的例子,可以看做层次分类中的特殊情况,因此上述第二条数据里"商品类别": [["食品"]]"商品类别": "食品"没有任何差异。同样地,对于单层次多标签的例子,以下两种表示方法也是完全一致的:"食品类别": [["蔬菜"], ["水果"]]"食品类别": ["蔬菜", "水果"]

更复杂的示例

当数据本身既包含多题目、多层级,又包含多标签的时候,有时多个标签会分布在不同的层次路径下时,此时可以通过如下的格式来组织数据

  1. {
  2. "1": {
  3. "content": "泰国金枕榴莲,令人回味无穷,健脾补气,补肾壮阳",
  4. "records": {
  5. "情感": "正",
  6. "商品类别": [
  7. ["食品", "药用食品"],
  8. ["食品", "水果", "热带水果"],
  9. ["食品", "产地", "东南亚", "泰国"]
  10. ]
  11. }
  12. }
  13. }

注意在“食品”这个一级类目下,该文本存在“药用食品”二级标签;同时在”水果”二级类目下,存在三级标签“热带水果”;另外在“产地”这个二级类目下,存在三级类目“东南亚”,之后存在四级标签“泰国”