python实现词法分析

ads

点击上方蓝色字体,关注我们


近日学习忽见一Python第三方库: Synonyms,该库包含词汇量达到125792,主要应用于文本对齐、推荐算法、相似度计算、语义偏移、关键字提取、概念提取、自动摘要、搜索引擎等 NLP 任务场景。

Synonyms 项目的作者胡小夕是北京邮电大学研究生,目前实习于今日头条 AI LAB。从事自然语言处理方向研究,在智能客服,知识图谱等领域都有相关研究开发经验。研发模型在文体分类权威数据集 TREC 上达到目前最优精度,申请深度学习与自然语言处理结合的国家发明专利 5 项。




1


原理简介



Synonyms库采用Word2vec技术实现,Word2Vec(Word Embedding)中文名称为“词向量”或“词嵌套”,是Google开源一款用于深度学习的自然语言处理工具。其基本思想是将自然语言中的每一个词转换为向量vec的形式表达(指学习一个映射ƒ,它可以将单词变成向量表示:vec=ƒ(word)),通常词汇表的维数多于向量vec维数,这样可以更加高效的方式表示单词。

Word2Vec是一种可以从原始语料中学习字词空间向量的预测模型,使用Word2Vec训练语料得到的结果非常有趣,比如意思相近的词在向量空间中的位置会接近。Word2Vec分为CBOW(Continuous Bag-of-Words)和Skip-Gram两种模式,其中CBOW是从原始语句(比如:中国的城市是_____)推测目标字词(比如:天津),而Skip-Gram相反,它是从目标字词推测出原始语句,CBOW比较合适小型语料数据,而Skip-Gram比较适合大型语料数据。

Word2Vec通过一系列的训练,可以实现将文本的内容转换成N维向量从而进行运算,其文本语义上的相似度可以通过向量空间的相识度表示,由此Word2Vec可以处理一些文本语义上的工作,比如找同义词,词性分析等,除此之外Word2Vec还可以对处理后的词进行算数运算(加减乘除)等操作。

实现词向量机制有两种方法,第一种方法是基于“计数”的,在海量语料库数据中统计一个词语和另一个词语同时出现的概率,将出现频率高的词语映射到向量空间的相近位置;第二种方法经常使用到,是基于“预测”的,从一个词语或者几个词语开始,预测它们可能的相邻词语。在预测的过程中学习到词向量映射。基于预测方法有两种模型:CBOW和Skip-Gram。CBOW(Continuous Bag-of-Words)即连续词袋模型,它的实现机制是训练一个模型,使用某个词语的上下文内容预测可能出现的词语。例如:“I'm hungry.I want to eat.”,若看到句子的前半部分:I'm hungry.I want to_____,也可以预测到需要填写的词语是“eat”。Skip-Gram模型和CBOW模型正好相反,使用已经出现的词语来预测上下文中的词语。例如在之前的语句中,是使用“eat”来预测“hungry”、“want”等词语。



2


安装模块



Synonyms库安装十分便捷,可以直接使用pip指令安装,安装指令如下所示:

pip install synonyms


安装成功后效果如下所示: 




3


同义词分析



同义词分析,即是分析指定词语在语料库中的同义类型词语,并打印输出。两行Python代码即可搞定,例如分析“美男子”的同义词,具体如下所示:

import synonymssynonyms.display("美男子")


相似度 > 0.5,返回相似,相似度 < 0.5,返回不相似。仅需几秒,分析效果如下所示:




4


相似度分析



相似度分析,即是分析用户指定的词语,分析其词性的相近程度,例如:语句1:不脱发的程序猿,语句2:美男子,分析代码如下所示:

import synonymsstr1 = "不脱发的程序猿"str2 = "美男子"r = synonyms.compare(str1, str2, seg=True)print("相似度:"+str(r))


从逻辑和认知层次上讲不脱发的程序猿是十足的美男子,但是从词语的相似度上分析,两者并无关联,所以词性相似度仅有0.041%,效果如下所示:


GitHub网站参见:https://github.com/huyingxi/Synonyms

更多有趣玩法请自行探索~ 


往期推荐
  • Python+OpenCV实时图像处理

  • Windows中安装Davinci

  • 在线体验四大名著情景(地图、游戏)


点击阅读原文,更精彩~

最后编辑于:2024/1/19 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com