nlp处理问题流程思路总结

nlp处理问题流程思路总结
概述:

经过一段时间对nlp课程的学习,对nlp处理流程思想有了一定的了解,具体处理过程为,遇到一个问题,先要把这个问题处理为一个数学问题(目标和约束条件);然后对这个数学问题判断是否为凸函数,是凸函数的话进行转换为Dual问题(所有问题默认为prinal问题),转换后进行判断与原问题(prinal问题)是否相同,如果相同进行查找相关工具处理,如果不同,需要评估两者最优解之间的差别有多大处理(gap),下面以svm为例进行简单说明。

问题描述:

假设有一批数据 d={(x_1 y_1 )……(x_n y_m )} y_i∈{-1 ,1}

约束条件 当w^T x_i+b ≥0 y_i=1 当w^T x_i+b <0 y_i=-1 可以改进为 (w^T x_i+b)≥0 ,给定一条分割线,它要离分割两遍样本距离最远(max mangin)假设数据线性可分

1.nlp问题转换成数学问题的思路

已知问题如图:

w向量方向垂直于wx+b =0决策边界这条线段(证明推导略),得到 x1=x2+λw (w^T x_1+b)= 1 (w^T x_2+b)= -1 mangin= | x_1- x_2| ,把以上公式进行简化为:

(w^T x_1+b)= 1 w^T( x_2+λw)+b= 1 wTx_2+λwTw+b= 1 求导λ= 2/(w^T w) 由 mangin= | x_1- x_2| 求导出 mangin=2/||w||

知道了mangin值就可以得出svm目标函数:最大化mangin maxminize 2/||w||

约束条件: w^T x_i+b ≥1 y_i=1 w^T x_i+b ≤-1 if y_i=-1

最小化目标函数可写成 minminize ||w||_2^2 约束条件: w^T x_i+b ≥1 y_i=1 w^T x_i+b ≤-1 y_i=-1

2.是否为凸函数判断方法

判断是否为凸函数有三种方法:

1)凸集定理方式,需要关注定义域和函数本身 在线段内部都属于凸集合,两个凸集的交集也是凸函数

2)求导一阶导数证明判断(梯度下降收敛结论时常使用的方式)

2)求导二阶导数证明判断

3.非凸函问题数处理过程

1)Naïve方法,存在问题是时间复杂度很高,会形成np hard的问题 这个问题也powerset,找到满足条件的集合终止

2)贪心算法 选择哪个集合不需要的去掉,但是不保证结果的最优化,无法选出不需要的集合是停止算法,最严谨的说法,就是利用此方法可以证明误差范围在哪,可以保证一定的准确率

3)把离散型的看做连续性的数进行处理

4)把非线性的部分转换成线性的方式,然后在进行近似解的处理

4.凸函数问题转换为Dual问题并进行处理

svm prinal问题表达,目标函数 minminize 1/2||w||_2^2 约束条件 y_i(w^T x_i+b)-1 ≥0 利用ktt条件写法改进 L= 1/2 ||W||_22+∑_(i=1)nλ_i [1-y_i (w^T x_i+b)] 约束条件: λ_i ≥0 ∀i λ_i [1-y_i (w^T x_i+b)] = 0 ∀i 1-y_i (w^T x_i+b) ≤0 ∀i

转换Dual问题:

w求导: σL/σw=W+∑_(i=1)^nλ_i (-y_i x_i)=∑_(i=1)^nλ_i y_i x_i =0

b求导: σL/σb=∑_(i=1)^nλ_i y_i =0

目标函数综合写成 -1/2∑_(i=1)n∑_(j=1)nλ_i λ_j y_i y_j x_ix_j+∑_(i=1)^nλ_i 约束条件 λ_i ≥0 ∀i ∑_(i=1)^nλ_i y_i x_i =0 ∀i w=∑_(i=1)^nλ_i y_i x_i λ_i [1-y_i (w^T x_i+b)] = 0 ∀i 因为位置函数有w变成了λ变成了典型的qp问题,转换完成

5.Dual问题与prinal问题区别与联系

区别:

1) 原来需要优化的未知参数是w 而新的问题是优化未知参数λ,可以看成λ二次方的问题是典型的qp问题

2)Dual问题比原来prinal问题好优化

计算复杂度方面解释:prinal问题需要从低纬度转换为高纬度需要计算,高纬度还需要另一次计算,这样导致时间复杂度过高,而Dual问题提高维度后计算复杂度和原维度计算复杂度基本一致,因为多出一个内积的计算,具体举例:

第一个写页面的公式,有些可能不正确,希望大家批评指正,未完 后期知识点细化

原文来自本人知乎:https://zhuanlan.zhihu.com/p/54521985

参考资料

贪心学院 NLP训练营第一期课程内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NLP(自然语言处理)是一门研究如何使计算机能够理解和处理人类语言的领域。Python是一种广泛用于编程的编程语言。结合Python和NLP可以进行各种自然语言处理任务,如文本分类、命名实体识别、情感分析等。在Python中,有许多流行的库和工具可供使用,以便进行NLP任务。以下是一些常用的Python库和工具: 1. NLTK(自然语言工具包):它是Python中最常用的NLP库之一,提供了许多用于文本预处理、词性标注、词袋模型、语法分析等任务的功能。 2. spaCy :这是另一个流行的Python库,它提供了高效的自然语言处理功能,包括分词、词性标注、命名实体识别和依赖解析等任务。 3. TextBlob :这是一个易于使用的Python库,它提供了一系列简单的API,用于处理常见的NLP任务,如情感分析、词性标注和文本分类。 4. Gensim :它是一个用于主题建模和文本相似度计算的Python库,可以用于处理大规模的文本数据。 5. Scikit-learn :这是一个通用的机器学习库,其中包含了许多用于文本分类、情感分析和文本聚类等任务的算法。 这些库和工具为Python开发者提供了丰富的功能和资源,便于进行各种NLP任务的开发和实验。你可以根据具体的需求选择适合的库和工具,并结合相关的算法和技术来处理自然语言数据。希望这些信息能够帮助到你。 NLTK官方网站:https://www.nltk.org/ spaCy官方网站:https://spacy.io/ TextBlob官方网站:https://textblob.readthedocs.io/ Gensim官方网站:https://radimrehurek.com/gensim/ Scikit-learn官方网站:https://scikit-learn.org/stable/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值