Re: [問題] 從評論提取特徵並做成分類器
※ 引述《nchunerdy120 (batman)》之銘言:
: 小弟目前是學生,有個專案是要從幾萬筆的評論中提取出幾個重要的特徵,並且將這些特
: 徵拿來製造篩選器。
: 例如從餐廳的評論中得出「食物種類」、「食物價錢」、「食物口味」非常重要,就用這
: 三個當作分類器的attribute。然後在給定這些attribute值的時候,就能夠導向對應的餐
: 廳。
: 自己思考一下作法後,歸類出兩個問題:
: 首先是該如何提取特徵?我目前的想法是使用tf-idf向量化,找出tf-idf最高的前幾個字
: 當作曬選器的attribute(X)。請問還有其他更適合的方式嗎?
不一定更適合但可以並行或組合使用的方式:簡單的自然語言分析(不一定要是
全套,依情況可能是詞性或經驗法則挑出某些特定句型)跟語意分析來補充關鍵字候
選。
比如食物種類一定是個名詞,然後一般位於句子中前後可能有哪些位置與前後文
的特徵(例如,「吃起來」前面如果是接個名詞,該名詞可能很高機率就是個食物名
稱吧),藉此撈出一些機率比較高的關鍵字候補。
: 第二個問題是該如何把餐廳(Y)跟選定的attribute(X)做連結?畢竟無法連結的話就
: 無法訓練分類器,所以該怎麼把這些attribute(X)跟餐廳(Y)是個大問題... 目前怎
: 麼解決這件事情小弟完全沒有頭緒,不知道有沒有大神可以解答Orz [編輯]:選定att
: ribute之後該怎麼將評論中對應attribute的文字量化,例如評論中提到「食物很好吃」
: ,那該如何將「好吃」量化放入食物口味的attribute中
關鍵字:Opinion mining / Sentiment analysis / 情感語意分析
有一些公開的資料庫把許多的詞語設定好了positive/negative的正負面分數。
例如「好吃」可能是+0.73,「噁心」是-0.91之類。
於是當你已經抓到關鍵詞所在句子並分好詞,則可以利用這些資料庫得到各同句
中相關詞語對應的正負面情感分數,然後看要進行加總或其他特殊加權處理得到最終
該關鍵字的情感分數是正面或負面、值有多大,就可以以此情感分數做為某種結論或
後續進一步分析的feature。
要注意的是,情感分數計算有可能會因為文章類別或內容領域而有所差異,因此
可以先就取得的資料庫套用手上的文章,確認一下文章中用到詞語對應出來的分數是
否合理、適用或者還有缺漏,然後手動把分數值修正到更適合手上Case的狀態,經過
這樣的校正後可以得到更好的結果。
另外這可能只是你需要的一小部分feature,另外你還提到食物種類或價錢等等
,這些則可能是靠前一部分關鍵字篩選來嘗試解決。找出了多少不同的食物名稱就可
能關連到食物種類的方面、找到某些跟價位有關的詞語或前後文形容詞就可能對應到
價錢之類的。
這有些部分非常需要分析者先手動閱讀一些文章並分析可能的規則,再針對這些
規則去選擇並調整你的text mining model,然後把model應用到其他文章看看結果,
再反覆進行這種驗證調整直到model整體表現看起來不錯,才進入實用。
: 麻煩各位鄉民們替小弟解惑,如果有上述方法以外的作法也麻煩各位不吝提出,感謝!
---
以前博士班時做過的一個研究就是從網路文章裡面找到文章寫作者對於某些對象
或事物的好惡程度,判斷如果只能投一票,他會投給哪一個,再進一步估計大群體的
投票傾向甚至精確投票票數。
--
「如果你沒法給我個解釋的話,死一萬次也不能彌補你的過錯!」
「我沒辦法死一萬次賠妳啊。」
「可是你有辦法半死兩萬次,知道嗎,嗯?」
--蓮.席斯塔
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.177.18 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1588955770.A.E41.html
※ 編輯: ddavid (1.164.177.18 臺灣), 05/09/2020 00:51:53
※ 編輯: ddavid (1.164.177.18 臺灣), 05/09/2020 01:05:41
推
05/09 09:38,
4年前
, 1F
05/09 09:38, 1F
→
05/09 09:38,
4年前
, 2F
05/09 09:38, 2F
→
05/09 09:38,
4年前
, 3F
05/09 09:38, 3F
→
05/09 09:38,
4年前
, 4F
05/09 09:38, 4F
→
05/09 09:38,
4年前
, 5F
05/09 09:38, 5F
這個就有些事情要談了。
1. 你原本取得的原始評論是否就能夠精確到這種地步?
原始資料是否就足以讓人做出這個判斷?比如有些評論可能只寫了「150元就可
以吃到不錯」,那到底是否給人足夠資訊判斷100元的狀況呢?原始資料拿給人看都
不足以判斷的話,當然根本上就不可能training出可以良好判斷的model了XD
2. 從原始文章到feature這個過程中,到底能夠多精確?
也許原始評論其實有足夠資訊,但是自然語言分析起來相對困難。例如:
「一般這種店大概都要150元以上才能吃到不錯的料理。但是這家店很特別,能
以低其他店1/3的價格就端出不錯的東西。」(我知道這寫法一般來說不太自然,只
是舉例)
這段評論給人類來看是足以判斷100元可以吃得不錯。然而這句話要讓電腦解析
難度就高了。
首先150元這句話跟這家店的描述就拆在不同句子,而且這家店的描述得要能解
析成計算150 * (1 - 1/3) = 100才能夠得知確切數值,這超級困難,不是隨便平常
能取得的自然語言處理model就能解決的事情。
雖然有資訊,但是無法順利解析取得model甚至還會解錯。一般的model看到上面
那些內容搞不好抓到的資訊就是150元,厲害一點解成150 * 1/3 = 50元,兩個都是
錯的。
那事實上你到底在轉換成feature這件事情上能做到什麼地步?這必須你自己先
解讀並做一些測試才能夠有所理解。
3. feature定義與model選擇
就算解出某些價位數值,接下來還有你怎麼儲存應用的問題。你的feature要直
接存一個價位數值嗎?還是定義成「很貴─稍貴─一般─稍低─超低」之類的階級?
階級的話要幾階?階級的話一般是怎麼定義的?是要跟同類店比較還是跟所有餐廳比
較?
而且一家店也不會只有一種價位,有可能「100可以吃得還可以,但是150就能吃
到好料了」,這樣你打算怎麼定義你的feature呢?是某種fuzzy的定義嗎?還是定義
成絕對的多個數值代表某家店的高中低消呢?
model選擇也是跟這有關。你讓使用者輸入是明確的價位還是階級?model要怎麼
解讀處理這個輸入跟feature之間的關係?使用者要求100,model該不該給他110的選
擇?如果feature只是存階級,那使用者要求100,model該怎麼判斷是一般、稍低還
是超低?需要跟食物種類一起分析嗎?
當然,你亂訂一套feature,亂選一個model直接上,總是可能給你結果。但你如
果想要更準確的結果,這些事情你就不得不想。
而這不是沒看到實際資料、也不知道你問題詳細要求跟定義、實際應用狀況的我
或其他人能夠直接給你建議的事情,你必須先自行分析這些細節後,提出更明確的問
題定義才有辦法進一步選擇更好的方式或問出更明確的問題。
結論一下,這問題可大可小。當成小問題來解,你亂套一個bag-of-words +
classification,它也是可以給你一個結果。結果未必好,但總就是一個結果。
但想深入解得很好,光是上面每一個部分都有可能足以寫出一篇paper(當然,
也八成已經有人解過相關問題寫過paper了,但不一定完全符合你的問題要求),整
體當然更是一個超大問題。
說實在的,這東西要是做得很好,那可是充分有商用價值的。Google Map跟這一
搭馬上就成為能夠自動爬網路內容建立的精確美食地圖了,超級有賣點啊XD
也就是說,你所謂這個學生做專案,到底:
1. 只是一堂課簡單的作業專案
2. 是研究所以上的論文用專案
3. 是產學合作的實際應用專案
這會非常明顯地影響到難度以及難在哪一部分XD
※ 編輯: ddavid (1.164.177.18 臺灣), 05/10/2020 00:43:23
推
05/10 14:02,
4年前
, 6F
05/10 14:02, 6F
→
05/10 14:02,
4年前
, 7F
05/10 14:02, 7F
→
05/10 14:02,
4年前
, 8F
05/10 14:02, 8F
→
05/10 14:02,
4年前
, 9F
05/10 14:02, 9F
→
05/10 14:02,
4年前
, 10F
05/10 14:02, 10F
→
05/10 14:02,
4年前
, 11F
05/10 14:02, 11F
如果是碩士畢業論文的話,你不要等到六月。六月那時只是讓你實際確認資料狀
況跟issues的細節,但有一件最重要的事情是你現在就應該開始的:
現在你就應該開始大量Survey paper,去找出所有可能相關的前人論文,先好好
看一下已經有哪些方法可能套進來使用,哪些方法雖然不能直接用卻可以做某些轉換
應用,哪些方法主軸無關但卻有其中一部分可以拆來應用。
這些Survey完,你就會發現整個work中,哪些是以前的研究其實就做得不錯,並
不容易突破,而另外哪些是缺口尚大容易突破的地方。畢竟碩論直接關係到畢業,沒
事不要給自己找別人已經做到超好的地方硬幹,要去找雖有技術性但還相對容易突破
的東西。
於是當你找出一個主要的突破點後,跟這個突破點最相關的那些論文就會是你的
主要比較對象,而其他雖然相關但不是主要突破方向的就會是你應用來解決其他部分
的架構,這兩類最後就都會是你的reference章節該寫到的東西。
用圖來表示可能像這樣:
評論文章 -> A -> B -> C -> 推薦結果
A可能是data cleaning相關。
B可能是特徵擷取相關。
C可能是模型選擇與建立相關。
如果你建立了這樣的架構,你可能就得去survey跟ABC三部分有關的論文。最後
你可能認為:
A雖然沒有針對餐廳評論做的,但你發現某些對商品評論data cleaning的研究做
得不錯,只要調整一下可能就可以應用得到不錯的結果。
B雖然有大量的研究,但對於這個work都各有關鍵性的缺失,沒有一項過去研究
可以完善解決此work面對的所有問題。
C在AB都有一定成果的前提下,有過去的方法可以建立很好的model。
那你可能會把主要突破點訂在B,也在A部分有一些修改調整的貢獻,然後C完全
套用舊有不錯的架構。最後就會變成:
評論文章 -> modified A -> X -> C -> 推薦結果
X會是你論文要強調的主要貢獻,它要使結果可以擊敗所有過去研究的舊架構。
因此你要有實驗證明X導致你的正確性能在目前這個work問題定義下,大多數情況都
勝過採用舊的各種方法。
modified A也是你的次要貢獻。雖然你只是修改,但是你讓舊有研究能夠適應調
整新issue的需求。因此這部分,你要有個實驗證明原本的A直接硬套是跑不動或結果
不佳的,必須經過你修正調整才可以適用你的work。
C不是沒修改就啥都不用討論喔。因為C也往往不會過去只有一種解法,因此對於
C,你可能需要至少就過去文獻來討論說他們互相競爭的結論,已經有最新的某個C是
效果最好並且最適合你現在work的要求,給出合理的理由。在某些情況下,可能有數
個C其實看起來都能用也都不錯,那你可能就要進一步說明甚至來個實驗討論為何你
最後選了特定的C而非其他的,它有什麼明確更適合此work的地方或至少各方面都持
平不輸其他選擇等等。
這樣你的論文架構就會很明確並有競爭性,也不會ABC一起搞、東打一塊西打一
塊,最後搞不清楚自己到底幹了什麼才加減贏了比較對象一點點。
至於survey的目標範圍該怎麼訂、關鍵字該怎麼下,這很吃對問題的了解、背景
知識的深度以及研究經驗,就不是我能直接在這邊給建議的了。跟老師討論一下會更
有幫助,或者在你已經對問題有一定了解的情況下才來進一步問有沒有人知道相關議
題與研究,會更事半功倍。但初步總是會有一些很明確知道相關的方向可以先survey
,然後從這些論文的reference(較舊)以及cite這些論文的其他論文(較新),又
或是同作者的其他研究,一路串下去就有可能發現很多原本沒想到但有關的Paper方
向跟關鍵字。
另外就是要嘗試多點想像力。看一個研究不要只看它表面針對的問題,而是要額
外想看看,雖然原本看起來好像跟我的問題完全不相關,但如果我把input改一下、
如果我稍微改一下特徵取法、如果我加入某個權重、如果我只切其中某個部分來使用
等等,會不會其實可以解決我問題或其中的某部分?有時會在很意外看似不相干的領
域挖到可以解決問題的元素回來用。就像研究各種物理、生物、大腦行為結果延伸引
用概念而產生的機器學習演算法簡直多不勝數。
推
05/10 14:27,
4年前
, 12F
05/10 14:27, 12F
※ 編輯: ddavid (36.225.54.40 臺灣), 05/11/2020 11:03:35
推
05/15 00:08,
4年前
, 13F
05/15 00:08, 13F
→
05/15 00:08,
4年前
, 14F
05/15 00:08, 14F
→
05/15 00:08,
4年前
, 15F
05/15 00:08, 15F
推
05/15 17:50,
4年前
, 16F
05/15 17:50, 16F
討論串 (同標題文章)