1、概述

在聊天场景中有很多情况下需要对用户的意图进行分析。这些分析功能基本上就是自然语言分类模型的变种。从技术难度上来讲这种模型实现比较简单。但要保证效果主要受一下几个方面的制约。

  • 词向量的准确程度
  • 语料的多少
  • 模型的选择

词向量是一个多维的坐标,用于在高纬度空间中的距离表示两个词之间的相似度。所以词向量能否准确的表示词与其相关词的关系会直接影响到整个神经网络的推理能力,以及对于新预料的预测的准确度。另一方面,由于用户训练的聊天语料并不是很多所以,词向量的准确性如果很好可以很大程度上解决这方面的问题。

用于聊天的语料本很就很难获得,尤其是在垂直领域中中文语料就更难获取。所以语料的获取其实是意图识别模型准确性的重要决定因素。

如果我们将锁定在某一个特殊场景比如,订餐,出行,旅游。在这一类的语言中词的特征就比普通的自然语言处理更加重要。比如如果我们在旅游中出现了“好吃”这样的此那么我的意图往往就是“美食”相关内容。此时上下文的语境对于最终的意图识别与分析其实影响不大,所以在此类模型中个人比较倾向于简单粗暴的一些模型而不是采用RNN这种讲究时序的模型。相比较而言dnn,cnn,deep&wide模型的效果应该会更好一些。当然这只是个人分析,具体的效果还需要在实际场景中去验证。

2、数据处理

在之前的文章中对于dataset读取数据的功能有着非常详细的说明。这里会使用之前的方法直接对数据进行处理。首先,数据以csv格式存储在文本文件中。我们可以先将数据导入到pandas的dataframe当中。对数据的基本情况进行观察。首先读取数据,请参照下面代码:

# 读取数据
import pandas as pd
data = pd.read_csv('data/data.csv',header=None, names=['text','class','classid'])
data.head()

输出效果如下图所示:

在后续的程序中,我们会使用tensorflow的功能直接读取。

2.1 读取数据

由于tensorflow只能处理张量,所以一般情况,我们可以将数据读入到内存中,再将其传递给palceholder变量。但是在数据量很大时就很不方便,并且在数据批量化随机化时也不太容易处理。所以这里读取的方式是直接使用tf读取csv文件的方式读取数据。

1、读取数据。

import tensorflow as tf
import numpy as np
COLUMNS = ['text', 'class','class_id']
dataset = tf.data.TextLineDataset('data/data.csv')
dataset=dataset.map(_parse_csv)

2、编写_parse_csv函数

该函数用于对csv文件逐行进行处理。

def _parse_csv(line):FIELD_DEFAULTS = [[''], [''],[0]]fields = tf.decode_csv(line,FIELD_DEFAULTS,name=None,field_delim=',')features = dict(zip(COLUMNS,fields))features.pop('class')return features

可以编写下面代码测试一下读取效果。

import tensorflow as tf
import numpy as np
COLUMNS = ['text', 'class','class_id']
dataset = tf.data.TextLineDataset('data/data.csv')
dataset=dataset.map(_parse_csv)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:value = sess.run(next_element)print(value['class_id'],value['text'].decode('utf-8'))

输出效果如下图所示:

可以将数据批量化与随机化,请参照如下代码:

import tensorflow as tf
import numpy as np
COLUMNS = ['text', 'class','class_id']
dataset = tf.data.TextLineDataset('data/data.csv')
dataset=dataset.map(_parse_csv)
dataset=dataset.repeat(1000)
dataset=dataset.shuffle(buffer_size=10000)
dataset=dataset.batch(10)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:value = sess.run(next_element)print(value)

输出效果如下图所示:

3、编写函数转化为词向量_word_embed

请参照如下代码,同时解析csv的相关代码也做了修改:

_word_embed函数

def _word_embed(features):maxlen =8 features=features.decode('utf-8')padding = '<PAD>'train_sentences = []embeddingUnknown = [0 for i in range(300)]labels = []tag = [word for word in jieba.cut(features)]  if len(tag)>maxlen:tag = tag[0:maxlen]else:tag.extend([padding]*(maxlen-len(tag)))train_sentence = []for word in tag:if word in model.wv.vocab:train_sentence.append(model.wv[word])else:train_sentence.append(embeddingUnknown)return np.array(train_sentence,dtype=np.float32)

_parse_csv函数

def _parse_csv(line):FIELD_DEFAULTS = [[''], [''],[0]]fields = tf.decode_csv(line,FIELD_DEFAULTS,name=None,field_delim=',')features = dict(zip(COLUMNS,fields))features.pop('class')y = tf.py_func(_word_embed,[features['text']], [tf.float32])y = tf.convert_to_tensor(y)return y,features['class_id']

相关测试函数

from  gensim.models import KeyedVectors
import jieba
import tensorflow as tf
import numpy as np
model = KeyedVectors.load('mymodel')
COLUMNS = ['text', 'class','class_id']
dataset = tf.data.TextLineDataset('data/data.csv')
dataset=dataset.map(_parse_csv)
dataset=dataset.repeat(1000)
dataset=dataset.shuffle(buffer_size=10000)
dataset=dataset.batch(2)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:value = sess.run(next_element)print(value)

