欢迎来到CL境外营销平台,平台经营Instagram、Facebook、YouTube、TIKTOK、Twitter粉丝、点赞、播放量服务、客服微信:coolfensi 24小时在线欢迎咨询购买!
公告:
欢迎来到CL境外营销平台,平台经营Instagram、Facebook、YouTube、TIKTOK、Twitter粉丝、点赞、播放量服务、客服微信:coolfensi 24小时在线欢迎咨询购买!

推特买播放量平台 --推特刷播放量

首页 Twitter   作者:coolfensi  2022年11月01日  热度:53  评论:0     
时间:2022-11-1 20:05   热度:53° 

要查阅书名,请参见:书名门牌号

概要

语义处置是现今十分炙手可热的统计数据学术研究项目。感情预测则是语义处置中两个很常用的课堂教学。比如能借助于舆论试验来构筑完备的经营策略,该应用领域已经很大的发生改变了现阶段的商业性运转商业性模式,所以每两个统计数据生物学家都应该熟识该应用领域的文档。

数以千计的文档统计数据能在短时期内预测出感情类别(甚至是其他的特点,包括重新命名虚拟,热门话题,主轴之类)。相比之下,如果采用育苗来做整件事情,那将耗用两个项目组的数目半小时的时间。

接下去,他们将依照处置一般感情预测难题的方式来积极开展他们的组织工作。具体来说,他们须要后处置和清扫Twitter的原始统计数据。然后,他们须要检视冲洗好的统计数据,并倚靠简单觉得来做一些基本常识。之后,他们要定量特点,并采用定量后的统计数据欧谢勒县体能训练数学模型,最后实现记号tweet的感情。

这能说是NLP中最有趣的考验了,我毕竟有点儿兴高采烈的跟你一起已经开始此次explore!

文档的小产品目录

  • 1.认知难题
  • 2.后处置和统计数据冲洗
  • 3.锻造故事情节和建模效用
  • 4.从冲洗好的推该文抽取特点
  • 5.体能训练数学模型:感情预测
  • 6.下一步棋要做什么

1.认知难题

在已经开始他们的组织工作以后,让他们再来看两遍难题,这对于确认他们的最终目标是非常重要的。难题是这样的:这项任务的最终目标是检测出tweets中的负面言论。简单起见,他们认为包含负面言论的能认为是种族主义或者性别歧视相关的文档。所以,任务就转化成了区分种族主义和性别歧视与其他的文档的分类任务。

在正式的情况下,给定的体能训练样本应该都已经标注好了,标签‘1’表示种族主义/性别歧视,标签‘0’表示不是种族主义/性别歧视。你的最终目标就是在给定的试验集上预测标签。注意:本实验的评测标准为F1-score

Twitter感情预测

从我个人来说,负面言论,网络暴力,社交网络霸凌这些事情已经成为了非常尖锐的难题,能够做两个预测系统,去检测这些文档将会大大的发挥作用,肃清网络空间,清除网络暴力,还给网络一片净土。这也是我乐于接受这个任务的原因。现在就让他们来看看详细的步骤该怎么做吧。

2.Tweets 后处置和统计数据冲洗

让他们看一下下面两张图片,这是处于两种不同状态的办公室。两个凌乱不堪,两个清扫的干净整洁。

假如你要在这个办公室里寻找某个文件,在那个环境下你更容易找到?当然是后面那个干净整洁的,每两个物品都归置到了合适的位置。统计数据冲洗跟这个过程十分相似。如果统计数据能够被规整成结构化的格式,那从中找到正确的信息将轻而易举。

后处置统计数据是个必要的步骤,这是为了统计数据挖掘做准备。这会让抽取信息和机器学习算法的处置变得简单。如果跳过这一步棋,那么很大概率你会碰上充满噪声和偏差的统计数据集。这一步棋的目的就是把那些噪声信息剔除掉,因为噪声信息对于感情预测没有什么贡献,比如那些标点符号,特殊字符,数字,以及对文档的权重贡献很低的文档。

