iT邦幫忙

0

文本分類加入非文本內容特徵

文本分類

做E-mail文本分類時

郵件內容可使用自然語言處理(NLP)

直接使用tf-idf、word2vec等方法

但若想加入寄件人、收件人等

非郵件內容文字的特徵

想請問該如何操作

懇請各位指點

1 個回答

4
丹尼爾胡
iT邦新手 4 級 ‧ 2019-10-17 05:35:26

因為我不確定你的dataset長怎樣XD
我先假設你手上的資料是從信箱裡面爬下來的
長的可能類似這樣:
https://ithelp.ithome.com.tw/upload/images/20191017/20118683V36cItWnsS.png
(這個資料是著名的20-Newsgroup dataset)
其中有from, to, subject, body (content), ...等欄位。

我也不確定你的資料結構長怎樣,所以我先假設是Python list(資料量大一點可以用dask.array,你的生活會快樂一些)
那麼可行的做法應該是:

  1. 先用regex找出是收件人和寄件人的欄位,以上面的dataset為例,取得在/(F|f)rom://(T|t)o:/後面之欄位的內容
  2. 取得其中內容並賦予權重(e.g. score = 5 * sender_score + content_tfidf),其中score是指回傳資料時的相關性,越高則越有可能是你在找的資料。
  3. 將score用在Text Classifier時可以設定一個分數的分水嶺來當作特徵進行分類。

如果你方便提供更清楚的dataset(長什麼樣子)、training method (supervised / unsupervised? binary / multilabel?),甚至分類目的(分類垃圾信件?)等資料可能可以回答得更詳細~

---- 20191018 0610 更新 ----

針對特徵處理的方式,我想可以把寄件人和收件人的email address從@之前和之後拆開成欄位
from_local_partfrom_domainto_local_partto_domain,例如將寄件人hello@gmail.com拆成hellogmail.com
可能預處理會額外花上一些時間,不過可以預期的是accuracy和F1-score的提升。
雖然把收件人和寄件人各拆分成兩個欄位,但建議也把from和to保留在訓練資料中,同時測試看看保留和拿掉哪個能更準確判定。

希望這樣能幫你解決問題!

看更多先前的回應...收起先前的回應...
draguitar iT邦新手 5 級 ‧ 2019-10-17 08:18:34 檢舉

資料集的欄位如下,
level,From,To,Subject,Content
分類的目的是要把所有的郵件分為level=A(機密),
與level=B(非機密);採取supervised,之前只使用E-mail的內容
來做training,想加入寄件人、收件人、subject一起當作特徵
進行訓練,謝謝你的回覆

我等下想一想,如果有再進一步的想法下班之後回應你

嗨~不知道會不會跳通知所以留個言跟你說更新囉

draguitar iT邦新手 5 級 ‧ 2019-10-18 09:31:52 檢舉

哈,感謝啦~更新真的不會跳通知

我要發表回答

立即登入回答