输出结果如下图所示:

简单的意图分析模型(1)-数据处理相关推荐

  1. C语言编写一个赋值程序,实验2 用C语言编写简单程序——2.1 基本数据处理.doc

    实验2 用C语言编写简单程序--2.1 基本数据处理 实验2 用C语言编写简单程序 2.1 基本数据处理 [实验目的] (1)掌握算术表达式和赋值表达式的使用. (2)掌握基本输出函数的使用. (3) ...

  2. 简单的聊天机器人(软件机器人) 拥有QA机器人,闲聊机器人,任务机器人,场景机器人等等一些。

    一.智能聊天机器人 1.智能聊天机器人 用自然语言模拟人类的一种对话形式.人机对话的程序. 主要分为三个方面: --问题咨询:基于业务知识库进行业务问题回答. --数据检索:通过程序找到相对应的数据. ...

  3. flume java_Flume的安装及简单的使用(一)

    1.Flume简介 Flume是Cloudera提供的一个高可用.高可靠.分布式的海量日志采集.聚合和传输的系统.Flume支持在日志系统中定制各类数据发送方用于收集数据,同时Flume提供对数据的简 ...

  4. 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了

    中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 E ...

  5. 使用SQL Server Analysis Services Tabular Model建立分析模型

    微软在最新版本的SQL Server中加入了Tabular Model,目的在于降低数据分析的门槛,使各个业务部门的人员通过简单的IT培训,制作出符合自己需要的分析模型. 由于其降低了操作门槛,所以各 ...

  6. 3分钟,看回归分析模型怎么做

    总有小伙伴想看分析模型,我们就从最简单的回归分析模型讲起.回归分析是所有分析模型里最浅显,最容易懂的,并且回归分析有很多变化形态,能适用于很多问题场景.今天就一起来看一下. 一.为什么叫回归? 回归翻 ...

  7. sftp访问_实时数据处理探索:接收、处理、访问

    ETL(也包括ELT)是数据处理工作里必不可少的步骤,一直以来通常都是以天或小时为单位采用批处理来对大量的数据进行 ETL 操作.随着业务的增长及需求的变化,用户/客户希望能更快的看到各类数据操作的结 ...

  8. 心碎的图案怎么用c语言编出来,教案实验2用c语言编写简单程序.doc

    教案实验2用c语言编写简单程序 实验2 用C语言编写简单程序 2.1 基本数据处理1.调试示例 改正下列程序中的错误,求华氏温度100oF对应的摄氏温度?计算公式如下,其中:c 表示摄氏温度,f 表示 ...

  9. 大数据处理常用的数据结构

    随着互联网的兴起,越来越多的内容被放到互联网中,从而导致海量数据处理受到更多人的重视,尤其是在百度.腾讯等这些涉及海量数据的公司.下面我们简单谈一下关于海量数据处理的一些常用数据结构.包括哈希.bit ...

最新文章

  1. 超炫jQuery测试答题功能
  2. java读取文件指定内容_Java读取文本指定的某一行内容
  3. redis-使用问题
  4. java的基本语法(一)
  5. ARM——操作系统—最小操作系统-开发板测试
  6. liunx服务程序的安装及配置
  7. 财务分析报表APP的功能优势
  8. android桌面部件开发教程,Android桌面小部件AppWidget开发
  9. python爬取付费音乐包_Python 收费、高品质无损音乐下载【开源】
  10. SCI检索号识别一法:UT-WOS与UT-ISI
  11. Java 水印操作的设计与实现
  12. OC中链式编程和函数式编程
  13. Echarts饼图无法切换漏斗图问题处理
  14. macbook 唤醒后不能输入密码
  15. 洛谷 P2440 木材加工(二分,含边界处理的笔记)
  16. 60 Linux 常用 命令
  17. 【Python】详解 逻辑运算符 (and / or / not) + 布尔逻辑 (bool)
  18. 玉环市礁门塘除险加固工程水闸扩建设计
  19. 5G NR 下行调度算法流程
  20. oracle数据库管理基础知识

热门文章

  1. HDU 4262 Juggler (模拟+线段树优化)
  2. 计算机网络题简单建设校园网络,计算机网络课程设计—校园网络构建方案设计和实现.doc...
  3. 计算机仿真氢光谱实验,氢氘灯光谱 实验报告
  4. 怎么查看qq登陆记录
  5. element搜索框实现数据搜索
  6. 得了糖尿病,千万不能这么做
  7. 一直都是技术,今天来点儿文艺范儿……
  8. 八皇后问题(Eight Queens Puzzle)
  9. B.FRIENDit壁虎忍者笔记本支架,铝合金电脑支架,便携折叠、可调节桌面电脑架
  10. 【转载】[学习笔记]共轭转置矩阵与伴随矩阵都用A*表示合理吗?