将英语单词标识为事物或产品?

时间:2015-02-18 01:04:46

标签: java python nlp nltk text-mining

编写一个具有以下目标的程序 - 能够识别单词/短语是否代表事物/产品。例如 - 1)“手套至少包括食指容器,中指容器......”< -Be能够将手套识别为物品/产品。 2)“在一个窗口调节器,特别是对于汽车,其中窗口连接到驱动器......”< - 能够将调节器识别为物体。 这样做告诉我文本正在谈论一件事/产品。作为对比,下面的文字讨论的是一个过程而不是一个东西/产品 - > “挤出涂层工艺用于生产尼龙涂层基材的柔性包装薄膜,包括......”

我有数百万这样的文字;因此,手动完成它是不可行的。到目前为止,在使用NLTK + Python的帮助下,我已经能够识别出一些使用非常相似的关键字的特定情况。但是我无法对上面例子中提到的那种做同样的事情。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

你想要做的事实上很难。它是一种(非常具体的)语义标签任务。可能的解决方案是:

  • 创建您自己的标签算法,创建培训数据,测试,评估并最终标记您的数据
  • 使用现有知识库(词典)为每个目标词提取语义标签

第一种选择本身就是一个复杂的研究项目。如果你有时间和资源,那就去做吧。

第二个选项只会为您提供知识库中可用的标签,这些标签可能与您的意愿不符。我会尝试使用python,NLTK和Wordnet(interface already available),你可以使用synset hypernyms来解决你的问题。

答案 1 :(得分:-1)

此任务称为命名实体重新调整问题。

编辑:NLP社区中没有NER的清晰定义,因此可以说这不是NER任务,而是更一般的序列标签问题的实例。无论如何,仍然没有工具可以开箱即用。

开箱即用,Standford NLP只能识别以下类型:

  

识别名称(人,地点,组织,MISC),数字   (金钱,数字,正常,百分比)和时间(日期,时间,持续时间,   SET)实体

所以它不适合解决这个任务。有一些商业解决方案可以做到这一点,他们可以通过谷歌搜索“产品名称命名实体识别”,其中一些提供免费试用计划。我不知道任何可以免费部署的解决方案。

当然,您可以通过手工创建自己的模型,大约1000个包含句子的产品名称,并训练一些分类器,如条件随机场分类器和一些基本功能(here is documentation page,解释如何使用stanford NLP)。这个解决方案应该合理地工作,当然它不是完美的(没有系统会是完美的,但有些解决方案比其他解决方案更好)。

编辑:这本身就是一项复杂的任务,但除非你想要最先进的结果,否则 复杂。您可以在2-3天内创建合理的好模型。以下是(示例)逐步说明如何使用开源工具执行此操作:

  • 下载CRF++并查看提供的示例,它们采用简单的文本格式
  • 以类似方式注释您的数据
    a OTHER 
    glove PRODUCT 
    comprising OTHER
    ... 

等等。

将注释数据分为两个文件列(80%)和开发(20%)

  1. 使用以下基线模板功能(粘贴到模板文件中)
  2.     
    
        U02:%x[0,0]
        U01:%x[-1,0]
        U01:%x[-2,0]
        U02:%x[0,0]
        U03:%x[1,0]
        U04:%x[2,0]
        U05:%x[-1,0]/%x[0,0]
        U06:%x[0,0]/%x[1,0]
    
    

    4.Run

    crf_learn template train.txt model
    crf_test -m model dev.txt  > result.txt 
    
    1. 看看result.txt。一列将包含您的手工标记数据和其他 - 机器预测标签。然后,您可以比较这些,计算精度等。之后,您可以将新的未标记数据提供给crf_test并获取标签。
    2. 正如我所说,这不会是完美的,但如果这不合理(我实际上不久前解决了非常类似的任务)我会非常惊讶,并且只使用少量关键字/模板可以更好

      ENDNOTE:这忽略了许多事情和一些解决此类任务的最佳实践,不利于学术研究,不能100%保证工作,但仍然有用于此和许多类似问题作为相对快速的解决方案。