NLPCC2013中文微博細粒度情感識別(一)


既然是找到了不錯的工作,自然不敢怠慢,作為入職前的准備自己找了個任務干,再熟悉一下語義識別&文本分類的整個過程。

數據使用的是NLPCC2013的第二個任務,中文微博細粒度情感識別,現在在官網已經不太好找到合適的數據了,我用的是從CSDN上面下載的,tb花了幾塊錢解決。打開一看好家伙,還是xml格式的,有的里面自帶標簽,有的不帶,還有的有另一套標簽和自帶的不一樣,真是醉了。於是就開始ML里面最惡心的一步——數據清洗。粗略看了看當時的報告,竟然是先給一個小訓練集,然后放到一個大測試集上面跑,這准確率要是能高才怪的。當時基本上全都是用的ML+特征選擇的方法,准確率貌似50都算高的了。最后我拿到的包括兩個文件,是當時所謂的“訓練集”和“測試集”(兩個文件的數據分布在下面),數據里面一共包括有1.4w條微博,每個微博里面有若干條句子,句子總數大概是4.5w。反正也不是真正去比賽,我就隨機把這4.5w個句子分成了0.8 + 0.1 + 0.1。

(當時的)測試集數據分布:

(當時的)訓練集數據分布:

可以看出,兩種數據集標簽都是一樣的,分布也可以說是差不多。主要特點就是沒有情緒占了大多數,其他情緒加起來和沒有情緒的差不多。在這里就出現了很嚴重的數據偏斜,如果不進行特征提取的話DL模型對這樣的數據表現怎樣還很難說。

通過最后亂七八糟一通數據清晰,終於把數據成功分成了訓練集,驗證集合測試集,還有一個包含所有文本的用來做embedding。如果需要這些數據的話可以給我發郵件,872618562@qq.com打包發給你。

在這里也順便把python處理xml的程序po一下,主要是提醒自己別忘了哈哈

import xml.dom.minidom
import matplotlib.pyplot as plt

dom = xml.dom.minidom.parse('raw_test.xml')
output = open("test.txt", "w")
label_file = open('test_label.txt', "w")
root = dom.documentElement
nodes = dom.getElementsByTagName('sentence')
senti_list = []
tag_number = []
labels = []
counter = 0
'''
for i in label_file.readlines():
    labels.append(i.split()[3])
    print(i.split()[3])
'''

for n in nodes:
    try:
        print(n.childNodes[0].data, file=output)
        if n.getAttribute('emotion_tag') == "N":
            sentiment = "none"
        else:
            if n.getAttribute('emotion_tag') == "":
                sentiment = "none"
            else:
                sentiment = n.getAttribute('emotion-1-type')
        print(sentiment, file=label_file)
        counter += 1
        if sentiment in senti_list:
            tag_number[senti_list.index(sentiment)] += 1
        else:
            tag_number.append(1)
            senti_list.append(sentiment)
    except IndexError:
        continue

print(counter)
print(senti_list)
print(tag_number)

plt.bar(range(len(tag_number)), tag_number,tick_label=senti_list)
plt.show()

主要用到的包是xml.dom.minidom 具體他是干啥的暫時就先不深究了,知道使用的步驟大概需要先解析,再根據標簽查找就好了,要找數據用childnode[0].data,要找屬性用getAttribute("xxx")

這樣的話最討厭的數據清洗就完成了!下一步就是如果制作出像樣的可以輸入到模型里面的數據,並且構建詞典做embedding,由於其實像word2vec這種超大語料庫訓練的embedding不是很多而且這個微博數據里面說實話五花八門什么詞都有,所以打算自己訓練一個,也是順便練練手。下一步的工作主要是對數據做預處理並且合適的方法分好詞。希望可以一天弄好。886~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM