2019-09-12 12:33:54 qq_16555103 阅读数 1750
  • 让机器读懂你的意图——人体行为预测入门视频教学

    机器视觉的主要任务是让机器看懂世界,而世界的主要组成是人类社会。我们一直在围绕物和人的识别展开研究:物品检测识别和行人检测与跟踪+人脸识别。因而,人体行为预测越来越多的进入了研究者的视线中。人体行为预测相当于识别人的动作,从而甚至可以揣摩人的意图:事实上人的很多意图是通过肢体语言表达出来的。因而可以更丰富的让机器读懂人。

    2443 人正在学习 去看看 CSDN讲师

 一、意图识别应用领域

1、搜索引擎
2、对话系统:基于意图识别了解用户想要什么 业务 或者 闲聊,并采用不用的子模型来处理
    1.1 闲聊
            技术:闲聊机器人需要有较高的召回率,因此常常用:seq2seq + attention  / transformer / bert .... 
    1.2 基于业务,例如 电商、买票、查询天气
            技术:基于上述应用场景需要极高的精确率,因此常常用:① 基于业务规则模板、基于语义匹配 ② 
3、智能物联网
4、机器人

二、意图识别的难点

1、用户输入不规范,输入方式多样化,甚至非标准的自然语言
2、表意表现出多意图
       仙剑奇侠传
       游戏?--> 游戏软件?……
       电视剧?--> 电视剧下载?相关新闻?……
3、意图强度,表述不同表现出不同的需求强度
       天气很好啊-->弱意图(心情,闲聊模式)          今天天气怎么样-->强意图(业务模式)
4、意图存在时效性变化,就是随着时间的推移相同问题的意图会发生变化      ******* 难点
5、没有固定的评估的标准

三、意图识别的主要方法

   1、意图识别的类别

(1)导航型 
       将用户导航到相应的领域或相应的流程中
            例:百度 *** 导入到某个网站
(2)信息型 
       提供给用户想知道的信息
            例:百度 *** 的个人信息    ----- 类似百度百科
(3)事务型 
       给用户提供流程中的各个实现环节
            例:百度 *** 坏了         ----- 类似百度知道

   2、规则模板意图识别

     (1)词表穷举法

                     特点:必须一一命中才行,因此模型的召回率较低,精确率极高 

   (2)规则模板解析    

                规则模板解析: 需要基于  分词、词性标注、命名实体识别、依存句法分析、语义分析 的前提下 才能完成

                                           而且数据中使用的也是字典形式(key hash 结构),查询速度较快。

1、适用于查询非常符合规则的类别,通过规则解析的方式来获取查询的意图。
    例:
        北京到上海今天的机票价格,可以转换为:[地点]到[地点][日期][汽车票/机票/火车票]。
            执行过程:
                    第一步:寻找领域,获取子类模板字典
                    第二步:选取模板,这里面命中模板不是所有的内容都全部命中,只需要命中一部分。
                    第三步:采取 反问模板 与用户沟通缺失了模板的那些内容,并补全这些内容(即上述问句没有日期)
                    第四步:给出 完整的模板信息 并 等待用户确认。
        1吨等于多少公斤,可以转换为:[数字][计量单位]等于[数字][计量单位]。
    对规则性较强的query有较好的识别精度,能够较好的提取准确信息。
    缺点:需要人工参与较多,很难自动化实现。
    实用指数:4★
    场景:搜狗通用搜索、小i智能客服、机器人、智能物联网、支付宝分控系统有10000多个模板。

                 特点:规则性较强的query精确率较高,召回率也不错 

  •    案例:搜狗搜索 意图识别

                     规则意图识别的一般技术

                            1. 判断领域:采用实体-主域-模板的整体框架来判别识别领域

                                      注意:主题    ------ 大类别 ;主域  ------- 子类别 ; 模板

                            2. 判断意图:命中主域后,模板采用意图动词(下载、查询等)或意图疑问词(怎么样、为什么等)判别意图

                            3. 区分弱意图和强意图,针对性提供解决方案;判断实体强度

                                搜索引擎意图识别领域判别表:仙剑奇侠传

                 计算过程 

                          第一步:主体(大类)计算

                          第二步:主域(子类)计算 

  •  规则模板解析优化 
4.  query改写包括:query纠错,query扩展,query删除,query转换。
         a. 进行同义词扩展     eg:我去旅游   我要旅游       ------- 技术:① word2vec ② 
         b. 删除一些修饰,扩大召回                          ------- 技术:① booststriping信息抽取 ② 语义分析(三元组)
         c. 通过近义或同义转化,扩大召回                    ------- 技术:① word2vec ② 

    3、深度学习意图识别

1、机器学习和深度学习方法
    意图识别可以看做是一个分类问题,针对于垂直产品的特点,定义不同的查询意图类别。
    对于用户输入的query,根据统计分类模型计算出每一个意图的概率,最终给出查询的意图。             
    缺点:主要是数据获取和更新较困难,数据的标注也需要较准确才能训练出较好地模型。
    实用指数:4★
    场景:京东JIMI、美团垂直搜索

2、深度学习 意图识别常见 模型:
    ① LSTM + attention
    ② BERT网络 分类意图识别

                   特点:模型召回率很高 

  •     案例:京东JIMI  意图识别

                      一、 大致结构

                   二、模型网络

京东JIMI意图识别(baseline)
    深度学习CNN模型,可用于求解一个分类问题,将用户的问题映射到一个具体的分类。最终在算法选型上,采用深度学
    习CNN模型,其中模型参数:
        词向量采用100维
        每个样本限定30个字以内,超出30截断,不足30补充随机向量
        单层CNN网络,第一层卷积核大小3*50

 

 

2020-01-20 12:56:51 qq_42746595 阅读数 174
  • 让机器读懂你的意图——人体行为预测入门视频教学

    机器视觉的主要任务是让机器看懂世界,而世界的主要组成是人类社会。我们一直在围绕物和人的识别展开研究:物品检测识别和行人检测与跟踪+人脸识别。因而,人体行为预测越来越多的进入了研究者的视线中。人体行为预测相当于识别人的动作,从而甚至可以揣摩人的意图:事实上人的很多意图是通过肢体语言表达出来的。因而可以更丰富的让机器读懂人。

    2443 人正在学习 去看看 CSDN讲师

自然语言处理意图识别

自然语言处理一直是机器学习方面的一个难题,最近在参加竞赛时需要进行意图识别的相关探索学习,本文大致对我个人对意图识别的理解和做法进行一个简要的整理。
开始时思考的其实并不容易,因为作为大学生对机器学习和深度学习的底子比较薄,并且做过的跟机器学习有关的项目勉勉强强只能算是有一个,所以开始整理思路时就参考了《美团机器学习实践》这本书,确实获益匪浅,光笔记我就用typora打了40多页,确实值得大家去看一下。
从中我大概了解了整个自然语言处理的综合步骤以及相关做法,然后对意图识别这个名词有了一定的了解,它可以说是电商搜索和推荐的开门砖,从用户的搜索输入中提取最为关键的分类信息,即查找用户搜索的相关商品的门类,再从本门类(无论一级分类如食物、旅游或者二级分类面食类、肉类等精细分类)搜索或者执行推荐算法推荐相似度较高的产品时(当然这种推荐不包括如adaboost这样的相关性商品推荐),会大大减小搜索耗时以及推荐复杂度,很好的节省了系统开销,可以说是大型互联网公司搜索系统的必备杀器。
其中不妨有参考各路大神的代码,如有雷同,还请见谅。
这次意图识别为了同时提高准确率和召回率,我选择使用组合模型进行相应的处理,通过结合ElasticSearch的精确以及快速搜索功能以及综合word2vec词语相似度和LSTM模型两种方法来完成意图准确识别
本文使用的工具和包较多,大体罗列下:

  1. ElasticSearch工具以及Elastic包
  2. jieba分词包(fool分词)
  3. gensim的word2vec相关模块
  4. keras深度学习包LSTM等模块
  5. sklearn的测试集抽取方法train_test_split方法
  6. pickle包进行词向量集以及索引集的保存
  7. json包进行LSTM训练保存
  8. flask框架
  9. mongodb数据库

那么对于意图识别实践我的基本思路是:

  1. 获取项目相关的语料库,进行预处理(最好能够获取比较纯净的与项目相关性较大的语料库),使用jieba分词,并将语句、分词结果、关键词等预处理内容保存入mongodb数据库中,方便后续训练。
  2. 通过语料库来训练gensim的word2vec模块来完成词向量模型的构建(这一步至关重要,直接决定模型最终成型情况),并将model以及词向量字典、索引字典进行保存,以便下次查询不需要重新进行训练。
  3. 训练LSTM模型并进行保存,训练模型的所有操作都应在另一个api或者线程进行,并且在使用之前就已经训练并保存完毕,这样将不影响接口的调用。
  4. 使用jieba包对测试的中文语句进行HMM以及搜索模式分词以及提取关键词,当然选择傻瓜分词fool也未尝不可。
  5. 优先选择使用elasticsearch进行索引快速搜索,对句子中的关键词进行快速全局搜索,取得最大匹配分值的词语所在类别即可完成意图识别,当然这里要设定最小匹配分值,最小匹配分值可以根据实际情况动态调配,在性能和准确率之间进行综合衡量。
  6. 如果全局最大匹配分值低于最小要求匹配分值,即关键词在整个词库中没有记录,则进行LSTM模型预测或word2vec相似词类别加权平均预测。(当然进入到这一步必然会多消耗一定时间,所以最小匹配分值一定要相对合理)
  7. LSTM (长短时记忆神经网络)在自然语言处理处理上的性能相当优秀,由于它基于RNNs(循环神经网络),能够对上下文语境进行一定的反应,其准确性明显胜于词袋模型,但是损耗性能当然也是巨大的。
  8. word2vec相似词类别加权平均预测也算是本人的一个简单的理论创新,通过寻找在词库中已经存在的与现有关键词相似的词集通过相似度加权平均的方式来实现最终的意图判定。

