2021年2月9日 星期二

[NLP] 自然語言處理觀念整理-7 (社群媒體應用)

  

自然語言處理觀念整理-7

社群媒體應用

應用
  • 情緒偵測與意見挖掘:目前最流行的應用, 品牌廣泛依賴社群媒體訊號來了解用戶對商品和服務與競爭對手的看法
  • 熱門話題偵測:識別目前最流行的話題
  • 假新聞偵測
  • 成人內容過濾
  • 顧客支援:對客戶的疑慮與抱怨進行理解,分類,排序甚至自動回覆

挑戰
處理社群媒體文字資料(SMTD), 包含各種的挑戰, 需要特殊的文字處理套件
  • 原文長度簡短
  • 沒有語法:縮寫, 大小寫, 格式......
  • 自創新字:造成OOV, tweet每個月都有15%成長率
  • 拼錯 : tomorrow > 2mrw , tmw ......
  • 表情符號 : emoji
  • 多語言與音譯文字 : 非英語語言用羅馬拼音
  • 特殊字元:圖片, gif, 非ascII, hashtag ......
  • 雜訊:充滿著廣告, 垃圾郵件, 各種無關內容......

各種資料來源文字資料嚴謹程度, SMTD不嚴謹, 通用的處理方法不夠使用


資料探索
  • 文字雲:顯示文集中最重要的單字, 這裡有範例
  • tokenizer:一般的斷詞套件無法有效對SMTD斷詞, 可以使用tworkenize套件, 他是專門從tweet的資料中取出的單字, NLTK是給標準的英文使用的, 但後來也發展出nltk.tokenize.TweetTokenizer, Twikenizer, CMU的ARK製作的Twokenizer 與 twokenize

前處理
  • 移除html標記:使用beautifulSoup清除HTML, XML, XHTML
  • 處理非文字資料:符號, 特殊字元轉成utf-8
  • 處理單引號: 's 're 'r 都很常見, 可以建立字典替換
{ "'s" : " is" ,  "'re" : " are" ,"'r" : " are" ......}
  • 處理emoji:直接刪除表情會失去許多資訊, 將表情置換成該解釋的英文單字會是比較好的方法, Demoji就是此套件
  • 相連字拆開:GoodMorning拆開, 用正規表達式很容易處理
processed_text = "".join(re.findall('[A-Z][^A-Z]*', text))


原文表示法
  • Bow與TFIDF在處理SMTD上效果並不好, 主要是因為雜訊太多
  • 自己訓練embedding成本太高, 必須使用預訓練embedding
  • google word2vec是使用wiki與新聞文章訓練的, 所以也不準
  • 使用社交資料訓練的embedding EX: Standford tweet embedding
  • 更好的tokenizer, Allen Ritter twokenize tokenizer
  • SMTD OOV問題太過嚴重, 新詞成長過快, 並非最佳表示法
  • 如果單字存在embedding就直接使用, 沒有就將自拆成字元的n-gram並結合所有的embedding來產生那個單字的embedding
  • FastText有預訓練的ngram embedding但不是為SMTD所設計的

任務
  • 熱門主題識別:透過hashtag, 可使用套件Tweepy, trends_available取出前10熱門話題
  • 情緒分析:必須可以觀察情緒隨著時間的變化, 可以使用TextBlob, 但效果並不好, 他的tokenizer並非專門為SMTD設計的, 各種前處理就變得相當種重要
  • 顧客支援任務:使用分類判斷是可以採用的意見還是垃圾訊息



Ref:
  • 自然語言處理最佳實務, O'Reilly




沒有留言:

張貼留言