在后续的步骤中,他们会从统计数据集中抽取数字特点。这个特点空间是采用统计数据集中所有不重复的单词构筑的。所以如果他们对统计数据后处置做得好,那之后他们也会获得两个品质更好的特点空间。

具体来说,让他们读出统计数据,并加载必要的依赖库。你能在下面的门牌号下载统计数据集:统计数据集下载门牌号

import reimport pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as snsimport stringimport nltkimport warnings 
warnings.filterwarnings("ignore", category=DeprecationWarning)

%matplotlib inline
train  = pd.read_csv(train_E6oV3lV.csv)test = pd.read_csv(test_tweets_anuFYb8.csv)

让他们来看下统计数据

train.head()

统计数据情况

能看到,统计数据包含三列,id,label和tweet.label是两个二进制数值,tweet包含了他们须要清扫的评论文档。看了头部统计数据之后,他们大概能已经开始清扫统计数据了,清扫大概能从下面几个方面入手:

  • 由于隐私保护的难题,Twitter的用户名已经被隐去,取而代之的是‘@user’。 这个标签没有任何实际意义。
  • 他们也考虑去掉标点符号,数字甚至特殊字符,他们也对区分不同的评论起不到任何作用。
  • 大多数太短的词起不到什么作用,比如‘pdx’,‘his’,‘all’。所以他们也把这些词去掉。
  • 执行完上述三步之后,他们就能把每一条评论切分成独立的单词或者符号了,这在所有NLP任务中都是必须的一步棋。
  • 在第四个统计数据中,有两个单词‘love’.与此同时,在余下的语料中他们可能会有更多的单词,比如loves,loving,lovable之类。这些词其实都是两个词。如果他们能把这些词都归到它们的根源上,也就是都转换成love,那么他们就能大大降低不同单词的数量,而不会损失太多信息。

A)移除Twitter标识@user

如上所述,这些评论文档包含很多Twitter记号,这些都是Twitter上面的用户信息。他们须要把这些文档删掉,他们对于感情预测没有什么帮助。方便起见,先把体能训练集和试验集合起来。避免在体能训练集和试验集上重复操作的麻烦。

combi = train.append(test, ignore_index=True)

下面是两个自定义的方式,用于正则匹配删除文档中不想要的文档。它须要两个参数,两个是原始文档,两个是正则规则。这个方式的返回值是原始字符串清除匹配文档后剩下的字符。在他们的实验中,他们将采用这个方式来去除@user记号

def remove_pattern(input_txt, pattern):
    r = re.findall(pattern, input_txt)    for i in r:
        input_txt = re.sub(i, , input_txt)        
    return input_txt

现在,他们新建一列tidy_tweet ,用于存放处置后的文档。就是上面说的去掉Twitter记号的文档。

remove twitter handles (@user)combi[tidy_tweet] = np.vectorize(remove_pattern)(combi[tweet], "@[\w]*")

B)去除标点符号,数字和特殊字符

这些字符都是没有意义的。跟上面的操作一样,他们把这些字符也都剔除掉。采用替换方式,去掉这些非字母文档

remove special characters, numbers, punctuationscombi[tidy_tweet] = combi[tidy_tweet].str.replace("[^a-zA-Z]", " ")

C) 移除短单词

这里要注意到底多长的单词应该移除掉。我的选择是小于等于三的都去掉。比如hmm,oh这样的都没啥用,删掉这些文档好一些

combi[tidy_tweet] = combi[tidy_tweet].apply(lambda x:  .join([w for w in x.split() if len(w)>3]))

他们再来看一下统计数据集的头几行

combi.head()

此时,冲洗前后的统计数据对比已经非常明显了。重要的单词被留了下来,噪声文档被剔除了。

D)符号化

下面他们要把冲洗后的统计数据集符号化。符号指的是两个个的单词,符号化的过程就是把字符串切分成符号的过程。

tokenized_tweet = combi[tidy_tweet].apply(lambda x: x.split())
tokenized_tweet.head()