具体代码会在之后博客里面慢慢分享给大家,一次写的太多可能确实也难以理解,我会把每一步的内容在以后的博客进行进一步细致分析和整理,感谢大佬们!

2018-06-11 10:12:42 nanjifengzi 阅读数 2013
  • 让机器读懂你的意图——人体行为预测入门视频教学

    机器视觉的主要任务是让机器看懂世界,而世界的主要组成是人类社会。我们一直在围绕物和人的识别展开研究:物品检测识别和行人检测与跟踪+人脸识别。因而,人体行为预测越来越多的进入了研究者的视线中。人体行为预测相当于识别人的动作,从而甚至可以揣摩人的意图:事实上人的很多意图是通过肢体语言表达出来的。因而可以更丰富的让机器读懂人。

    2443 人正在学习 去看看 CSDN讲师

本次尝试,采用了 深度学习和 机器学习两种方式去考虑相关的。前者采用embedding的词嵌入的方式基于lstm-dssm模型做司机问题和库文件中标准问题做相似度匹配。后者对数据少的信息采用smote方式扩容,采用tfidf和bow方法基于随机森林的方式训练。

数据集总共 1万8千条数据,130个类。标记为null的数据达到1万3千条,数据分布也极为不均衡,所以模型很容易出现 忽略小样本的问题 。


(1) lstm-dssm 记录输入句子的上下文, Lstm 这个模型更为擅长,因此又有了一种 Lstm 来构造的 DSSM 模型

由于 没有对文本特殊处理,采用 1对多个负样本,训练模型。最后输出准确率达到88%左右,大部分偏向了 1万3千个 样本的数据。


(2)随机森林

对 次数出现大于6次和不会NULL的50个分类的数据分析,采用bow和tfidf 对文本信息表达,

采用五折交叉验证,得到的准确率为 98.3%


采用第二种方式 的预测例子:

预测的结果,基本符合前期要求,设计公司的信息,就不展示了。

可以看出尝试了 多次测试,相关的问题不大部分都能分到对应的 标准问题里,对于分类错的数据,暂时归于语料 太少。

2019-07-06 00:04:37 zengNLP 阅读数 5385
  • 让机器读懂你的意图——人体行为预测入门视频教学

    机器视觉的主要任务是让机器看懂世界,而世界的主要组成是人类社会。我们一直在围绕物和人的识别展开研究:物品检测识别和行人检测与跟踪+人脸识别。因而,人体行为预测越来越多的进入了研究者的视线中。人体行为预测相当于识别人的动作,从而甚至可以揣摩人的意图:事实上人的很多意图是通过肢体语言表达出来的。因而可以更丰富的让机器读懂人。

    2443 人正在学习 去看看 CSDN讲师

前言

从规则模板到统计方法,再到机器学习方法,最后到深度学习算法,一起回顾NLP之意图识别的历程。


作用

1、在搜索中会用到意图
比如在baidu中搜索“怎么做龙虾馅饺子”,意图是“做饺子”,而不是“做龙虾”,搜索时以饺子为核心。

2、在问答系统中会用到意图
比如用户问“我要买从深圳到上海的机票”,意图是“买机票”,然后再在“买机票”这个领域继续去做语义识别。


进化史

一、规则模板方法

通过专家手工编写规则模板来识别意图。
比如:
     买 .* 《地名》 .* 《地名》.* 机票 =》 买机票
模板构成: 字符串、词性、正则表达式
通过匹配上述模板,即可识别出对应的意图

  • 缺点:
    1、人工编写工作量大,易冲突
    2、规则模板覆盖面较小,使用通配符可以解决一部分问题,但带来了匹配优先级的问题
    3、适用于垂直领域,在通用领域则无法推广

二、基于统计的方法

使用意图词典做词频统计,取词频最大的就是对应的意图

  • 缺点
    1、覆盖面比规则模板广,但容易误识别

