Data Trip - Line Bot 機器人進化吧!

我的 Line Bot 很認真的幫我們服務了數個月,舉凡提醒下班,休息,中午吃飯到提醒我們高尚的會計小姐該作些什麼事,又或方便資訊快速獲取,方便至極。今天我打錯命令關鍵字(key word),他就只會問我有事嗎?>.<|| 的確是沒什麼事.

改造前

為了讓他有趣一點,可以給一些驚喜的對答,把塵封己久的 TF-IDF (term frequency–inverse document frequency)技藝再度擦亮。如果只是要計算文件間的距離或是分類,可以使用 scikit learn 或是 mahout 來實作,不用自己來實作這部份,可以把時間節省下來給美好的人生。這裡我打算自行實作這三個數字,也因為我想建立一個自己的小而美輕量可操作模型,並且控制 Bot 的回應時間能在最短時間回覆。

** 資料 **

** 資訊技術 **

** 進化後的 Line Bot 機器人 **

我隨意找了兩部小說,一部是關於穿越時空,一部是關於愛情的,合計對話句子有48,084句,未來應該會讓 Bot 再學個三國誌相關帶有歷史色彩的小說來讓飽讀詩書。
先來問問他的狀況:

進化後Bot-01
進化後Bot-02

再來介紹我自己:

進化後Bot-03
進化後Bot-04

這個回答蠻有趣的,看來還是得回頭檢視分詞。

抱怨一下:


Selection_008.png

** 實作細節 **

  • 獲取來源文檔,並粹取對話句子,在這裡因為來源為簡體小說,所以為了使機器人能明瞭,使用了 Linux 下的 iconv 來轉換,常遇到這個錯誤

illegal input sequence at position

可以利用 -c 這個參數忽略該錯誤,如下的命令轉換,:

iconv -f utf8 -t gb2312 -c words-cn.txt \
  | iconv -f gb2312 -t big5 -c \
  | iconv -f big5 -t utf8 -c > words-big5.txt

如果是要繁轉簡則將 -f 與 -t 反之轉換

  • 分詞,則是相當重要的環節,分詞出來的結果會導致 TF 與 IDF 的計算準確度,以往我都會把含有頻率較多詞的句子一一看過,並使用自訂分詞的功能來將結果修正。而關於分詞的工具,可以參考這篇非常詳細的介紹:11 款开放中文分词引擎大比拼。目前我較常使用為結巴分詞,因其直接支持 Python及繁體,另外就是自訂詞。在分詞時可視應用需要把不必要的詞過濾(stop words),在這我把少於兩個字跟數字還有在我所定義的 stop_words[] 都過濾掉,其分詞如下:
import jieba
jieba.load_userdict("user-dict.txt")  #自訂義詞
seglist = jieba.cut(line_word) #結巴分詞
for s in seglist:
    #忽略詞長度小於 2
    if len(s) < 2:
        continue
    #忽略數字
    if re.match('(\d+)', s):
        continue
    if s in stop_words:
        continue
    if s in words_hash:
        words_hash[s] += 1
    else:
        words_hash[s] = 1
  • 計算 TF 與 IDF:
    • TF
      TF
      TF

      該詞在該文章中出現的次數與所有詞的比例,所以出現愈多該數字就愈高;

    • IDF
      IDF
      IDF

      IDF 則為所有文章數與該詞在有出現文章數的比例再取對數,所以出現愈多則值會愈小,在 SQL 的計算裡,利用分母加1的方式避免掉分母為0的錯誤

log((select count(1) from articles f where f.fid_id = %s)/(1+count(c.sentence))) as IDF
  • TF-IDF
    TF-IDF
    TF-IDF

    TF-IDF為將 TF * IDF 以修正得到一個權重數,因而該權重過濾掉常見的詞,保留重要的詞以識別該文章。

詳細的介紹可以參考維基百科的介紹:維基百科: TF-IDF
在這為了將 Bot 回答模型建置在 MySQL,直接透過 Update-Select 的方式來大量整批計算以控制時間讓4萬筆的語句在2分內處理完畢。

  • Bot 機器人
    在這將 Line 得到的語句分詞後(記住,分詞相當重要 ),一一比對儲存在資料庫的詞語,再將其權重加總取得最相關詞句回覆給主人。晚安,期待下次分享有趣的生活應用。
Bot晚安
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339

推荐阅读更多精彩内容