E)抽取词干

抽取词干说的是基于规则从单词中去除后缀的过程。比如,play,player,played,plays,playing都是play的变种。

from nltk.stem.porter import *
stemmer = PorterStemmer()

tokenized_tweet = tokenized_tweet.apply(lambda x: [stemmer.stem(i) for i in x])  stemmingtokenized_tweet.head()

抽取词干之后

现在,他们把这些符号重新拼回去。采用nltk的MosesDetokenizer方式很容易做到。

from nltk.tokenize.moses import MosesDetokenizer

detokenizer = MosesDetokenizer()for i in range(len(tokenized_tweet)):
tokenized_tweet[i] = detokenizer.detokenize(tokenized_tweet[i], return_str=True)

combi[tidy_tweet] = tokenized_tweet

3.锻造故事情节和建模效用

在这一小节,他们要深入了解统计数据。不论是文档统计数据还是其他统计数据,探索并进行统计数据建模都是两个快速深入了解的必要手段。不必局限于本教程所述的几种方式,你能放开手脚尝试更多的方式。已经开始探索以后,他们先来思考几个关于统计数据方面的难题:

  • 统计数据集中最常用的单词有哪些?
  • 统计数据集上表述正面和负面言论的常用词汇有哪些?
  • 评论一般有多少主轴标签?
  • 我的统计数据集跟哪些趋势相关?
  • 哪些趋势跟情绪相关?他们和情绪是吻合的吗?

A)采用 词云 来了解评论中最常用的词汇

现在,我想了解一下定义的感情在给定的统计数据集上是如何分布的。一种方式是画出词云来了解单词分布。词云指的是一种用单词绘制的图像。出现频率越高的词在图案中越大,出现频率越低的词在图案中越小。下面就来绘制基于他们的统计数据的词云图像。

all_words =  .join([text for text in combi[tidy_tweet]])from wordcloud import WordCloud
wordcloud = WordCloud(width=800, height=500, random_state=21, max_font_size=110).generate(all_words)

plt.figure(figsize=(10, 7))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis(off)
plt.show()

词云效用图

能看到大部分词汇都是正能量的或者中性的。happy和love是高频词汇。从这上面似乎看不出这些文档跟种族歧视或者性别歧视有什么关系。所以,他们应该分开去画词云,分成是种族歧视/性别歧视或者不是两种统计数据。B)非种族歧视/性别歧视的统计数据

normal_words = .join([text for text in combi[tidy_tweet][combi[label] == 0]])

wordcloud = WordCloud(width=800, height=500, random_state=21, max_font_size=110).generate(normal_words)
plt.figure(figsize=(10, 7))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis(off)
plt.show()

词云

能看出,这个词云上的词基本都是正能量或者中性词。happy,smile,love都是高频词。大多数高频词跟他们的分类是吻合的,都属于积极向上的感情。如法炮制,他们将画出负能量感情词云。他们希望能看到那些负面的,种族歧视,性别歧视相关的词。C)种族歧视/性别歧视统计数据

negative_words =  .join([text for text in combi[tidy_tweet][combi[label] == 1]])
wordcloud = WordCloud(width=800, height=500,
random_state=21, max_font_size=110).generate(negative_words)
plt.figure(figsize=(10, 7))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis(off)
plt.show()

词云

能明显看到,图上的词基本都有负面含义。看起来他们的统计数据集还不错。下一步棋,他们将进行预测这些Twitter统计数据上的主轴标签。D)认知主轴标签/流行趋势对于评论感情的影响主轴标签指的是Twitter中用来在一段时间内标注某些流行趋势的词语。他们须要对这些标签进行检测,看看他们是不是会对感情预测任务产生影响,是否能够对区分评论有帮助。带有前缀的词就是主轴标签,比如,下面的情况:

这个例子似乎是带有性别歧视的文档,而主轴标签看起来也有这个意思。他们存下所有主轴标签,并分成两类,一类是非歧视文档中的标签,一类是带有歧视文档中的标签。

