Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。它支持包括TF-IDFLSALDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。

  • LSI
  • LDA
  • HDP
  • DTM
  • DIM
  • TF-IDF
  • word2vec、paragraph2vec

基本概念

  • 语料(Corpus):一组原始文本的集合,用于无监督地训练文本主题的隐层结构。语料中不需要人工标注的附加信息。在Gensim中,Corpus通常是一个可迭代的对象(比如列表)。每一次迭代返回一个可用于表达文本对象的稀疏向量。
  • 向量(Vector):由一组文本特征构成的列表。是一段文本在Gensim中的内部表达。
  • 稀疏向量(Sparse Vector):通常,我们可以略去向量中多余的0元素。此时,向量中的每一个元素是一个(key, value)的tuple。
  • 模型(Model):是一个抽象的术语。定义了两个向量空间的变换(即从文本的一种向量表达变换为另一种向量表达)。

将文档集做成语料库

1.我们需要从文档集中获得词库:

一般需要进行如下几个步骤:

  • 分词
  • 去掉没有意义的冠词
  • 去低频词: 去掉只在出现过一次的单词(避免我们的语料库矩阵太稀疏了)
  • 将剩下的词做成词库

2.根据词库处理文档集,转化为语料库

#文档集
documents = ["Human machine interface for lab abc computer applications","A survey of user opinion of computer system response time","The EPS user interface management system","System and human system engineering testing of EPS","Relation of user perceived response time to error measurement","The generation of random binary unordered trees","The intersection graph of paths in trees","Graph minors IV Widths of trees and well quasi ordering","Graph minors A survey"]
#去冠词,连接词等
stoplist = set('for a of the and to in'.split())
texts = [[word for word in document.lower().split() if word not in stoplist]for document in documents]
texts
[['human', 'machine', 'interface', 'lab', 'abc', 'computer', 'applications'],['survey', 'user', 'opinion', 'computer', 'system', 'response', 'time'],['eps', 'user', 'interface', 'management', 'system'],['system', 'human', 'system', 'engineering', 'testing', 'eps'],['relation', 'user', 'perceived', 'response', 'time', 'error', 'measurement'],['generation', 'random', 'binary', 'unordered', 'trees'],['intersection', 'graph', 'paths', 'trees'],['graph', 'minors', 'iv', 'widths', 'trees', 'well', 'quasi', 'ordering'],['graph', 'minors', 'survey']]
#统计词频
from collections import defaultdict
frequency = defaultdict(int)
for text in texts:for token in text:frequency[token] += 1print(frequency)
defaultdict(<class 'int'>, {'human': 2, 'machine': 1, 'interface': 2, 'lab': 1, 'abc': 1, 'computer': 2, 'applications': 1, 'survey': 2, 'user': 3, 'opinion': 1, 'system': 4, 'response': 2, 'time': 2, 'eps': 2, 'management': 1, 'engineering': 1, 'testing': 1, 'relation': 1, 'perceived': 1, 'error': 1, 'measurement': 1, 'generation': 1, 'random': 1, 'binary': 1, 'unordered': 1, 'trees': 3, 'intersection': 1, 'graph': 3, 'paths': 1, 'minors': 2, 'iv': 1, 'widths': 1, 'well': 1, 'quasi': 1, 'ordering': 1})
#去掉低频词
from pprint import pprint
texts = [[token for token in text if frequency[token] > 1]for text in texts]
pprint(texts)
[['human', 'interface', 'computer'],['survey', 'user', 'computer', 'system', 'response', 'time'],['eps', 'user', 'interface', 'system'],['system', 'human', 'system', 'eps'],['user', 'response', 'time'],['trees'],['graph', 'trees'],['graph', 'minors', 'trees'],['graph', 'minors', 'survey']]
#获取词库dictionary
from gensim import corpora
dictionary = corpora.Dictionary(texts)
dictionary.save('/content/deerwester.dict')
dictionary
print(dictionary.token2id)
{'computer': 0, 'human': 1, 'interface': 2, 'response': 3, 'survey': 4, 'system': 5, 'time': 6, 'user': 7, 'eps': 8, 'trees': 9, 'graph': 10, 'minors': 11}
#将文档转为语料库corpus,统计的是词典中每个单词在文本张出现的频率
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus)
[[(0, 1), (1, 1), (2, 1)], [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)], [(2, 1), (5, 1), (7, 1), (8, 1)], [(1, 1), (5, 2), (8, 1)], [(3, 1), (6, 1), (7, 1)], [(9, 1)], [(9, 1), (10, 1)], [(9, 1), (10, 1), (11, 1)], [(4, 1), (10, 1), (11, 1)]]

