当前位置: 首页 > 新闻资讯 > 【资深自然语言处理(nlp)工程师招聘】

【资深自然语言处理(nlp)工程师招聘】

发布时间:2024-02-12 18:41:19

  1. 自然语言处理(NLP)知识整理及概述(二)
  2. 产品经理如何入门自然语言处理(NLP)?
  3. 自然语言处理(NLP)知识整理及概述(一)

一、自然语言处理(NLP)知识整理及概述(二)

假设 a = {a-z, a-z, ...} 是英语所有可能构成单词的字母集合, a* 为由这个字母表所构成的任意有限长度的字符串集合。 其中所有有效的单词构成的集合d是a*的一个子集。而noise channel 是指从目的词(即字典)与实际接收到的字符串x所构成的矩阵。

对于所捕获到的,存在拼写错误的字符串x, 目标是在字典中找到一个词w,使这一情况出现的概率最大。 即:

由于用户实际想拼写的单词是不确定的,因此需要生成一个修正候选列表(candidate corrections),这个列表基于两个规则:

因此, noisy channel 实际上可以理解为,用户所输入的一个错误的字符串,经过怎样的变换过程可以得到若干个正确的单词。变换的过程越多,相当于channel越长, 而找候选列表的过程也就是找channel最短的过程。

最我辑距离(minimum edit distance)是指从一个string到另一个string所需的最我辑步骤,包括:插入、删除、替换。而采用这三种编辑手段计算所得的距离又称为 levenshtein distance 。这一距离将所有操作的cost都记为1.

但严格来说,替换这一操作等于先删除再插入。因此这一操作的cost可当成是2(更接近实际操作的cost)。 此外,对于 damerau–levenshtein distance ,这一距离还新增了transposition of two adjacent characters 这一操作。

统计概率的计算方法如下:

首先对错误统计的方式:

显然,用户想输入across的概率最大,这样候选词列表就有了排序和过滤的依据(大概率的排在前面,概率过低的可以不显示)。另一方面,p(word) 也可以使用bigram,这样就与上下文取得了联系,能更好的预测用户想要输入的单词。

有25%-40%的错误属于 real-word error

这一部分是language model与noisy channel model的结合。假设用户输入的所有单词都没有non-word error

举个例子,用户输入 "two of thew":

仅考虑 two off thew, two of the, too of thew 的概率,取最大值。

peter norvig’s list of errors

wikipedia’s list of common misspelllings

gnu aspell

hunspell

how to write a spelling corrector

二、产品经理如何入门自然语言处理(NLP)?

自然语言处理,顾名思义即自然语言处理的技术,通常用缩写nlp指代。各类产品经理日常的工作中,会遇到大量自然语言处理的应用场景。以智能推荐为例,在待推荐物文本分类、主题分类等场景中都会用到。本篇以产品经理的视角,谈谈如何入门自然语言处理。

统计模型

很多大牛对人工智能的抨击在于,认为人工智能只是统计学,并不是真正的具有「智能」。在当前「弱人工智能」的时代背景下,学习统计模型仍然有非常重要的价值。

拿经常用于分类场景的贝叶斯模型为例,在已经拿到用于训练集的语料中,可以通过统计得出a出现的概率、b出现的概率、在a出现的前提下b出现的概率,计算如果b出现同时a出现的概率(即给定b样本计算出现a的概率),就可以直接从前面三个统计概率计算得出。

当然以上贝叶斯模型成立并且表现良好的前提是 数据量足够大,满足大数定律 。不难发现统计模型的精髓在于,假设数据量足够大后,可以用已有样本的统计情况,来做判别或预测。

闭环流程

nlp技术应用场景广泛且松散,且在很多情况下,作为中间处理技术流程,不被最终用户所感知。再加上近些年新的自然语言处理技术不断出现,给想入门自然语言处理的产品经理眼花缭乱,不知如何入手的困惑。

入门自然语言处理也需要讲究mvp,以最小可行性的闭环,建立起初步认知,再不断扩展和丰富nlp的知识体系,逐步建立大的框架和认知。

通常的自然语言处理任务可从「分词」—>「构建特征」—>「训练模型」—>「分类或预测应用」。

以上流程中,除了分词外,与机器学习通常流程一样。英文一个个单词本身就是分开的,是不需要分词的。但对于中文来讲,词与词之间是连接在一起的,需要将文本内容,切分成一个个词再处理。

完成分词后,计算机无法直接理解汉字,需要通过将一个个词,编码成计算机可以理解的数字再做处理,这个阶段即构建特征阶段。

特征完成后,再根据自然语言处理任务类型,决定采用哪种算法训练模型,最后将训练好的模型应用于特定的分类或预测任务上。一个自然语言处理任务就完成了。

标注与预处理

前几年从事的智能推荐产品中,推荐系统本身以ctr作为优化目标,实际是将点击与否作为label,相当于用户帮着做了分布式的标注工作。

传统基于统计的自然语言处理任务中,大部分任务类型是有监督学习,需要人在已有语料上做大量的标注工作,才能保证任务的正常进行。

例如情感识别是否为正向情感,就需要人在语料上,将一条条信息标出是否为正向情感。再将此语料作为训练集训练模型,生成情感识别的分类模型用于情感识别。

文档的预处理通常是将拿到的语料做去除标点符号、停用词、数字等处理,去除自然语言无关内容,加快计算机计算和模型生成速度。

在完成以上处理后,可将文档做分词处理,再将词作编码处理即可。

常见任务及算法原理

自然语言处理通常有以下应用场景:分词、词性标注、主题识别、情感识别、文本分类、机器翻译等。下面将主要应用及背后算法原理作简要介绍。

有监督的分类问题。 无论情感识别还是垃圾邮件分类,本质上都可以转化为几个目标类型的分类问题。按照贝叶斯公式的逻辑,将已有语料数据进行类型标注,基于统计模型的逻辑,训练得到分类模型,将待识别内容通过模型计算打分,根据阈值即可完成识别。例如二分类的情感识别,可以将0-0.5区间归为消极情感,0.5-1区间归为积极情感。多分类则是计算待分类样本离哪个区间更近,即识别为哪种类型。

无监督的分类问题 。自然语言处理中,经常会有主题识别任务,这类任务通常是采用lda主题模型,核心逻辑是将文章划分为「文档」—「主题」—「词」的三层逻辑,以无监督学习自动完成按照主题的词聚类。由于是无监督学习,需要根据实际情况指定学习出的主题个数,最终选择主题个数最合理的结果。依赖人的主观判断和理解一系列词背后组成的主题。

生成问题 。生成问题常见的有文本纠错、词生成、句子生成、机器翻译等。生成问题从统计学逻辑上讲,是基于已有语料的统计,计算出接下来要生成内容的概率。拿机器翻译举例,需要事先准备好中英文对照的大量语料,基于语料,机器学习到中英文词对照、短语对照的知识,最终在翻译场景下,输出中文或英文相应的翻译内容。

再拿隐马尔可夫模型做词性标注举例,基于已经标注的语料,隐马尔可夫模型可以学习到词与词之间词性的状态转移概率,基于这个概率可以计算出一个词属于哪种词性。

深度学习的应用。 cnn构建的神经网络,比较适合解决nlp分类问题,但由于没有记忆,无法解决生成问题。rnn相较于cnn可以解决一定长度记忆问题,适合解决nlp领域一定长度的生成问题,例如词生成,但无法保留长期记忆。lstm具有长期记忆的手段,可以做生成句子的任务。

nlp 应用价值

文本是最常见的生产资料,产品经理学习nlp的原理及应用,可以开阔解决问题的视野。

拿在线教育行业举例,利用自然语言处理能力,可以自动识别出学生评论的情感倾向,可以辅助老师进行作文批改、自动出题、自动解题。

不难看出,自然语言处理的应用场景,并非人做不了,而是可以替代人类的手工劳动,大大提升任务的效率,将人解放出来,做更有价值的工作。

小乐帝,一线ai产品经理、科技优秀作者、产品经理读书会创始人。

「产品经理读书会」

专注于爱读书爱思考的产品人提供读书推荐、产品思考、以书会友的环境

三、自然语言处理(NLP)知识整理及概述(一)

这是我在留学期间选修的课程 :natura language process。 这篇文章主要是为了大致的梳理这门课上的知识点,方便日后复习。因此,语言处理的主体对象是english。

简单来说,语言模型就是一个对于不同单词出现概率的统计。

然而,对于英语来说,每个单词可能有不同的时态和单复数等形态变化。因此,在做统计前,需要先对原始数据进行预处理和归一化。

分割句子后,每句话应该作为一个元素单独存储。

一般来说,常用的是 unigram, bigram 和trigram, 即以1-3 个词作为一个对象来统计。n 越大, 统计结果也越稀疏。一个七八个词的组合重复出现的概率,显然远低于2-3个词的组合。 另一方面,根据马尔科夫链, 一个单词的出现,可以认为仅跟前一个词有关系,所以也没有太大必要追求过大的n。

n-gram 是一个重要的基础概念, 它所提供的概率分析可以做到很多事情, 例如机器翻译“请给我打电话”:p(“please call me”) > p("please call i ")。 又比如拼写纠正:基于概率, “its 5pm now” → 纠正为 “it's 5pm now”

没有比较就没有伤害。 对于语言模型的评估, 也需要有一个比较的对象。因此,要用两种方法建立不同的语言模型(当然也可以对比前人的工作成果)。显然,任意给一个测试用的句子,如果在某一模型中的出现概率都比较大,那么这个模型显然更好。 具体来说, 评估方法有两种:

首个单词问题 :对于一个基于bigram或trigram的模型,在计算一个句子的perplexity时,前1或2个单词需要不能直接得到,依赖于句子开头的标识符。也即是说,在训练 n-gram 模型时, 对于每个句子,分别在开头和结尾填充n-1个<s>。从而保证在计算perplexity的时候能够正确地从第一个单词开始计算。这也是为什么前面 sentence segmentation 的时候要将句子区别存储的原因。

显然,无论用来生成lm的corpus多么庞大,总会有些单词没有被包含其中(称为out of vocabulary, oov)。 解决方法有两种, 一是实现设定一个固定的字典,在训练lm过程中,所有不在字典中的单词统一转换成 token <unk>, 另一种是将lm中出现频率小于n次的单词当作 <unk>,剩下的作为字典。 根据字典对测试数据做相同操作,就可以避免oov的问题。

在处理完oov问题后,还有一个问题需要处理:所有单词都在字典中,但是单词的组合并没有在lm中出现这一情况。 此时就需要对基于bigram或trigram的lm进行smooth操作,规避这一问题。smoothing过程有1点需要注意,就是smooth之后的模型,其所有概率加起来,必须仍然为1。常见的smoothing方法有:

特别的,工程上最适合的应该是 stupid backoff algorithm, 这一算法并不确保整体概率为1。仅仅是在回退时乘以系数0.4计算。即如果trigram没有找到,就使用0.4×p(bigram), 如果bigram还是没找到, 就是要 0.4×0.4×p(unigram)。由于oov问题已解决,所以对于任意一个词,必然能计算出其概率。

相关阅读: large language models in machine translation

Top