function to collect hashtagsdef hashtag_extract(x):
    hashtags = []     Loop over the words in the tweet
    for i in x:
        ht = re.findall(r"(\w+)", i)
        hashtags.append(ht)    return hashtags
 extracting hashtags from non racist/sexist tweetsHT_regular = hashtag_extract(combi[tidy_tweet][combi[label] == 0]) extracting hashtags from racist/sexist tweetsHT_negative = hashtag_extract(combi[tidy_tweet][combi[label] == 1]) unnesting listHT_regular = sum(HT_regular,[])
HT_negative = sum(HT_negative,[])

现在,他们已经准备好了主轴标签,能把top n的标签画出来。先来看一下非歧视组的标签吧。

a = nltk.FreqDist(HT_regular)
d = pd.DataFrame({Hashtag: list(a.keys()),                  Count: list(a.values())}) selecting top 10 most frequent hashtags     d = d.nlargest(columns="Count", n = 10) 
plt.figure(figsize=(16,5))
ax = sns.barplot(data=d, x= "Hashtag", y = "Count")
ax.set(ylabel = Count)
plt.show()

TOP 10 标签

所有标签都是正向的,这符合预期。现在再来画另外一组,他们期望得到的都是负面的标签。

b = nltk.FreqDist(HT_negative)
e = pd.DataFrame({Hashtag: list(b.keys()), Count: list(b.values())}) selecting top 10 most frequent hashtagse = e.nlargest(columns="Count", n = 10)   
plt.figure(figsize=(16,5))
ax = sns.barplot(data=e, x= "Hashtag", y = "Count")
ax.set(ylabel = Count)
plt.show()

TOP 10 标签

正如他们所预料的,大部分词都是负面的,只有少数属于中性的。所有,留下这些标签用于后续的计算是个好主意。下面,他们将已经开始从符号化统计数据中抽取标签。

4.从冲洗后的推该文抽取特点

要预测冲洗后的统计数据,就要把它们转换成特点。根据用途来说,文档特点能采用很多种算法来转换。比如词袋数学模型(Bag-Of-Words),TF-IDF,word Embeddings之类的方式。在本该文,我采用了Bag-Of-Words和TF-IDF两个方式。

词袋特点

Bag-Of-Words是一种数字化表达特点的方式。假设有两个语料集合C,其中有D篇文章(d1,d2,...dD),在C中有N个不重复的符号。那么这N个符号(即单词)构成两个列表,那么词袋数学模型的矩阵M的大小就是D*N.M中的每一行记录了一篇文章D(i)中对应符号的词频。

让他们用两个简单的例子来加强认知。假设他们只有两篇文章D1: He is a lazy boy. She is also lazy.

D2: Smith is a lazy person.构筑包含所有去重单词的list= [‘He’,’She’,’lazy’,’boy’,’Smith’,’person’]那么,在这个语料C上,D=2,N=6词袋数学模型的矩阵M的大小就是2*6

矩阵

现在,这个矩阵就能作为特点矩阵来构筑两个分类数学模型了。采用sklearn的CountVectorizer方式能轻松的构筑词袋数学模型。设置参数max_features = 1000 ,只取词频前1000的词。

from sklearn.feature_extraction.text import CountVectorizer
bow_vectorizer = CountVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words=english) bag-of-words feature matrixbow = bow_vectorizer.fit_transform(combi[tidy_tweet])

TF-IDF特点

这个方式也是基于词频的。但是它跟词袋数学模型还有一些区别,主要是它还考虑了两个单词在整个语料库上的情况而不是单一文章里的情况。TF-IDF方式会对常用的单词做惩罚,降低它们的权重。同时对于某些在整个统计数据集上出现较少,但是在部分文章中表现较好的词给予了较高的权重。来深入了解一下TF-IDF:

  • TF = 单词t在两个文档中出现的次数 / 文档中全部单词的数目
  • IDF = log(N/n),N是全部文档数目,n是单词t出现的文档数目
  • TF-IDF = TF*IDF
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words=english) TF-IDF feature matrixtfidf = tfidf_vectorizer.fit_transform(combi[tidy_tweet])