三、基于语法的方法

先对句子做语法分析,找到中心动词及名词,再根据意图词典即可识别出意图来。

如:
     我要买从深圳到上海的机票

1、语法分析结果(调用哈工大的ltp:http://ltp.ai/demo.html):
1

2、再根据意图词典即可识别出“买机票”意图

  • 缺点:
    1、使用语法分析使得准确度更高了,但增加了语法识别的难点,日常口语的语法识别不是那么高,比如:

    我要买个去从深圳到上海的机票

    语法分析结果: 在这里插入图片描述 显然不是我们需要的

四、基于机器学习的方法

  • 核心步骤
    • 1、数据标注
      如:
      我要买个去从深圳到上海的机票 => 买机票
      我要买从深圳到上海的机票 => 买机票

    • 2、数据预处理
      1)对数据进行分词,推荐使用jieba分词工具
      2)去停用词,如:“的”、“个”。。。
      3)增加同义词词条,如:“机票”=“飞机票”、“买”=“购买”。。。

    • 3、训练集拆分
      通常取90%作为训练数据,10%作为测试数据

    • 4、特征提取
      用卡方检验提取每个词的特征,从而得到每一个词与当前意图类别的相关程度

      核心代码(python3):

      from sklearn.feature_selection import SelectKBest
      from sklearn.feature_selection import chi2
       
      '''
      输入语料格式:
      我要买去从深圳到上海的机票   0
      我要买从深圳到上海的机票    0
      我要去上海旅游 1
      上海是个旅游的地方,我准备去  1
      '''
      
      #数据分词及去停用词之后,得到如下(padding后的结果):
      
      data = [
      ['要', '买', '去', '从', '深圳', '到', '上海', '机票'], 
      ['要', '买', '从', '深圳', '到', '上海', '机票', ''], 
      ['要', '去', '上海', '旅游', '', '', '', ''], 
      ['上海', '是', '旅游', '地方', '准备', '去', '', '']
      ]
      
      
      #生成word2index(过程略)
      word2index = {'要':1, '买':2, '去':3, '从':4, '深圳':5, '到':6, '上海':7, '机票':8, '旅游':9, '是':10, '地方':11, '准备':12, '':0}
      
      #word转为index表示
      data = [
      [1, 2, 3, 4, 5, 6, 7, 8], 
      [1, 2, 4, 5, 6, 7, 8, 0], 
      [1, 3, 7, 9, 0, 0, 0, 0], 
      [7, 10, 9, 11, 12, 3, 0, 0]
      ]
      
      lable_list = [0 , 0, 1, 1]
      
      
      #使用卡方检验来选择特征
      model = SelectKBest(chi2, k=5)#选择5个最佳特征
      featrue = model.fit_transform(data, lable_list)
      
      print(featrue)#最佳特征
      print(model.scores_)
      print(model.pvalues_)
      
      
    运行输出结果:
    [[ 2  4  6  7  8]
     [ 2  5  7  8  0]
     [ 3  9  0  0  0]
     [10 11  3  0  0]]
    [ 3.6   4.76470588  3.52173913  4.17241379  0.04347826  6.25  15.      8.        ]
    [5.77795711e-02 2.90490222e-02 6.05688602e-02 4.10872245e-02  8.34827329e-01 1.24193307e-02 1.07511177e-04 4.67773498e-03]
    
  • 5、特征向量化
    在上述代码中一共有12个词,故特征维度设置为12.
    对应的特征转向量示例:
    featur_array = [ 2 4 6 7 8]
    =》
    featur_vector = [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0]

    说明:featur_array中对应的数值n就是表示featur_vector[n-1]为1,其他的值为0

  • 6 使用支持向量机svm训练模型
    核心代码:

    #####################svm
    import sys
    from sklearn import svm
    
    #通过步骤5转换得到的特征向量
    featur_vector = [
    [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0], 
    [0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], 
    [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], 
    [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0]
    ]
    
    # SVM分类
    clf = svm.SVC(C=2.0, probability=True)
    clf.fit(featur_vector, lable_list)
    print('Test Accuracy is: %.2f' % clf.score(featur_vector, lable_list))
    
    

    可以看到输出结果是:
    Test Accuracy is: 1.00

  • 特别说明:
    在步骤4中,可以加一些人工特征,比如把地点都使用词性ns表示,同义词使用相同的index表示等

五、基于深度学习方法

  • 核心思想
    把意图识别看成是文本分类任务。

  • 核心步骤

  • 优点:
    1、数据标注比较容易
    2、在有充足的数据下,模型的准确率最高,无需人工特征

没有更多推荐了,返回首页