财经 来源:TechWeb 阅读量:14440 2021-09-03 17:41
最近工作有点忙前段时间梯度和导数的事情让人很痛苦,我的数学也不好从事机器学习和神经网络是一件令人头痛的事情想去应用层面放松一下,想到自然语言处理,一个热门的模型就是基础和入门,而且好像是把列表转换成矩阵和字典的简单功能我想手动实现结果我看了CountVectorizer,发现不是这样,还是放弃了
顾名思义,单个热量意味着从零矢量开始如果一个单词出现在句子或文档中,向量中相应的条目将被设置为1
标记句子,忽略标点符号,用小写字母表达所有单词,你会得到一个:的词汇时间,水果,苍蝇,像,a,a,箭头,香蕉,大小为8因此,我们可以用一个八维的单个热矢量来表示每个单词在这本书里,我们用1来表示一个标记/w这个词的单个热表示
对于短语,句子或文档,压缩的单例表示只是其组成词的逻辑或的单例表示像香蕉一样这句话的简单热词会是a的3倍,8,其中列是8维单热矢量你通常会看到折叠或者二进制编码,其中文本/短语由词汇长度的向量表示,单词的存在与否由0和1表示like banana的二进制代码是:
Fromsklearn特征提取textimportcountvectorzer,tfidfvectorzrimportseabornasnsimporttmatchltlibproductappltimportjiebayimportjiebaanalyze # single heat表示它从零向量开始,如果单词出现在句子或文档中,则向量中相应的条目设置为1#英语处理和表达语料库=one _ hot _ vector zer=count vector zerone _ hot=one _ hot _ vector zer . fit _ transform
#中文处理和演示# get stop words list get _ stop words _ list(stop words file): stop words=(line . stripfor lineinopen(stop words file,Encoding=' utf—8 ')readline)return stop words # remove stop words defmovestop words(句子): stop words=get _ stop words _ list(' stop words . txt ')#在此处加载stop words的路径santi _ words=(xforxinsentenceeifn(x)gt1 andxnotinstopwords)返回anti _ words #语料语料库=('小明毕业于中国科学院计算技术研究所,后留学日本京都大学小王在清华大学学习,然后在南京计算技术学院工作和深造,然后在日本早稻田大学学习小李曾就读于清华大学,在中国科学院计算技术研究所获得硕士学位南京大学博士')新语料库= ForStrincorpus: org词表=jieba.lcut (str) # jieba分词词表=移动停止词(org词表)#移除停止词newword=' 'join(wordlist)#根据语料库要求分隔空间new语料库. append(newword)#根据语料库要求转换为列表# new语料库#('小明毕业于中国科学院计算技术研究所,日本京都大学深造',# '小王毕业于清华大学南京计算技术研究所,日本早稻田大学',# '小李毕业于清华大学,获硕士学位,毕业于南京大学,获中国科学院计算技术研究所博士学位')One _ hot _ vectorer=countrvector(binary=true)# Createfit _ transform(新语料库)toarray #转换语料库和矩阵#以下是热词# one _ hot _ vectorer的输出结果词汇_ # '小明' :4 '336014,毕业:11,中国科学院33600,计算技术研究所336015,京都大学33608,研究生336012,小王:6,本科生:10,清华大学小李' :5,'博士' :3,'南京大学' :2 # one _ hot _ vectorerget _ feature _ names # ('中国科学院','南京','南京大学','博士','小明','小李' Calculate ')# one _ hot #((100010010011011)#(010001101101)#(101101000110111))SNSset _ style('字体无衬线' : ('Annt=true,cbar=false,xticklabels=one _ hot _ vectorerget _ feature _ names,yticklabels=('语句1 ','语句2 ','语句3'))plt.show
IDF的意思是在向量表示中惩罚普通符号,奖励稀有符号符号w的IDF将语料库定义为n是包含单词w的文档数,n是文档总数TF—IDF分数是TF * IDF的乘积首先请注意,在所有文档中(例如,n=N),IDF为0,TF—IDF得分为0,这完全惩罚了该项其次,如果一个术语很少出现(它可能只出现在一个文档中),那么IDF就是log n的最大值
tfidf _ vectorer=tfidf vectorer#创建一个单词包数据结构tfidf=tfidf _ vectorerfit _ transform(新语料库)toarray #转换语料库并对其进行矩阵化#以下是热词# tfidf _ vectorer的输出结果声乐_ # '小明' 30336014,毕业:11,中国科学院33600,计算技术研究所336015,京都大学33608,研究生336012,小王:6,本科生:10,清华大学小李' :5,'博士' :3,'南京大学' 33602 # tfidf _ vectorerget _ feature _ names # ('中国科学院','南京','南京大学','博士','小明','小李'','计算')# tfidf #((0 . 352215120 . 0 . 0 . 0 . 463120560 . 0 . 0 . 0 . 463120560 . 0 . 0 . 0 . 352215120 . 35225225(0 . 0 . 357617010 . 0 . 0 . 357617010 . 357617010 . 357617010get _ feature _ names,yticklabels=('语句1 ','语句2 ','语句3'),vmin=0,vmax=1,cm
免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。