2020/08/07 -
这部分内容是我之前在简书的草稿,没有完整整理,后续将进行完整整理。
2020/06/17 -
这两天在学习word2vec模型原理的时候,看到了两篇文章,一篇是关于使用word2vec进行情感分类,另一篇是通过tf-idf这种方式运用LDA或者直接kmeans进行主题分类。
从这两篇文章中,相对与自然语言处理的模型来说, 我感觉,我学到的是更多的分析的过程和可视化的内容,这里扯远了,本片文章就是要写这个自然语言处理的过程。
我就感觉,看完这两个文章,我好像学到了非常多的东西,但是我不知道写什么。
你比如说一些简单的东西,好像也不用写出来,高级的东西好像又没有。
(可能这也是我之前看各种论文的想法)
既然现在找不到比较好的办法来总结,那么我就来吧所有的内容都总结下来。
下面的内容主要针对文章[2]进行分析,因为文章[2]的内容算是覆盖了文章[1]。下面来开始分析。
环境部署
tqdm 可以使用的这个进度条的库
nltk 自然语言处理库
bokeh 交互式可视化
gensim 好像也是自然语言处理的库
pyldavis lda的可视化库
然后这个环境呢,他是使用anaconda来进行管理,这样我想起了之前的时候,我弄得个jupyter-lab我也没用过了。
数据获取
这里数据获取他使用了某个数据源,然后再注册后使用key来获取。这部分数据获取没有什么问题。
数据处理
简单可视化
data.category.value_counts(normalize=True).plot(kind='bar', grid=True, figsize=(16, 9))
数据筛选
data = data[~data['description'].isnull()]
data = data[(data.description.map(len) > 140) & (data.description.map(len) <= 300)]
map,filter的使用非常便利。
data.description.map(len).hist(figsize=(15, 5), bins=100)
tokens = [word_tokenize(sent) for sent in sent_tokenize(text)]
tokens = list(reduce(lambda x,y: x+y, tokens))
tokens = list(filter(lambda token: token not in (stop_words + list(punctuation)) , tokens))
ta['description'] = data['description'].map(lambda d: unicode(d.decode('utf-8')))
data['tokens'] = data['description'].progress_map(lambda d: tokenizer(d))
def keywords(category):
tokens = data[data['category'] == category]['tokens']
alltokens = []
for token_list in tokens:
alltokens += token_list
counter = Counter(alltokens)
return counter.most_common(10)
for category in set(data['category']):
print('category :', category)
print('top 10 keywords:', keywords(category))
print('---')
我觉得,很久以来我在写这个代码的时候,总是非常吃力,遇见一个功能,可能都得去现场查api,这就非常尴尬了。一开始说是觉得,这样能学的更快,但长此以往,这种方式浪费的时间非常多。
你可以看啊可能上面这些代码,不算难,但是很多我有时候也会去查,费劲。
groups = tsne_tfidf_df.groupby('category')
fig, ax = plt.subplots(figsize=(15, 10))
ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling
for name, group in groups:
ax.plot(group.x, group.y, marker='o', linestyle='', label=name)
ax.legend()
plt.show()
这个代码是我没想到的,这说明我对这个groupby的东西没太理解。这个说实话不错。
[1]sentiment-analysis-with-keras-and-word-2-vec
[2]interactive-topic-mining