5.体能训练数学模型:感情预测

到目前为止,所有后处置都已经完成了。下面他们就已经开始基于这两个特点集合已经开始体能训练预测数学模型。他们采用逻辑回归来构筑数学模型。逻辑回归大意,会拟合统计数据到两个逻辑方程式上,从而预测事件发生的概率。下面这个方程就是逻辑回归采用的式子:

逻辑回归方程

要了解更多逻辑回归的文档,能阅读以下文档:逻辑回归文献门牌号注意:如果你想尝试其他的机器学习算法,诸如随机森林,支持向量机,XGBoot,下面这个门牌号能提供一套成熟的课程来帮助你在感情预测上进行课堂教学。门牌号:https://trainings.analyticsvidhya.com.

A)采用词袋数学模型特点集合构筑数学模型

from sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import f1_score

train_bow = bow[:31962,:]
test_bow = bow[31962:,:] splitting data into training and validation setxtrain_bow, xvalid_bow, ytrain, yvalid = train_test_split(train_bow, train[label], random_state=42, test_size=0.3)

lreg = LogisticRegression()
lreg.fit(xtrain_bow, ytrain)  training the modelprediction = lreg.predict_proba(xvalid_bow)  predicting on the validation setprediction_int = prediction[:,1] >= 0.3  if prediction is greater than or equal to 0.3 than 1 else 0prediction_int = prediction_int.astype(np.int)

f1_score(yvalid, prediction_int)  calculating f1 score

输出结果:0.53体能训练出的逻辑回归数学模型在验证集上给出的f1值为0.53。现在,他们采用这个数学模型来预测试验集统计数据。

test_pred = lreg.predict_proba(test_bow)
test_pred_int = test_pred[:,1] >= 0.3
test_pred_int = test_pred_int.astype(np.int)test[label] = test_pred_int
submission = test[[id,label]]
submission.to_csv(sub_lreg_bow.csv, index=False)  writing data to a CSV file

在公开的排行榜上,f1值是0.567.现在他们再来体能训练基于TF-IDF特点集的数学模型,看看表现如何。

B)采用TF-IDF特点集合构筑数学模型

train_tfidf = tfidf[:31962,:]
test_tfidf = tfidf[31962:,:]

xtrain_tfidf = train_tfidf[ytrain.index]
xvalid_tfidf = train_tfidf[yvalid.index]

lreg.fit(xtrain_tfidf, ytrain)

prediction = lreg.predict_proba(xvalid_tfidf)
prediction_int = prediction[:,1] >= 0.3prediction_int = prediction_int.astype(np.int)

f1_score(yvalid, prediction_int)

输出结果:0.544这个结果跟公开排行榜上的0.564更接近了,看起来比词袋数学模型有所提升。

6.下一步棋要做什么?

再打两遍广告,如果你想更进一步棋的研究感情预测,他们为你准备了一系列的课程,能在下面这个门牌号访问:https://trainings.analyticsvidhya.com/.

这个课程包括了更多高级技术,比如特点抽取的时候采用word2vec数学模型,更多机器学习算法,数学模型调参之类文档。在课程中,你会学习到下面的文档:(翻译按:反反复复啊)

  • 采用Embeddings(word2vec,doc2vec)来创建更好的特点
  • 课堂教学先进的机器学习算法,比如SVM,RF,XGBoost
  • 数学模型调参
  • 自定义指标

结语

在本该文,他们学习了如何实际解决感情预测的难题。他们对统计数据进行后处置并进行了探索。然后他们采用词袋数学模型,TF-IDF方式抽取特点。最后构筑了两个分类数学模型。

你觉得这篇文章有用吗?你有什么好的技巧吗?你在特点抽取环节采用过什么其他方式吗?欢迎来讨论和分享你的经验在这个门牌号。。。,他们很期待跟你进行讨论。