当前位置: 首页>前端>正文

nlp 文本切割 huggingface nlp文本处理

1.文本处理的一般流程 pipeline

nlp 文本切割 huggingface nlp文本处理,nlp 文本切割 huggingface nlp文本处理_分词,第1张

 分词主要是中文,英语使用空格区分不涉及,清洗包括无用的标签(例如从网上爬取的文本中可能包含html标签)、特殊的符号(!感叹号、省略号等)、停用词、大写转小写

标准化包括stemming、lemmazatic(就是对英文词汇中的名词、动词转换化标准形态),这个主要是英语,中文不涉及。

特征提取:常见的TF-IDF(ES就是这个打分机制),word2vec

建模: 主要是AI的算法。

再下面是评估,所以NLP相对复杂些。要具备工程能力把这些不同的模块整合起来。

本篇主要包括:分词(word segmentation)、spell correction(拼写纠错)、stop words removal(停用词)、stemming(标准化)

2  分词

1)主要的分词工具

jieba\hanlp.等等

我之前用的ansj,从开源来看,你有人维护,定期更新就会使用的越来越多。

这个都差不多,方便加自定义词典是业务需求。

(2)分词算法介绍

前提:语句已经去掉特殊标点符号
需要预先设置一个字典,然后根据字典进行匹配

老师给出的例子:“我们经常有意见分歧”

前向最大匹配

nlp 文本切割 huggingface nlp文本处理,nlp 文本切割 huggingface nlp文本处理_前向最大匹配_02,第2张

过程解释:设置最大匹配长度为5,对句子从前到后与词典进行匹配,若未匹配到词,则缩减匹配词的长度,再进行尝试,直到匹配到或者到单字为止。

如果剩余长度不足为最大长度,那就取剩余长度。

下面是Java的一个demo。maxlength我取了5.(经验值5-10,需要综合考虑:1 词典里面的那些词语,大部分情况会事多长。因为长度跟每步是线性的,所以太长影响时间复杂度)

nlp 文本切割 huggingface nlp文本处理,nlp 文本切割 huggingface nlp文本处理_前向最大匹配_03,第3张

输出结果:[我们, 经常, 有意见, 分歧]

算法区别:

贪心算法-----只能选择当前的最有解(不能保证全局最优)。

DP(动态规划)-----在降低时间复杂度的情况下,能够找到全局的最优解(能够看到全局)

老师引申出一个工程师的问题,使用三方开源框架时,遇到的不足或者问题,要有别的措施来解决或者弥补。

后向最大匹配:(back-ward max matching)

nlp 文本切割 huggingface nlp文本处理,nlp 文本切割 huggingface nlp文本处理_NLP_04,第4张

nlp 文本切割 huggingface nlp文本处理,nlp 文本切割 huggingface nlp文本处理_前向最大匹配_05,第5张

前向最大匹配差不多,需要注意的就是数据输出前需要反转下。或者用stack来弹出。

优缺点:

最大匹配算法的缺点:局部最优,效率低,不能考虑语义。(需要词典不算缺点)

<3>考虑语义(Incorporate semantic)

   考虑语义,假设我们有个工具(通常是语言模型),根据这个工具能给出某句话分词之后的分值。那么我们可以根据词典生成所有的分词组合,

再根据工具对组合进行打分,筛选分高的。

nlp 文本切割 huggingface nlp文本处理,nlp 文本切割 huggingface nlp文本处理_最大匹配_06,第6张

利用语言模型 unigram language mode,事先统计出每个分词的频率,在计算各个词在出现的联合分布概率。

如p(经常|有|意见|分歧)=p(经常)p(有)p(意见)p(分歧)  把联合的概率看做是单独的概率的乘积,最终的结果看作是这句话符合语义程度的概率。

 

注意:直接使用unigram 语言模型多个概率相乘极有可能出现underflow(向下溢出,即double或float类型无法表示)

log(x*y*z)= log(x)+log(y)+log(z)

优化方法:对概率P取对数,将相乘转换为相加.因为加log不改变相对比较大小。因为当X>Y时,logX >log Y.

缺点:复杂度太高,生成的组合太多了。

 

 


https://www.xamrdz.com/web/2t51923268.html

相关文章: