精华内容
下载资源
问答
  • 情感文本分析数据集处理和预测---K-lab平台预选赛

    千次阅读 热门讨论 2019-05-14 16:34:03
    本预选赛要求选手建立文本情感分类模型,选手用训练好的模型对测试集中的文本情感进行预测,判断其情感为「Negative」或者「Positive」。所提交的结果按照指定的评价指标使用在线评测数据进行评测,达到或超过规定...

    比赛网址:K-lab平台2019中国高校计算机大赛---大数据挑战赛

     

     

    预选赛题

    预选赛题——文本情感分类模型

           本预选赛要求选手建立文本情感分类模型,选手用训练好的模型对测试集中的文本情感进行预测,判断其情感为「Negative」或者「Positive」。所提交的结果按照指定的评价指标使用在线评测数据进行评测,达到或超过规定的分数线即通过预选赛。

    比赛数据

           数据样本格式:

    NO

    列名

    类型

    字段描述

    1

    ID

    int

    文本唯一标识

    2

    review

    string

    文本记录

    3

    label

    string

    文本的情感状态

           其中,训练集的样本规模为6328,测试集的样本规模为2712。

     

    提交结果

           选手提交.csv的结果文件,文件名可以自定义,但文件内的字段需要对应。其中,ID表示文本唯一标识,pred表示预测该条文本的情感状态是否为「Positive」。

    结果文件的内容示例:

    ID

    Pred

    1

    0.123456

    2

    0.654321

    3

    0.799212

     

     

    代码分为五部分:

    导入数据、清洗数据、观察数据、建立模型、预测数据;

     

    导入数据

    首先导入包:

    import re
    import pandas as pd 
    import numpy as np 
    import matplotlib.pyplot as plt 
    import seaborn as sns
    import string
    import nltk

    导入数据:

    i = "this"
    trainTrue = pd.read_csv('E:\kLab_File\\mase\\train.csv',engine = 'python')
    train = trainTrue.copy()
    
    testTrue = pd.read_csv('E:\kLab_File\mase\\test.csv')
    test = testTrue.copy()
    
    

     查看导入的数据:

    print(train.head(10))

    可以看到,数据包含三列,ID、review和label,review包含了我们需要清理的评论内容,label是根据review判断出改评论的态度
    看了头部数据之后,我们大概可以开始清理数据了,清理大概可以从下面几个方面入手:

    • 我们发现label中这一列只有positive和negative两种,我们可以进行数字化,方便以后进行信息的分析和计算。
    • @xxxx这个标签没有任何实际意义。
    • 我们也考虑去掉标点符号,数字甚至特殊字符,他们也对区分不同的评论起不到任何作用。
    • 大多数太短的词起不到什么作用,比如‘pdx’,‘his’,‘all’。所以我们也把这些词去掉。
    • 执行完上述三步之后,我们就可以把每一条评论切分成独立的单词或者符号了,这在所有NLP任务中都是必须的一步。
    • 在第四个数据中,有一个单词‘love’.与此同时,在余下的语料中我们可能会有更多的单词,例如loves,loving,lovable等等。这些词其实都是一个词。如果我们能把这些词都归到它们的根源上,也就是都转换成love,那么我们就可以大大降低不同单词的数量,而不会损失太多信息。

     

     

    清洗数据 

    数据化label列,方便以后进行数据的分析

    train['label'] = train['label'].replace(to_replace=['Positive', 'Negative'], value=[1, 0])
    

    我们后面要用test进行预测,所以我们text也要进行相同的数据处理、数据清理。

     

     

    删除@xxxx

    下面是一个自定义的方法,用于正则匹配删除文本中不想要的内容。它需要两个参数,一个是原始文本,一个是正则规则。这个方法的返回值是原始字符串清除匹配内容后剩下的字符。在我们的实验中,我们将使用这个方法来去除@xxx标记

    
    # 删除@  
    combi =  train.copy()
    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
    
    

    这里我推荐大家把训练集和测试集并在一起清洗,这样方便一点 

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

    当然博主没有并在一起处理,所以对数据的每一步操作,测试集做一次处理,训练集在做一次处理。 

    combi['review'] = np.vectorize(remove_pattern)(combi['review'],"@[\w]*")
    test['review'] = np.vectorize(remove_pattern)(test['review'],"@[\w]*")

     

     

    除标点符号,数字和特殊字符

    combi['review'] = combi['review'].str.replace("[^a-zA-Z#]"," ")
    test['review'] = test['review'].str.replace("[^a-zA-Z#]"," ")
    

     

     

     

    空格删除

    把评论的空格前缀都删除

    combi['review'] = combi['review'].str.strip()  

     

     

     

    统计每列数据缺失值的分布情况

    print(combi.isnull().sum())

     

    我们发现数据中有6行拥有缺失值的,由于拥有缺失值的行数比较少,所以我们选择直接删除这六行;

     

     

    删除缺失值行

    combi.dropna(axis=0, how='any', thresh=None, subset=None, inplace=True)   #去除含有缺失值的一行
    

    删除以后我们查看一下数据

    print(combi.isnull().sum())

    已经删除了缺失的6行

     

     

    移除短单词

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

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

     

     

    分词、符号化

    tokenized_review = combi['review'].apply(lambda x: x.split())
    tokenized_review_test =  test['review'].apply(lambda x: x.split())
    print(tokenized_review.head())

     

     

    提取词干

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

    from nltk.stem.porter import *
    
    stemmer =PorterStemmer()
    tokenized_review = tokenized_review.apply(lambda x: [stemmer.stem(i) for i in x]) #stemming
    tokenized_review_test = tokenized_review_test.apply(lambda x: [stemmer.stem(i) for i in x]) #stemming
    
    print(tokenized_review.head())

     

     

    分词复原

    把符号化的词语重新拼回去,这里我们使用最笨的方法就是遍历拼写回去;

    这里在自然语言处理库nltk没有改版时时可以只用nltk的MosesDetokenizer方法很容易做到,但是更改之后官网时把nltk中的MosesDetokenizer方法删除了的,好像是为了处理兼容性的问题。

    tokenized_review = tokenized_review.apply(lambda x: ' '.join([w for w in x]))
    tokenized_review_test = tokenized_review_test.apply(lambda x: ' '.join([w for w in x]))
    
    print("head2",tokenized_review.head(10))
    test.to_csv('E:\kLab_File\\mase\\testtest0.1.csv',index=False)

     

     

    观察数据      (其实这一步我们可以不用详细的观察,因为在此次数据处理中我们的数据都是经过脱敏的,单词非英语单词,所以句子一般读不懂。但是你也可以看一看)

    • 数据集中最常见的单词有哪些?
    • 数据集上表述积极和消极的常见词汇有哪些?
    • 评论一般有多少主题标签?
    • 我的数据集跟哪些趋势相关?
    • 哪些趋势跟情绪相关?他们和情绪是吻合的吗?

     

    使用 词云 来了解评论中最常用的词汇

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

     

    总的词云:

    #使用 词云 来了解评论中最常用的词汇
    all_words = ' '.join([text for text in combi['review']])
    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()

     

     

    积极评论的词云: 

    # 积极数据
    positive_words =' '.join([text for text in combi['review'][combi['label'] == 0]])
    
    wordcloud = WordCloud(width=800, height=500, random_state=21, max_font_size=110).generate(positive_words)
    plt.figure(figsize=(10, 7))
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis('off')
    plt.show()

     

    消极评论的词云:

    # 消极数据
    negative_words = ' '.join([text for text in combi['review'][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()

     

     

    我们存下所有主题标签,并分成两类,一类是积极内容中的标签,一类是带有消极内容中的标签。

    #love  #hate  这种标签

     

    写一个方法用来剥离标签

    def 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 tweets
    HT_positive = hashtag_extract(combi['review'][combi['label'] == 0])
    
    # extracting hashtags from racist/sexist tweets
    HT_negative = hashtag_extract(combi['review'][combi['label'] == 1])
    
    # unnesting list
    HT_positive = sum(HT_positive,[])
    HT_negative = sum(HT_negative,[])
    

     

     

    画出标签:

    # 画积极标签
    a = nltk.FreqDist(HT_positive)
    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()

     

     

    画出消极标签

    # 画消极标签
    b = nltk.FreqDist(HT_negative)
    e = pd.DataFrame({'Hashtag': list(b.keys()),'Count': list(b.values())})
    # selecting top 10 most frequent hashtags
    e = 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()
    

     

     

    建立模型

    要分析清洗后的数据,就要把它们转换成特征。根据用途来说,文本特征可以使用很多种算法来转换。比如词袋模型(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 = 8200 ,只取词频前8200的词,当我去掉超过30%的无用词时,还剩下8200个。

     

    我感觉词频越高,后面的准确度越高。所以这里打击根据自己的数据需求更改自己的max_features;

    #构建词袋模型
    from sklearn.feature_extraction.text import CountVectorizer
    bow_vectorizer = CountVectorizer(max_df=0.30, max_features=8200, stop_words='english')
    
    bow = bow_vectorizer.fit_transform(combi['review'])
    bowtest = bow_vectorizer.fit_transform(test['review'])
    print(test.describe())
    
    print(bow.toarray())
    
    

     

     

    根据词袋模型运用逻辑回归来构建模型

    # 逻辑回归来构建模型
    
    # 使用词袋模型特征集合构建模型
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import f1_score
    train_bow = bow[:6331,:]
    test_bow = bowtest[:2712,:]
    print("这里",test_bow.toarray())

     

    划分测试集合训练集,测试集占30%

    xtrain_bow, xvalid_bow, ytrain, yvalid = train_test_split(train_bow, combi['label'], random_state=42, test_size=0.3)
    

    逻辑回归

    lreg = LogisticRegression()
    lreg.fit(xtrain_bow, ytrain) 
    
    prediction = lreg.predict_proba(xvalid_bow) # predicting on the validation set
    prediction_int = prediction[:,1] >= 0.3
    prediction_int = prediction_int.astype(np.int)
    print("回归f",f1_score(yvalid, prediction_int)) # calculating f1 score
    

    F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的准确率召回率。F1分数可以看作是模型准确率召回率的一种加权平均,它的最大值是1,最小值是0。

    这里可以通过调各种数据来提高模型的f1分数

     

    预测数据

    模型来预测测试集数据。

    test_pred = lreg.predict_proba(test_bow)
    print("这里P:",test_pred)
    

    看一下传入的test数据经过模型预测的数据;

     

    print(test_pred.size)
    test_pred_int = test_pred[:,1]    //提取我们需要预测的test的label列
    print(test_pred_int.size)    //看看进过模型预测后的长度是否有变化
    
    print(pd.DataFrame(test,columns=["ID"]).size)     //看看原始test的数据列有多少
      
    
    

    第二行和第三行要相同,不然会出现填写行数与预测行数不匹配的问题;

     

    最后只剩下保存数据

    test['Pred'] = test_pred_int
    submission = test[['ID','Pred']]
    submission.to_csv('E:\kLab_File\\mase\\result.csv', index=False) # writing data to a CSV file
    

     

     

     

    TF-IDF特征

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

    • TF = 单词t在一个文档中出现的次数 / 文档中全部单词的数目
    • IDF = log(N/n),N是全部文档数目,n是单词t出现的文档数目
    • TF-IDF = TF*IDF

    这里我就不深入了。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 关于文本分类(情感分析)的中文数据集汇总

    万次阅读 多人点赞 2019-07-14 16:08:14
    文本分类(情感分析)中文数据集汇总 这段时间在公司NLP组里实习,相应的开始学习了一些NLP的知识,并搜索了一些关于NLP中文本分类领域的相关数据集,本文主要列举一些中文数据集。关于英语数据集,且听下回分解。 1...

    文本分类(情感分析)中文数据集汇总

    这段时间在公司NLP组里实习,相应的开始学习了一些NLP的知识,并搜索了一些关于NLP中文本分类领域的相关数据集,本文主要列举一些中文数据集。关于英语数据集,且听下回分解。

    1.THUCNews数据集:

    THUCNews是根据新浪新闻RSS订阅频道2005~2011年间的历史数据筛选过滤生成,包含74万篇新闻文档(2.19 GB),均为UTF-8纯文本格式。我们在原始新浪新闻分类体系的基础上,重新整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。使用THUCTC工具包在此数据集上进行评测,准确率可以达到88.6%。

    数据集地址: http://thuctc.thunlp.org/

    2.今日头条新闻文本分类数据集:

    数据来源:今日头条客户端
    数据规模:共382688条,分布于15个分类中。
    数据格式:6552431613437805063_!_102_!_news_entertainment_!_谢娜为李浩菲澄清网络谣言,之后她的两个行为给自己加分_!_佟丽娅,网络谣言,快乐大本营,李浩菲,谢娜,观众们

    每行为一条数据,以_!_分割的个字段,从前往后分别是
    新闻ID,分类code(见下文),分类名称(见下文),新闻字符串(仅含标题),新闻关键词

    数据集地址:https://github.com/fate233/toutiao-text-classfication-dataset

    3.全网新闻数据(SogouCA):

    来自若干新闻站点2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL和正文信息

    数据格式为

    <doc>
    <url>页面URL</url>
    <docno>页面ID</docno>
    <contenttitle>页面标题</contenttitle>
    <content>页面内容</content>
    </doc>
    

    注意:content字段去除了HTML标签,保存的是新闻正文文本

    数据集地址: https://www.sogou.com/labs/resource/ca.php

    4.搜狐新闻数据(SogouCS):

    来自搜狐新闻2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL和正文信息

    数据格式为
    <doc>
    <url>页面URL</url>
    <docno>页面ID</docno>
    <contenttitle>页面标题</contenttitle>
    <content>页面内容</content>
    </doc>
    

    注意:content字段去除了HTML标签,保存的是新闻正文文本

    数据集地址: https://www.sogou.com/labs/resource/cs.php

    5.ChnSentiCorp_htl_all数据集:

    7000 多条酒店评论数据,5000 多条正向评论,2000 多条负向评论

    数据字段:
    Label:1表示正向评论,0表示负向评论
    Review:评论内容
    

    1
    数据集地址:
    https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv

    6.waimai_10k数据集:

    某外卖平台收集的用户评价,正向4000 条,负向约 8000 条

    数据字段:
    
    Label:1表示正向评论,0表示负向评论
    Review:评论内容
    

    2
    数据集地址:
    https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/waimai_10k/waimai_10k.csv

    7.online_shopping_10_cats数据集:

    10 个类别(书籍、平板、手机、水果、洗发水、热水器、蒙牛、衣服、计算机、酒店),共 6 万多条评论数据,正、负向评论各约 3 万条
    9
    10

    数据集下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/raw/master/datasets/online_shopping_10_cats/online_shopping_10_cats.zip

    8.weibo_senti_100k数据集:

    10 万多条,带情感标注 新浪微博,正负向评论约各 5 万条。
    在这里插入图片描述
    在这里插入图片描述

    数据集下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/weibo_senti_100k/intro.ipynb

    9.simplifyweibo_4_moods数据集:

    36 万多条,带情感标注 新浪微博,包含 4 种情感,其中喜悦约 20 万条,愤怒、厌恶、低落各约 5 万条
    在这里插入图片描述

    在这里插入图片描述

    数据集下载地址:
    https://pan.baidu.com/s/16c93E5x373nsGozyWevITg

    10.dmsc_v2数据集:

    28部电影,超70万用户,超200万条评分/评论数据
    在这里插入图片描述

    在这里插入图片描述

    数据集地址:https://pan.baidu.com/s/1c0yn3TlkzHYTdEBz3T5arA

    原始数据集地址:https://www.kaggle.com/utmhikari/doubanmovieshortcomments

    11.yf_dianping数据集:

    24 万家餐馆,54 万用户,440 万条评论/评分数据
    在这里插入图片描述
    在这里插入图片描述
    数据集地址:https://pan.baidu.com/s/1yMNvHLl6QYsGbjT7u51Nfg
    原始数据集地址:http://yongfeng.me/dataset/

    12.yf_amazon数据集:

    52 万件商品,1100 多个类目,142 万用户,720 万条评论/评分数据
    在这里插入图片描述
    在这里插入图片描述

    原始数据集地址:http://yongfeng.me/dataset/
    数据集地址:https://pan.baidu.com/s/1SbfpZb5cm-g2LmnYV_af8Q

    13.Datahub数据中心:

    包含文本分类、情感分析以及知识图谱的数据集

    相关地址:http://www.datahub.ileadall42.com/data/list?category=2&parent_category=1

    14.知乎看山杯数据集:

    数据集下载地址:https://pan.baidu.com/s/1qUr6IQQn6DzrMlbaAUZslQ
    提取码: qbiw

    15.AI_challenger情感分析数据集:

    数据集分为训练、验证、测试A与测试B四部分。数据集中的评价对象按照粒度不同划分为两个层次,层次一为粗粒度的评价对象,例如评论文本中涉及的服务、位置等要素;层次二为细粒度的情感对象,例如“服务”属性中的“服务人员态度”、“排队等候时间”等细粒度要素。

    数据集下载地址:https://github.com/nju161250102/AI_challenger/tree/master/data

    16.复旦中文文本分类语料库

    数据链接:https://pan.baidu.com/s/1833mT2rhL6gBMlM0KnmyKg
    密码:zyxa

    展开全文
  • 关于文本分类(情感分析)的英文数据集汇总 20 Newsgroups数据集: The 20 Newsgroups data set is a collection of approximately 20,000 newsgroup documents, partitioned (nearly) evenly across 20 different ...

    关于文本分类(情感分析)的英文数据集汇总

    20 Newsgroups数据集

    The 20 Newsgroups data set is a collection of approximately 20,000 newsgroup documents, partitioned (nearly) evenly across 20 different newsgroups. The data is organized into 20 different newsgroups, each corresponding to a different topic.

    数据集地址:http://qwone.com/~jason/20Newsgroups/

    Reuters-21578 Text Categorization Collection Data Set数据集

    This is a collection of documents that appeared on Reuters newswire in 1987. The documents were assembled and indexed with categories.
    在这里插入图片描述
    数据集地址
    https://archive.ics.uci.edu/ml/datasets/Reuters-21578+Text+Categorization+Collection

    Spambase Data Set数据集

    Classifying Email as Spam or Non-Spam
    在这里插入图片描述
    数据集地址
    https://archive.ics.uci.edu/ml/datasets/Spambase

    1996 English Broadcast News Speech 数据集
    The 1996 Broadcast News Speech Corpus contains a total of 104 hours of broadcasts from ABC, CNN and CSPAN television networks and NPR and PRI radio networks with corresponding transcripts. The primary motivation for this collection is to provide training data for the DARPA “HUB4” Project on continuous speech recognition in the broadcast domain.

    数据集地址:https://catalog.ldc.upenn.edu/LDC97S44

    谷歌云盘文本分类数据集
    来自Zhang et al., 2015。用于文本分类的八个数据集合集。这些是用于新文本分类基线的基准。样本大小从 120K 至 3.6M 不等,范围从二进制到 14个分类问题。数据集来自 DBPedia、亚马逊、Yelp、Yahoo!和 AG。

    数据集地址
    https://drive.google.com/drive/u/0/folders/0Bz8a_Dbh9Qhbfll6bVpmNUtUcFdjYmF2SEpmZUZUcVNiMUw1TWN6RDV3a0JHT3kxLVhVR2M

    The Corpus of Linguistic Acceptability数据集
    纽约大学发布的有关语法的数据集,该任务主要是对一个给定句子,判定其是否语法正确,因此CoLA属于单个句子的文本二分类任务;

    数据集地址:https://nyu-mll.github.io/CoLA/

    SST数据集
    斯坦福大学发布的一个情感分析数据集,主要针对电影评论来做情感分类,因此SST属于单个句子的文本分类任务(其中SST-2是二分类,SST-5是五分类,SST-5的情感极性区分的更细致);

    数据集地址:https://nlp.stanford.edu/sentiment/index.html

    MRPC数据集
    由微软发布,判断两个给定句子,是否具有相同的语义,属于句子对的文本二分类任务;

    数据集地址:https://www.microsoft.com/en-us/download/details.aspx?id=52398

    STS-B数据集
    主要是来自于历年SemEval中的一个任务(同时该数据集也包含在了SentEval),具体来说是用1到5的分数来表征两个句子的语义相似性,本质上是一个回归问题,但依然可以用分类的方法做,因此可以归类为句子对的文本五分类任务;

    数据集地址:http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark

    QQP数据集
    由Quora发布的两个句子是否语义一致的数据集,属于句子对的文本二分类任务;

    数据集地址:https://data.quora.com/First-Quora-Dataset-Release-Question-Pairs

    MNLI数据集
    由纽约大学发布,是一个文本蕴含的任务,在给定前提(Premise)下,需要判断假设(Hypothesis)是否成立,其中因为MNLI主打卖点是集合了许多不同领域风格的文本,因此又分为matched和mismatched两个版本的MNLI数据集,前者指训练集和测试集的数据来源一致,而后者指来源不一致。该任务属于句子对的文本三分类问题。

    数据集地址:http://www.nyu.edu/projects/bowman/multinli/

    Large Movie Review Dataset数据集
    This is a dataset for binary sentiment classification containing substantially more data than previous benchmark datasets. We provide a set of 25,000 highly polar movie reviews for training, and 25,000 for testing. There is additional unlabeled data for use as well. Raw text and already processed bag of words formats are provided. See the README file contained in the release for more details.

    数据集地址:http://ai.stanford.edu/~amaas/data/sentiment/

    WebKB数据集
    The documents in the WebKB are webpages collected by the World Wide Knowledge Base (Web->Kb) project of the CMU text learning group, and were downloaded from The 4 Universities Data Set Homepage. These pages were collected from computer science departments of various universities in 1997, manually classified into seven different classes: student, faculty, staff, department, course, project, and other.
    在这里插入图片描述

    数据集地址:http://www.webkb.org/

    AG News数据集
    The AG News corpus consists of news articles from the AG’s corpus of news articles on the web pertaining to the 4 largest classes. The dataset contains 30,000 training examples for each class 1,900 examples for each class for testing. Models are evaluated based on error rate (lower is better).

    数据集地址
    数据集-官网完整版:
    http://www.di.unipi.it/~gulli/AG_corpus_of_news_articles.html

    数据集-分类任务集
    https://github.com/mhjabreel/CharCNN/tree/master/data/

    DBpedia数据集
    DBpedia provides three different classification schemata for things.

    • Wikipedia Categories are represented using the SKOS vocabulary and DCMI terms.
    • The YAGO Classification is derived from the Wikipedia category system using WordNet. Please refer to Yago: A Core of Semantic Knowledge – Unifying WordNet and Wikipedia (PDF) for more details.
    • WordNet Synset Links were generated by manually relating Wikipedia infobox templates and WordNet synsets, and adding a corresponding link to each thing that uses a specific template. In theory, this classification should be more precise then the Wikipedia category system.

    数据集地址:https://wiki.dbpedia.org/services-resources/datasets/dbpedia-datasets#h434-6

    展开全文
  • 我本次对4类文本进行分类((所有截图代码和数据集最后附带免费下载地址)) 主要步骤: 1.各种读文件,写文件 2.使用jieba分词将中文文本切割 3.对处理之后的文本开始用TF-IDF算法进行单词权值的计算 4....

    我本次对4类文本进行分类((所有截图代码和数据集最后附带免费下载地址)

     

    主要步骤:

     1.各种读文件,写文件

     2.使用jieba分词将中文文本切割

     3.对处理之后的文本开始用TF-IDF算法进行单词权值的计算

     4.去掉停用词

     5.贝叶斯预测种类

     

    文本预处理:

     除去噪声,如:格式转换,去掉符号,整体规范化

     遍历的读取一个文件下的每个文本

    中文分词

    中文分词就是将一句话拆分为各个词语,因为中文分词在不同的语境中歧义较大,所以分词极其重要。
    原型:我今天中午吃的小面。

    分词:我、今天、中午、吃、的、小面。

    其中  我、的   两个分词属于停用词(停用词后面讲)

    我们本次才用jieba分词来进行辅助,那么jieba分词有这么几个类型

    1.精确模式,试图将句子最精确的起开,适合文本分析。
    2.全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。

    3.搜索引擎模式,再将却模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

            #精确模式: 我/ 去过/ 清华大学/ 和/ 北京大学/ 。
            #全模式: 我/ 去过/ 清华/ 清华大学/ 华大/ 大学/ 和/ 北京/ 北京大学/ 大学/ / 
            #搜索引擎模式: 我/ 去过/ 清华/ 华大/ 大学/ 清华大学/ 和/ 北京/ 大学/ 北京大学/ 。 

    本程序使用的是(默认)精准模式,当然jieba还有很多种模式,大家可以自行查阅

     

    TF-IDF逆文本频率指数

     概念:是一种统计方法,用以评估一个词对于一个语料库中一份文件的重要程度。词的重要性随着在文件中出现              的次数正比增加,同时随着它在语料库其他文件中出现的频率反比下降。
               就是说一个词在某一文档中出现次数比较多,其他文档没有出现,说明该词对该文档分类很重要。

               然而如果其他文档也出现比较多,说明该词区分性不大,就用IDF来降低该词的权重。

    数学算法:

                TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比
                TF-IDF = TF (词频)   *   IDF(逆文档频率)
                词频:TF = 词在文档中出现的次数 / 文档中总词数

                逆文档频率:IDF = log(语料库中文档总数 / 包含该词的文档数  +1 )     

    避开停用词:

                      

      

    贝叶斯分类

    朴素贝叶斯分类算法核心:       

        

    表达形式:

    测试集

                              我手动打乱了里面的分类,这样看他能不能预测出来

    代码实现:

    #!D:/workplace/python
    # -*- coding: utf-8 -*-
    # @File  : homework3.py
    # @Author: WangYe
    # @Date  : 2018/4/22
    # @Software: PyCharm
    # 微博文字的性别识别
    import jieba
    import os
    import pickle  # 持久化
    from numpy import *
    from sklearn import feature_extraction
    from sklearn.feature_extraction.text import TfidfTransformer  # TF-IDF向量转换类
    from sklearn.feature_extraction.text import TfidfVectorizer  # TF_IDF向量生成类
    from sklearn.utils import Bunch
    from sklearn.naive_bayes import MultinomialNB  # 多项式贝叶斯算法
    
    
    def readFile(path):
        with open(path, 'r', errors='ignore') as file:  # 文档中编码有些问题,所有用errors过滤错误
            content = file.read()
            return content
    
    
    def saveFile(path, result):
        with open(path, 'w', errors='ignore') as file:
            file.write(result)
    
    
    def segText(inputPath, resultPath):
        fatherLists = os.listdir(inputPath)  # 主目录
        for eachDir in fatherLists:  # 遍历主目录中各个文件夹
            eachPath = inputPath + eachDir + "/"  # 保存主目录中每个文件夹目录,便于遍历二级文件
            each_resultPath = resultPath + eachDir + "/"  # 分词结果文件存入的目录
            if not os.path.exists(each_resultPath):
                os.makedirs(each_resultPath)
            childLists = os.listdir(eachPath)  # 获取每个文件夹中的各个文件
            for eachFile in childLists:  # 遍历每个文件夹中的子文件
                eachPathFile = eachPath + eachFile  # 获得每个文件路径
              #  print(eachFile)
                content = readFile(eachPathFile)  # 调用上面函数读取内容
                # content = str(content)
                result = (str(content)).replace("\r\n", "").strip()  # 删除多余空行与空格
                # result = content.replace("\r\n","").strip()
    
                cutResult = jieba.cut(result)  # 默认方式分词,分词结果用空格隔开
                saveFile(each_resultPath + eachFile, " ".join(cutResult))  # 调用上面函数保存文件
    
    
    def bunchSave(inputFile, outputFile):
        catelist = os.listdir(inputFile)
        bunch = Bunch(target_name=[], label=[], filenames=[], contents=[])
        bunch.target_name.extend(catelist)  # 将类别保存到Bunch对象中
        for eachDir in catelist:
            eachPath = inputFile + eachDir + "/"
            fileList = os.listdir(eachPath)
            for eachFile in fileList:  # 二级目录中的每个子文件
                fullName = eachPath + eachFile  # 二级目录子文件全路径
                bunch.label.append(eachDir)  # 当前分类标签
                bunch.filenames.append(fullName)  # 保存当前文件的路径
                bunch.contents.append(readFile(fullName).strip())  # 保存文件词向量
        with open(outputFile, 'wb') as file_obj:  # 持久化必须用二进制访问模式打开
            pickle.dump(bunch, file_obj)
            #pickle.dump(obj, file, [,protocol])函数的功能:将obj对象序列化存入已经打开的file中。
            #obj:想要序列化的obj对象。
            #file:文件名称。
            #protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本
    def readBunch(path):
        with open(path, 'rb') as file:
            bunch = pickle.load(file)
            #pickle.load(file)
            #函数的功能:将file中的对象序列化读出。
        return bunch
    
    
    def writeBunch(path, bunchFile):
        with open(path, 'wb') as file:
            pickle.dump(bunchFile, file)
    
    
    def getStopWord(inputFile):
        stopWordList = readFile(inputFile).splitlines()
        return stopWordList
    
    
    def getTFIDFMat(inputPath, stopWordList, outputPath):  # 求得TF-IDF向量
        bunch = readBunch(inputPath)
        tfidfspace = Bunch(target_name=bunch.target_name,label=bunch.label, filenames=bunch.filenames, tdm=[],
                           vocabulary={})
        # 初始化向量空间
        vectorizer = TfidfVectorizer(stop_words=stopWordList, sublinear_tf=True, max_df=0.5)
        transformer = TfidfTransformer()  # 该类会统计每个词语的TF-IDF权值
        # 文本转化为词频矩阵,单独保存字典文件
        tfidfspace.tdm = vectorizer.fit_transform(bunch.contents)
        tfidfspace.vocabulary = vectorizer.vocabulary_   #获取词汇
        writeBunch(outputPath, tfidfspace)
    
    def getTestSpace(testSetPath, trainSpacePath, stopWordList, testSpacePath):
        bunch = readBunch(testSetPath)
        # 构建测试集TF-IDF向量空间
        testSpace = Bunch(target_name=bunch.target_name, label=bunch.label, filenames=bunch.filenames, tdm=[],
                          vocabulary={})
        # 导入训练集的词袋
        trainbunch = readBunch(trainSpacePath)
        # 使用TfidfVectorizer初始化向量空间模型  使用训练集词袋向量
        vectorizer = TfidfVectorizer(stop_words=stopWordList, sublinear_tf=True, max_df=0.5,
                                     vocabulary=trainbunch.vocabulary)
        transformer = TfidfTransformer()
        testSpace.tdm = vectorizer.fit_transform(bunch.contents)
        testSpace.vocabulary = trainbunch.vocabulary
        # 持久化
        writeBunch(testSpacePath, testSpace)
    
    def bayesAlgorithm(trainPath, testPath):
        trainSet = readBunch(trainPath)
        testSet = readBunch(testPath)
        clf = MultinomialNB(alpha=0.001).fit(trainSet.tdm, trainSet.label)
        #alpha:0.001 alpha 越小,迭代次数越多,精度越高
        #print(shape(trainSet.tdm))  #输出单词矩阵的类型
        #print(shape(testSet.tdm))
        predicted = clf.predict(testSet.tdm)
        total = len(predicted)
        rate = 0
        for flabel, fileName, expct_cate in zip(testSet.label, testSet.filenames, predicted):
            if flabel != expct_cate:
                rate += 1
                print(fileName, ":实际类别:", flabel, "-->预测类别:", expct_cate)
        print("erroe rate:", float(rate) * 100 / float(total), "%")
    
    
    # 分词,第一个是分词输入,第二个参数是结果保存的路径
    segText("C:/Users/wy/Desktop/data/", "C:/Users/wy/Desktop/segResult/")
    bunchSave("C:/Users/wy/Desktop/segResult/", "C:/Users/wy/Desktop/train_set.dat")  # 输入分词,输出分词向量
    stopWordList = getStopWord("C:/Users/wy/Desktop/stop/stopword.txt")  # 获取停用词
    getTFIDFMat("C:/Users/wy/Desktop/train_set.dat", stopWordList, "C:/Users/wy/Desktop/tfidfspace.dat")  # 输入词向量,输出特征空间
    
    # 训练集
    segText("C:/Users/wy/Desktop/test1/", "C:/Users/wy/Desktop/test_segResult/")  # 分词
    bunchSave("C:/Users/wy/Desktop/test_segResult/", "C:/Users/wy/Desktop/test_set.dat")
    getTestSpace("C:/Users/wy/Desktop/test_set.dat", "C:/Users/wy/Desktop/tfidfspace.dat", stopWordList, "C:/Users/wy/Desktop/testspace.dat")
    bayesAlgorithm("C:/Users/wy/Desktop/tfidfspace.dat", "C:/Users/wy/Desktop/testspace.dat")

    结果截图:

    从结果看出,手动添加的错误都预测出来了,谢谢大家~

    参考文献:https://www.jianshu.com/p/915b0ab166e5

    数据集+代码百度云(数据集和代码尽量放一起,注意修改文件路径,不想修改路径的就看下面的新博客,有相对路径的代码):

    数据集链接:https://pan.baidu.com/s/1NSRC33fvqwfMmyb_E85WGg 
    提取码:0uln

    代码链接:https://pan.baidu.com/s/1Crla7bbGBPBwJw97-q1s_A 
    提取码:l01w 

    --------------------------------------------------分割线2019.5.29日更新---------------------------------------------------------------------------------------

    有很多同学加我微信问道dat文件的内容以及想查看词向量,词频矩阵等等详细信息,或者有同学对我代码的路径非常不熟悉很难修改为自己的路径,也有同学出现python的一些小bug,这里放出一个新的博客链接,我将文件的路径换为相对路径,并将dat文件转换为txt文件输出,方便大家查阅或者学习NLP的知识,还放出了大家运行我代码可能出现的一些基础问题,欢迎大家查看,留言,评论,共同学习。新博客我保证你代码一下载下来什么都不用改就能运行(只要python环境没问题)

    新博客链接:https://blog.csdn.net/qq_28626909/article/details/90669715

    --------------------------------------------------分割线 2019.6.20日更新---------------------------------------------------------------------------------------

    竟然有人私聊问我要我当时做这个玩意儿当时的PPT!!!而且还说当天晚上就要交作业!!!来不及自己做了!!!!

    PPT下载链接:https://download.csdn.net/download/qq_28626909/11250009 (CSDN积分下载,积分多的麻烦给我送点)

    没CSDN积分的百度云下载:

    链接:https://pan.baidu.com/s/17hT5UTB9VM0nWhrfVfkkzg 
    提取码:810f 

    PPT是2018年做的,而且当时水平有限,应急交作业的就拿去吧,我已经把我学校的水印还有我个人信息都去掉了。有时间的还是自己好好做一个吧,毕竟我PPT很水的。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    -------------------------------------------------分割线2020.11.29日更新---------------------------------------------------------------------------------------

    许多人对于这个输出错误率不是非常认同,希望看到一种输入一段话,然后直接输出类别的那种,例如下图:

    所以,我更新了博客,点击即可,只换代码,数据什么的都不用动。

    链接:https://blog.csdn.net/qq_28626909/article/details/110356190

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    由于提问评论人太多,这里我留下个人微信:wy1119744330     

    添加好友请备注姓名+单位 (我也会告诉你我的名字)例如:张三(xx大学)

    加的人太多了,我得改备注了,不然分不清楚了

    我也是菜鸟一个,如果数据集或者代码有什么问题欢迎留言,我都会回复的~

    展开全文
  • 文本检测数据集整理汇总

    千次阅读 2019-02-22 11:39:32
    1、ctw 腾讯和清华大学合作标注的数据集 https://ctwdataset.github.io/  2、rctw 2017年ICARD比赛的数据集 RCTW-17 is a competition on reading Chinese Text in images. For training and testing, we ...
  • 深度学习:文本检测数据集整理

    千次阅读 2018-09-03 10:58:37
    深度模型及其在视觉文字分析中的应用_张树业 数据库下载 SCUT_FORU_Chinese paper: 深度模型及其在视觉文字分析中的应用_张树业 数据库下载 KAIST paper: Scene Text Extraction with...
  • 文本摘要常用数据集和方法研究综述 [1]侯圣峦,张书涵,费超群.文本摘要常用数据集和方法研究综述[J].中文信息学报,2019,33(05):1-16. 为了解决抽取式摘要方法缺少训练数据的问题,已有方法通常将用于生成式文本...
  • 我们在第五章学习了循环神经网络,在第五章中我们使用循环神经网络实现了一个文本分类的模型,不过使用的数据集是PaddlePaddle自带的一个数据集,我们并没有了解到PaddlePaddle是如何使用读取文本数据集的,那么本章...
  • 数据分析学习总结笔记09:文本分析

    千次阅读 2020-04-04 09:39:38
    数据分析学习总结笔记09:文本分析1 文本分析1.1 文本分析概述1.2 结构/非结构化数据1.3 文本数据特点1.4 自然语言处理——NLP1.5 文本挖掘的应用2 文本分词2.1 英文分词——KNIME2.2 中文分词2.2.1 中文分词工具...
  • 网易分类文本数据 http://www.datatang.com/data/11965 包含运动、汽车等六大类的4000条文本数据。 (6). 中文文本分类语料 http://www.datatang.com/data/11963 包含Arts、Literature等类别的语料文本。 (7). 更全...
  • 抑郁检测用文本数据集

    千次阅读 热门讨论 2019-03-05 19:24:11
    可用于抑郁检测的数据集
  • 文本分析数据收集

    千次阅读 2016-02-01 12:00:05
    文本分析时,在很多情况下,需要我们自己去爬外部网站的数据,由于不同的网站有不同的网页结构,所以处理起来就需要根据网页不同去做解析。解析网页使用的语言为python,因为他们提供了很多的类似插件的工具包,...
  • 文本分类数据集汇总名词解释一、“达观杯”文本智能处理挑战赛数据集1、数据格式2、测试集:test_set.csv数据集数据集三参考文献 名词解释 (1)脱敏处理 一、“达观杯”文本智能处理挑战赛数据集 “达观杯”文本...
  • 数据集链接:https://pan.baidu.com/s/1UhraDB3MCittdK6p1rfE6A 提取码:2fa2 在进行中文文本分类的过程中,克隆文件后进行测试,记录下我所遇到的问题: 1.关于运行run_cnn.py(同理于run_rnn.py) 如果观察run_...
  • VOC数据集 XML 和 txt标注文本的理解

    千次阅读 2018-12-29 18:04:08
    VOC数据集 XML 和 txt标注文本的理解 以VOC数据集中VOC2007中的000001.jpg图片为例,分析下其对应的Annotations文件夹下的000001.xml文件和labels文件夹下的000001.txt文件 整幅图片的尺寸为 宽353,高500. ...
  • IMDB情感分析数据集

    千次阅读 2017-10-26 16:46:17
    文本情感分析二分类数据集,每条样本是一个txt文件。 包括训练集,测试集,和没有标签的数据。 训练集:25000条,正负各12500条 测试集:25000条,正负各12500条 下载地址:http://ai.stanford.edu/~amaas/...
  • 数据分析案例--红酒数据集分析

    千次阅读 多人点赞 2020-03-13 12:04:05
    这篇文章主分析了红酒的通用数据集,这个数据集一共有1600个样本,11个红酒的理化性质,以及红酒的品质(评分从0到10)。这里主要用python进行分析,主要内容分为:单变量,双变量,和多变量分析。 注意:我们在分析...
  • 基于文本数据的情感分析系统

    千次阅读 多人点赞 2019-12-17 11:05:46
    在自然语言处理里面,情感分析大类上归属于文本分类领域,是NLP非常常见也是很重要的一种任务类型,在大多数已开展的分析研究工作中,主要是基于评论数据集,诸如:滴滴打车评论数据集、豆瓣猫眼影评数据集;...
  • 之前搞了很久的深度模型,看bert相关论文后感慨深度学习不单要有足够的理论知识(数学数学数学),也要有足够的资源(tpu、数据集、财力计算力)和足够的科学想象力(双向transfermer加mask就真的能搞定上下文信息?...
  • IMDB依存树情感分析数据集

    千次阅读 2017-07-29 15:22:19
    IMDB依存树情感分析数据集
  • 前文分享了疫情相关新闻数据爬取,并进行中文分词处理及文本聚类、LDA主题模型分析。这篇文章将抓取微博话题及评论信息,采用SnowNLP进行简单的情感分析文本挖掘,包括随时间的情感分布。希望这篇基础性文章对您...
  • 原价对比手机类型分布词云图绘制手机品牌词云图不同品牌手机总销量比较月销量气泡图收藏量与价格分析不同价格等级总销量饼图总销售额构成分析TOP10 手机价格等级构成各发货省不同价格等级销售情况四、数据建模五、...
  • 使用文本/CAD数据集添加地图注记

    千次阅读 2015-11-03 15:09:24
    SuperMap软件可以通过文本数据集、CAD数据集和标签专题图两种手段为地图添加文字信息——地图注记。在不同的应用场景下您需要选择合适的手段制作地图注记,两种方式如何选择?
  • 接上一篇《【Python数据分析文本情感分析——电影评论分析(一)》。 目录文本向量化词袋模型 文本向量化   文本要进行模型训练,进而判断文本是积极的还是消极,而此时的文本依然是字符串形式,机器学习只能...
  • 对于推特的文本情感分析基于SemEval 数据集始于2013年,之后任务和数据都在不断发展为更复杂。在13年到15年,任务是简单给一个推特文本,然后进行文本情感分类,分为3类(积极、消极、中立),称为任务A; 于2015年...
  • python文本数据分析案例—新闻分类

    千次阅读 多人点赞 2020-04-21 16:21:49
    1新闻分类 1.1案例背景 新闻分类是文本分类中常见的应用场量。在传统分类模式下,往往层通过人工对新闻内合进行核对,从而将新闻划分到合适的类别中。... ◆能够对文本数据进行预处理。【文本清洗, ...
  • 温馨提示:本文是《数据分析中,文本分析远比数值型分析重要!》的上篇,聊的是文本分析的一些基本知识,下篇将以一个实际案例来聊聊基于大数据的文本分析是如何应用在商业场景中的,将于明天推送,...
  • 中文文本分类问题:THUCNews数据集1 THUCNews数据集与预处理1.1 数据集下载1.2 数据量1.3 预处理1.3.1 read_file(),读取文件数据;1.3.2 build_vocab()构建词汇表1.3.2 read_vocab()读取已存储的词汇表,2 特征向量...
  • SQUAD数据集分析

    千次阅读 2020-08-03 22:09:58
    数据集demo 总结: object 包含了data和version。data中包含了好多条文本(doc),每条文本包含题目(title)和不同段落(paragraphs),每个段落中包含qas(问题和答案)。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,484
精华内容 68,993
关键字:

文本分析数据集