使用 NLP 和 ML 构建搜索工具和分类文本

数据挖掘 机器学习 nlp
2022-03-08 01:26:12

我是信息检索的新手。目前,我正在阅读Christopher D. Manning 和 Prabhakar Raghavan 撰写的名为“信息检索简介”的书。我试图实现一个基于人工智能的搜索工具来从私人数据集中搜索一些相关信息。(比如说一个化学或数学数据集,它包含更多的数字和测量单位的无结构混乱表示)

以下是我的数据集中 JSON 格式的一行,其中键是列名,值是与其对应的值。

  "ABC Project": {
    "In/Out diameter": " Both in and out are 1”  ",

    "Design Pressure (barG)": {
      "Max": "116 psiG (7.99 barG)",
      "Minimum": "79.7 psiG (5.49 barG)",
      "Design": "174 psiG (11.99 barG)"
    },

    "C02 %": "0.671",
    "MW": "16.68 kg/kmol",
    "TITLE": null,
    "Mothiram": "There is  very dense forest and their lived a king. The name of the king was Pandidhurai. He was very brave ",
    "Thooval delivery material": "- thooval delivery material is panam patta 316/316L  "

将从我的数据集中获取上述行的示例搜索查询将是

"分子量接近 16 kg/kmol 的项目,使用 Thooval 输送材料 panam patta 316l,其中 Mothiram 是 Pandidhurai 国王"

我做了什么

预处理

从表中读取每一行(比如T) 作为Ri和搜索查询为Q做以下预处理

  1. 转换小写(数据)
  2. 删除标点符号(数据)
  3. 删除撇号(数据)
  4. 删除单个字符(数据)
  5. 转换数字(数据)
  6. remove_stop_words(数据)
  7. 词干(数据)
  8. 删除标点符号(数据)
  9. 将单词转换为列的向量Ci并对表中的每个相应行执行此操作Ri
  10. 为列建立向量空间模型Ci并对表中的每个相应行执行此操作Ri
  11. 为查询构建向量空间模型Q.
  12. 计算余弦分数以选择高分行

我面临的挑战

  1. 当我执行“remove_punctuation(data)”时,我会丢失重要信息(比如 表示直径列中的英寸)"

  2. 一种解释数据中计量单位的方法

  3. 无法保持值之间的关系(例如16.78 kg/k mol 存储在多维度中并且无法找到它与 MW 相关)。 我认为可以通过构建 ML 分类器并对其进行训练以识别实体 MW 来解决。假设 <16.78 kg/k mol, MW > 并使用测量单位作为特征但是有不同化学成分的百分比组成,IN 和 OUT 直径,内部和外部温度等值。ETC

  4. 难以解释科学术语并映射到一种根形式(例如MW、mol wt、molwt等都是表示分子量的不同方式)

  5. 难以找到数值的接近程度

问题

  • 请建议我使用此数据集构建搜索工具的分步方法(还请建议我一个在每个步骤中都会有用的 apt 算法)
  • 我从这里读到,一些文档可以标记为 <document, class> 并训练 Navie Base Classifier Model 以获得更好的搜索性能。在这种情况下是否有可能,如果可以,您建议的类别标签是什么?更新:我认为 Navie Base 不能用作列或键将大于 1000。我正在寻找一种可扩展的方法来解决这个问题。
  • 有没有比使用向量空间模型和计算余弦相似度更好的方法来解决这个问题?
1个回答

以下是关于您的项目的一些一般想法:

据我了解,您正在尝试使用自由形式的自然语言查询从半结构化数据库中提取非常具体的信息,对吗?如果是的话,重要的是你要意识到这是一个非常雄心勃勃的项目,达到一个不错的质量阶段可能需要大量的工作,而且性能不太可能是完美的。

显然,数值和单位是匹配查询的重要信息。在这种情况下,您可能应该为它们实现一个特殊的过程,因为标准的文本处理不会很好地工作。

  • 检测:如果写入这些值的可能方式很少,则使用 ad-hoc 正则表达式可能更有效。如果没有,您可以尝试训练自定义NER模型。
  • 表示:这是恕我直言的棘手部分。对于一般文本向量来说很好,但是对于向量来说,很难/不可能表示像这样的特殊值。鉴于您有一个半结构化的数据库,您可能想尝试一种更适合您的数据的语义表示:这可能涉及语义角色标记关系提取等技术。

  • 匹配:语义表示的优点是您可以将查询转换为语义表示,然后应用适合您的数据的详细匹配过程(特别是您可以比较相应的数值并使用阈值,或返回差异来表示他们有多远)。