当前位置:首页 » 网页前端 » 前端输入自然语言文本
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端输入自然语言文本

发布时间: 2022-09-28 18:41:43

1. 自然语言处理怎么最快入门

自然语言处理(简称NLP),是研究计算机处理人类语言的一门技术,包括:
1.句法语义分析:对于给定的句子,进行分词、词性标记、命名实体识别和链接、句法分析、语义角色识别和多义词消歧。
2.信息抽取:从给定文本中抽取重要的信息,比如,时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。涉及到实体识别、时间抽取、因果关系抽取等关键技术。
3.文本挖掘(或者文本数据挖掘):包括文本聚类、分类、信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习的。
4.机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。根据输入媒介不同,可以细分为文本翻译、语音翻译、手语翻译、图形翻译等。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。
5.信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可利用1,2,3的技术来建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。
6.问答系统: 对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。
7.对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。同时,为了体现个性化,要开发用户画像以及基于用户画像的个性化回复。
随着深度学习在图像识别、语音识别领域的大放异彩,人们对深度学习在NLP的价值也寄予厚望。再加上AlphaGo的成功,人工智能的研究和应用变得炙手可热。自然语言处理作为人工智能领域的认知智能,成为目前大家关注的焦点。很多研究生都在进入自然语言领域,寄望未来在人工智能方向大展身手。但是,大家常常遇到一些问题。俗话说,万事开头难。如果第一件事情成功了,学生就能建立信心,找到窍门,今后越做越好。否则,也可能就灰心丧气,甚至离开这个领域。这里针对给出我个人的建议,希望我的这些粗浅观点能够引起大家更深层次的讨论。

2. 自然语言处理的一般步骤

自然语言处理(NLP)关注的是人类的自然语言与计算机设备之间的相互关系。NLP是计算机语言学的重要方面之一,它同样也属于计算机科学和人工智能领域。而文本挖掘和NLP的存在领域类似,它关注的是识别文本数据中有趣并且重要的模式。

但是,这二者仍有不同。首先,这两个概念并没有明确的界定(就像“数据挖掘”和“数据科学”一样),并且在不同程度上二者相互交叉,具体要看与你交谈的对象是谁。我认为通过洞见级别来区分是最容易的。如果原始文本是数据,那么文本挖掘就是信息,NLP就是知识,也就是语法和语义的关系。

虽然NLP和文本挖掘不是一回事儿,但它们仍是紧密相关的:它们处理同样的原始数据类型、在使用时还有很多交叉。

我们的目的并不是二者绝对或相对的定义,重要的是要认识到,这两种任务下对数据的预处理是相同的。

努力消除歧义是文本预处理很重要的一个方面,我们希望保留原本的含义,同时消除噪音。

以下就是处理文本任务的几大主要步骤:

1.数据收集

获取或创建语料库,来源可以是邮箱、英文维基网络文章或者公司财报,甚至是莎士比亚的作品等等任何资料。

2.数据预处理

在原始文本语料上进行预处理,为文本挖掘或NLP任务做准备

数据预处理分为好几步,其中有些步骤可能适用于给定的任务,也可能不适用。但通常都是标记化、归一化和替代的其中一种。

3.数据挖掘和可视化

无论我们的数据类型是什么,挖掘和可视化是探寻规律的重要步骤

常见任务可能包括可视化字数和分布,生成wordclouds并进行距离测量

4.模型搭建

这是文本挖掘和NLP任务进行的主要部分,包括训练和测试

在适当的时候还会进行特征选择和工程设计

语言模型:有限状态机、马尔可夫模型、词义的向量空间建模

机器学习分类器:朴素贝叶斯、逻辑回归、决策树、支持向量机、神经网络

序列模型:隐藏马尔可夫模型、循环神经网络(RNN)、长短期记忆神经网络(LSTMs)

5.模型评估

模型是否达到预期?

度量标准将随文本挖掘或NLP任务的类型而变化

以上观点仅供参考,而在自然语言文本预处理方面的技术在国内效果比较好的并不多,具有代表性的如:北理工张华平博士的NLPIR大数据语义智能分析技术。NLPIR大数据语义智能分析平台是根据中文数据挖掘的综合需求,融合了网络精准采集、自然语言理解、文本挖掘和语义搜索的研究成果,并针对互联网内容处理的全技术链条的共享开发平台。如果感兴

3. 自然语言处理_一般处理流程

一、一般处理流程

语料获取 -> 文本预处理 -> 特征工程 -> 特征选择

1、语料获取
即需要处理的数据及用于模型训练的语料。
数据源可能来自网上爬取、资料积累、语料转换、OCR转换等,格式可能比较混乱。需要将url、时间、符号等无意义内容去除,留下质量相对较高的非结构化数据。

