关于如何索引单词并使用其类型(实体等)进行注释的指导,然后是Elasticsearch / w.e。用注释返回这些单词?

时间:2015-12-13 22:14:23

标签: elasticsearch solr nlp sphinx

我正在尝试构建一个非常简单的NLP聊天(我甚至可以说伪NLP?),我想识别一个固定的意图子集(动词,情绪)和实体(产品等)

这是一种实体识别或命名实体识别,但我不确定我需要一个完整的NER解决方案来实现我想要的目标。 我不在乎这个人是否打车而不是车。他必须输入一个确切的词。所以不需要在这里处理语言。

它不需要对单词进行标识和分类,我只是在寻找一种方法,当我搜索短语时,它会返回包含if的每个单词的所有结果。

我想索引类似的内容:

want [type: intent]
buy [type: intent]
computer [type: entity]
car [type: entity]

然后用户将输入:

  

我想买车。

然后我将此短语发送到ElasticSearch / Solr / w.e。并且它应该返回类似下面的东西(它不必像那样结构化,但每个单词应该带有它的类型):

[
    {"word":"want", "type:"intent"},
    {"word":"buy", "type":"intent"},
    {"word":"car","type":"car"}
]

我带来的方法是将每个单词索引为:

{
    "word": "car",
    "type": "entity"
}
{
    "word": "buy",
    "type": "intent"
}

然后我提供整个短语,用“单词”搜索。但到目前为止我没有成功,因为弹性搜索没有返回任何单词,即使短语包含被索引的单词。

使用其中一个主要搜索引擎保留此信息的任何见解/想法/提示?

如果我确实需要使用专用的NER解决方案,那么在不需要担心修改拼写错误,多语言等问题的情况下,注意这样的词语的方法是什么? 我希望仅在人员完全按原样键入意图和实体时返回结果,因此不是高级NLP解决方案。

奇怪的是我在google上找不到这个。

1 个答案:

答案 0 :(得分:2)

我创建了一个基本的index并索引了一些像这样的文档

PUT nlpindex/mytype/1
{
    "word": "buy",
    "type": "intent"
}

我使用query string搜索短语中出现的所有字词

GET nlpindex/_search
{
  "query": {
    "query_string": {
      "query": "I want to buy a car",
      "default_field": "word"
    }
  }
}

默认情况下,operator OR ,因此会搜索word字段中短语中的每个单词。

这是我得到的结果

"hits": [
     {
        "_index": "nlpindex",
        "_type": "mytype",
        "_id": "1",
        "_score": 0.09427826,
        "_source": {
           "word": "car",
           "type": "entity"
        }
     },
     {
        "_index": "nlpindex",
        "_type": "mytype",
        "_id": "4",
        "_score": 0.09427826,
        "_source": {
           "word": "want",
           "type": "intent"
        }
     },
     {
        "_index": "nlpindex",
        "_type": "mytype",
        "_id": "3",
        "_score": 0.09427826,
        "_source": {
           "word": "buy",
           "type": "intent"
        }
     }
  ]

这有帮助吗?