基于此推文的用户情绪分析和分类?基于推文对用户(正面或负面)进行分类的最佳方法?
sentiment analysis and classification of the user based on this tweets?best approach for classifying the users(positive or negative) based on tweets?
我正在根据关注者推文对 Twitter 帐户的关注者进行分类(positive/negative),
收集数据
- 从各自的帐户中获取所有关注者和他们的推文
- 每条推文的情感分析并标记为(positive/negative/中性)
哪一个是正确的方法?如果不是...有没有更好的方法?
我的用户分类方法一:
- 由于中立的极性得分为0,删除所有中立标签的推文
- 计算正面和负面推文的数量
- 所有推文中只有 17% 的负面推文 (pos+neg)
- 我将阈值保持为 34%,并根据数据用户对推文进行分组
- 在用户的总推文(pos+neg)中,如果负面推文占34%以上我将他归类为负面用户否则正面用户
- 结果:在 300 个关注者中,我有 19 个是负面的,其余的是正面的
我的方法 1 代码
users=set(classify_followers['users'])
user_to_classify=[]
classify=[]
for user in users:
user_to_classify.append(user)
temp=classify_followers[(classify_followers['users']==user)]
if(temp.shape[0]>1):
if(('positive' in set(temp['sentiment']))
and ('negative' in set(temp['sentiment'])) ):
positive_count=temp[(temp['sentiment']=='positive')]['sentiment'].count()
negetive_count=temp[(temp['sentiment']=='negative')]['sentiment'].count()
positive_percent=(positive_count/temp.shape[0])*100
negetive_percent=(negetive_count/temp.shape[0])*100
if(negetive_percent>=34):
classify.append('negative')
else:
classify.append('positive')
else:
if('positive' in set(temp['sentiment'])):
classify.append('positive')
else:
classify.append('negative')
else:
if('positive' in set(temp['sentiment'])):
classify.append('positive')
else:
classify.append('negative')
我的用户分类方法二:
- 由于中立的极性得分为0,删除所有中立标签的推文
- 使用k-means算法对tweets进行聚类(从先验知识可知正面tweets较多,所以tweets较多的簇为positive cluster)
- 根据数据用户对推文进行分组
- 预测用户的每条推文属于哪个集群,并用集群名称标记推文
- 计算集群标签,并为用户分配正面或负面
- 结果:在 300 个关注者中,我有 19 个是负面的,其余的是正面的
我的方法 2 代码
df=data[((data['sentiment']=='negative') | (data['sentiment']=='positive'))]
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(df['tweets'])
true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++'
, max_iter=10000, n_init=1)
model.fit(X)
print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print("Cluster %d:" % i),
for ind in order_centroids[i, :20]:
print(' %s' % terms[ind]),
print
labels=model.labels_
print( np.bincount(labels))
d=pd.DataFrame()
d['labels']=labels
d['senti']=df['sentiment']
d['labels'].value_counts()
#to know which label having more data(more data is positive less is negative)
a=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive')
and d['labels'][i]==1)]
b=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive')
and d['labels'][i]==0)]
c=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative')
and d['labels'][i]==1)]
d=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative')
and d['labels'][i]==0)]
print(len(a),len(b),len(c),len(d))
users=set(df['users'])
prediction=[]
for user in users:
temp=df[(df['users']==user)]
temp=temp['tweets']
Y = vectorizer.transform(temp)
tweet_predictions=model.predict(Y)
no_one=np.count_nonzero(tweet_predictions==1)
no_zero=np.count_nonzero(tweet_predictions==0)
if(no_one>no_zero):
prediction.append('positive')
else:
prediction.append('negative')
这是根据推文对用户进行分类的正确方法吗?如果不是...还有更好的方法吗?
正确的做法是第三种:
一些评委会评估您的一部分用户,并根据他们的推文为他们分配情感分数。然后使用一些机器学习技术(我建议支持向量机),你可以根据这些标记的例子训练一个模型,作为输入提供他们的推文内容、情绪分数、正面和负面的绝对数量、负面百分比或其他(汇总)相关特征。最后,您应该将模型应用于看不见的用户以了解他们的极性。
我也不想引入train-validation-test,但应该是这样的。您的方法没有使用机器学习来区分用户,因为您只是将其用作黑匣子来收集推文的极性。
我正在根据关注者推文对 Twitter 帐户的关注者进行分类(positive/negative),
收集数据
- 从各自的帐户中获取所有关注者和他们的推文
- 每条推文的情感分析并标记为(positive/negative/中性)
哪一个是正确的方法?如果不是...有没有更好的方法?
我的用户分类方法一:
- 由于中立的极性得分为0,删除所有中立标签的推文
- 计算正面和负面推文的数量
- 所有推文中只有 17% 的负面推文 (pos+neg)
- 我将阈值保持为 34%,并根据数据用户对推文进行分组
- 在用户的总推文(pos+neg)中,如果负面推文占34%以上我将他归类为负面用户否则正面用户
- 结果:在 300 个关注者中,我有 19 个是负面的,其余的是正面的
我的方法 1 代码
users=set(classify_followers['users'])
user_to_classify=[]
classify=[]
for user in users:
user_to_classify.append(user)
temp=classify_followers[(classify_followers['users']==user)]
if(temp.shape[0]>1):
if(('positive' in set(temp['sentiment']))
and ('negative' in set(temp['sentiment'])) ):
positive_count=temp[(temp['sentiment']=='positive')]['sentiment'].count()
negetive_count=temp[(temp['sentiment']=='negative')]['sentiment'].count()
positive_percent=(positive_count/temp.shape[0])*100
negetive_percent=(negetive_count/temp.shape[0])*100
if(negetive_percent>=34):
classify.append('negative')
else:
classify.append('positive')
else:
if('positive' in set(temp['sentiment'])):
classify.append('positive')
else:
classify.append('negative')
else:
if('positive' in set(temp['sentiment'])):
classify.append('positive')
else:
classify.append('negative')
我的用户分类方法二:
- 由于中立的极性得分为0,删除所有中立标签的推文
- 使用k-means算法对tweets进行聚类(从先验知识可知正面tweets较多,所以tweets较多的簇为positive cluster)
- 根据数据用户对推文进行分组
- 预测用户的每条推文属于哪个集群,并用集群名称标记推文
- 计算集群标签,并为用户分配正面或负面
- 结果:在 300 个关注者中,我有 19 个是负面的,其余的是正面的
我的方法 2 代码
df=data[((data['sentiment']=='negative') | (data['sentiment']=='positive'))]
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(df['tweets'])
true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++'
, max_iter=10000, n_init=1)
model.fit(X)
print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print("Cluster %d:" % i),
for ind in order_centroids[i, :20]:
print(' %s' % terms[ind]),
print
labels=model.labels_
print( np.bincount(labels))
d=pd.DataFrame()
d['labels']=labels
d['senti']=df['sentiment']
d['labels'].value_counts()
#to know which label having more data(more data is positive less is negative)
a=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive')
and d['labels'][i]==1)]
b=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive')
and d['labels'][i]==0)]
c=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative')
and d['labels'][i]==1)]
d=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative')
and d['labels'][i]==0)]
print(len(a),len(b),len(c),len(d))
users=set(df['users'])
prediction=[]
for user in users:
temp=df[(df['users']==user)]
temp=temp['tweets']
Y = vectorizer.transform(temp)
tweet_predictions=model.predict(Y)
no_one=np.count_nonzero(tweet_predictions==1)
no_zero=np.count_nonzero(tweet_predictions==0)
if(no_one>no_zero):
prediction.append('positive')
else:
prediction.append('negative')
这是根据推文对用户进行分类的正确方法吗?如果不是...还有更好的方法吗?
正确的做法是第三种:
一些评委会评估您的一部分用户,并根据他们的推文为他们分配情感分数。然后使用一些机器学习技术(我建议支持向量机),你可以根据这些标记的例子训练一个模型,作为输入提供他们的推文内容、情绪分数、正面和负面的绝对数量、负面百分比或其他(汇总)相关特征。最后,您应该将模型应用于看不见的用户以了解他们的极性。
我也不想引入train-validation-test,但应该是这样的。您的方法没有使用机器学习来区分用户,因为您只是将其用作黑匣子来收集推文的极性。