训练语料的预处理

训练语料的预处理指的是将文档中原始的字符文本转换成Gensim模型所能理解的稀疏向量的过程。

通常,我们要处理的原生语料是一堆文档的集合,每一篇文档又是一些原生字符的集合。在交给Gensim的模型训练之前,我们需要将这些原生字符解析成Gensim能处理的稀疏向量的格式。

由于语言和应用的多样性,Gensim没有对预处理的接口做出任何强制性的限定。通常,我们需要先对原始的文本进行分词、去除停用词等操作,得到每一篇文档的特征列表。例如,在词袋模型中,文档的特征就是其包含的word:

texts = [['human', 'interface', 'computer'],['survey', 'user', 'computer', 'system', 'response', 'time'],['eps', 'user', 'interface', 'system'],['system', 'human', 'system', 'eps'],['user', 'response', 'time'],['trees'],['graph', 'trees'],['graph', 'minors', 'trees'],['graph', 'minors', 'survey']]

其中,corpus的每一个元素对应一篇文档。

接下来,我们可以调用Gensim提供的API建立语料特征(此处即是word)的索引字典,并将文本特征的原始表达转化成词袋模型对应的稀疏向量的表达。依然以词袋模型为例:

from gensim import corpora
dictionary = corpora.Dictionary(texts)  # 综合获取所有单词,作为综合特征(语料库)
print(dictionary)
corpus = [dictionary.doc2bow(text) for text in texts]  # 利用语料特征,为每一句话,建立稀疏向量(这里是bow向量)。对应特征(单词)出现的次数
print(corpus)
Dictionary(12 unique tokens: ['computer', 'human', 'interface', 'response', 'survey']...)
[[(0, 1), (1, 1), (2, 1)], [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)], [(2, 1), (5, 1), (7, 1), (8, 1)], [(1, 1), (5, 2), (8, 1)], [(3, 1), (6, 1), (7, 1)], [(9, 1)], [(9, 1), (10, 1)], [(9, 1), (10, 1), (11, 1)], [(4, 1), (10, 1), (11, 1)]]

到这里,训练语料的预处理工作就完成了。我们得到了语料中每一篇文档对应的稀疏向量(这里是bow向量);向量的每一个元素代表了一个word在这篇文档中出现的次数。值得注意的是,虽然词袋模型是很多主题模型的基本假设,这里介绍的doc2bow函数并不是将文本转化成稀疏向量的唯一途径。在下一小节里我们将介绍更多的向量变换函数。

最后,出于内存优化的考虑,Gensim支持文档的流式处理。我们需要做的,只是将上面的列表封装成一个Python迭代器;每一次迭代都返回一个稀疏向量即可。

# 流式处理,内存优化
class MyCorpus(object):def __iter__(self):for line in open('mycorpus.txt'):# 假设文档中每行是一个句子,使用空格分割yield dictionary.doc2bow(line.lower().split(' '))

主题向量的变换

对文本向量的变换是Gensim的核心。通过挖掘语料中隐藏的语义结构特征,我们最终可以变换出一个简洁高效的文本向量。

Gensim中,每一个向量变换的操作都对应着一个主题模型,例如上一小节提到的对应着词袋模型的doc2bow变换。每一个模型又都是一个标准的Python对象。下面以TF-IDF模型为例,介绍Gensim模型的一般使用方法。

