官文链接-link
1.document(文本):文本序列,在Python中就是指字符串对象(str) 2.Corpus(语料库):多个文本序列的集合 3.Vector(向量):文本的数学表达方式 4.Model(模板):一种将向量从一种形式转换为另一种形式的算法
document
文本可以是任意一种字符集,一句话,一个几百个词的日志,一本书或者一篇新闻报道都可以被称为一份文本(document).
Corpus
在Gensim中,Corpus(语料库)是一种多个文本(document)组成的集合,它在Gensim中扮演以下两种角色: 1.作为模板的输入,可以作为一种算法模板的初始化参数,这个过程可以被称为训练,训练语料库后的模板可以用于匹配文本之间相似的主题内容. 2.从新的文本(未在受训练语料库中出现的文本)中提取有关该语料库的主题词. 也可以为此类语料库索引相似性查询,通过语义相似性查询,聚类等。
这只是一个简单的例子,在实际NLP工作中也可以是哪一些高级一点的内容当做语料库的文档,比如莎士比亚的典籍,人口统计学的关键术语解释等… 接下来我对这个语料库进行简单的预处理(这只是一个简单地对语料库进行预处理的步骤,更详细的步骤可以用方法进行[链接]) 预处理: Step1:将每个文本以空格为分割界分开 Step2:将文本内的词进行小写约定 Step3:去停用词 Step4:统计每个词的词频,并去除那些只在文本中出现过一次的词
结果:
用方法对处理后的词进行id号标注并形成一个词典(后期训练模板会用到)
结果:
由于我们的语料库很小,所以形成的词典只有12个互不相同的词,在真正的NLP职业领域中,形成的词典里有几千几万个词的现象都是正常的,毕竟Gensim是基于统计的NLP神器,自然是语料库越大后期处理语句的精确度越高.
Vector
关于向量的解释,官网中给的解释是,假设我有3个问题,依次标号1,2,3.对这3个问题我依次给出对应的答案是0,2,5 .用二元组表示问题和答案的关系是(1,0.0),(2,2.0),(3,5.0), 依次给出这3个问题,我可以知道对应的答案,表示为(0.0,2.0,5.0),这就是一个稠密向量(对所有的问题都能进行准确的解答),然而在程序中有时为了节省内存,我就可以把答案为0.0的问题忽略掉,只剩下(2,2.0),(3,5.0)两种对应关系, 这就形成了一种疏向量(无论问题1的位置在哪里,我只关系问题二和三的结果,而不考虑这三个问题的提出顺序),这就是典型的词袋模型. 假如我现在有一个词向量: [‘coffee’, ‘milk’, ‘sugar’, ‘spoon’] 这四个词对应的位置依次标记为1,2,3,4.我再给出一个存在该词向量元素的词组: “coffee milk coffee”,那么这个词组在前面的词向量对应的词袋模型就可以表示为: [2, 1, 0, 0] (coffee在词向量中的位置为1,在词组中出现次数为2,milk位置为2,在词组中出现的次数为1,故表示为[2,1,0,0]),可见词袋模型只在乎独立的词和它的频数,而不考虑词与词之间的出现顺序. 我们上一步创建词典的目的就是给语料库中出现的每一个词打上对应的id,而这个id就是他们在词向量的位置,利用这个词典(现在,你也可以叫它词向量)我们进行相关词向量模型(Model)的训练就有了初始参数.
结果:
现在,我们还可以用这个词典的方法进行将一个新的句子进行词向量转化:
结果:
这个结果,每个元组的第一个元素是指对句子中的词在词典中对应的id号,第二个元素是词频,(interaction这个词在词典中没有,故输出结果也没它的事) 综合输出结果和这句话在词典中的位置序号和词频,我们可以写出它的词向量是[1,1],第一个1是指computer的词频,第二个1是Human的词频,而原句"Human computer interaction"中明明是Human这个词在先,computer在后,故可以看出,这就是一个词袋模型的缺点,它丢弃了原句的语序,这就好比在方法的眼中’我吃苹果’和’苹果吃我’是等价的,因为去停用词后他们都有1个’苹果’和1个’我’,主宾顺序则么办?词袋模型:关我毛事?! 我们现在尝试将整个语料库中的所有文本用方法向量化:
结果:
Model
现在我们已经对整个语料库进行了矢量化处理,我们可以开始使用模型对其进行转换了。我们将模型用作抽象术语,指的是从一种文档表示形式到另一种文档表示形式的转换。在gensim中,文档表示为向量,因此可以将模型视为两个向量空间之间的转换。当模型读取训练语料库时,将在训练过程中学习此转换的详细信息。 模型的一个简单示例是tf-idf模型。 tf-idf模型将向量从词袋表示转换为向量空间,在该向量空间中,将根据语料库中每个词的相对稀有度对频率计数进行加权。 实例:
结果:
结果元祖的第一个参数是句子中词对应的字典id,第二个是它的tf-idf权重. 有了tfidf模板,我们可以为整个向量化的语料库(就是前面的bow_corpus二维数组)进行序列化标注,然后对一个新的句子依次跟语料库中的每个句子进行tfidf匹配来计算相似度(也就是将一个新句子拿过来跟咱们语料库中的所有句子一个一个进行tf-idf权重比较,计算句子相似度)
结果:
使结果排序:
结果:
本文地址:http://sjzytwl.xhstdz.com/quote/71718.html 物流园资讯网 http://sjzytwl.xhstdz.com/ , 查看更多