您的位置  > 互联网

自然语言处理的底层任务由易到难的第一步

金融领域分词难点

分词有简单和复杂之分。 简单是因为分词算法的研究已经非常成熟,大多数算法(如HMM分词、CRF分词)的准确率都能达到95%以上; 之所以复杂,是因为剩下的5%很难突破,这主要可以归结为三点:

▲粒度,即分割时的最小单位。 不同的应用对粒度的要求不同。 例如,“融资融券”可以是一个词,也可以是两个词。

▲ 歧义性,例如“Hang Seng”一词,既可以指恒生公司,也可以指恒生指数

▲未注册词,即算法使用的词典中没有出现的词,例如不常见的专业金融术语和各种上市公司的名称

在金融领域,分词也存在上述三个难点,其中未注册词的难度更为突出。 这是因为金融词汇较多,有些专有名词不仅有全称,还有缩写。 这进一步增加了难度。

在实际应用中,上述困难往往会导致分词结果不佳,进而影响后续任务。 尤其是在一些金融业务中,有很多场景需要与用户进行交互。 一些用户会使用口语词汇来描述业务。 如果分词错误,就会影响对用户意图的分析,这对分词的准确性提出了更高的要求。 要求。 因此,在开发NLP上层应用时,需要对分词算法有一定的了解,以便在优化效果时可以调整分词器。 接下来我们介绍几种常用的分词算法以及它们在金融应用中的优缺点。

几种常见的分词算法

分词算法按照核心思想主要分为两类:

第一个是基于词典的分词。 首先根据词典对句子进行分词,然后找到最佳的词组合,包括最大匹配分词算法、最短路径分词算法、基于N-Gram模型的分词算法等;

第二种是基于词的分词,即由词组成词。 首先将句子分词,然后将词组合成词,寻找最优的分词策略。 它还可以转化为序列标记问题,包括生成表达式。 模型分词算法、判别模型分词算法、神经网络分词算法等。

最大匹配分词算法

寻找最大匹配分词的最优组合的方法是将最长匹配的词组合在一起。 主要思想是首先将字典构造成Trie树(也称为字典树)。 Trie 树由由单词的公共前缀组成的节点组成。 ,减少了存储空间,提高了搜索效率。

图像

最大匹配分词将句子与Trie树进行匹配,当根节点匹配时从下一个词重新开始搜索。 例如,如果正数(从左到右)匹配“他说的确实有道理”,则结果是“他/说/确实/真实/合理”。 如果进行反向最大匹配,就是“他/说/是/是/有道理”。

这种方法虽然可以在O(n)的时间内完成句子的分词,但是只有单向匹配就显得过于绝对了,尤其是在金融等词汇丰富的场景下,比如“交易费/使用”、“报价/比特”等,所以除非某些词的优先级很高,否则尽量避免使用这种算法。

最短路径分词算法

最短路径分词算法首先将句子中的所有单词进行匹配,形成词图(有向无环图DAG),然后找到从起点到终点的最短路径作为最佳组合。 例如:

图像

我们认为图中每个单词的权重是相等的,所以每条边的权重都是1。

在解决 DAG 图的最短路径问题时,必须始终利用一个性质:即两点之间的最短路径还包括路径上其他顶点之间的最短路径。 例如,S->A->B->E是从S到E的最短路径,那么S->A->B一定是从S到B的最短路径,否则就会有一个点C使得d (S->C->B)A->B),那么从S到E的最短路径也将变为S->C->B->E,这与假设矛盾。 利用上述最优子结构性质,可以使用两种求解算法:贪心算法或动态规划:

(1)根据算法求解最短路径。 该算法适用于所有带权有向图,求解源节点到所有其他节点的最短路径,能够找到全局最优解;

(2)N-最短路径分词算法。 该方法是该算法的扩展。 它在每一步保存最短的N条路径,并记录这些路径上当前节点的前驱。 当最终得到最优解时,通过回溯得到最短路径。 。 该方法的精度比算法要好,但时间复杂度和空间复杂度都较大。

与最大匹配分词算法相比,最短路径分词算法更加灵活,能够更好地组合词典中的单词,能够更好地解决歧义场景。 例如上面这句话“他说的确实有道理”,使用最短路径算法的计算结果是“他/说/是/确实/合理”,避免了前向最大匹配的错误。 但对于词典中不存在的词基本没有识别能力,无法解决金融领域分词的“未录词”困难。

基于N-Gram模型的分词算法

