據(jù)集進(jìn)行情感分析:從酒店評論實戰(zhàn)到自主遷移)
教程機(jī)器學(xué)習(xí)人工智能【免費下載鏈接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all項目地址https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners點擊查看免費下載導(dǎo)讀本文以 6-NLP/5-Hotel-Reviews-2 課程的課后作業(yè)為藍(lán)本完整講解如何用 Python 與 NLTK 的 VADER 情感分析器為評論文本賦予情感分?jǐn)?shù)并指導(dǎo)你把這套流程遷移到任意全新數(shù)據(jù)集上獨立完成分析與驗證。讀完本文你將掌握從數(shù)據(jù)清洗、Tag 列處理、停用詞移除到情感分?jǐn)?shù)計算與結(jié)果校驗的完整 NLP 實戰(zhàn)管線并具備按作業(yè)要求新建 notebook、記錄思路、產(chǎn)出可交付成果的能力。一、作業(yè)任務(wù)定位把已學(xué)技能遷移到新數(shù)據(jù)集本課的課后作業(yè)assignment要求學(xué)習(xí)者完成一次遷移式實踐既然你已經(jīng)學(xué)會了使用 NLTK 為文本賦予情感sentiment請嘗試另一個不同的數(shù)據(jù)集。你很可能需要圍繞它做一些數(shù)據(jù)預(yù)處理因此請創(chuàng)建一個 notebook 并記錄你的思考過程。你發(fā)現(xiàn)了什么這既不是簡單的照抄代碼練習(xí)也不是全新的算法題而是要求你把上一節(jié)課程中針對酒店評論Hotel Reviews建立的情感分析管線重新應(yīng)用到一份陌生的數(shù)據(jù)上。完成它需要你具備四層能力理解課程中情感分析流程每一步為什么這樣做面對新數(shù)據(jù)時能識別其結(jié)構(gòu)差異并做相應(yīng)的數(shù)據(jù)清洗用 notebook 的形式組織代碼、圖表與文字說明記錄決策過程用課程中情感分?jǐn)?shù) vs 評論者打分的對照思路校驗結(jié)果質(zhì)量。評分標(biāo)準(zhǔn)Rubric作業(yè)附帶的評分標(biāo)準(zhǔn)非常明確直接決定了交付物的驗收要求標(biāo)準(zhǔn)優(yōu)秀Exemplary合格Adequate需改進(jìn)Needs Improvement提交一份完整的 notebook 與數(shù)據(jù)集單元格有良好文檔說明解釋情感是如何被賦予的notebook 缺少良好的解釋說明notebook 不完整或有缺陷可以看出評分核心不是情感分?jǐn)?shù)算得準(zhǔn)不準(zhǔn)而是 notebook 是否完整、每個單元格是否有清晰的文字說明。這是典型的技術(shù)寫作類作業(yè)代碼只是載體記錄并解釋你的思路才是交付物本體。因此寫作本文時我們會把課程的每一步都講透讓你在新數(shù)據(jù)集上能寫出每步都有據(jù)可查的文檔化 notebook。二、背景課程原任務(wù)中的完整情感分析管線要完成遷移先要吃透原始管線。在 6-NLP/5-Hotel-Reviews-2/README.md 中情感分析建立在上一課 6-NLP/4-Hotel-Reviews-1/README.md 的探索性數(shù)據(jù)分析EDA基礎(chǔ)之上。整個流程形成清晰的三段式流水線探索對原始Hotel_Reviews.csv約 515,000 行、17 列、歐洲 6 城市 1493 家酒店評論做 EDA判斷各列可信度與可用性見 4-Hotel-Reviews-1 的探索 notebook清洗過濾無用列、重算自有指標(biāo)、將 Tags 轉(zhuǎn)化為可用的類別特征產(chǎn)出Hotel_Reviews_Filtered.csv見 1-notebook.ipynb情感分析加載過濾后數(shù)據(jù)移除停用詞用 NLTK VADER 計算正負(fù)評論的情感分?jǐn)?shù)產(chǎn)出Hotel_Reviews_NLP.csv見 3-notebook.ipynb。數(shù)據(jù)文件需要按 6-NLP/data/README.md 的說明下載到6-NLP/data/目錄數(shù)據(jù)集為 Booking.com 公開數(shù)據(jù)遵循 CC0 公有領(lǐng)域許可。notebook 中統(tǒng)一通過../../data/Hotel_Reviews.csv這類相對路徑讀取。下面我們把這條管線拆解為可遷移的四個環(huán)節(jié)逐一給出原理與代碼。三、環(huán)節(jié)一數(shù)據(jù)清洗與特征工程過濾notebook課程的過濾邏輯建立在數(shù)據(jù)集中有相當(dāng)一部分列不可信、不可驗證或無用這一前提上。EDA 階段發(fā)現(xiàn)的問題包括Average_Score是數(shù)據(jù)集創(chuàng)建者按最近一年最新評論計算的口徑與按本數(shù)據(jù)集評論自行計算的均值并不一致同一家酒店可能一個給 7.1、一個算出 6.8Total_Number_of_Reviews指向的數(shù)據(jù)超出本數(shù)據(jù)集范圍lat/lng在推薦場景中暫時無用。解決方案是丟棄存疑列用本數(shù)據(jù)集內(nèi)的數(shù)據(jù)重算可信指標(biāo)。3.1 地址歸一化Hotel_Address是完整長地址但數(shù)據(jù)集中實際只覆蓋 6 個城市。用字符串匹配把地址壓縮成城市, 國家的規(guī)整形式以下代碼可直接運行def replace_address(row): if Netherlands in row[Hotel_Address]: return Amsterdam, Netherlands elif Barcelona in row[Hotel_Address]: return Barcelona, Spain elif United Kingdom in row[Hotel_Address]: return London, United Kingdom elif Milan in row[Hotel_Address]: return Milan, Italy elif France in row[Hotel_Address]: return Paris, France elif Vienna in row[Hotel_Address]: return Vienna, Austria # Replace all the addresses with a shortened, more useful form df[Hotel_Address] df.apply(replace_address, axis 1) # The sum of the value_counts() should add up to the total number of reviews print(df[Hotel_Address].value_counts())歸一化后即可按國家/城市粒度查詢酒店分布display(df.groupby(Hotel_Address).agg({Hotel_Name: nunique}))Hotel_AddressHotel_NameAmsterdam, Netherlands105Barcelona, Spain211London, United Kingdom400Milan, Italy162Paris, France458Vienna, Austria158注意replace_address中有一個不變量可作自檢value_counts()之和應(yīng)等于評論總數(shù)。若遷移到新數(shù)據(jù)集務(wù)必找到類似的可驗證不變量如分組計數(shù)之和等于行數(shù)這是文檔化 notebook 中極具說服力的校驗點。3.2 重算酒店元指標(biāo)Additional_Number_of_Scoring、Total_Number_of_Reviews、Average_Score均基于外部口徑全部替換為基于本數(shù)據(jù)集的計算值# Drop Additional_Number_of_Scoring df.drop([Additional_Number_of_Scoring], axis 1, inplaceTrue) # Replace Total_Number_of_Reviews and Average_Score with our own calculated values df.Total_Number_of_Reviews df.groupby(Hotel_Name).transform(count) df.Average_Score round(df.groupby(Hotel_Name).Reviewer_Score.transform(mean), 1)groupby(Hotel_Name).transform(count)得到每家酒店在本數(shù)據(jù)集內(nèi)的實際評論條數(shù)Reviewer_Score.transform(mean)保留一位小數(shù)得到可獨立驗證的酒店平均分。3.3 列取舍清單課程按列語義分組給出了明確的保留/刪除清單遷移到新數(shù)據(jù)集時這套按列語義分組評估的思路同樣適用分組保留刪除酒店列Hotel_Name、Hotel_Address已歸一化lat、lng酒店元評論列—Additional_Number_of_Scoring評論列Reviewer_Score、Negative_Review、Positive_Review、Tags暫留Review_Total_Negative_Word_Counts、Review_Total_Positive_Word_Counts、Review_Date、days_since_review評論者列Reviewer_NationalityTotal_Number_of_Reviews_Reviewer_Has_Given其中Reviewer_Nationality保留但不建議作為強(qiáng)特征——上一課明確警告把國籍與評論傾向掛鉤容易滑向刻板印象每位評論者都是基于親身經(jīng)歷獨立寫作的個體。這一判斷在遷移到新數(shù)據(jù)集時同樣值得寫進(jìn) notebook 的說明文字。四、環(huán)節(jié)二把Tags列變成可用的類別特征這是課程中最能體現(xiàn) NLP 思維的一個環(huán)節(jié)也是新數(shù)據(jù)集上最值得復(fù)用的方法論。4.1 問題本質(zhì)Tags列存的是以文本列表形式出現(xiàn)的多詞短語例如[ Business trip , Solo traveler , Single Room , Stayed 5 nights , Submitted from a mobile device ]。問題有三每個標(biāo)簽是多詞短語如Business trip而非單詞直接做詞頻統(tǒng)計會把短語拆散各行標(biāo)簽的順序和數(shù)量不固定有的 3 個、有的 5 個、有的 6 個數(shù)據(jù)規(guī)模大約 51.5 萬行、1427 家酒店、全文 6762646 個詞對全部短語做頻率分布耗時驚人。課程給出的解法體現(xiàn)了先用 EDA 縮小問題空間再讓 NLP 處理的工程智慧先利用每個標(biāo)簽本身就是以逗號分隔的短語這一事實用 pandas 的字符串與melt操作快速把標(biāo)簽打平統(tǒng)計而不是一上來就跑 n-gram 頻率算法。4.2 清洗與打平# Remove opening and closing brackets df.Tags df.Tags.str.strip([]) # remove all quotes too df.Tags df.Tags.str.replace( , , ,, regex False)清洗后每個標(biāo)簽形如Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device。由于各行標(biāo)簽數(shù)量不等用str.split(,, expandTrue)拆成最多 6 列臨時列再melt合并成一列后做value_counts()完整實現(xiàn)見 2-notebook.ipynb# Now split the strings into a list tag_list_df df.Tags.str.split(,, expand True) # Remove leading and trailing spaces df[Tag_1] tag_list_df[0].str.strip() df[Tag_2] tag_list_df[1].str.strip() df[Tag_3] tag_list_df[2].str.strip() df[Tag_4] tag_list_df[3].str.strip() df[Tag_5] tag_list_df[4].str.strip() df[Tag_6] tag_list_df[5].str.strip() # Merge the 6 columns into one with melt df_tags df.melt(value_vars[Tag_1, Tag_2, Tag_3, Tag_4, Tag_5, Tag_6])打平后共識別出2428 個唯一標(biāo)簽其中高頻項一目了然TagCountLeisure trip417778Submitted from a mobile device307640Couple252294Stayed 1 night193645Stayed 2 nights133937Solo traveler108545Stayed 3 nights95821Business trip82939Group65392Family with young children61015Stayed 4 nights47817Double Room35207Standard Double Room32248Superior Double Room31393Family with older children26349Deluxe Double Room24823Double or Twin Room22393Stayed 5 nights20845Standard Double or Twin Room17483Classic Double Room16989Superior Double or Twin Room135702 rooms12393Submitted from a mobile device這類高頻標(biāo)簽對推薦任務(wù)毫無價值但因為打平統(tǒng)計很快先保留再忽略是更省事的策略。4.3 按語義篩選有用的標(biāo)簽回到任務(wù)目標(biāo)——為酒店推薦機(jī)器人補(bǔ)充情感與畫像特征。課程給出的取舍原則是旅行類型Leisure / Business相關(guān) → 保留客群類型情侶、獨行、家庭等相關(guān) → 保留房型/套房/單間→ 無關(guān)所有酒店的房間本質(zhì)相似提交設(shè)備→ 無關(guān)入住晚數(shù)→ 與好感度的關(guān)聯(lián)牽強(qiáng)無關(guān)。據(jù)此先剔除入住晚數(shù)類與房型類標(biāo)簽入住晚數(shù)CountStayed 1 night193645Stayed 2 nights133937Stayed 3 nights95821Stayed 4 nights47817Stayed 5 nights20845Stayed 6 nights9776Stayed 7 nights7399Stayed 8 nights2502Stayed 9 nights1293......房型CountDouble Room35207Standard Double Room32248Superior Double Room31393Deluxe Double Room24823Double or Twin Room22393Standard Double or Twin Room17483Classic Double Room16989Superior Double or Twin Room13570最終保留的有用標(biāo)簽共 8 類為TagCountLeisure trip417778Couple252294Solo traveler108545Business trip82939Group與 Travellers with friends 合并67535Family with young children61015Family with older children26349With a pet1405Travellers with friends與Group語義基本等同合并是合理的工程決策。在 2-notebook.ipynb 中對應(yīng)的過濾實現(xiàn)為先按房間/晚數(shù)/設(shè)備等關(guān)鍵詞做str.contains剔除再對剩余標(biāo)簽用value_counts統(tǒng)計并過濾低頻項。4.4 生成獨熱特征列最后為每個保留標(biāo)簽新建 0/1 列逐行判斷該評論是否命中df[Leisure_trip] df.Tags.apply(lambda tag: 1 if Leisure trip in tag else 0) df[Couple] df.Tags.apply(lambda tag: 1 if Couple in tag else 0) df[Solo_traveler] df.Tags.apply(lambda tag: 1 if Solo traveler in tag else 0) df[Business_trip] df.Tags.apply(lambda tag: 1 if Business trip in tag else 0) df[Group] df.Tags.apply(lambda tag: 1 if Group in tag or Travelers with friends in tag else 0) df[Family_with_young_children] df.Tags.apply(lambda tag: 1 if Family with young children in tag else 0) df[Family_with_older_children] df.Tags.apply(lambda tag: 1 if Family with older children in tag else 0) df[With_a_pet] df.Tags.apply(lambda tag: 1 if With a pet in tag else 0)得到的聚合信息即為有多少評論者按酒店聚合是商務(wù)出行還是休閑出行、是否帶寵物——這正是推薦酒店時極有價值的畫像特征。在 1-notebook.ipynb 中這一步驟與其余清洗操作在同一 notebook 內(nèi)完成清洗全程約 23.7 秒。五、環(huán)節(jié)三移除停用詞加速情感分析情感分析是整條管線中最耗時的部分。課程在參考設(shè)備上實測直接對正負(fù)評論兩列跑情感分析約需1214 分鐘取決于所用情感庫而移除停用詞不改變句子情感的常見英文單詞如冠詞、介詞、代詞后情感分析可顯著提速且準(zhǔn)確率不降——因為停用詞對情感判定沒有貢獻(xiàn)只會拖慢計算。課程實測數(shù)據(jù)很有參考價值最長的負(fù)面評論原本 395 詞移除停用詞后僅 195 詞對 515,000 行、兩列評論移除停用詞僅耗時3.3 秒?yún)⒖荚O(shè)備實際耗時因 CPU 速度、內(nèi)存、是否 SSD 而異。移除停用詞的實現(xiàn)要點是先用set建立緩存避免每行重復(fù)查 NLTK 詞表源自 Kaggle 上 Ryan Han 對停用詞移除性能的對比結(jié)論import time import pandas as pd import nltk as nltk from nltk.corpus import stopwords from nltk.sentiment.vader import SentimentIntensityAnalyzer nltk.download(vader_lexicon) # Load the hotel reviews from CSV df pd.read_csv(../../data/Hotel_Reviews_Filtered.csv) # Remove stop words - can be slow for a lot of text! start time.time() cache set(stopwords.words(english)) def remove_stopwords(review): text .join([word for word in review.split() if word not in cache]) return text # Remove the stop words from both columns df.Negative_Review df.Negative_Review.apply(remove_stopwords) df.Positive_Review df.Positive_Review.apply(remove_stopwords)在 3-notebook.ipynb 的實測中這一步驟耗時約 5.8 秒。遷移到新數(shù)據(jù)集時記得先確認(rèn)新文本的語言VADER 與英語停用詞表均面向英語并保留停用詞移除前后行數(shù)不變、僅文本縮短的校驗記錄。六、環(huán)節(jié)四用 NLTK VADER 計算情感分?jǐn)?shù)課程選用的情感分析器是 NLTK 自帶的VADERValence Aware Dictionary and sEntiment Reasoner出自 Hutto Gilbert 2014 年論文《VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text》ICWSM-14。它是一種基于規(guī)則與情感詞典的模型專門為社交媒體文本設(shè)計無需訓(xùn)練即可使用適合課程與入門實戰(zhàn)。6.1 處理三種輸入情形評論列存在哨兵值未填寫時為No Negative或No Positive需要單獨處理為情感分?jǐn)?shù) 0from nltk.sentiment.vader import SentimentIntensityAnalyzer # Create the vader sentiment analyser (there are others in NLTK you can try too) vader_sentiment SentimentIntensityAnalyzer() # There are 3 possibilities of input for a review: # It could be No Negative, in which case, return 0 # It could be No Positive, in which case, return 0 # It could be a review, in which case calculate the sentiment def calc_sentiment(review): if review No Negative or review No Positive: return 0 return vader_sentiment.polarity_scores(review)[compound]polarity_scores()返回包含neg、neu、pos、compound的字典課程取compound歸一化到 [-1, 1] 的綜合情感分?jǐn)?shù)負(fù)值越接近 -1 越負(fù)面正值越接近 1 越正面作為最終特征。6.2 批量計算并保存# Add a negative sentiment and positive sentiment column print(Calculating sentiment columns for both positive and negative reviews) start time.time() df[Negative_Sentiment] df.Negative_Review.apply(calc_sentiment) df[Positive_Sentiment] df.Positive_Review.apply(calc_sentiment) end time.time() print(Calculating sentiment took str(round(end - start, 2)) seconds)在 3-notebook.ipynb 實測中兩列 51.5 萬行的情感計算約耗時201 秒約 3.4 分鐘遠(yuǎn)低于 1214 分鐘印證了移除停用詞的加速價值。6.3 結(jié)果校驗情感分?jǐn)?shù) vs 評論者打分作業(yè)與課程的靈魂在于驗證把情感分?jǐn)?shù)與同一評論的Reviewer_Score1~10 的數(shù)值打分對照看兩者是否一致。不一致可能有兩種解釋評論文本與打分不匹配情感分析器未能正確識別情感。一個經(jīng)典案例是反諷sarcasmOf course I LOVED sleeping in a room with no heating我當(dāng)然愛死了在沒有暖氣的房間睡覺——VADER 會判定為正面情感而人類一眼就知道是諷刺。這類可解釋的錯誤是 notebook 中極有價值的討論素材建議如實記錄而不是試圖掩蓋。對照輸出的方法df df.sort_values(by[Negative_Sentiment], ascendingTrue) print(df[[Negative_Review, Negative_Sentiment]]) df df.sort_values(by[Positive_Sentiment], ascendingTrue) print(df[[Positive_Review, Positive_Sentiment]])在 3-notebook.ipynb 的實測輸出中可以看到Negative_Review列情感分?jǐn)?shù)可從 -0.9920極端負(fù)面一直分布到 0.9948文本其實在夸酒店卻寫在了負(fù)面欄Positive_Review列同理存在大量文本與列名語義相反的樣本。這正是上一課提醒過的現(xiàn)象——評論者可能把負(fù)面內(nèi)容寫進(jìn) Positive 欄反之亦然只數(shù)詞數(shù)而不看情感會得出扭曲的結(jié)論。6.4 列重排與最終保存情感列追加完畢后把列重排成對人類友好的順序純展示性調(diào)整再寫入新文件# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) df df.reindex([Hotel_Name, Hotel_Address, Total_Number_of_Reviews, Average_Score, Reviewer_Score, Negative_Sentiment, Positive_Sentiment, Reviewer_Nationality, Leisure_trip, Couple, Solo_traveler, Business_trip, Group, Family_with_young_children, Family_with_older_children, With_a_pet, Negative_Review, Positive_Review], axis1) print(Saving results to Hotel_Reviews_NLP.csv) df.to_csv(r../data/Hotel_Reviews_NLP.csv, index False)至此完整流水線閉環(huán)Hotel_Reviews.csv→探索→Hotel_Reviews_Filtered.csv→情感分析→Hotel_Reviews_NLP.csv后者即可用于課程最后的聚類挑戰(zhàn)——用學(xué)過的聚類策略見 5-Clustering 章節(jié)圍繞情感分?jǐn)?shù)尋找模式。七、把管線遷移到新數(shù)據(jù)集完成任務(wù)的操作路線回到作業(yè)本身。要在另一個數(shù)據(jù)集上復(fù)刻以上能力并拿到優(yōu)秀檔建議按如下順序組織你的 notebook步驟 1先做 EDA再寫代碼參照 4-Hotel-Reviews-1 探索 notebook 的做法先逐列回答這列是什么、可信嗎、怎么算出來的、能否獨立驗證把結(jié)論寫入 Markdown 單元格。新數(shù)據(jù)集的坑往往和酒店數(shù)據(jù)不同缺失值、編碼問題、重復(fù)行、文本列含哨兵值等EDA 階段發(fā)現(xiàn)的每個問題都應(yīng)在后續(xù)清洗代碼中有對應(yīng)處理。步驟 2逐環(huán)節(jié)遷移四步管線環(huán)節(jié)原任務(wù)做法遷移要點數(shù)據(jù)清洗丟lat/lng、歸一化地址、重算均值識別并丟棄不可驗證列用本數(shù)據(jù)集重算可信指標(biāo)保留可驗證不變量類別特征Tags 打平統(tǒng)計、獨熱編碼若新數(shù)據(jù)也有列表型文本列先清洗括號引號 → 拆分 → 打平 → 頻率統(tǒng)計 → 按業(yè)務(wù)語義篩選 → 獨熱停用詞set緩存 apply移除確認(rèn)新文本語言匹配英語停用詞表記錄耗時對比情感分析VADERcompound哨兵值置 0處理新數(shù)據(jù)的無文本哨兵值必要時對比 NLTK 其他分析器步驟 3貫穿全程的思考過程記錄評分標(biāo)準(zhǔn)最看重的是解釋。每個單元格至少回答三個問題為什么做這一步、這一步的輸入輸出是什么、結(jié)果說明了什么。以下思考角度能顯著提升 notebook 質(zhì)量描述你觀察到的數(shù)據(jù)結(jié)構(gòu)特征行數(shù)、列數(shù)、文本長度分布、缺失哨兵值記錄為加速計算做的每個決策及其耗時實測如停用詞移除前后對比用情感分?jǐn)?shù) vs 數(shù)值打分的對照找出不一致樣本并解釋原因反諷、列名與內(nèi)容語義顛倒、語言非英語等總結(jié)新數(shù)據(jù)集上你發(fā)現(xiàn)了什么——哪些特征是有效信號、哪些是噪聲正是作業(yè)最后一個問題的落點。步驟 4交付物自檢對照評分標(biāo)準(zhǔn)做最終檢查notebook 從加載數(shù)據(jù)到保存結(jié)果完整可運行每個代碼單元格上方/下方有 Markdown 說明數(shù)據(jù)集或生成的數(shù)據(jù)文件隨 notebook 一并呈現(xiàn)明確寫出情感是如何被賦予的分析器、打分函數(shù)、哨兵值處理有對照/校驗環(huán)節(jié)證明結(jié)果的合理性。八、可繼續(xù)深入本倉庫的參考路徑作業(yè)原文6-NLP/5-Hotel-Reviews-2/assignment.md課程正文數(shù)據(jù)清洗、Tag 處理、情感分析的完整講解6-NLP/5-Hotel-Reviews-2/README.md清洗與標(biāo)簽獨熱化參考實現(xiàn)1-notebook.ipynb標(biāo)簽打平與頻率統(tǒng)計參考實現(xiàn)2-notebook.ipynb情感分析完整參考實現(xiàn)3-notebook.ipynb上一課的數(shù)據(jù)探索列語義解讀與 EDA6-NLP/4-Hotel-Reviews-1/README.md 與其 探索 notebook數(shù)據(jù)文件放置說明6-NLP/data/README.md結(jié)語從一份 51.5 萬行的酒店評論數(shù)據(jù)出發(fā)課程演示了如何用EDA 縮小問題空間 pandas 高效處理 NLTK VADER 情感分析 結(jié)果對照校驗的完整思路把不可信、不可用的原始列逐步轉(zhuǎn)化為可信、可解釋、可用于推薦的特征。作業(yè)要求你把這套方法論遷移到新數(shù)據(jù)集本質(zhì)上考察的正是理解原理而非背誦代碼的能力。帶著每一步都要能寫出為什么的標(biāo)準(zhǔn)去新建 notebook你產(chǎn)出的將不僅是一份作業(yè)更是一份可復(fù)用的 NLP 數(shù)據(jù)管線范本。贊分享教程機(jī)器學(xué)習(xí)人工智能【免費下載鏈接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all項目地址https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners點擊查看免費下載相關(guān)推薦ML-For-Beginners 實戰(zhàn)使用 NLTK 與 VADER 對歐洲酒店評論進(jìn)行過濾與情感分析ML For Beginners 實戰(zhàn)使用 NLTK 與 VADER 對歐洲酒店評論進(jìn)行過濾與情感分析 導(dǎo)讀 本文對應(yīng) ML For Beginners 課程教程機(jī)器學(xué)習(xí)人工智能ML-For-Beginners 實戰(zhàn)課基于酒店評論數(shù)據(jù)的 NLTK 情感分析全流程數(shù)據(jù)過濾與 VADER 實現(xiàn)ML For Beginners 實戰(zhàn)課基于酒店評論數(shù)據(jù)的 NLTK 情感分析全流程數(shù)據(jù)過濾與 VADER 實現(xiàn) 導(dǎo)讀 本篇文章是開源課程 ML For教程機(jī)器學(xué)習(xí)人工智能Email Verification API 核心組件深潛一Login Status API 如何建立登錄態(tài)Email Verification API 核心組件深潛一Login Status API 如何建立登錄態(tài) Email Verification API創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考