NLP 中的基础总结

Wesley13
• 阅读 688

1. 词

中文中,常规的词一般直接由分词工具切割开,如工具包结巴分词,组成短语,一些情况下也可以用单个字表示。英文中的词比较常见的是单个词,也有些情况会使用英文词组

1.1 词的预处理

一般情况下,对于英文文本,首先需要转换时态,三单这种词语的变换,首部大写字母转换小写,有时还需要对单词进行拼写检查。

1.2 停用词

对于中英文文本都存在停用词现象。停用词指非常常见的词但却没有实在意义的那一堆词,通常通过构建停用词表进行滤除。英文中比较典型的就是“is”,中文中为“的”这样的词。是否滤除停用词视情况而定,对于文本分类,相似度检验问题建议滤除,否则会发现所有文本相似度好像都很高的样子。

1.3 词向量

词向量是一种比较常用的对词进行编码的一种手段。比较常见的就one-hot 编码,word2vec,glove的方法,最近还出了一种fasttext的方法,也可以尝试用一用。One-hot的方法很容易把维度增大,因为字典有多少个他就有多少维,而后面的方法实际上是可以控制词向量维度的,一般控制在300维以内。词向量的基本可理解为这个词包含了多少语义信息,需要自己训练的话语料库尽量越大越好,如果自己的语料库本身就很小还是直接拿预训练的词向量进行训练吧,一般是有Wiki的预训练数据的。

1.4 主题特征

文本中的一些词可能表示为一个一样事物,这个时候使用主题特征把这些词归纳一下,构成新的特征,可能听的比较多的就是TF-IDF方法,直接根据词频,另外常见的还有LDA方法,需要自己定义有几个主题,而HDP方法则可以自己确定有多少主题。

1.5 词性特征

词性特征也称作POS。词性就是指的我们常说的名词动词形容词。通过常见的py包是可以直接提取出来的。

1.6 命名实体

命名实体也叫NER。一般如Stanfordnlp是直接包含了命名实体识别的检测,但仅限于如货币(美元,英镑),时间(分,秒)这样的常见类型。而很多情况下则需要根据自己的场景来提取命名实体,比如对文本中的生物标注是动物还是植物。需要特殊领域的只有自己训练了。

2.句法分析与语义分析

句法分析主要方法还是依靠调包。实现方法主要是规则+概率。一般句法分析出来以后一个单词会有两个属性,一个是指向他的单词的与他自己的位移,一个是他与这个单词的关系。每个词都有唯一的指向他的词

NLP 中的基础总结

如图,来自https://www.ltp-cloud.com/demo/ 示例。这两种都可以算作特征。 同理,根据语义的依存关系,语义的关系会更多一些,还是根据场景选择。如图为语义分析示例

NLP 中的基础总结

这两张图都出现了一个root,这个root是额外补充的。可以声明句子中心(一般为动词)

  1. nlp 中可以使用的一些常用套路

3.1 夹角

夹角一般使用余弦值计算,距离计算的方法还有很多,就不一一列举了。一般用来测量文本之间的相似度,短文本,长文本均适用,但具体需要怎样处理特征,就需要自己考虑了

3.2 n-gram方法

N-gram 方法就是指当前词的上下位的词,可以看作一个大小为n的窗口在文本上滑动,比如当n等于2,上图中的句子依次读出来就是 他叫 叫汤姆 汤姆去 去拿 拿外衣。以此类推,n为3时就是窗口为3,一般n取到4就不取了。同样,根据上文所说的,词性,句法,也可以根据ngram的方法对特征进行扩充

3.3 cnn方法

Cnn方法就是常说的卷积神经网络。对于文本来说,只有1维,在keras里适用Conv1。这里的输入一般为一段文本,文本中每一个词对应一组一维向量。对于特征明显的文本有奇效

3.4LSTM方法

LSTM方法是一种记忆性神经网络,为rnn进化型,衍生还有gru也比较常看到lstm训练较慢,gru会快一点。输入方法与cnn一样。一般使用前后向的LSTM叠加会舒服一些。

以上为个人总结,若有不当欢迎指出。Emm。。。如果想到别的了再补充。。。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这