2、文本预处理
将含杂质、无序、不标准的自然语言文本转化为规则、易处理、标准的结构化文本。
①处理标点符号
可通过正则判定、现有工具(zhon包)等方式筛选清理标点符号。
②分词
将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列的过程。
一般看来英文较容易可通过空格符号分词,中文相对复杂,参考结巴分词、盘古分词、Ansj等工具。
常见的分词算法有:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于规则的分词方法,每种方法下面对应许多具体的算法。
③词性标注
为自然语言文本中的每个词汇赋予一个词性的过程,如名词、动词、副词等。可以把每个单词(和它周围的一些额外的单词用于上下文)输入预先训练的词性分类模型。
常用隐马尔科夫模型、N 元模型、决策树
④stop word
英文中含大量 a、the、and,中文含大量 的、是、了、啊,这些语气词、助词没有明显的实际意义,反而容易造成识别偏差,可适当进行过滤。
⑤词形还原
偏向于英文中,单数/复数,主动/被动,现在进行时/过去时/将来时等,还原为原型。
⑥统计词频
因为一些频率过高/过低的词是无效的,对模型帮助很小,还会被当做噪声,做个词频统计用于停用词表。
⑦给单词赋予id
给每一个单词一个id,用于构建词典,并将原来的句子替换成id的表现形式
⑧依存句法分析
通过分析句子中词与词之间的依存关系,从而捕捉到词语的句法结构信息(如主谓、动宾、定中等结构关系),并使用树状结构来表示句子的句法结构信息(如主谓宾、定状补等)。

3、特征工程
做完语料预处理之后,接下来需要考虑如何把分词之后的字和词语表示成计算机能够计算的类型。
如果要计算我们至少需要把中文分词的字符串转换成数字,确切的说应该是数学中的向量。有两种常用的表示模型分别是词袋模型和词向量。
①词向量
词向量是将字、词语转换成向量矩阵的计算模型。目前为止最常用的词表示方法是 One-hot,这种方法把每个词表示为一个很长的向量。
②词袋模型
即不考虑词语原本在句子中的顺序,直接将每一个词语或者符号统一放置在一个集合(如 list),然后按照计数的方式对出现的次数进行统计。统计词频这只是最基本的方式,TF-IDF 是词袋模型的一个经典用法。

常用的表示模型有:词袋模型(Bag of Word, BOW),比如:TF-IDF 算法;词向量,比如 one-hot 算法、word2vec 算法等。

4、特征选择
在文本挖掘相关问题中,特征工程也是必不可少的。在一个实际问题中,构造好的特征向量,是要选择合适的、表达能力强的特征。
举个自然语言处理中的例子来说,我们想衡量like这个词的极性(正向情感还是负向情感)。我们可以预先挑选一些正向情感的词,比如good。然后我们算like跟good的PMI,用到点互信息PMI这个指标来衡量两个事物之间的相关性。
特征选择是一个很有挑战的过程,更多的依赖于经验和专业知识,并且有很多现成的算法来进行特征的选择。目前,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。

5、模型训练
在特征向量选择好了以后,接下来要做的事情是根据应用需求来训练模型,我们使用不同的模型,传统的有监督和无监督等机器学习模型,如 KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等模型;深度学习模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。这些模型在分类、聚类、神经序列、情感分析等应用中都会用到。
当选择好模型后,则进行模型训练,其中包括了模型微调等。在模型训练的过程中要注意由于在训练集上表现很好,但在测试集上表现很差的过拟合问题以及模型不能很好地拟合数据的欠拟合问题。同时,也要防止出现梯度消失和梯度爆炸问题。

6、模型评估
在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。模型的评价指标主要有:错误率、精准度、准确率、召回率、F1 值、ROC 曲线、AUC 曲线等。

7、投产上线
模型的投产上线方式主要有两种:一种是线下训练模型,然后将模型进行线上部署提供服务;另一种是在线训练模型,在线训练完成后将模型 pickle 持久化,提供对外服务。

三、NLP应用方向
1、命名实体识别
指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、时间日期等。

传统机器学习算法主要有HMM和CRF,深度学习常用QRNN、LSTM,当前主流的是基于bert的NER。

2、情感分析
文本情感分析和观点挖掘(Sentiment Analysis),又称意见挖掘(Opinion Mining)是自然语言处理领域的一个重要研究方向。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。
情感分析技术可以分为两类,一类是基于机器学习的方法,通过大量有标注、无标注的主观语料,使用统计机器学习算法,通过提取特征,进行文本情感分析。另一类是基于情感词典的方法,根据情感词典所提供的词的情感极性(正向、负向),从而进行不同粒度的(词语、短语、属性、句子、篇章)下的文本情感分析。

3、文章标签
文章标签是利用机器学习算法,对文章进行文字和语义的分析后,提取出若干个重要的词或者短语(关键短语)。关键短语是NLP基础的算法模块,有了关键短语,能为后续的搜索、推荐等更高级的应用提供有力的抓手。
适用场景:1、个性化推荐:通过对文章的标签计算,结合用户画像,精准的对用户进行个性化推荐;2、话题聚合:根据文章计算的标签,聚合相同标签的文章,便于用户对同一话题的文章进行全方位的信息阅读;3、搜索:使用中心词可以对query进行相似度计算、聚类、改写等,可以用于搜索相关性计算。

4、案件串并
①信息抽取
运用实体抽取、关系抽取,从案情中抽取关键信息,如从警情中可以抽取报警人项目、报警人电话、案发地址等信息
②实体对齐
相同的实体在不同的案情中会有不同的表述,会给串并带来困难。可针对地址、人名、组织名进行对齐处理。
③文本聚类
对于关键片段类信息,无法像实体那样对齐,需要借助文本聚类技术进行关联。
④构建图谱
将信息抽取结果存入图谱。每个警情id对应一个节点,实体、属性、关键片段作为节点,对齐的实体、同一类的文本存为同一个节点。
除了来自于从警情中抽取的信息,还可以将其他警务系统中存在的结构化数据导入(如来自户籍信息的人物关系),从而丰富图谱。
⑤图谱检索
完成以上工作,即完成了案件串并的必要基础建设,接下来通过图谱的查询功能自动完成案件的串并。首先需要设定串并的条件,案件串并的条件在警务实战中已有很多的积累,如“具有相似的作案手段”,又如“相似作案手段,嫌疑人有共同联系人”,只需要将这些条件用图谱查询语言表达出来。

4. (转)设计一个语音交互界面(Voice User Interface)

此文为Medium上的一篇文章,搬运过来供自己和大家学习下。原文链接

https://medium.com/@xuuuwj/%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E8%AF%AD%E9%9F%B3%E4%BA%A4%E4%BA%92%E7%95%8C%E9%9D%A2-voice-user-interface-1-6364d4529a28

去年11月第一次接触VUI Design以来,已有三个多月,期间凭着网上的资料(主要是google designguideline\eros.com\设计师手记\论文)以及自己的UX知识,我尝试设计了三个项目: 一个买书的skill 、一款智能音箱语音交互游戏、 一个关于中国电信100M宽带业务的微信咨 询机器人 ,前两个项目做到原型为止,最后一个已经在微信公众号后台实现。但这三个项目的重点都被放在conversation design上,并不能算完整意义上的VUI。

本月刚刚读完  Cathy Pearl 的《语音用户界面设计》(《Designing Voice User Interface》) 和《Voice User Interface Design》(By Michael H. Cohen, James P. Giangola, Jennifer Balogh),书中完整地讨论了VUI设计的基本原则、重要的技术模块以及用户测试等问题,帮助勾画出了一张比较完整的VUI Design全景图。

在接下来的文章中,我会尝试用一个happy path串连起由0到1设计一个语音交互界面的过程,希望能定义好每个小框架中的设计问题,然后把它们变作一种肌肉记忆。

By the way, 因为说话这件事情太本能了,所以我觉得设计VUI困难的一点在于怎样从用户思维中跳出来,让自己重新回到设计师的角色上:)

语音界面的优势主要体现在三个方面:一是速度,包括输入更方便、入口更浅、学习负担更小等;二是共时,比如允许多任务同时进行;三是探索性,更能激发用户的好奇心,提升用户体验。不过同时,也不要忘记语音交流是非常受场景、技术及用户习惯限制的一件事。

可以参考 Google-fit-quiz 里的问题,来验证VUI究竟是不是你的最佳选择。

在回答之前,我们需要先了解:1.用户进行语音交互的方式有哪些,2.VUI系统内部是如何运作的。

The Nielson Norman Group 将语音交互总结为以下屏幕优先、纯语音和语音优先三种模式:

📱 Screen-first Interaction(屏幕优先):  Here, we start with an application designed primarily for screen, and voice controls are added afterwards to enhance the experience.(设计一个以屏幕显示为主的App, 为了提升用户体验,会加一些语音元素)

🗣  Voice-only Interaction(只有语音交互):  Here there is no screen at all, and input and output is based on sound, such as a smart speaker.(VUI设备没有屏幕,输入和输出都要声音,比如智能扬声器)

💬 Voice-first Interaction(语音优先):  This is where an app designed primarily for voice is enhanced through the addition of a screen to output information.(以语音为主要交互方式的App,输出信息在屏幕上显示,通过这种方式提升App体验)

屏幕优先 的情况下,最典型的代表就是手机语音助手,用户不仅可以通过语音,还可以通过键入、手势来进行操作,系统回复的内容也包含了语音、文本、图片、列表、链接等等。

纯语音交互 的代表之一是智能音箱,用户通过“唤醒”词,比如“ Alexa”,来开启VUI交互;另一个代表是电话客服,也就是交互式语音应答(Interactive Voice Response, IVR),它可以通过电话线路理解人们的请求并指引用户完成相应的任务,比如预定机票、查询话费等。

可以把对话系统看作人机翻译机,接收人类的自然语言并把它翻译成计算机能懂的结构化语言,以便进行信息匹配与加工,最终再以自然语言的形式反馈给说话者,完成一次“沟通”。“沟通”的本质是通过对最优解的一步步预测,以生成一个匹配概率尽可能高的反馈,需要计算能力、算法与数据的背后支持。

具体情况如下图所示:

当用户对系统讲话(utterance),系统会首先通过 语音识别(ASR) ①接收并解析语音,识别器可以提供多个可能的结果,即N-best list,从中为接收到的语音匹配最相似的词串文本(recognition hypothesis),然后反馈给下一个自然 语言理解(NLU) ②模块。

理解自然语言,即系统通过对词法、句法、语义的分析,识别(identify)用户的意图(intent)或者用户言语所涉及的领域(domain)、实体(entities),生成一个结构化的 语义表示*, 包括语言类型(陈述需求,询问属性,否定,选择疑问,等等)和条件信息(有什么条件、值是多少)。比如,“帮我查深圳的天气”这句话对应的语义表示为“inform(occasion=天气,location=深圳)”,其中“inform”代表“陈述需求”,括号里面的内容我们称之为slot-value pair。关于计算机是如何理解自然语言的,可以点击 这里 详细了解。

语义表示生成之后被转交给 对话管理器(DM) ③,由对话管理器来决定答复给用户什么以及怎样答复。

对话管理器是对话系统中很关键的一个模块,连结着一个或多个 知识库(Knowledge Base, KB) ④。通常包括:a.对话状态跟踪(dialogue state tracking),比如追踪执行用户意图所需的信息是否完整;b.对话策略(dialogue policy),即根据当前的状态 决策 下一步应该采取的最优动作,比如,是直接调用知识库(knowledge base)内容提供结果、询问特定限制条件、澄清或确认需求、还是开启相关的某个软件呢。

不同的对话系统,goal-driven system(比如任务型、问答型)和open-domain system(比如闲聊型),对话管理器的任务、知识库内容也不同。

任务型对话的场景相对复杂,通常会与用户进行多伦对话,需要参数化请求并通过slots filling的形式持续跟踪对话,直到识别出用户意图、特征词、slot-value pairs,即系系统要执行的动作的类型和操作参数。

问答型则不需要考虑复杂的对话逻辑,通常一轮对话就可以解决,重点在于语义解析与实体匹配。

闲聊型包括检索模式和生成模式,检索式是利用网络中已有的大量对话语料来构建索引,从索引中查找可能的候选回复,而生成式则直接从大量的人人的对话中学习对话模型,然后利用对话模型“创作”回复。

对话管理器会根据当前的对话状态生成一个预期回复(intended response),然后进入 自然语言生成(NLG) ⑤- 文本转语音(TTS) ⑥环节,把结构化的预期回复改造成自然语言,最终呈现给用户。

常见的说法是“系统形象(system persona)”,相当于产品的前端,即系统通过的①语音特征,语气、语调、音色、节奏等。你可以选择使用合成(synthesized)声音,也可以选择录制的(recorded)声音;

②话术,编写问候语、特殊应答、提示语等时的用词、长短句这些,来展现与品牌相符的性格特质,比如亲切or正式,主动or顺从。

一个好的system persona能够很自然地成为你编写对话时的参考条件:“在这种情况下,这个persona会说什么或做什么?”

VUI的交互方式与对话内容很难彻底分开讨论,但做这种尝试,有助于跳出用户视角,走进“黑盒子”中。

我倾向于将“交互方式”看作《Voice User Interface Design》中所言的“High-level design”,而将“对话内容”看作“Detailed design”。

“High-level design”关心的是怎样推动对话流畅地进行,让用户知晓系统的状态、任务进度等以便操作,比如系统在聆听、在期待收到指令、已离线等,可以理解为GUI中的弹窗、动效、视觉反馈等。

同时也为系统设计更好的规则,以便它做出更好的决策,比如在什么情况下需要向用户确认请求,可以理解为GUI设计中看不见的菱形判断框。

这些问题主要涉及到以下:

①对话模式设计

A.命令-控制式(command and control),即用户想要说话时必须先唤醒系统,方式可以是使用唤醒词、手势触摸或者按键。一轮对话完毕,用户须再次唤醒系统以开启下一轮对话。

B.对话式,即在一段封闭的对话期间,比如完成某项特定的任务时,用户不必每一回合都唤醒系统,而是自然地进行话轮转换,在轮到用户说话时系统自动开启麦克风。

C.混合式,即命控式与对话式的结合,系统向用户提供明显的状态切换标识,比如使用声音标志(earcon)以表示某个状态的开始与结束。

②对话策略(dialog strategy)设计

包括:

A.对话框架设计,即对话组织策略

《Designing Voice User Interface》一书把对话框架分为:a.定向对话(directed dialog),即系统主导对话,向用户询问非常具体的问题,以期望获得同样具体的答案;b.菜单层级结构(menu hierarchy),即系统向用户提供一系列选择,一旦用户完成了菜单a的选择,系统会继续提供菜单b,直到完成用户的请求;c.混合推动(mixed-initiative),即定向对话与菜单层级相混合,系统询问用户问题,也允许用户通过提供额外的信息来引导对话。

B.对话修补策略

技术并不完美,识别器可能还没有准备好接受呼叫者的话语,或者没有接收到说话者的语音,也可能响应时间太长 。用户也常常会突然扭转话题,或者提供太多信息。因此在正向推动对话之外,系统也必须配备处理这些情况的策略,以减少前功尽弃的概率。

a.错误恢复

可能出现的错误有以下四种:

·未检测到语音

·检测到语音,但没有识别

·正确识别语音,但无法处理

·部分语音识别错误

·延迟

一般有两种方法来处理这些情况,明确地说出来,最好能增加更多的细节让用户明白现在的状况,比如“抱歉,我没听懂,请说出您所在的城市和区域名称”,或者什么也不做。如何选择要取决于VUI系统的交互模式与用户场景。

b.万能指令

比如“帮助”、“停止”、“请重复一遍”、“退出”等等。设计时不仅要考虑用户可能的需要,也要考虑用户会怎样表达这些需要。

③条件阈值(threshold)设计

每个应用程序都会定义系统能承受的最大错误,对话系统也不例外,尤其是上文对交互流程的描述也向我们清晰地展示了,从用户、到技术模块、再到数据资源,VUI的运行充满了不确定性。

《Designing Voice User Interface》 一书建议我们考虑设置三种阈值:单个对话状态中的最大连续错误数(特定于状态的错误计数),全局计算的最大错误数,以及最大错误确认数。

牢记这一点便很容易理解Detailed design需要做什么,即深入到单条对话中,详细设计对话流程、辅助提示、以及异常情况处理方案。包括:

①对话设计

设计对话流程很像写剧本,即什么样的角色在什么情况下应该说什么话,不同之处在于对话系统的情节和部分角色是写定的。