首先是模型对象的初始化。通常,Gensim模型都接受一段训练语料(注意在Gensim中,语料对应着一个稀疏向量的迭代器)作为初始化的参数。显然,越复杂的模型需要配置的参数越多。

from gensim import models
tfidf = models.TfidfModel(corpus)

其中,corpus是一个返回bow向量的迭代器。这两行代码将完成对corpus中出现的每一个特征的IDF值的统计工作。

接下来,我们可以调用这个模型将任意一段语料(依然是bow向量的迭代器)转化成TFIDF向量(的迭代器)。需要注意的是,这里的bow向量必须与训练语料的bow向量共享同一个特征字典(即共享同一个向量空间)。

doc_bow = [(0, 1), (1, 1)]  # 表示语料库中的第0个单词出现1次,第1个单词出现1次
print(tfidf[doc_bow]) #  将语料转化为TFIDF向量
[(0, 0.7071067811865476), (1, 0.7071067811865476)]

注意,同样是出于内存的考虑,model[corpus]方法返回的是一个迭代器。如果要多次访问model[corpus]的返回结果,可以先讲结果向量序列化到磁盘上。

我们也可以将训练好的模型持久化到磁盘上,以便下一次使用:

tfidf.save("./model.tfidf")   # 存储模型
tfidf = models.TfidfModel.load("./model.tfidf")  # 加载模型

Gensim内置了多种主题模型的向量变换,包括LDALSIRPHDP等。这些模型通常以bow向量或tfidf向量的语料为输入,生成相应的主题向量。所有的模型都支持流式计算。关于Gensim模型更多的介绍,可以参考这里:API Reference

文本相似度的计算

在得到每一篇文档对应的主题向量后,我们就可以计算文档之间的相似度,进而完成如文本聚类、信息检索之类的任务。在Gensim中,也提供了这一类任务的API接口。

以信息检索为例。对于一篇待检索的query,我们的目标是从文本集合中检索出主题相似度最高的文档。

首先,我们需要将待检索的query和文本放在同一个向量空间里进行表达(以LSI向量空间为例):

from gensim import similarities
# 构造LSI模型并将待检索的query和文本转化为LSI主题向量
# 转换之前的corpus和query均是BOW向量
lsi_model = models.LsiModel(corpus, id2word=dictionary, num_topics=2)
documents = lsi_model[corpus]
query = dictionary.doc2bow(['search','word'])
query_vec = lsi_model[query]

接下来,我们用待检索的文档向量初始化一个相似度计算的对象:

index = similarities.MatrixSimilarity(documents)

我们也可以通过save()load()方法持久化这个相似度矩阵:

index.save('/content/deerwester.index')
index = similarities.MatrixSimilarity.load('/content/deerwester.index')

注意,如果待检索的目标文档过多,使用similarities.MatrixSimilarity类往往会带来内存不够用的问题。此时,可以改用similarities.Similarity类。二者的接口基本保持一致。

最后,我们借助index对象计算任意一段query和所有文档的(余弦)相似度:

sims = index[query_vec] # return: an iterator of tuple (idx, sim)

我们梳理下逻辑步骤:

1、将文本数据,通过jieba分词进行处理,形成一个二维数组

2、将二维数组生成词典

3、将二维数组通过doc2bow稀疏向量,形成语料库

4、使用TF模型算法,将语料库计算出Tfidf值

5、获取词典token2id的特征数

6、计算稀疏矩阵相似度,建立一个索引

7、测试数据jieba分词处理

8、通过doc2bow计算测试数据的稀疏向量

9、求得测试数据与样本数据的相似度