N-Gram(也称为 N-gram 模型)基于这样的假设:第 n 个单词与前 n-1 个单词相关,并且与任何其他单词都不相关。 在这个假设下,可以简化单词的条件概率,进而求解整个句子出现的概率。

事实上,常见词出现的频率或概率肯定大于生僻词。 因此,求解词图最短路径的问题可以转化为求解最大概率路径的问题,即分词结果是“最可能的单词组合”。

要计算单词出现的概率,仅靠字典是不够的。 还需要足够的语料库。 因此,分词任务从简单的“算法”升级为“建模”,即利用统计方法结合大数据挖掘对“语言”(句子出现的概率)进行分析进行建模。

我们将基于N-gram模型计算出的概率分布应用到单词图上,得到单词的概率图。 使用最短路径分词算法,求解出这张词图概率最大的路径,就可以得到分词结果。

与前两种分词算法相比,基于N-Gram模型的分词算法对词频进行统计建模,在分词歧义时力求获得全局最优值,例如在分词方案“证券/自”中经营/“业务”和“证券/自营/业务/服务”中,统计显示“证券/自营/业务”出现的频率较高,因此结果准确度较高,但仍不能解决问题金融场景中未注册单词的数量。

生成模型分词算法

生成模型主要有隐马尔可夫模型(HMM,模型)、朴素贝叶斯分类等。HMM是常用的分词模型。 基于jieba的分词器和基于Java的HanLP分词器都使用了HMM。

HMM模型在解决序列标注问题时认为存在两种序列。 一种是观察序列,即人们显式观察到的句子,另一种是隐藏状态序列,即观察序列的标签。 假设观察序列为X,隐藏状态序列为Y,则因果关系为Y->X。 因此,为了得到标注结果Y,必须计算X的概率、Y的概率以及P(X|Y),即必须建立P(X,Y)的概率分布模型。

HMM算法可以在一定程度上解决未登录词的问题,但生成模型的准确率往往不如接下来要讨论的判别模型。

判别模型分词算法

判别模型主要有感知器、支持向量机(SVM)、条件随机场(CRF,Field)、最大熵模型等。其中,感知器模型和CRF模型是常用的分词模型。

(1)平均感知器分词算法

感知器是一个简单的二类线性模型,通过构造超平面将特征空间(输入空间)中的样本分为正类和负类。 通过组合,感知器还可以处理多分类问题。 然而,由于模型的所有权重在每次迭代中都会更新,误分类的样本会产生很大的影响,因此在处理部分样本后使用平均方法对更新后的权重进行平均。

(2)CRF分词算法

CRF可以看作是一种无向图模型。 假设给定的标签序列为Y,观察序列为X。CRF定义了条件概率P(Y|X),而不是对联合概率进行建模。

虽然平均感知器算法速度很快,但仍然不够准确。 适合一些速度要求较高,精度要求相对较低的场景。 CRF分词算法可以说是目前最常用的分词、词性标注和实体识别算法。 对于未注册的单词也具有良好的识别能力。 它在速度、准确性和未注册词识别方面是目前最优秀的算法。 ,这也是我们目前使用的解决方案,但它会比感知器慢。

神经网络分词算法

在NLP中,最常用的神经网络是循环神经网络(RNN),它在处理变长输入和序列输入问题上具有巨大的优势。 LSTM(Long Short-Term,长短期记忆网络)是RNN的一种变体,在一定程度上解决了RNN在训练过程中出现的梯度消失和梯度爆炸的问题。

目前,对于序列标记任务,业界公认的最好的模型是+CRF。 与上述其他模型相比,双向循环神经网络可以更好地对当前单词等上下文信息进行编码,最后添加了CRF层。 核心是用算法解码得到全局最优解,避免B、S、E这种不可能标注结果的出现,提高准确率。

虽然神经网络分词在准确率和未注册词识别方面可以表现更好,但RNN无法并行计算,在速度上没有优势。 因此,该算法通常用于算法研究、精确句子解析等对速度要求不高的情况。 场景中使用。

概括

分词作为NLP的底层任务之一,既简单又重要。 很多时候,上层算法的错误是由分词结果引起的。 因此,底层实现的算法工程师不仅需要对分词算法有深入的了解,还需要知道如何高效地实现和调试。

对于上层应用算法工程师来说,在实际分词时,需要根据业务场景选择性地应用上述算法。 例如,搜索引擎在对大规模网页进行内容分析时,分词的速度大于准确性,而在智能问答中,由于句子较短,因此分词的准确性要求大于速度。