各大平台上,Google、Amazon、Microsoft,都有对话设计的相关指导,可以通过 这篇汇总文章 来进一步了解。

②提示列表(prompt lists)

回想一下,人与人之间的沟通也要建立在共同知识的基础上,与机器对话也是一样。让用户了解系统能做什么、不能做什么、怎么做是对的等等,才能够实现高效率的对话。

这一点可以通过设计提示列表(prompt lists)来辅助实现,提示类型包括:

A.初始提示,

B.错误提示,

C.帮助提示,

D.特殊应答等等

提示的形式有多种,语音、文本、图像,甚至声音,都可以。

比如图中Google assistant采用带有文字的按钮来告诉我它能识别屏幕上的内容,而我只需点击或者说出指令即可;右边的两张图里,Google通过[视觉元素变换+“进入对话”“离开对话”的文字提示+音效(earcon)]来隐喻游戏的开始与结束。

Google在designguideline for Google assistant里总结了 他们运用在提示语(prompt)中的不同元素(types of conversational components) ,是一份非常好的参考。

设计过程其实与一般产品并无大异,需要考虑:

1). 用户研究结果。 包括用例、使用场景 、用户语言模式与心理模式等。可以参考博主@Lu的设计手记 《语音理财案例分析》 。

2). 业务场景与目标。 主要是据此确定功能列表、功能优先级、交互方式等。推荐网络AI社区的 《酒店语音助手实例教程》 。

特殊的是,人工智能产品的形态多种多样,设计师必须对于产品所依附的硬件设备、产品背后的数据与技术支持有所了解,以确定产品边界、发现设计机会、持续优化用户体验。因此也需要考虑:

3). 技术与硬件基础。

比如设备联网程度,ASR引擎是否允许你设置N-best列表、自定义语音终止超时的时长,系统的负载量等。

4). 数据资源。

比如当前资源是否能满足该功能,哪些数据会影响系统响应时间等。

人们往往通过语音识别准确度来评估应用程序的运行效果,这也许是最糟糕的度量方式。一个应用程序能达到90%的识别准确度,同时自动实现85%的业务呼叫;另一个应用程序达到97%的识别准确度,且自动实现40%的业务呼叫,前者就一定比后者更差或更好吗?

——《如何构建语音识别应用》( Bruce Balentine, David Morgen)

评估涉及到三个问题:

1.如何定义成功

需要与开发人员、客户共同完成,以方便确定哪些状态是可以衡量的,哪些不可以。尽可能将成功状态具体化、数字化。

以下使一些成功标准的示例:

·60%想要预定酒店的用户最终完成了预定。

·85%的用户在1个月内至少完成了20天的每日健康记录。

·播放歌曲的错误率低于15%。

——《语音用户界面设计》Cathy Pearl

2.可以通过什么来衡量

A.任务完成率

B.用户(在何处)(因为什么)流失率

C.使用时长

D.语音打断情况

E.高频异常情况

……

*如果不思考原因,以上所有衡量结果都不可用

3.如何获得衡量数据

A.在早期建立记录日志

B.转录用户呼叫记录

……

参考资料:

《语音用户界面设计》Cathy Pearl

《Voice User Interface Design》Michael H. Cohen, James P. Giangola, Jennifer Balogh

网络AI社区

Google Design Guideline

Cortana Dev Center

Nielsen Norman Group

https://voiceprinciples.com/

《周耀明:自然语言对话引擎》

机器之心

5. 自然语言处理的详细介绍

语言是人类区别其他动物的本质特性。在所有生物中,只有人类才具有语言能力。人类的多种智能都与语言有着密切的关系。人类的逻辑思维以语言为形式,人类的绝大部分知识也是以语言文字的形式记载和流传下来的。因而,它也是人工智能的一个重要,甚至核心部分。
用自然语言与计算机进行通信,这是人们长期以来所追求的。因为它既有明显的实际意义,同时也有重要的理论意义:人们可以用自己最习惯的语言来使用计算机,而无需再花大量的时间和精力去学习不很自然和习惯的各种计算机语言;人们也可通过它进一步了解人类的语言能力和智能的机制。
实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等。前者称为自然语言理解,后者称为自然语言生成。因此,自然语言处理大体包括了自然语言理解和自然语言生成两个部分。历史上对自然语言理解研究得较多,而对自然语言生成研究得较少。但这种状况已有所改变。
无论实现自然语言理解,还是自然语言生成,都远不如人们原来想象的那么简单,而是十分困难的。从现有的理论和技术现状看,通用的、高质量的自然语言处理系统,仍然是较长期的努力目标,但是针对一定应用,具有相当自然语言处理能力的实用系统已经出现,有些已商品化,甚至开始产业化。典型的例子有:多语种数据库和专家系统的自然语言接口、各种机器翻译系统、全文信息检索系统、自动文摘系统等。
自然语言处理,即实现人机间自然语言通信,或实现自然语言理解和自然语言生成是十分困难的。造成困难的根本原因是自然语言文本和对话的各个层次上广泛存在的各种各样的歧义性或多义性(ambiguity)。
一个中文文本从形式上看是由汉字(包括标点符号等)组成的一个字符串。由字可组成词,由词可组成词组,由词组可组成句子,进而由一些句子组成段、节、章、篇。无论在上述的各种层次:字(符)、词、词组、句子、段,……还是在下一层次向上一层次转变中都存在着歧义和多义现象,即形式上一样的一段字符串,在不同的场景或不同的语境下,可以理解成不同的词串、词组串等,并有不同的意义。一般情况下,它们中的大多数都是可以根据相应的语境和场景的规定而得到解决的。也就是说,从总体上说,并不存在歧义。这也就是我们平时并不感到自然语言歧义,和能用自然语言进行正确交流的原因。但是一方面,我们也看到,为了消解歧义,是需要极其大量的知识和进行推理的。如何将这些知识较完整地加以收集和整理出来;又如何找到合适的形式,将它们存入计算机系统中去;以及如何有效地利用它们来消除歧义,都是工作量极大且十分困难的工作。这不是少数人短时期内可以完成的,还有待长期的、系统的工作。
以上说的是,一个中文文本或一个汉字(含标点符号等)串可能有多个含义。它是自然语言理解中的主要困难和障碍。反过来,一个相同或相近的意义同样可以用多个中文文本或多个汉字串来表示。
因此,自然语言的形式(字符串)与其意义之间是一种多对多的关系。其实这也正是自然语言的魅力所在。但从计算机处理的角度看,我们必须消除歧义,而且有人认为它正是自然语言理解中的中心问题,即要把带有潜在歧义的自然语言输入转换成某种无歧义的计算机内部表示。
歧义现象的广泛存在使得消除它们需要大量的知识和推理,这就给基于语言学的方法、基于知识的方法带来了巨大的困难,因而以这些方法为主流的自然语言处理研究几十年来一方面在理论和方法方面取得了很多成就,但在能处理大规模真实文本的系统研制方面,成绩并不显着。研制的一些系统大多数是小规模的、研究性的演示系统。
目前存在的问题有两个方面:一方面,迄今为止的语法都限于分析一个孤立的句子,上下文关系和谈话环境对本句的约束和影响还缺乏系统的研究,因此分析歧义、词语省略、代词所指、同一句话在不同场合或由不同的人说出来所具有的不同含义等问题,尚无明确规律可循,需要加强语用学的研究才能逐步解决。另一方面,人理解一个句子不是单凭语法,还运用了大量的有关知识,包括生活知识和专门知识,这些知识无法全部贮存在计算机里。因此一个书面理解系统只能建立在有限的词汇、句型和特定的主题范围内;计算机的贮存量和运转速度大大提高之后,才有可能适当扩大范围.
以上存在的问题成为自然语言理解在机器翻译应用中的主要难题,这也就是当今机器翻译系统的译文质量离理想目标仍相差甚远的原因之一;而译文质量是机译系统成败的关键。中国数学家、语言学家周海中教授曾在经典论文《机器翻译五十年》中指出:要提高机译的质量,首先要解决的是语言本身问题而不是程序设计问题;单靠若干程序来做机译系统,肯定是无法提高机译质量的;另外在人类尚未明了大脑是如何进行语言的模糊识别和逻辑判断的情况下,机译要想达到“信、达、雅”的程度是不可能的。

6. 前端开发时meta标签一般怎么写

