日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

基于Python的豆瓣中文影评差评分析

發布時間:2024/8/1 python 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Python的豆瓣中文影评差评分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

資源下載地址:https://download.csdn.net/download/sheziqiong/86773473
資源下載地址:https://download.csdn.net/download/sheziqiong/86773473

1. NLP

NLP(Natural Language Processing)是指自然語言處理,他的目的是讓計算機可以聽懂人話。

下面是我將2萬條豆瓣影評訓練之后,隨意輸入一段新影評交給神經網絡,最終AI推斷出的結果。

"很好,演技不錯", 0.91799414 ===>好評"要是好就奇怪了", 0.19483969 ===>差評"一星給字幕", 0.0028086603 ===>差評"演技好,演技好,很差", 0.17192301 ===>差評"演技好,演技好,演技好,演技好,很差" 0.8373259 ===>好評

看完本篇文章,即可獲得上述技能。

2. 讀取數據

首先我們要找到待訓練的數據集,我這里是一個csv文件,里面有從豆瓣上獲取的影視評論50000條。

他的格式是如下這樣的:

名稱評分評論分類
電影名1分到5分評論內容1 好評,0 差評

部分數據是這樣的:

代碼是這樣的:

# 導入包 import csv import jieba# 讀取csv文件 csv_reader = csv.reader(open("datasets/douban_comments.csv"))# 存儲句子和標簽 sentences = [] labels = []# 循環讀出每一行進行處理 i = 1 for row in csv_reader:# 評論內容用結巴分詞以空格分詞comments = jieba.cut(row[2]) comment = " ".join(comments)sentences.append(comment)# 存入標簽,1好評,0差評labels.append(int(row[3]))i = i + 1if i > 20000: break # 先取前2萬條試驗,取全部就注釋# 取出訓練數據條數,分隔開測試數據條數 training_size = 16000 # 0到16000是訓練數據 training_sentences = sentences[0:training_size] training_labels = labels[0:training_size] # 16000以后是測試數據 testing_sentences = sentences[training_size:] testing_labels = labels[training_size:]

這里面做了幾項工作:

  • 文件逐行讀入,選取評論和標簽字段。
  • 評論內容進行分詞后存儲。
  • 將數據切分為訓練和測試兩組。
  • 2.1 中文分詞

    重點說一下分詞。

    分詞是中文特有的,英文不存在。

    下面是一個英文句子。

    This is an English sentence.

    請問這個句子,有幾個詞?

    有6個,因為每個詞之間有空格,計算機可以輕易識別處理。

    ThisisanEnglishsentence.
    123456

    下面是一個中文句子。

    歡迎訪問我的掘金博客。

    請問這個句子,有幾個詞?

    恐怕你得讀幾遍,然后結合生活閱歷,才能分出來,而且還帶著各類糾結。

    今天研究的重點不是分詞,所以我們一筆帶過,采用第三方的結巴分詞實現。

    安裝方法

    代碼對 Python 2/3 均兼容

    • 全自動安裝:easy_install jieba 或者 pip install jieba / pip3 install jieba
    • 半自動安裝:先下載 http://pypi.python.org/pypi/jieba/ ,解壓后運行 python setup.py install
    • 手動安裝:下載代碼文件將 jieba 目錄放置于當前目錄或者 site-packages 目錄
    • 通過 import jieba 來引用

    引入之后,調用jieba.cut("歡迎訪問我的掘金博客。")就可以分詞了。

    importjieba words=jieba.cut("歡迎訪問我的掘金博客。") sentence="".join(words) print(sentence)#歡迎訪問我的掘金博客。

    為什么要有分詞?因為詞語是語言的最小單位,理解了詞語才能理解語言,才知道說了啥。

    對于中文來說,同一個的詞語在不同語境下,分詞方法不一樣。

    關注下面的“北京大學”:

    importjieba sentence="".join(jieba.cut("歡迎來北京大學餐廳")) print(sentence)#歡迎來北京大學餐廳 sentence2="".join(jieba.cut("歡迎來北京大學生志愿者中心")) print(sentence2)#歡迎來北京大學生志愿者中心

    所以,中文的自然語言處理難就難在分詞。

    至此,我們的產物是如下格式:

    sentences = ['我喜歡你','我不喜歡他',……] labels = [0,1,……]

    3. 文本序列化

    文本,其實計算機是無法直接認識文本的,它只認識0和1。

    你之所以能看到這些文字、圖片,是因為經過了多次轉化。

    就拿字母A來說,我們用65表示,轉為二進制是0100 0001。

    二進制十進制縮寫/字符解釋
    0100 000165A大寫字母A
    0100 001066B大寫字母B
    0100 001167C大寫字母C
    0100 010068D大寫字母D
    0100 010169E大寫字母E

    當你看到A、B、C時,其實到了計算機那里是0100 0001、0100 0010、0100 0011,它喜歡數字。

    Tips:這就是為什么當你比較字母大小是發現 A<B ,其實本質上是65<66。

    那么,我們的準備好的文本也需要轉換為數字,這樣更便于計算。

    3.1 fit_on_texts 分類

    有一個類叫Tokenizer,它是分詞器,用于給文本分類和序列化。

    這里的分詞器和上面我們說的中文分詞不同,因為編程語言是老外發明的,人家不用特意分詞,他起名叫分詞器,就是給詞語分類。

    fromtensorflow.keras.preprocessing.textimportTokenizersentences=['我喜歡你','我不喜歡他'] # 定義分詞器 tokenizer=Tokenizer() # 分詞器處理文本, tokenizer.fit_on_texts(sentences) print(tokenizer.word_index) # {'我':1,'喜歡':2,'你':3,'不':4,'他':5}

    上面做的就是找文本里有幾類詞語,并編上號。

    看輸出結果知道:2句話最終抽出5種不同的詞語,編號1~5。

    3.2 texts_to_sequences 文本變序列

    文本里所有的詞語都有了編號,那么就可以用數字表示文本了。

    # 文本轉化為數字序列 sequences=tokenizer.texts_to_sequences(sentences) print(sequences)#[[1,2,3],[1,4,2,5]]

    這樣,計算機漸漸露出了笑容。

    3.3 pad_sequences 填充序列

    雖然給它提供了數字,但這不是標準的,有長有短,計算機就是流水線,只吃統一標準的數據。

    pad_sequences 會把序列處理成統一的長度,默認選擇里面最長的一條,不夠的補0。

    fromtensorflow.keras.preprocessing.sequenceimportpad_sequences# padding='post'后邊填充,padding='pre'前面填充 padded=pad_sequences(sequences,padding='post') print(padded)#[[1 2 3] [1 4 2 5]] -> [[1230][1425]]

    這樣,長度都是一樣了,計算機露出了開心的笑容。

    少了可以補充,但是如果太長怎么辦呢?

    太長可以裁剪。

    # truncating='post'裁剪后邊,truncating='pre'裁剪前面 padded=pad_sequences(sequences,maxlen=3,truncating='pre') print(padded)#[[1,2,3],[1,4,2,5]]->[[123][425]]

    至此,我們的產物是這樣的格式:

    sentences = [[1 2 3 0] [1 4 2 5]] labels = [0,1,……]

    4. 構建模型

    所謂模型,就是流水線設備。我們先來看一下流水線是什么感覺。

    看完了吧,流水線的作用就是進來固定格式的原料,經過一層一層的處理,最終出去固定格式的成品。

    模型也是這樣,定義一層層的“設備”,配置好流程中的各項“指標”,等待上線生產。

    # 構建模型,定義各個層 model=tf.keras.Sequential([ tf.keras.layers.Embedding(vocab_size,embedding_dim,input_length=max_length), tf.keras.layers.GlobalAveragePooling1D(), tf.keras.layers.Dense(64,activation='relu'), tf.keras.layers.Dense(1,activation='sigmoid') ]) # 配置訓練方法loss=損失函數optimizer=優化器metrics=["準確率”] model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

    4.1 Sequential 序列

    你可以理解為整條流水線,里面包含各類設備(層)。

    4.2 Embedding 嵌入層

    嵌入層,從字面意思我們就可以感受到這個層的氣勢。

    嵌入,就是插了很多個維度。一個詞語用多個維度來表示。

    下面說維度。

    二維的是這樣的(長,寬):

    三維是這樣的(長,寬,高):

    100維是什么樣的,你能想象出來嗎?除非物理學家,否則三維以上很難用空間來描述。但是,數據是很好體現的。

    性別,職位,年齡,身高,膚色,這一下就是5維了,1000維是不是也能找到。

    對于一個詞,也是可以嵌入很多維度的。有了維度上的數值,我們就可以理解詞語的輕重程度,可以計算詞語間的關系。

    如果我們給顏色設置R、B、G 3個維度:

    顏色RGB
    紅色25500
    綠色02550
    藍色00255
    黃色2552550
    白色255255255
    黑色000

    下面見證一下奇跡,懂色彩學的都知道,紅色和綠色摻在一起是什么顏色?

    來,跟我一起讀:紅色+綠色=黃色。

    到數字上就是:[255,0,0]+[0,255,0] = [255,255,0]

    這樣,顏色的明暗程度,顏色間的關系,計算機就可以通過計算得出了。

    只要標記的合理,其實計算機能夠算出:國王+女性=女王、精彩=-糟糕,開心>微笑。

    那你說,計算機是不是理解詞語意思了,它不像你是感性理解,它全是數值計算。

    嵌入層就是給詞語標記合理的維度。

    我們看一下嵌入層的定義:Embedding(vocab_size,embedding_dim,input_length)

    • vocab_size:字典大小。有多少類詞語。
    • embedding_dim:本層的輸出大小。一個詞用多少維表示。
    • input_length:輸入數據的維數。一句話有多少個詞語,一般是max_length(訓練集的最大長度)。

    4.3 GlobalAveragePooling1D 全局平均池化為一維

    主要就是降維。我們最終只要一維的一個結果,就是好評或者差評,但是現在維度太多,需要降維。

    4.4 Dense

    這個也是降維,Dense(64,activation='relu')降到Dense(1,activation='sigmoid'),最終輸出一個結果,就像前面流水線輸入面粉、水、肉、菜等多種原材料,最終出來的是包子。

    4.5 activation 激活函數

    activation是激活函數,它的主要作用是提供網絡的非線性建模能力。

    所謂線性問題就是可以用一條線能解決的問題。
    可以來TensorFlow游樂場來試驗。

    如果是采用線性的思維,神經網絡很快就能區分開這兩種樣本。

    但如果是下面的這種樣本,畫一條直線是解決不了的。

    如果是用relu激活函數,就可以很輕易區分。

    這就是激活函數的作用。

    常用的有如下幾個,下面有它的函數和圖形。

    我們用到了relu和sigmoid。

    • relu:線性整流函數(Rectified Linear Unit),最常用的激活函數。
    • sigmoid:也叫Logistic函數,它可以將一個實數映射到(0,1)的區間。

    Dense(1,activation='sigmoid')最后一個Dense我們就采用了sigmoid,因為我們的數據集中0是差評,1是好評,我們期望模型的輸出結果數值也在0到1之間,這樣我們就可以判斷是更接近好評還是差評了。

    4. 訓練模型

    4.1 fit 訓練

    訓練模型就相當于啟動了流水線機器,傳入訓練數據和驗證數據,調用fit方法就可以訓練了。

    啟動后,日志打印是這樣的:

    Epoch 1/10 500/500 - 61s - loss: 0.6088 - accuracy: 0.6648 - val_loss: 0.5582 - val_accuracy: 0.7275 Epoch 2/10 500/500 - 60s - loss: 0.4156 - accuracy: 0.8130 - val_loss: 0.5656 - val_accuracy: 0.7222 Epoch 3/10 500/500 - 60s - loss: 0.2820 - accuracy: 0.8823 - val_loss: 0.6518 - val_accuracy: 0.7057

    經過訓練,神經網絡會根據輸入和輸出自動調節參數,包括確定詞語的具體維度,以及維度的數值取多少。這個過程變為黑盒了,這也是人工智能和傳統程序設計不同的地方。

    最后,調用save_weights可以把結果保存下來。

    5. 自動分析結果

    5.1 predict 預測

    分詞處理

    v_len = len(sentences)
    for i in range(v_len):
    sentences[i] = " ".join(jieba.cut(sentences[i]) )

    序列化

    sequences = tokenizer.texts_to_sequences(sentences)

    填充為標準長度

    padded = pad_sequences(sequences, maxlen= max_length, padding=‘post’, truncating=‘post’)

    預測

    predicts = model.predict(np.array(padded))

    打印結果

    for i in range(len(sentences)):
    print(sentences[i], predicts[i][0],‘=>好評’ if predicts[i][0] > 0.5 else '=>差評’)

    `model.predict()`會返回預測值,這不是個分類值,是個回歸值(也可以做到分類值,比如輸出1或者0,但是我們更想觀察0.51和0.49有啥區別)。我們假設0.5是分界值,以上是好評,以下是差評。最終打印出結果:```python 很好,演技不錯 0.93863165 ===>好評 要是好就奇怪了 0.32386222 ===>差評 一星給字幕 0.0030411482 ===>差評 演技好,演技好,很差 0.21595979 ===>差評 演技好,演技好,演技好,演技好,很差 0.71479297 ===>好評

    資源下載地址:https://download.csdn.net/download/sheziqiong/86773473
    資源下載地址:https://download.csdn.net/download/sheziqiong/86773473

    總結

    以上是生活随笔為你收集整理的基于Python的豆瓣中文影评差评分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品免费一区 | 吞精囗交69激情欧美 | 佐山爱在线视频 | 国产淫| 最新色视频 | 亚洲性在线 | 激情网站在线观看 | 日本一区不卡视频 | 亚洲av毛片成人精品 | 日本高清xxxx | av国产免费| 亚洲国产精品成人综合在线 | 成人福利视频导航 | 亚洲二区中文字幕 | 国产国语亲子伦亲子 | 蜜臀在线一区二区三区 | 日本乱大交xxxx公交车 | 国产乱码精品一区二三区蜜臂 | 日韩岛国片 | 国产资源久久 | 国产精品揄拍一区二区 | 日韩精品三级 | 国产一区美女 | 国产一级视频在线 | 国产日韩视频在线 | 欧美一区二区三区四区五区六区 | 都市激情av | 热精品| 丝袜理论片在线观看 | 无码人妻av免费一区二区三区 | 日韩一区二区在线观看视频 | 亚洲精品久久久久久久久久吃药 | 国产精品a级 | www精品国产 | 亚洲精品欧美在线 | 已满十八岁免费观看 | 午夜视频在线观看一区 | 中文字幕在线欧美 | 男人的天堂avav | 亚洲美女视频在线 | av在线观看地址 | 99国产精品99久久久久久 | 欧美性猛交xxxx黑人交 | 久久精品免费在线 | 国产精品一区电影 | 一区二区日本视频 | 精品视频一区二区三区在线观看 | 中文字幕精品一二三四五六七八 | 欧美成人久久 | 亚洲国产成人精品女人久久 | 免费看片91 | www.热久久 | 亚洲一区电影在线观看 | 免费观看a级片 | 免费观看av网址 | 国产精品中文无码 | 亚洲欧美激情另类 | 4438全国最大成人网 | 日本特级黄色 | 激情网站在线 | 亚洲美女精品视频 | 亚洲一级片网站 | 风韵多水的老熟妇 | 亚欧日韩av | 黄色图片小说 | 欧美激情图片 | 丰满熟女一区二区三区 | 亚洲啪啪网址 | 国产伦精品一区二区三区视频我 | 国产精品粉嫩 | 中文字幕在线播放 | 五月婷婷综合激情网 | 91毛片在线观看 | 卡一卡二在线视频 | 青青草华人在线 | 免费观看污 | 99久久免费精品 | a片在线免费观看 | 97av.com | 黄色香港三级三级三级 | 亚洲免费观看高清 | 麻豆私人影院 | 天堂资源 | 麻豆 美女 丝袜 人妻 中文 | 天堂中文字幕 | 中出在线播放 | 国产精品色图 | 欧美精品首页 | 中文字幕日韩一区二区 | 国产又粗又猛又爽又黄91 | 五月天激情小说 | 91精品视频国产 | 国产日韩欧美一区 | 午夜影院啊啊啊 | 亚洲精品国产精品乱码 | 强制憋尿play黄文尿奴 | 国产精品色呦呦 | 国产香蕉视频 | 97国产精品视频 |