import jieba
from gensim import corpora, models, similaritiesif __name__ == '__main__':base_data = ["好雨知时节,当春乃发生。随风潜入夜,润物细无声。野径云俱黑,江船火独明。晓看红湿处,花重锦官城。","君问归期未有期,巴山夜雨涨秋池。何当共剪西窗烛,却话巴山夜雨时。","莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。","天街小雨润如酥,草色遥看近却无。最是一年春好处,绝胜烟柳满皇都。","古木阴中系短篷,杖藜扶我过桥东。沾衣欲湿杏花雨,吹面不寒杨柳风。","少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。","雨里鸡鸣一两家,竹溪村路板桥斜。妇姑相唤浴蚕去,闲看中庭栀子花。","一夕轻雷落万丝,霁光浮瓦碧参差。有情芍药含春泪,无力蔷薇卧晓枝。"]# 1.将base_data中的数据进行遍历后分词base_items = [[i for i in jieba.lcut(item)] for item in base_data]print(base_items)# 2.生成词典dictionary = corpora.Dictionary(base_items)# 3.通过doc2bow稀疏向量生成语料库corpus = [dictionary.doc2bow(item) for item in base_items]# 4.通过TF模型算法,计算出tf值tf = models.TfidfModel(corpus)# 5.通过token2id得到特征数(字典里面的键的个数)num_features = len(dictionary.token2id.keys())# 6.计算稀疏矩阵相似度,建立一个索引index = similarities.MatrixSimilarity(tf[corpus], num_features=num_features)# 7.处理测试数据test_text = "风雨凄凄,鸡鸣喈喈。既见君子,云胡不夷。风雨潇潇,鸡鸣胶胶。既见君子,云胡不瘳。风雨如晦,鸡鸣不已。既见君子,云胡不喜。"test_words = [word for word in jieba.cut(test_text)]print(test_words)# 8.新的稀疏向量new_vec = dictionary.doc2bow(test_words)# 9.算出相似度sims = index[tf[new_vec]]print(list(sims))

Word2Vec

Gensim中实现word2vec模型非常简单。
我们先来看一下他的API:

class gensim.models.word2vec.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False)

模型创建

Gensimword2vec 模型的输入是经过分词的句子列表,即是某个二位数组。但由于中文没有像英文那么自带天然的分词,所有这里我们简单采用 jieba 来进行分词处理。

# 引入 word2vec
from gensim.models import word2vec# 引入日志配置
import logginglogging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)# 引入分词工具
import jieba# 引入数据集
raw_sentences = ["但由于中文没有像英文那么自带天然的分词","所以我们第一步采用分词"]# 切分词汇
sentences = []
for s in raw_sentences:tmp = []for item in jieba.cut(s):tmp.append(item)sentences.append(tmp)
# print(sentences)
# 构建模型
model = word2vec.Word2Vec(sentences, min_count=1)# 进行词向量输出
model['中文']

但这种方法在数据集比较大的情况下会占用大量的 RAM,Gensim 本身只是要求能够迭代的有序句子列表,因此在工程实践中我们可以使用一些自定义的生成器,只在内存中保存单条语句,并且在导入内存之前进行分词操作。

Word2Vec参数

  • sentences: 可以是一个 list,对于大型的预料集,我们建议使用 BrownCorpusText8CorpusLineSentence 来进行构建。
from gensim.models.word2vec import LineSentence
from gensim.models.word2vec import Text8Corpussentences = LineSentence('a.txt')
sentences = Text8Corpus('a.txt')
  • size: 词向量的维度。
  • alpha: 模型初始的学习率。
  • window: 表示在一个句子中,当前词于预测词在一个句子中的最大距离。
  • min_count: 用于过滤操作,词频少于 min_count 次数的单词会被丢弃掉,默认值为 5。
  • max_vocab_size: 设置词向量构建期间的 RAM 限制。如果所有的独立单词数超过这个限定词,那么就删除掉其中词频最低的那个。根据统计,每一千万个单词大概需要 1GB 的RAM。如果我们把该值设置为 None ,则没有限制。
  • sample: 高频词汇的随机降采样的配置阈值,默认为 1e-3,范围是 (0, 1e-5)。
  • seed: 用于随机数发生器。与词向量的初始化有关。
  • workers: 控制训练的并行数量。
  • min_alpha: 随着训练进行,alpha 线性下降到 min_alpha。
  • sg: 用于设置训练算法。当 sg=0,使用 CBOW 算法来进行训练;当 sg=1,使用 skip-gram 算法来进行训练。
  • hs: 如果设置为 1 ,那么系统会采用 hierarchica softmax 技巧。如果设置为 0(默认情况),则系统会采用 negative samping 技巧。
  • negative: 如果这个值大于 0,那么 negative samping 会被使用。该值表示 “noise words” 的数量,一般这个值是 5 - 20,默认是 5。如果这个值设置为 0,那么 negative samping 没有使用。
  • cbow_mean: 如果这个值设置为 0,那么就采用上下文词向量的总和。如果这个值设置为 1 (默认情况下),那么我们就采用均值。但这个值只有在使用 CBOW 的时候才起作用。
  • hashfxn: hash函数用来初始化权重,默认情况下使用 Python 自带的 hash 函数。
  • iter: 算法迭代次数,默认为 5。
  • trim_rule: 用于设置词汇表的整理规则,用来指定哪些词需要被剔除,哪些词需要保留。默认情况下,如果 word count < min_count,那么该词被剔除。这个参数也可以被设置为 None,这种情况下 min_count 会被使用。
  • sorted_vocab: 如果这个值设置为 1(默认情况下),则在分配 word index 的时候会先对单词基于频率降序排序。
  • batch_words: 每次批处理给线程传递的单词的数量,默认是 10000。

模型创建

Gensimword2vec 模型的输入是经过分词的句子列表,即是某个二位数组。但由于中文没有像英文那么自带天然的分词,所有这里我们简单采用 jieba 来进行分词处理。

内存

word2vec 参数模型保存在 NumPy 矩阵中。矩阵中的每一行是单词的向量,这个向量用浮点数(单精度,也称为 4 字节)表示。

假设三个这样的矩阵同时保存在 RAM 中(如果是矩阵正在工作中,那么该数量应该减少到两个,甚至一个)。因为,如果你输入的单词量是 100000 个,词向量你要求长度为 200 ,那么模型所占的内存为 100000 * 200 * 4 * 3 =~ 229 MB。

大型语料库

在真实的训练环境中,我们面对的都是比较大型的语料库,在这里我们以 word2vec 官方的 text8为例子,具体如下:

#!wget http://mattmahoney.net/dc/text8.zip
# 可以进行调参
sentences = word2vec.Text8Corpus('/content/drive/My Drive/VQA/text8')
model = word2vec.Word2Vec(sentences, size=10)

我们在前面也提到了,如果是对大量的输入语聊集或者需要整合磁盘上多个文件夹中的数据,那么我们可以使用迭代器的方式来读取数据,而不是一次性的将全部内容读取到内存中,从而来节省 RAM 空间,具体如下:

class MySentences(object):def __init__(self, dirname):self.dirname = dirnamedef __iter__(self):for fname in os.listdir(self.dirname):for line in open(os.path.join(self.dirname, fname)):yield line.split()sentences = MySentences('/content/drive/My Drive/temp') # a memory-friendly iterator
model = gensim.models.Word2Vec(sentences)

模型的保存与读取

model.save('/content/drive/My Drive/VQA/text8.model')
model1=word2vec.Word2Vec.load('/content/drive/My Drive/VQA/text8.model')
model1.wv.save_word2vec_format('/content/drive/My Drive/VQA/text.model.bin', binary=True)

模型预测

Word2Vec 模块还可以进行一些语义相似度推算,比如:

model.most_similar(positive=['woman', 'king'], negative=['man'], topn=5)[('empress', 0.908510148525238),('emperor', 0.8917052745819092),('consul', 0.8867863416671753),('viii', 0.8603659868240356),('constantine', 0.8601230382919312)]model.wv.doesnt_match("breakfast cereal dinner lunch".split())'cereal'model.wv.similarity('woman', 'man')0.8962993model.most_similar(['man'])[('woman', 0.8962993621826172),('creature', 0.8722896575927734),('mortal', 0.8398157358169556),('immortal', 0.8280965685844421),('lady', 0.8186058402061462),('love', 0.8164145350456238),('frodo', 0.8144702911376953),('witch', 0.8118389844894409),('odin', 0.8106104731559753),('curse', 0.8105427026748657)]

如果我们希望直接获取某个单词的词向量,我们可以直接以下标的方式进行访问:

model['computer']
array([ 2.873207  , -4.3575926 , -0.7075361 , -1.0461179 ,  2.1580493 ,-2.7129724 ,  3.024015  , -3.7949312 ,  4.6527395 , -2.157235  ,1.8130941 , -2.2809258 , -2.0773365 ,  3.9518857 ,  1.96224   ,-0.9358364 , -2.7152145 ,  0.8164732 ,  0.48446816, -1.3217882 ],dtype=float32)

模型评估

Word2Vec 的训练属于无监督模型。Google 之前公开了一个 20000 条左右的语法与语义化训练样本,每一条都遵循 A is to B as C is to D这个格式,下载地址在这里
效果不是很好,可以进一步调参

#!wget https://github.com/nicholas-leonard/word2vec/blob/master/questions-words.txt
model.accuracy("/content/drive/My Drive/VQA/questions-words.txt")
2020-08-27 03:55:31,616 : INFO : capital-common-countries: 8.9% (45/506)
2020-08-27 03:55:37,210 : INFO : capital-world: 4.4% (64/1452)
2020-08-27 03:55:38,265 : INFO : currency: 3.7% (10/268)
2020-08-27 03:55:44,477 : INFO : city-in-state: 2.2% (35/1571)
2020-08-27 03:55:45,669 : INFO : family: 35.6% (109/306)
2020-08-27 03:55:48,573 : INFO : gram1-adjective-to-adverb: 5.2% (39/756)
2020-08-27 03:55:49,746 : INFO : gram2-opposite: 5.9% (18/306)
2020-08-27 03:55:54,551 : INFO : gram3-comparative: 21.3% (269/1260)
2020-08-27 03:55:56,480 : INFO : gram4-superlative: 5.5% (28/506)
2020-08-27 03:56:00,302 : INFO : gram5-present-participle: 8.0% (79/992)
2020-08-27 03:56:05,491 : INFO : gram6-nationality-adjective: 18.3% (251/1371)
2020-08-27 03:56:10,752 : INFO : gram7-past-tense: 9.9% (132/1332)
2020-08-27 03:56:14,636 : INFO : gram8-plural: 16.1% (160/992)
2020-08-27 03:56:17,125 : INFO : gram9-plural-verbs: 7.5% (49/650)
2020-08-27 03:56:17,131 : INFO : total: 10.5% (1288/12268)

参考文献

  • https://blog.csdn.net/luanpeng825485697/article/details/80452334
  • https://blog.csdn.net/CoderPai/article/details/80250380
  • https://radimrehurek.com/gensim/apiref.html
  • https://blog.csdn.net/qq_33689414/article/details/89516331
  • http://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec
  • http://mattmahoney.net/dc/text8.zip

NLP-gensim库相关推荐

  1. NLP之TM:基于gensim库调用20newsgr学习doc-topic分布并保存为train-svm-lda.txt、test-svm-lda.txt

    NLP之TM:基于gensim库调用20newsgr学习doc-topic分布并保存为train-svm-lda.txt.test-svm-lda.txt 目录 输出结果 设计思路 核心代码 输出结果 ...

  2. 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...

  3. python中nlp的库_用于nlp的python中的网站数据清理

    python中nlp的库 The most important step of any data-driven project is obtaining quality data. Without t ...

  4. python的Gensim库如何使用

    Gensim是一个用于向量空间模型的NLP库,它的常用功能有: 文档的相似度计算 关键词提取 文档的主题分析 使用Gensim的步骤大致如下: 导入Gensim库和数据 将文档转换为向量 构建模型 计 ...

  5. ​用 Python 和 Gensim 库进行文本主题识别

    作者 | 云朵君 来源 | 数据STUDIO 主题识别是一种在大量文本中识别隐藏主题的方法.潜在狄利克雷分配 (LDA) 技术是一种常见的主题建模算法,在 Python 的 Gensim 包中有很好的 ...

  6. python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码

    python中nlp的库 by Praveen Dubey 通过Praveen Dubey 单词词汇入门以及如何在Python中为NLP 编写代码的简介 (An introduction to Bag ...

  7. Gensim库的使用——Gensim库的核心概念介绍

    Gensim库介绍 Gensim是在做自然语言处理时较为经常用到的一个工具库,主要用来以无监督的方式从原始的非结构化文本当中来学习到文本隐藏层的主题向量表达. 主要包括TF-IDF,LSA,LDA,w ...

  8. Gensim库生成与导入W2V模型_CodingPark编程公园

    Gensim库生成与导入W2V模型 语料目录 gensim函数库Word2Vec配置参数 gensim.models.word2vec.Word2Vec(sentences=None,size=100 ...

  9. 资源警告!有人收罗了40个中文NLP词库,放到了GitHub上

    乾明 编辑整理 量子位 出品 | 公众号 QbitAI 你还在为进行中文NLP找不到词库而发愁吗? 你还在为了从文本中抽取结构化信息而抓耳挠腮吗? 现在,这些症状可以得到缓解了. 最近,在GitHub ...

  10. 安装gensim库的方法最终解答!

    [TOC] 安装gensim库,留痕. 安装gensim库的时候我怕遇到麻烦,就直接按昨天安装scikit-surprise库方法来. 打开Anaconda-Prompt 输入命令, conda in ...

最新文章

  1. PHP魔术常量trait
  2. 微信小程序把玩(十八)picker组件
  3. 基于Java的Selenium学习笔记——Assert
  4. mysql改国标码_MySQL 优化实施方案
  5. python corrupt extra field_求救,作业完全不会写啊
  6. 已知原函数和导函数的关系_原函数与导函数的关系
  7. 通过Jinq简化数据库查询
  8. 千载新论:只能指望员工做完工作,要做好依靠主管
  9. NAT篇 双剑合璧,无往不利——双向NAT
  10. 湖北工业大学计算机学院考研资料,湖北工业大学计算机学院836数据结构历年考研真题汇编.pdf...
  11. 2023年南京师范大学资源与环境考研上岸前辈备考经验指导
  12. win7系统64位下安装sql server2000时提示兼容性问题
  13. 202102-一个小屁民的若有所思
  14. 《精进:如何成为一个很厉害的人》 采铜
  15. Airbnb新用户民宿预定情况预测
  16. 戴尔游匣G15 5520成功安装ubuntu2004 intel ax201 驱动(亲测可用)
  17. 15.Scala- 文件和正则表达式
  18. ubuntu11.04下Discuz论坛的安装
  19. 使用vue-lunar-full-calendar插件展示带有农历和节假日的日历
  20. 人类的15个欲望与游戏设计

热门文章

  1. python爬去易车网某地市经销商信息
  2. 11选5任选5简要分析【彩票】
  3. 出行即服务MaaS主题汇总(附链接)
  4. BCGControlBar仪表(Gauge)效果预览与演示下载
  5. 前端学习笔记005:数据传输 + AJAX + axios
  6. 怎样写一个PC端使用的操盘手软件(用来买卖股票,查看报表,行情)
  7. python识别中文中的名字地点时间_在Python中解析带有timezone缩写名称的日期/时间字符串?...
  8. 小鹤双拼飞扬版反查编码功能解释-by老随风
  9. 《Spring源码深度解析 郝佳 第2版》SpringBoot体系分析、Starter的原理
  10. signature=5b21c7180c55d97f40a9cacc380e4481,D-instantons in Klebanov-Witten model