注释:<meta> 标签永远位于 head 元素内部。
注释:元数据总是以名称/值的形式被成对传递的。
name属性
name属性主要用于描述网页,与之对应的属性值为content,content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的。
meta标签的name属性语法格式是:<meta name="参数" content="具体的参数值">;。
其中name属性主要有以下几种参数:
A、Keywords(关键字)
说明:keywords用来告诉搜索引擎你网页的关键字是什么。
举例:<meta name ="keywords" content="science,ecation,culture,politics,ecnomics,relationships,entertainment,human">
B、description(网站内容描述)
说明:description用来告诉搜索引擎你的网站主要内容。
网站内容描述(description)的设计要点:
①网页描述为自然语言而不是罗列关键词(与keywords设计正好相反);
②尽可能准确地描述网页的核心内容,通常为网页内容的摘要信息,也就是希望搜索引擎在检索结果中展示的摘要信息;
③网页描述中含有有效关键词;
④网页描述内容与网页标题内容有高度相关性;
⑤网页描述内容与网页主体内容有高度相关性;
⑥网页描述的文字不必太多,一般不超过搜索引擎检索结果摘要信息的最多字数(通常在100中文字之内,不同搜索引擎略有差异)。
举例:<meta name="description" content="This page is about the meaning of science,ecation,culture.">
C、robots(机器人向导)
说明:robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。
content的参数有all,none,index,noindex,follow,nofollow。默认是all。
举例:<meta name="robots" content="none">
D、author(作者)
说明:标注网页的作者
http-equiv属性
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。
meta标签的http-equiv属性语法格式是:<meta http-equiv="参数" content="参数变量值"> ;其中http-equiv属性主要有以下几种参数:
A、Expires(期限)
说明:可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新传输。
用法:<meta http-equiv="expires" content="Fri,12 Jan 2001 18:18:18 GMT">
注意:必须使用GMT的时间格式。
B、Pragma(cache模式)
说明:禁止浏览器从本地计算机的缓存访问页面内容。
用法:<meta http-equiv="Pragma" content="no-cache">
注意:这样设定,访问者将无法脱机浏览。
C、Refresh(刷新)
说明:自动刷新并转到新页面。
用法:<meta http-equiv="Refresh" content="2;URL">;(注意后面的分号,分别在秒数的前面和网址的后面,URL可为空)
注意:其中的2是指停留2秒钟后自动刷新到URL网址。
D、Set-Cookie(cookie设定)
说明:如果网页过期,那么存盘的cookie将被删除。
用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday,12-Jan-2001 18:18:18 GMT; path=/">
注意:必须使用GMT的时间格式。
E、Window-target(显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示。
用法:<meta http-equiv="Window-target" content="_top">
注意:用来防止别人在框架里调用自己的页面。
F、content-Type(显示字符集的设定)
说明:设定页面使用的字符集。
用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">
G、content-Language(显示语言的设定)
用法:<meta http-equiv="Content-Language" content="zh-cn" />
功能
上面我们介绍了meta标签的一些基本组成,接着我们再来一起看看meta标签的常见功能:

7. NLP自然语言处理

罗素悖论:由所有不包含自身的集合构成的集合

例子:理发师称只给那些不给自己理发的人理发。

基于集合论,理发师无论给自己理发还是不给自己理发都是矛盾的。

因此集合论不是完备的。 即使后面冯罗伊德等科学家提出了各种假定条件。

由于上述的原因,集合率无法很好的描述自然语言,科学家发现通过概率模型可以更好的描述自然语言。

深度学习来处理自然语言属于概率模型

证明最小点位于坐标轴上

h = f+c|x|

由于在x = 0处不可导

h-left'(0)*h-right'(0) = (f'+c)*(f'-c)

那么如果c>|f'(0)|可得,h在0处左右导数异号

0是最值。

那么在损失函数加入L1正则化后,可以得到某些维度容易为0,从而得到稀疏解

几乎所有的最优化手段,都将适用凸优化算法来解决

P(A|B) = P(A and B) / P(B)

if A and B 独立

=》P(A and B| C) = P(A|C)*P(B|C)

也可以推出

=>A(A|B and C) = P(A|C) (B交C不为空)

抛9次硬币,硬币出现正面的概率是0.5,出现k次的概率分布如下如

服从正态分布

x的平均值

E = x*p(x) + ...

x相对于期望的偏离

var = (x-E(x))^2

conv = (x - E(x))*(m - E(m))

描述x,m是否有同分布

按理协方差为0,并不代表x和m没有关系

例如下图

如果点的分布对称的分布,会得到协方差为0,但是其实他们是有关系的。

把每个相关的概率累加,得到联合概率

P(x1=m1,x2=m2...) = n!*P1 m1/m1!*P2 m2/m2!

T(n) = (n-1)!

T(x)用一条曲线逼近n!,进而可以求得非整数的阶乘

由二项式分布推出

P = T(a+b)*x (a-1)*(1-x) (b-1)/(T(a)*T(b))

则正态分布

y为0时,不考虑y‘。y为1时,y'越接近1,越小,越靠近0,越大

把D最小化,迫使y'逼近y

对于一个句子,有若干单词组成。例如

C1: The dog laughs.

C2: He laughs.

那么计算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。

根据历史文本的统计学习。

可以得到P(C1)<<P(C2)

P('I love the game') = P('I')*P('love')*P('the')*P('game')

其中P(<work>) = 频率/总单词数

计算一篇文章是积极的还是消极的。

P(y|x) = sigmod(wx)

x是文章内每个单词的频率

y表示积极和消极情感

其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)

2-gram模型例子

把多个gram的模型进行线性整合

P(y|x1, x2, .. xn) = P(y)*P(x1, x2, ... xn|y) / P(x1, x2, ... xn)

y代表是否是垃圾邮件

x代表单词

广州市长寿路 -》 广州市长|寿路

广州市长寿路 -》 广州市|长寿路

匹配词袋:广州市,广州市长,长寿路

使用最大匹配发,第二个分词更优

通过统计P(A|B),得出各个option的概率,取最大的概率,则为最后的分词

word => [0, 0 , ... 1, ... 0]

word => [0, 1, 0, 1, 0, ...]

可以解决词相似性问题

计算附近词的频率

word => [0, 3, 0, 1, 0, ...]

w是附近词的one-hot encoding

score是词的one-hot encoding

最后一层通过softmax,取拟合文本

最终中间层则为词向量

输入为词one-hot encoding

输出为附近此的one-hot encoding

最后通过softmax预测附近词

最后中间层则为结果词向量

混合模型是一种统计模型,问题中包含若干个子问题,每个子问题是一个概率分布,那么总问题就是若干个子问题的组合,也就是若干个子分部的组合,这样就形成了混合模型。

有红黑两种硬币,把它们放在盒子里,从盒子里随机抽取一个硬币并投币,抽到红色的概率是p,红色硬币正面的概率是q,黑色硬币正面的概率是m,假设我们没办法看到抽取出的硬币的颜色,只能看到最终是正面或者反面的结果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估计p,q,m三个参数。

此时可以计算出

通过EM算法迭代如下:

随机p q m

迭代以下过程:

计算上面table

p = (aC(正)+cC(反))/total

q = aC(正)/(aC正+cC正)

m = bC(正)/(bC正 + dC正)

假设有上述数据,需要用混合模型来逼近,通过分析,红色和蓝色数据分别为高斯正态分布,N(u, v)

此时可以得到如下表

p = pN红x/(pN红x+(1-p)N蓝x)

u = pN红x/n

v = pN红(x-u)^2/n

词性转换概率

词性到单词的转换概率

通过EM递归算法,训练以上参数,得到隐马尔可夫模型

PLSA主题模型

只统计词的频率,不计算词的相对位置

计算文档和单词频率的矩阵

进行奇异矩阵分解

得到A矩阵的压缩U,U中的k则为k个主题

通过分析,LSA得到的主题是跟现实无法关联,它只是一个量,而没有明显的意义。

PLSA为了解决此问题,引入概率模型,先确定主题个数

然后通过构建Doc->topic的概率table,和topic->word的概率table。

然后通过EM模型,得到这两个table的所有概率值。

进而得到文档的主题表示

PLSA的缺陷是,对于预测未知的doc,无法计算此文档的相关概率。随着doc数量的增加,PLSA模型的参数会线性增加,从而会造成过拟合。

LDA通过引入先验概率来克服PLSA的问题。

类似于编译原理的上下文无法句法分析,一颗语法树

通过对CFG引入概率参数

有了概率,可以计算每颗语法树的极大似然概率,并取最大概率的树为最终输出

上一个状态中间层的输出作为下一隐层的输入

类似于HMM的2-gram模型。t状态受到t-1时刻输出的影响,受t-k的输出的k越大,影响越小

由于RNN几乎只受到上一时刻的影响,而忽略了久远信息的影响。从而造成了一定的局限性。

LSTM通过引入长短记忆方法,来维持长记忆的信息。

通过训练核内的sigmod函数,使得LSTM可以根据不同的句子,有条件的保留和过滤历史信息,从而达到长记忆的功能。

GRU是LSTM的简化版,它只需要处理两个sigmod函数的训练,而LSTM需要三个sigmod函数的训练,减少了训练的参数,加快了训练的速度,但也损失了一部分模型的复杂,在处理较复杂问题时,没有LSTM那么好。

auto-encoder-decoder的特点是输出的单元数是固定的。对于一般自然语言处理,例如机器翻译,输入的单元个数跟输出单元的个数并不是一一对应的,此时就需要动态的生成输出单元。Seq2Seq通过动态的输出结束符,代表是否输出完成,达到可以动态的根据输入输出不同的单元个数。

seq2seq的缺点是,所有的输入序列都转化为单一的单元c,导致很多信息都将消失,对于不同的输出yi,它可能依赖的输入xj有可能不一样,此时通过加入注意力模型,通过对xi进行softmax处理,并加入到y权重的训练中,可以让不同的y,有不同的x对它进行影响

softmax的输入为输入单元x,和上一个输出单元y,联合产生softmax的权重,进而对不同的序列,对于同一个x,会有不同的注意力到输出

q = Wq(x)

k = Wk(x)

v = Wv(x)

x为词向量

通过训练,得到权重w,从而学习到这一层的softmax注意力参数

R是前一次encoder的输出

通过增加w的数量,产生多个z,并进行堆叠,通过前馈网络,最后产生z

在使用self attention处理句子时,是没有考虑单词在句子中的位置信息的。为了让模型可以加入考虑单词的位置信息,加入了位置编码的向量

计算如下:

pos为单词在句子中的位置

i为词向量的位置

d为句子的长度

位置编码加上词向量形成tranformer的输入

加入了归一化和残差网络

最终通过softmax,输出每个单词的概率,并最终输出单词

8. web前端需要掌握的哪些知识

一个合格的web前端需要掌握哪些技术?
最基础的自然是JavaScript,HTML和css这三种语言。

首先了解下它们到底是什么。

HTML是用户看到的网页的骨架,比如你会发现当前页面分为左中右三个部分,其中还填充了不同的文字和图片;每个子部分还会继续细分,比如当前页面的中间部分下方有输入框等等。

CSS是网页展示的细节控制,比如你会发现有的文字是红底白色,有的子部分占了页面的二分之一宽,有的只占六分之一,有些部分需要用户进行某些操作(如点击,滑动)才会出现等等,这些就是有CSS来控制。

JavaScript是负责捕捉用户在浏览器上的操作,并与后端服务器进行数据交换的脚本语言。当用户在前端进行点击,输入等操作的时候,会触动绑定了该动作的JavaScript脚本,然后JavaScript收集数据,调用后端的api接口,再将后端返回的数据交给HTML和CSS渲染出来。

一个网页的HTML代码和CSS代码是可以直接在浏览器中查看的,你可以直接按F12,就能看到下图右侧的模块,左右侧红框就是代码与实际页面的对应关系。因此如果你看到某个网站的布局很不错,不妨点击F12,进行学习。

前端框架
然而,实际应用中,已经很少有正规的项目组直接用上述三种语言进行web 前端开发了,而是使用很多封装了这三种语言的框架,比如

Vue.js

,angular,react native等等。它们是来自谷歌和Facebook的大神项目组,基于自己的经验,封装了原生前端语言,实现了更多更复杂更酷炫的功能。因此,可以说,学会使用这些框架,能达到事半功倍的效果。

比如用了vue,它是自底向上增量开发的设计,其核心只关心图层,而且还可以与其他库或已存项目融合,学习门槛极其友好;另一方面,vue可以驱动单文件组件和vue生态系统支持的库开发的复杂单页应用。有了这个生态系统,可以说,vue是处在一个不断壮大,不断完善的欣欣向荣的状态。

网络通信协议
由于前后端分离的趋势,前端还需要了解很多网络通信协议的知识,这里不局限于http协议,因为据我的经验,有时候我们还会用到websocket等协议。因此,前端需要简单了解不同协议的特点以及使用方式,但是好消息是不用像学习计算机网络课程一样对每种协议的原理都了解的特别透彻,只要学会如何用前端语言发送这种协议的请求就够了。